首页 > 解决方案 > 在 ngram 上进行 Gensim doc2vec 培训

问题描述

我有几千个文档,我想在 gensim doc2vec 模型中使用,但每个文档只有 5 克,而不是原始词序的全文。在 gensim 网站 ( https://radimrehurek.com/gensim/auto_examples/tutorials/run_doc2vec_lee.html ) 上的 doc2vec 教程中,使用全文创建语料库,然后在该语料库上训练模型。它看起来像这样:

[TaggedDocument(words=['hundreds', 'of', 'people', 'have', 'been', 'forced', 'to', 'vacate', 'their', 'homes', 'in', 'the', 'southern',...], tags=[1]), TaggedDocument(words=[.....], tags=[2]),...]

是否可以创建一个训练语料库,其中每个文档由 5 克列表而不是原始顺序的单词列表组成?

标签: pythongensimdoc2vec

解决方案


如果你有文档中的“所有”5-gram——甚至可能仍然按照它们出现的顺序——应该可以将原始文档(或几乎等效的伪文档)拼接在一起,就像 5-gram是拼图或多米诺骨牌。

(例如,通过它在数据中的序数位置来查找第一个 5-gram,或者通过查找其 4-prefix-tokens 不是任何其他 5-gram 的 4-suffix-tokens 的 5-gram。然后,通过将其 4-suffix-tokens 与另一个候选 5-gram 的 4-prefix-tokens 匹配来找到它的继任者。如果在任何时候你有多个候选“开始”或“延续”,你可以尝试任何一个并保持直到你完成或到达死胡同 - 深度第一搜索一致的链 - 如果死胡同,然后备份并尝试另一个。不过,你也可以选择另一个好的开始 5 克,然后继续, 有轻微错误排序文档和重复一些标记的风险。一堆这样的错误不会对大型语料库的最终结果产生太大影响。)

或者,“PV-DBOW”模式 ( dm=0) 不使用上下文窗口或相邻单词——因此获得确切的原始单词顺序并不重要,只需以任意顺序使用正确单词的替代文档即可。因此,只需连接所有 5-gram 就可以创建一个合理的伪文档——尤其是如果您随后丢弃任何单词的 4/5(以说明原始文档中的任何一个单词,除了开头或结尾,都会出现5 5 克)。


推荐阅读