介绍

一句话, G e n s i m Gensim Gensim中的word2vec类就是用来训练词向量的,这个类实现了词向量训练的两种基本模型 s k i p − g r a m skip-gram skipgramC B O W CBOW CBOW,可以通过后面的参数设置来选择,。但是,在Gensim这个模块中训练词向量的方法还有很多:
**gensim.models.doc2vec.Doc2Vec,gensim.models.fasttext.FastText,gensim.models.wrappers.**VarEmbed等等都能得到词向量。

Word2vec类

Word2vec初始化参数

在下面介绍参数时,可能不会列举完,完整的参数见word2vec.py源码。
注:参数表这一列,等号右边的值表示默认值


训练保存模型

# 示例1from gensim.test.utils import common_texts
from gensim.models import Word2Vecprint(common_texts)
train_model = Word2Vec(common_texts, size=100, window=5, min_count=1, workers=4)
train_model.save('./MyModel')train_model.wv.save_word2vec_format('./mymodel.txt', binary=False)

训练模型

只要给 w o r d 2 v e c word2vec word2vec类赋上参数,就可以直接训练了,其中common_texts是一段内置的语料如下:

保存模型

在示例1中,第8行和第10行都是用来保存训练模型的(简称 s a v e save savef o r m a t s a v e format_save formatsave),而两者之间的相同点就是:都可以复用,即载入之后可以得到对应单词的词向量;不同点是**:save保存的模型,载入之后可以继续在此基础上接着训练**(后文会介绍),而format_save保存的模型不能,但有个好处就是如果s设置binary=False则保存后的结果可以直接打开查看(一共有12个词向量,每个词向量100维)

12 100
system -0.0027418726 -0.0029260677 0.0002653271 ......
user 0.000851792 -0.004782654 0.0017041893 ......
trees 6.689873e-05 0.0027949389 -0.002869004 ......
graph -0.0038760677 -0.0021227715 0.0029032128 ......
......
......

载入模型和使用

我们只使用4个维度来表示词向量。

#示例 2  查看词表相关信息from gensim.test.utils import common_texts
from gensim.models import Word2Vec
model = Word2Vec.load('./MyModel')
# 对于训练好的模型,我们可以通过下面这前三行代码来查看词表中的词,频度,以及索引位置,
# 最关键的是可以通过第四行代码判断模型中是否存在这个词
for key in model.wv.vocab:print(key)print(model.wv.vocab[key])
print('human' in model.wv.vocab)
print(len(model.wv.vocab)) #获取词表中的总词数
#结果:trees
Vocab(count:3, index:2, sample_int:463795800)
graph
Vocab(count:3, index:3, sample_int:463795800)
minors
Vocab(count:2, index:11, sample_int:579459575)True12

获取对应词向量维度

# 示例3  获取对应的词向量及维度
model = Word2Vec.load('./MyModel')
print(model.wv.vector_size)
print(model['human'])
print(model['good'])# 结果
4
[-0.06076013 -0.03567408 -0.07054472 -0.10322621]KeyError: "word 'good' not in vocabulary"
Process finished with exit code 1# 在取词向量之前一定要先判断

计算两个词相似度,

# 示例4  常用方法#---------------4.1  计算两个词的相似度(余弦距离)--------
model = Word2Vec.load('./MyModel')
print(model.wv.similarity('human', 'user'))
print(model.wv.similarity('human', 'survey'))# 结果越大越相似(此处由于维度太小,所以结果好像不怎么准确)
-0.6465453
0.55347687#---------------4.2  计算两个词的距离--------
model = Word2Vec.load('./MyModel')
print(model.wv.distance('human', 'user'))
print(model.wv.distance('human', 'survey'))# 结果越大越不相似
1.6465452909469604
0.44652312994003296#---------------4.3  取与给定词最相近的topn个词--------
model = Word2Vec.load('./MyModel')
print(model.wv.most_similar(['human'],topn=3))#结果
[('computer', 0.7984297871589661), ('response', 0.6434261798858643), ('survey', 0.5534768104553223)]#---------------4.4  找出与其他词差异最大的词
model = Word2Vec.load('./MyModel')
print(model.wv.doesnt_match(['human','user','survey']))#结果
user

其他还有很多如:
words_closer_than(),similar_by_word(),similar_by_vector(),similarity_matrix()
参见源码keyedvectors.py

载入模型并继续训练

载入模型并继续训练意思是,之前训练好了一个词向量模型,可能训练时间不足,或者又有了新的数据,那么此时就可以在原来的基础上接着训练而不用从头再来。

#示例 5model = Word2Vec(sentences=pos,size=50,min_count=5)model.save('./vec.model_pos')print('语料数:', model.corpus_count)print('词表长度:', len(model.wv.vocab)) # 结果
语料数: 5000
词表长度: 6699#-------------增量训练model = Word2Vec.load('./vec.model_pos ')model.build_vocab(sentences=neg, update=True)model.train(sentences=neg, total_examples=model.corpus_count, epochs=model.iter)model.save('./vec.model')print('语料数:', model.corpus_count)print('词表长度:', len(model.wv.vocab))
# 结果
语料数: 5001
词表长度: 8296

可以看到,第一次训练时用了5000个语料,训练完成后词表中一共有6699个词;在追加训练时,用了5001个语料,此时词表中一共就有了8296个词

载入模型和使用

我们用之前训练好的模型来演示

# 示例 6model = Word2Vec.load('./vec.model')print('词表长度:', len(model.wv.vocab))print('爱    对应的词向量为:',model['爱'])print('喜欢  对应的词向量为:',model['喜欢'])print('爱  和  喜欢的距离(余弦距离)',model.wv.similarity('爱','喜欢'))print('爱  和  喜欢的距离(欧式距离)',model.wv.distance('爱','喜欢'))print('与 爱 最相近的3个词:',model.wv.similar_by_word('爱',topn=3))print('与 喜欢 最相近的3个词:',model.wv.similar_by_word('喜欢',topn=3))print('爱,喜欢,恨 中最与众不同的是:',model.wv.doesnt_match(['爱','喜欢','恨']))#结果
词表长度: 8296
爱    对应的词向量为: [-1.0453074  -2.5688617   1.2240907  ...
喜欢  对应的词向量为: [-0.5997423  -1.8003637   1.2935492  ...
爱  和  喜欢的距离(余弦距离) 0.89702404
爱  和  喜欢的距离(欧式距离) 0.10297596454620361
与 爱 最相近的3个词: [('喜欢', 0.89702), ('伤害', 0.88481), ('情感', 0.883626)]
与 喜欢 最相近的3个词: [('青梅竹马', 0.91182), ('轻浮', 0.91145), ('爱', 0.89702)]
爱,喜欢,恨 中最与众不同的是: 恨

自己训练词向量特征时候,会结合本篇文章来使用word2vec库。

gensim中的word2vec使用相关推荐

  1. 【自然语言处理】Gensim中的Word2Vec

    Gensim中的Word2Vec BOW 和 TF-IDF 都只着重于词汇出现在文件中的次数,未考虑语言.文字有上下文的关联,针对上下文的关联,Google 研发团队提出了词向量 Word2vec,将 ...

  2. gensim中的word2vec的使用

    本着尊重原著的想法,我们先把一些引用的文章贴上来,供大家参考 word2vec的理论知识,这个真的蛮详细的,我表示没有耐心全部搞透啊!:https://blog.csdn.net/itplus/art ...

  3. 使用gensim中的Word2Vec报错ValueError

    你如果尚未解除过word2Vec,这一篇详解值得一看:<机器学习:gensim之Word2Vec 详解>,以下则主要是我自己项目中使用gensim的Word2Vec中所遇到的问题以及详解 ...

  4. gensim中word2vec

    用gensim学习word2vec 在word2vec原理篇中,我们对word2vec的两种模型CBOW和Skip-Gram,以及两种解法Hierarchical Softmax和Negative S ...

  5. Word2vec原理浅析及gensim中word2vec使用

    本文转载于以下博客链接:Word2vec原理浅析:https://blog.csdn.net/u010700066/article/details/83070102: gensim中word2vec使 ...

  6. 【python gensim使用】word2vec词向量处理中文语料

    word2vec介绍 word2vec官网:https://code.google.com/p/word2vec/ word2vec是google的一个开源工具,能够根据输入的词的集合计算出词与词之间 ...

  7. 使用Gensim来实现Word2Vec和FastText

    2019-12-01 19:35:16 作者:Steeve Huang 编译:ronghuaiyang 导读 嵌入是NLP的基础,这篇文章教你使用Gensim来实现Word2Vec和FastText, ...

  8. 调用gensim库训练word2vec词向量

    首先准备符合规定输入的语料: import jieba raw_text = ["你站在桥上看风景","看风景的人在楼上看你","明月装饰了你的窗子& ...

  9. [Python人工智能] 九.gensim词向量Word2Vec安装及《庆余年》中文短文本相似度计算

    从本专栏开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.前一篇详细讲解了卷积神经网络CNN原理,并通过TensorFlow编写CNN实现了MNIST分类学习案例.本篇文章将分享 ...

最新文章

  1. JetsonTX2上安装tensorflow的心酸史
  2. 牛客网多校第4场 D Another Distinct Values 【构造】
  3. ggplot2设置坐标轴范围_Matplotlib入门-2-坐标轴axis/axes设置
  4. Microsoft 邀您参加云对话!
  5. wider face data 在 faster rcnn 上的实践记录(caffe)
  6. ASP.NET MVC Links
  7. android ios 在线图标生成器
  8. 3、SPSS做非参数检验
  9. 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记1 IOS8概述
  10. mysql基础命令语句以及使用方法:
  11. 报表工具——开源还是商用
  12. 如何夏普比率在量化交易中的价值
  13. 安装Ubuntu 16.04时出现:没有定义根文件系统,请到分区菜单修改
  14. **修炼一名程序员的职业水准(林庆忠__署名原创)**
  15. amcrest prostream 1080p网络摄像头评论
  16. C# 生成图片清晰度问题(转载)
  17. Hive学习之抽样(tablesample)
  18. 基于springboot学生公寓管理系统-计算机毕业设计源码+LW文档
  19. 三菱四节传送带控制梯形图_三菱PLC用步进指令实现四节传送带的模拟控制.pdf...
  20. Locust使用手册--Locust配置

热门文章

  1. ESP32学习(3):ESP32上运行ILI9341驱动LCD
  2. CLion中回退和前进的快捷键
  3. ubuntu下mongodb及其可视化工具robomongo安装
  4. 兰州大学计算机科学考研科目,2019兰州大学计算机考研初试科目、参考书目、报录比汇总...
  5. 线性电阻电路方程的建立方法
  6. DSO(1)——DSO论文详细解读
  7. 性能测试能力提升-JVM GC监控和优化
  8. radio、checkbox在使用iCheck后,绑定选中事件
  9. 计算机管理员 职称业绩登记,任现职前主要专业技术职务工作业绩登记完整版(30页)-原创力文档...
  10. Latex排版[5]: 公式下多行下标