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
我正在使用 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