word2vec参数调整 及lda调参

时间:2022-04-22 03:30:09
 一、word2vec调参
./word2vec -train resultbig.txt -output vectors.bin -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -binary 1

  

一般来说,比较喜欢用cbow ,因为模型中 cbow有向量相加的运算。##保留意见

-cbow 0表示不使用cbow模型,默认为Skip-Gram模型
-size 表示词向量维数:经验是不超过1000,超过1000基本都没有效果,我感觉是可以取  sqrt(dict_size)/2 的样子,不过最好多试几个
-window 上下文窗口,是训练词向量的时候,取上下文的大小,感觉这个一般都是5比较好
-sample 表示采样参数,是一个经验忽视掉频率过高的词的参数,一般也用默认的就行。
-sampe指的是采样的阈值,如果一个词语在训练样本中出现的频率越大,那么就越会被采样。
-negative 表示负采样参数,每有一个正样本,选择几个负样本的参数,一般也是用默认的。
-binary为1指的是结果二进制存储,为0以文本形式进行存储。
上面这两个参数试过很多个,感觉就是默认的比较好用。

-hs 做不做层次的softmax,是1的时候效果比较好,但是训练会慢一点
-min-count 控制词典大小的参数,如果只想要高频词的话就设置高一点。

    架构:skip-gram(慢、对罕见字有利)vs CBOW(快)

·         训练算法:分层softmax(对罕见字有利)vs 负采样(对常见词和低纬向量有利)

·         欠采样频繁词:可以提高结果的准确性和速度(适用范围1e-3到1e-5)

·         文本(window)大小:skip-gram通常在10附近,CBOW通常在5附近

二、LDA调参

1.文章

http://jmlr.org/proceedings/papers/v32/tang14.pdf

2.思路

1)lda模型(latent dirichlet distribution)调优,比如曾经有研究表明,直接把短文档(比如一个微博,一个查询)作为输入,不如先做预处理把这些短文章聚合成一些长文章(比如把同一作者的微博合一块)。

2)当我们选择的主题数目k和真实主题数目k’ 一致,或者主题-词分布区分度够高(欧式距离衡量下)的情况下,假如我们还满足文档长度的限制,log d 《= n 的, 那么, 随着n 和 d 增长,后验分布和真实分布之间的误差正比于 logn / n +logd / d。

3)当我们选择的主题数目k 大于真实主题数目k‘时,如果我们仍然满足 d》= log n, 那么误差正比于 (log n / n + logd / d) ^ (1/(2k –1))

4)

    1. 文档长度不能太短,至少是文档数目的log,所以对于太短的文档,我们必须把他们聚合

    2. 为了满足log d 《= n, 还有一个方法是降低d,但很可惜,最终误差大小正比于d,所以文档数量最好也多一点。

    3. 当我们选择的topic 数目k 大大超出于真实topic 数目 k‘ 时,可以从(5)的结果看到,也会减慢收敛速度,所以应该从比较小的topic数目开始,慢慢增加。

    4. 最好当然是我们能知道真正的主题数目k,这样可以避开上面的试探过程,但现实很难,另外一个可能的条件是topic之间差异大,比如每个文档可能的topic少,或者每个topic有一些特殊的词,比如一个topic是自然语言处理,另一个topic是图像处理,两个各有自己独特的词,如像素,语法树等等,这样我们就可以不用太担心试探过程。

    5. 当上面两种情况发生时,可以考虑设置小一点的alpha 和beta, 以减少迭代。