使用 python(和 gensim)实现 doc2vec
注意:此代码是用 python 3.6.1 (+gensim 2.3.0) 编写的
doc2vec与gensim的python实现及应用
import re import numpy as np from gensim.models import doc2vec from gensim.models.doc2vec import taggeddocument from nltk.corpus import gutenberg from multiprocessing import pool from scipy import spatial
登录后复制
- 导入训练数据集
- 从nltk库导入莎士比亚的哈姆雷特语料库
sentences = list(gutenberg.sents('shakespeare-hamlet.txt')) # import the corpus and convert into a list print('type of corpus: ', type(sentences)) print('length of corpus: ', len(sentences))
登录后复制
语料库类型:类“list”
语料库长度:3106
print(sentences[0]) # title, author, and year print(sentences[1]) print(sentences[10])
登录后复制
['[', 'the', '悲剧', 'of', '哈姆雷特', 'by', '威廉', '莎士比亚', '1599', ']']
['actus', 'primus', '.']
['弗兰', '.']
预处理数据
- 使用re模块预处理数据
- 将所有字母转换为小写
- 删除标点符号、数字等
- 对于doc2vec模型,输入数据应采用可迭代的taggeddocuments格式”
- 每个 taggeddocument 实例都包含单词和标签
- 因此,每个文档(即句子或段落)应该有一个可识别的唯一标签
for i in range(len(sentences)): sentences[i] = [word.lower() for word in sentences[i] if re.match('^[a-za-z]+', word)] print(sentences[0]) # title, author, and year print(sentences[1]) print(sentences[10])
登录后复制
['the'、'悲剧'、'of'、'哈姆雷特'、'by'、'威廉'、'莎士比亚']
['actus', 'primus']
['弗兰']
for i in range(len(sentences)): sentences[i] = taggeddocument(words = sentences[i], tags = ['sent{}'.format(i)]) # converting each sentence into a taggeddocument sentences[0]
登录后复制
taggeddocument(words=['the', 'tragedie', 'of', 'hamlet', 'by', 'william', 'shakespeare'], tags=['sent0'])
创建和训练模型
- 创建 doc2vec 模型并使用 hamlet 语料库对其进行训练
- 关键参数说明(https://radimrehurek.com/gensim/models/doc2vec.html)
- 句子:训练数据(必须是带有标记化句子的列表)
- size:嵌入空间的尺寸
- sg: cbow 如果为 0,skip-gram 如果为 1
- 窗口:每个上下文所占的单词数(如果窗口
- 大小为3,考虑左邻域中的3个单词和右邻域中的3个单词)
- min_count:词汇表中包含的最小单词数
- iter:训练迭代次数
- workers:要训练的工作线程数量
model = doc2vec(documents = sentences,dm = 1, size = 100, min_count = 1, iter = 10, workers = pool()._processes) model.init_sims(replace = true)
登录后复制
保存和加载模型
- doc2vec模型可以本地保存和加载
- 这样做可以减少再次训练模型的时间
model.save('doc2vec_model') model = doc2vec.load('doc2vec_model')
登录后复制
相似度计算
- 嵌入单词(即向量)之间的相似度可以使用余弦相似度等指标来计算
model.most_similar('hamlet')
登录后复制
[('horatio', 0.9978846311569214),
('女王', 0.9971947073936462),
('莱尔特斯', 0.9971820116043091),
('国王', 0.9968599081039429),
('妈妈', 0.9966716170310974),
('哪里', 0.9966292381286621),
('迪尔', 0.9965540170669556),
('奥菲莉亚', 0.9964221715927124),
('非常', 0.9963752627372742),
('哦', 0.9963476657867432)]
v1 = model['king'] v2 = model['queen'] # define a function that computes cosine similarity between two words def cosine_similarity(v1, v2): return 1 - spatial.distance.cosine(v1, v2) cosine_similarity(v1, v2)
登录后复制
0.99437165260314941
立即学习“Python免费学习笔记(深入)”;
以上就是使用 Python 进行词嵌入:docc的详细内容,更多请关注抖狐科技其它相关文章!
-
增强 React 列表渲染:干净且可重用的模式
作为 react 开发人员,我们都遇到过需要渲染数据列表的场景。虽然 .map() 方法效果很好,但每次渲染列表时重复相同的逻辑可能会让人筋疲力尽,并导致代码重复。幸运的是,有一种更干净、可扩展的方法...
-
幸福工厂塑料怎么生产 幸福工厂塑料生产攻略
幸福工厂塑料生产指南对于《幸福工厂》新手玩家来说,塑料的生产流程可能是令人困惑的。php小编柚子将为您提供详细解释,帮助您轻松掌握塑料的制作方法。继续阅读本文,了解从初级材料到先进塑料的完整生产步骤,...
-
米哈游通行证如何关闭登录验证 登录验证关闭方法
米哈游通行证关闭登录验证?许多玩家在登录米哈游游戏时都遇到了需要进行登录验证的情况,让大家感到不便利。php小编柚子今天带来的内容就是讲解米哈游通行证如何关闭登录验证,有需要的玩家赶紧往下看看吧! 米...
-
微信键盘设置在什么地方 设置位置一览
遇到微信键盘找不到设置位置的难题了吗?别担心!php小编西瓜为您带来详细指南,揭秘微信键盘设置的隐藏之地。在正文中,我们将一步步引导您找到并调整键盘设置,让您的微信输入体验更加流畅。继续阅读,探索微信...
-
6英寸是多少厘米
6英寸等于15.24厘米,因为1英寸等于2.54厘米,所以6英寸乘以2.54厘米即可得到结果。6英寸等于多少厘米 1英寸等于2.54厘米,因此: 6英寸 = 6 x 2.54厘米 = 15.24厘米以...