【问题标题】:How to put maximum vocabulary frequency in doc2vec如何在doc2vec中放置最大词汇频率
【发布时间】:2019-06-06 13:14:00
【问题描述】:

Doc2vec 在创建词汇表时有可能将要包含在词汇表中的文档中单词的最少出现作为参数min_count

model = gensim.models.doc2vec.Doc2Vec(vector_size=200, min_count=3, epochs=100,workers=8)

如何通过某些参数排除出现频率太高的单词?

我知道一种方法是在预处理步骤中通过手动删除这些单词并计算每个单词来做到这一点,但很高兴知道是否有一些内置方法可以这样做,因为它为测试提供了更多空间. 非常感谢您的回答。

【问题讨论】:

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

标签: python gensim word2vec doc2vec


【解决方案1】:

gensim 的Word2Vec 中没有明确的max_count 参数。

如果您确定某些标记是无意义的,您应该预处理您的文本以消除它们。

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

https://radimrehurek.com/gensim/models/word2vec.html#gensim.models.word2vec.Word2Vec

同样,您可以避免直接调用build_vocab(),而是调用它的子步骤——但在词汇表最终确定之前编辑发现的原始计数字典。您可能需要查阅源代码来执行此操作,并且可以使用丢弃太不常用词的代码作为您自己的新附加代码的模型。

Word2Vec 的经典sample 参数还控制了对高频词的下采样,以防止模型在冗余训练丰富词上花费过多的相对精力。这个值越激进(越小),训练过程中会随机跳过越多的高频词实例。 1e-030.001)的默认值非常保守;在非常大的自然语言语料库中,我已经看到了高达 1e-07 (0.0000001) 或 1e-8 (0.00000001) 的良好结果——所以在另一个领域,一些低意义的标记非常频繁,同样具有攻击性下采样值得一试。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 2015-09-07
    相关资源
    最近更新 更多