怀疑-1
我正在用150000个文档训练Doc2Vec。由于这些文档来自法律领域,因此确实很难清理并将其准备好进行进一步的培训。因此,我决定从文档中删除所有期间。话虽如此,我对doc2vec中Window_size
的参数现在如何识别句子感到困惑。问题中提出了两种观点:Doc2Vec: Differentiate Sentence and Document
因此,如果我采用的消除标点符号(句号)的方法正确,我会感到困惑。请为我提供一些支持性的答案。
怀疑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参数将如何工作,因为在文档中定义如下: 窗口(整数,可选)–句子中当前词与预测词之间的最大距离。
答案 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()
实用程序方法进行文本标记化是可以尝试的事情,但与所有其他可能性相比,不是``正确''或``最佳''的。