文章目录
概述
word2vec
是按句子来处理的Sentences(句子们)
使用示例
from gensim.models import Word2Vec
#sentences 是二维的向量,这个就是要用的语料库(庞大的语料库文件在第四节说明使用方法)
sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]
#进行模型训练
model = Word2Vec(sentences,vector_size = 20, window = 2 , min_count = 1, epochs=7, negative=10,sg=1)
print("cat的词向量:\n",model.wv.get_vector('cat'))
print("\n和“cat”相关性最高的前20个词语:")
print(model.wv.most_similar('cat', topn = 5))# 与孔明最相关的前20个词语
模型的保存与使用
在上一步使用示例之后,对模型进行保存和使用:
# 模型的保存与加载
model.save("word2vec.model")
#这种情况存储下来可以继续训练
model = Word2Vec.load("word2vec.model")
#只存储词向量,是key:vector的形式,无法继续训练.binary表示是否是二进制文件
model.wv.save_word2vec_format("dic_model.model",binary = False)
# 如果需要添加新的语料,则需要进行更新词库==>model.build_vocab(LineSentence(sentence_file(新的语料)),update=True)
# 但是注意,如果新增的词的数量少于训练时的min_count,就查不到对应的向量
model.build_vocab([["hello", "world"]],update=True)
# 模型继续增加语料进行训练,total_examples:句子数;epochs:迭代次数
model.train([["hello", "world"]], total_examples=1, epochs=1)
print("cat的词向量:\n",model.wv.get_vector('cat'))
训练参数详解(原链接)
classgensim.models.word2vec.Word2Vec(sentences=None, corpus_file=None, vector_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=<built-in function hash>, epochs=5, null_word=0, trim_rule=None, sorted_vocab=1, batch_words=10000, compute_loss=False, callbacks=(), comment=None, max_final_vocab=None, shrink_windows=True)
- sentences 可以是一个list,对于大语料集,建议使用BrownCorpus,Text8Corpus或lineSentence构建。
- vector_size word向量的维度,默认为100。大的size需要更多的训练数据,但是效果会更好。推荐值为几十到几百。
- alpha 学习率
- window 表示当前词与预测词在一个句子中的最大距离是多少。
- min_count 可以对字典做截断。词频少于min_count次数的单词会被丢弃掉,默认值为5。
- max_vocab_size 设置词向量构建期间的RAM限制。如果所有独立单词个数超过这个,则就消除掉其中最不频繁的一个。每一千万个单词需要大约1GB的RAM。设置成None则没有限制。
- sample 高频词汇的随机降采样的配置阈值,默认为1e-3,范围是(0,1e-5) seed 用于随机数发生器。与初始化词向量有关。
- workers 参数控制训练的并行数。 sg 用于设置训练算法,默认为0,对应CBOW算法;sg=1则采用skip-gram算法。
- hs 如果为1则会采用hierarchica·softmax技巧。如果设置为0(default),则negative
- sampling会被使用。 negative 如果>0,则会采用negative samping,用于设置多少个noise words。
- cbow_mean 如果为0,则采用上下文词向量的和,如果为1(default)则采用均值。只有使用CBOW的时候才起作用。
- hashfxn hash函数来初始化权重。默认使用python的hash函数。 epochs 迭代次数,默认为5。
- trim_rule 用于设置词汇表的整理规则,指定那些单词要留下,哪些要被删除。可以设置为None(min_count会被使用)或者一个接受()并返回RULE_DISCARD,utils。RULE_KEEP或者utils。RULE_DEFAULT的函数。
- sorted_vocab 如果为1(default),则在分配word index 的时候会先对单词基于频率降序排序。
- batch_words 每一批的传递给线程的单词的数量,默认为10000
- min_alpha 随着训练的进行,学习率线性下降到min_alpha
语料库训练
- 使用自建语料库进行训练时,代码示例如下:
model = Word2Vec(LineSentence(open('corpus.txt', 'r',encoding = 'utf8')),vector_size = 20, window = 2 , min_count = 2, epochs=7, negative=10,sg=1)
其中,corput.txt
是自己制作的预料库,LinSentence
函数在使用之前需要对待处理的文本数据进行分词(使用jieba库,使用可参考链接),并以空格分隔;函数在运行时,按行读取已经以空格分隔的文档。文档格式如图:
- 使用已有语料库可以是:
BrownCorpus
和Test8Corpus