使用Doc2Vec训练文档时句子中句点的重要性

时间:2020-04-05 10:19:12

标签: python gensim word2vec doc2vec

怀疑-1

我正在用150000个文档训练Doc2Vec。由于这些文档来自法律领域,因此确实很难清理并将其准备好进行进一步的培训。因此,我决定从文档中删除所有期间。话虽如此,我对doc2vec中Window_size的参数现在如何识别句子感到困惑。问题中提出了两种观点:Doc2Vec: Differentiate Sentence and Document

  1. 该算法仅适用于文本块,而无需知道句子/段落/文档等可能是什么。
  2. 令牌化甚至通常保留标点符号(例如句子之间的句点)作为独立令牌。

因此,如果我采用的消除标点符号(句号)的方法正确,我会感到困惑。请为我提供一些支持性的答案。

怀疑2

我报废的文档范围为500-5500个令牌,因此,我的方法是使用尺寸相当均匀的文档来训练doc2vec甚至减少词汇量,方法是: 考虑一个文档的大小大于1500个令牌,在这种情况下,我使用前50到400个令牌+ 600到1000个令牌+最后250个令牌。这种方法的动机来自于一篇有关使用BERT进行文档分类的论文,其中生成了512个令牌的序列。

所以我想知道这个想法是否可以继续进行,还是不建议这样做?

更新-我刚刚在教程链接https://radimrehurek.com/gensim/models/doc2vec.html中看到了gensim使用的common_text语料库,发现该语料库中的文档只是单词的标记,不包含任何标点符号。 例如:

from gensim.test.utils import common_texts, common_dictionary, common_corpus

print(common_texts[0:10])

输出:

[['human', 'interface', 'computer'], ['survey', 'user', 'computer', 'system', 'response', 'time'], ['eps', 'user', 'interface', 'system'], ['system', 'human', 'system', 'eps'], ['user', 'response', 'time'], ['trees'], ['graph', 'trees'], ['graph', 'minors', 'trees'], ['graph', 'minors', 'survey']]

教程https://radimrehurek.com/gensim/auto_examples/tutorials/run_doc2vec_lee.html中遵循相同的规定。 我删除文档中句点的方法是否有效,如果是,那么window参数将如何工作,因为在文档中定义如下: 窗口(整数,可选)–句子中当前词与预测词之间的最大距离。

1 个答案:

答案 0 :(得分:1)

有些人将句点和其他标点符号保留为独立的令牌,有些人则将其删除。

没有确定的“正确”方法,根据您的最终目标,一个或另一个可能会对doc-vector的质量产生轻微的影响。因此,现在就做对您来说最简单的事情,然后在您有时间的时候再评估替代方法是否有帮助。

尽管在文档中引用了“句子”,但Word2Vec中的Doc2Vec / gensim / etc类对句子没有任何理解,也对标点符号没有特别的敏感性。他们只是看到您作为语料库中的单个项目传递的令牌列表。因此,如果您要留句号,例如...

['the', 'cat', 'was', 'orange', '.', 'it', 'meowed', '.']

...然后'.'字符串只是另一个伪单词,它将获得一个向量,并且训练窗口将像其他任何单词一样贯穿其中。 (而且,'meowed''cat'之间有5个令牌,因此如果window=5会有一些影响。)

我不太理解“使用前50到400个令牌+ 600到1000个令牌+最后250个令牌”的含义。 Doc2Vec最多可以处理10000个令牌的文本。 (由于内部实现限制gensim,更多的令牌将被静默忽略。)没有必要或典型地将文档分成较小的块,除非您还有其他一些需要对较小的文本块建模的需求。

微小的common_texts单词列表集是一组虚构的,玩具大小的数据,用于演示一些基本代码用法-它不是推荐做法的示例。类似地,基于“ Lee”语料库的演示是对一个小而简单的方法的快速介绍,该方法仅不足以显示基本用法和结果。通过simple_preprocess()实用程序方法进行文本标记化是可以尝试的事情,但与所有其他可能性相比,不是``正确''或``最佳''的。