Python 如何在doc2vec中设置最大词汇频率

Python 如何在doc2vec中设置最大词汇频率,python,gensim,word2vec,doc2vec,Python,Gensim,Word2vec,Doc2vec,Doc2vec在创建词汇表时,可以将单词在文档中的最小出现次数作为参数min\u count包含在词汇表中 model = gensim.models.doc2vec.Doc2Vec(vector_size=200, min_count=3, epochs=100,workers=8) 如何排除出现频率太高的单词,以及一些参数 我知道其中一种方法是在预处理步骤中手动删除这些单词,并对每个单词进行计数,但如果知道是否有一些内置的方法可以做到这一点,那会很好,因为它为测试提供了更多的空间。 非常感

Doc2vec在创建词汇表时,可以将单词在文档中的最小出现次数作为参数
min\u count
包含在词汇表中

model = gensim.models.doc2vec.Doc2Vec(vector_size=200, min_count=3, epochs=100,workers=8)
如何排除出现频率太高的单词,以及一些参数

我知道其中一种方法是在预处理步骤中手动删除这些单词,并对每个单词进行计数,但如果知道是否有一些内置的方法可以做到这一点,那会很好,因为它为测试提供了更多的空间。
非常感谢您的回答。

gensim的
Word2Vec
中没有明确的
max\u count
参数

如果您确定某些标记没有意义,那么应该对文本进行预处理以消除它们

还有一个
trim_rule
选项,可以作为模型实例化或
build_vocab()
传递,其中您自己的函数可以丢弃一些单词;请参阅gensim文档,网址为:

类似地,您也可以避免直接调用
build\u vocab()
,而是调用其子步骤–但在词汇表最终确定之前编辑发现的原始计数字典。要做到这一点,您可能需要参考源代码,并且可以使用丢弃太不频繁单词的代码作为您自己的新附加代码的模型

Word2Vec
的经典
sample
参数还控制高频单词的下采样,以防止模型在冗余训练大量单词上花费过多的相对精力。该值越激进(越小),在训练期间,高频词的实例将被彻底跳过。
1e-03
0.001
)的默认值非常保守;在非常大的自然语言语料库中,我看到了在
1e-07
0.0000001
)或
1e-8
0.00000001
)之前的良好结果,因此在另一个意义较低的标记非常频繁的领域,同样积极的下采样值得尝试


较新的
ns\u指数
选项更改负采样以调整较不频繁单词的相对偏好。最初的
word2vec
工作使用了0.75的固定值,但此后的一些研究表明,其他领域,如推荐系统,可能会受益于对实际令牌频率或多或少敏感的其他值。(相关文章链接在
gensim
文档中,用于
ns_指数
参数。)

为什么要删除那些经常出现的单词?排除出现频率太高的单词后,您打算做什么样的测试?@Vishal我正在对文本进行聚类,重点是文本之间的高度相似性。问题是,在特定的数据集中,我知道的一些单词经常出现,没有实际的上下文含义,可能会误导系统根据这些单词(还有一些我不知道的单词)对文档进行聚类。此外,我还尝试了TF-IDF矢量化用于弓进近,结果非常好,但现在的目标是将其与Doc2Vec进行比较。问题是TF-IDF有一些参数,比如单词的最大出现率(float参数表示文档中单词的出现率),您可以编写自己的修剪规则。选中此项可编写自己的修剪规则,并在初始化期间传递文档以及此修剪规则。您还可以检查Doc2Vec的
ns_指数
参数,该参数的负值对低频词的采样多于对高频词的采样。阅读更多@Vishal wow,尤其是ns_exponent,它看起来和我想要的一模一样,非常感谢,我会立即尝试