Gensim:是否有机会获得Word2Vec格式的词频?

问题描述 投票:0回答:1

我正在使用快速文本预训练模型进行研究,我需要词频来做进一步分析。 fasttext网站上提供的.vec或.bin文件是否包含单词频率信息?如果是,我如何获得?

[我正在使用load_word2vec_format加载使用model.wv.vocab [word] .count尝试的模型,它只会为您提供单词频率排名,而不是原始单词频率。

python-3.6 gensim fasttext
1个回答
0
投票

我不认为这些格式包含任何词频信息。

在某种程度上,任何经过预先训练的词向量都声明了他们接受过哪些训练,例如Wikipedia文本,您可以返回训练语料库(或某种合理的近似值)来执行自己的频率计数。即使您只有“相似”的语料库,频率也可能“足够接近”以满足您的分析需求。

类似地,您可以使用Zipf's Law来使用频率等级来合成虚拟频率表,该频率表大致适用于正常自然语言语料库。同样,单词之间的相对比例可能大致满足您的实际比例,即使在单词矢量训练期间使用的是真实/精确频率也是如此。

在维基百科页面上合成齐夫定律公式的版本,该公式利用分母中的谐波数(H),并在this answer中给出H的有效近似值,我们可以创建一个函数,该函数给定单词的(从1开始)等级和唯一词的总数,给出由Zipf定律预测的成比例的频率:

from numpy import euler_gamma
from scipy.special import digamma

def digamma_H(s):
    """ If s is complex the result becomes complex. """
    return digamma(s + 1) + euler_gamma

def zipf_at(k_rank, N_total):
    return 1.0 / (k_rank * digamma_H(N_total))

然后,如果您有100万个单词向量的预训练集合,则可以估算第一个单词的频率为:

>>> zipf_at(1, 1000000)
0.06947953777315177
© www.soinside.com 2019 - 2024. All rights reserved.