Python “如何动态分配权限”;“尺寸”;对于Word2Vec?

Python “如何动态分配权限”;“尺寸”;对于Word2Vec?,python,python-3.x,nltk,gensim,word2vec,Python,Python 3.x,Nltk,Gensim,Word2vec,问题有两个方面: 1.如何为大小选择理想值? 2.如何动态地获得词汇表大小(按照我的意愿,每行)以设置理想的大小 我的数据如下(示例)-仅一行一列: 第1行 第2排 等等 根据这篇文章:size参数应该小于(或等于?)词汇表大小。因此,我尝试动态分配大小,如下所示: from nltk.tokenize import word_tokenize from gensim.models import Word2Vec # I do Word2Vec for each row For item in

问题有两个方面: 1.如何为
大小
选择理想值?
2.如何动态地获得词汇表大小(按照我的意愿,每行)以设置理想的大小

我的数据如下(示例)-仅一行一列:

第1行

第2排

等等

根据这篇文章:
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
值设置为当前行的当前vocab值,如我所愿。但这是正确的做法吗?小字汇文本的正确大小是多少?

没有简单的公式来确定最佳的
大小,这取决于您的数据和用途

最佳实践是设计一种健壮、自动化的方法来为一组词向量打分,以达到您的目的——可能需要一些手动构造的具有代表性的判断子集和首选结果。然后,尝试许多
size
(和其他参数)值,直到找到得分最高的值

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

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

关于您的代码,如下所示:

  • 为数据集中的每个
    计算一个新的
    模型
    (在每次循环迭代中丢弃以前的
    模型
    )。若您想在任何一个标记化项目中统计唯一的标记,可以使用惯用Python,比如
    len(set(word\u tokenize(item))
    。任何感兴趣的
    Word2Vec
    模型都可能需要在所有项目的标记组合语料库上进行训练

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

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))