word2vec的参数选择

node2vec中用到了word2vec,作为序列的embedding模型,word2vec不止用于NLP领域。

官方文档见
https://radimrehurek.com/gensim/models/word2vec.html

class gensim.models.word2vec.Word2Vec(
  sentences=None, corpus_file=None, size=100, alpha=0.025, window=5, min_count=5,
  max_vocab_size=None, sample=0.001, seed=1, workers=3, min_alpha=0.0001, sg=0, hs=0, negative=5, ns_exponent=0.75,
  cbow_mean=1, hashfxn=, iter=5, null_word=0, trim_rule=None, sorted_vocab=1, batch_words=10000, compute_loss=False,
  callbacks=(), max_final_vocab=None)

· sentences:可以是一个·ist,对于大语料集,建议使用BrownCorpus,Text8Corpus或·ineSentence构建。
· sg: 用于设置训练算法,默认为0,对应CBOW算法;sg=1则采用skip-gram算法。
· size:是指特征向量的维度,默认为100。大的size需要更多的训练数据,但是效果会更好. 推荐值为几十到几百。
· window:表示当前词与预测词在一个句子中的最大距离是多少
· alpha: 是学习速率
· seed:用于随机数发生器。与初始化词向量有关。
· min_count: 可以对字典做截断. 词频少于min_count次数的单词会被丢弃掉, 默认值为5
· max_vocab_size: 设置词向量构建期间的RAM限制。如果所有独立单词个数超过这个,则就消除掉其中最不频繁的一个。每一千万个单词需要大约1GB的RAM。设置成None则没有限制。
· sample: 高频词汇的随机降采样的配置阈值,默认为1e-3,范围是(0,1e-5)
· workers参数控制训练的并行数。
· hs: 如果为1则会采用hierarchica·softmax技巧。如果设置为0(defau·t),则negative sampling会被使用。
· negative: 如果>0,则会采用negativesamp·ing,用于设置多少个noise words
· cbow_mean: 如果为0,则采用上下文词向量的和,如果为1(defau·t)则采用均值。只有使用CBOW的时候才起作用。
· hashfxn: hash函数来初始化权重。默认使用python的hash函数
· iter: 迭代次数,默认为5
· trim_rule: 用于设置词汇表的整理规则,指定那些单词要留下,哪些要被删除。可以设置为None(min_count会被使用)或者一个接受()并返回RU·E_DISCARD,uti·s.RU·E_KEEP或者uti·s.RU·E_DEFAU·T的函数。
· sorted_vocab: 如果为1(defau·t),则在分配word index 的时候会先对单词基于频率降序排序。
· batch_words:每一批的传递给线程的单词的数量,默认为10000

语料的影响
实际发现在微博,违法色情的词训练的比较好,因为黑产用这种聚到来推广。而在评论,骂人的词训练的比较好,在新闻,则是常见的正规的词训练的比较好。
为什么会出现这种情况呢?
因为 word2vec 的原理就是 一个词预测 前后词 或者 前后词 预测 当前词,使得概率最大化。这就导致相似的句子,相同部位的词会相似,比如微博和新闻的句子的整体分布是不一样的。。挨的近的词,也是相似的,比如新闻长文多,句式复杂,微博短文多。

一些参数的选择

  1. skip-gram (训练速度慢,对罕见字有效),CBOW(训练速度快)。一般选择Skip-gram模型;

  2. 训练方法:Hierarchical Softmax(对罕见字有利),Negative Sampling(对常见字和低维向量有利);

  3. sample 降采样越低,对高频词越不利,对低频词有利。可以这么理解,本来高频词 词被迭代50次,低频词迭代10次,如果采样频率降低一半,高频词失去了25次迭代,而低频词只失去了5次。一般设置成(1e-3~1e-5)。降采样会降低高频词对上下文影响的权重。

  4. window 窗口大小影响 词 和前后多少个词的关系,和语料中语句长度有关,建议可以统计一下语料中,句子长度的分布,再来设置window大小。一般设置成8。Skip-gram通常选择10左右,CBOW通常选择5左右。

  5. iter 影响训练次数,语料不够的情况下,可以调大迭代次数。spark 版本有bug,迭代次数超过1,训练得到的词向量维度值超大。

  6. workers workers 用于设定训练的并行处理,以加快训练速度。workers设为1可复现训练好的词向量,但速度稍慢。worker 这个参数起作用的前提是安装了 Cython,否则只能用单核。



Ref:
https://zhuanlan.zhihu.com/p/29364112
https://blog.csdn.net/laobai1015/article/details/86540813

猜你喜欢

转载自blog.csdn.net/rover2002/article/details/106742923