Python “如何动态分配权限”;“尺寸”;对于Word2Vec?
问题有两个方面: 1.如何为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
大小选择理想值?
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))