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

Gensim: Any chance to get word frequency in Word2Vec format?

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

我正在使用 load_word2vec_format 加载尝试使用 model.wv.vocab[word].count 的模型,它只给你词频排名而不是原始词频。

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

如果任何预训练的词向量都声明了它们的训练对象——比如维基百科文本——你可以回到训练语料库(或一些合理的近似值)来执行你自己的频率计数.即使您只有 "similar" 语料库,频率也可能是 "close enough" 以满足您的分析需要。

同样,您可以使用频率等级合成虚拟频率 table,使用 Zipf's Law,这大致适用于正常的自然语言语料库。同样,单词之间的相对比例可能与您需要的实际比例大致足够接近,即使在单词向量训练期间使用 real/precise 频率也是如此。

综合维基百科页面上使用谐波数 (H) 作为分母的 Zipf 定律公式的版本,利用 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