【问题标题】:How to dynamically assign the right "size" for Word2Vec?如何为 Word2Vec 动态分配正确的“大小”?
【发布时间】:2019-06-15 23:33:06
【问题描述】:

问题有两个方面: 1.如何为size选择理想值? 2.如何动态获取词汇量(按我的意图每行)以设置理想的大小?

我的数据如下所示(示例)——只有一行和一列:

第 1 行

{kfhahf}    
Lfhslnf;
.
.
. 

第 2 行

(stdgff  ksshu, hsihf)
asgasf;
.
.
. 

等等

基于这篇文章:Python: What is the "size" parameter in Gensim Word2vec model class size 参数应该小于(或等于?)词汇量大小。所以,我试图动态分配大小如下:

from nltk.tokenize import word_tokenize
from gensim.models import Word2Vec

# I do Word2Vec for each row
For item in dataset:
    Tokenized = word_tokenize(item)
    model = Word2Vec([Tokenized], min_count=1)

我在这里得到了词汇量。所以我创建了第二个模型:

model1 = Word2Vec([Tokenized], min_count=1, size=len(model.wv.vocab))

这将size 值设置为当前行的当前词汇值,正如我所期望的那样。但这是正确的做法吗?小词汇量文本的合适大小是多少?

【问题讨论】:

    标签: python python-3.x nltk gensim word2vec


    【解决方案1】:

    最好的size 没有简单的公式 - 这取决于您的数据和目的。

    最佳做法是设计一种稳健、可自动化的方法来为您的目的对一组词向量进行评分 - 可能需要一些手动构建的具有代表性的判断类型子集,以及您需要的首选结果。然后,尝试size(和其他参数)的许多值,直到找到对您的目的而言得分最高的值。

    在自然语言建模领域,词汇表至少有数万个唯一词,但可能有数十万或数百万个,典型的size 值通常在 100-1000 之间范围,但通常在 200-400 范围内。因此,如果您的任务/词汇相似,您可能会在那里开始搜索替代值。

    但如果您的数据或词汇量很小,您可能需要尝试较小的值。 (不过,Word2Vec 确实需要大量、多样化的训练数据才能发挥最佳效果。)

    关于您的代码显示:

    • 不太可能为数据集中的每个item 计算一个新的model(在每次循环迭代中丢弃之前的model)。如果您想计算任何一个标记化项目中的唯一标记,您可以使用惯用的 Python,例如 len(set(word_tokenize(item)))。任何感兴趣的Word2Vec 模型都可能需要在来自所有项的令牌组合语料库上进行训练。

    • 通常情况下min_count=1 会使模型比较大的值更差(如默认值min_count=5)。只出现一次的词通常无法获得好的词向量,因为该算法需要多个微妙对比的例子来发挥它的魔力。但是,尝试和失败从这些单例中生成有用的词向量往往会占用训练工作和模型状态,这可能对具有足够示例的其他词更有帮助——因此保留这些稀有词甚至会使 other 词向量更糟。 (绝对不是“保留每个原始单词会使模型更好”的情况,尽管“更真实的多样化数据使模型更好”几乎总是这种情况。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      • 2011-01-03
      • 2012-04-04
      • 2011-07-19
      相关资源
      最近更新 更多