genism word2vec方法

文章目录

  • 概述
  • 使用示例
  • 模型的保存与使用
  • 训练参数详解([原链接](https://blog.csdn.net/weixin_44852067/article/details/130221655))
  • 语料库训练

概述

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.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库,使用可参考链接),并以空格分隔;函数在运行时,按行读取已经以空格分隔的文档。文档格式如图:

在这里插入图片描述

  • 使用已有语料库可以是:BrownCorpusTest8Corpus

你可能感兴趣的:(word2vec,人工智能,自然语言处理)