首页 > 解决方案 > word2vec:针对低频词进行优化

问题描述

鉴于word2vecTomas Mikolov 的经典实现,哪些参数集(window, sample, negative, may be cbow

./word2vec -train corpus.txt \
    -output vec.txt \
    -min-count 5 -size 150 \
    -window 5 -sample 1e-5 -negative 10
    -threads 16

优化计算更好的低频词嵌入(比如频率 5 到 25)?

标签: word2vec

解决方案


唯一word2vec.c通过频率对单词产生不同影响的命令行参数是min_count,它丢弃低于某个阈值的单词,以及sample,它随机丢弃一些高频词的出现。

你可以这样做丢弃,因为使用所有出现的高频词是多余的:它几乎不会在更少的训练样本上改进它们的向量,它需要额外的训练时间,而且它基本上稀释了稀有词对模型内部共享权重的影响——而对于许多应用程序,稀有词与常用词一样重要(或微尘!)。

因此,相对而言,让训练在低频词上花费更多时间/精力的一种明确方法是使用更具侵略性的 sample值,这意味着更少的数字,并且更多的最常用词被随机跳过。

默认值为1e-04; 尤其是随着语料库的增长,您可以尝试小 10 倍的值(例如1e-05)、小 100 倍的值(例如1e-06),或者尝试更低的值。与其他参数调整一样,您应该对最终矢量质量进行一些可重复的评估,以用于您的项目目的,可用于指导此类调整。

更激进sample的方法有时会带来双重打击:更快的训练——通过删除多余的高频词——和更好的最终结果——通过给予更稀有的词更多的权重,并有效地*缩小• 无论频繁出现的上下文窗口——单词被丢弃。(在考虑上下文窗口之前,这些词被省略了——因此会将窗口外的保留词移到其中。)

在典型的自然语言分布中,我已经看到了一个非常激进window的值1e-06或更高的丢弃大部分预下采样语料库。节省的训练时间也可能使考虑其他倾向于增加训练时间的epochs参数(sizenegativewindow

还有另一个参数,控制负样本采样率,我相信在原始 word2vec 论文中称为alpha0.75 ,并在原始 Googleword2vec.c工具中冻结。然而,一些研究表明,该参数的其他值可能在某些应用程序中有用——尤其是推荐系统,以及单词标记没有通常的自然语言 Zipfian 分布的系统。

因此,您可能还想尝试修改该参数。(word2vec 的其他实现,如 Python Gensim 的版本,将其作为参数提供ns_exponent。)

(修改其他参数可能有助于您的项目目标,相对于不太常见的单词向量的质量,但不是以明显的方式 - 您必须通过您的领域中的实验找到这种交互。)


推荐阅读