
使用 python(和 gensim)实现 word2vec
注意:此代码是用 python 3.6.1 (+gensim 2.3.0) 编写的
word2vec与gensim的python实现及应用
import reimport numpy as npfrom gensim.models import word2vecfrom nltk.corpus import gutenbergfrom multiprocessing import poolfrom scipy import spatial
导入训练数据集从nltk库导入莎士比亚的哈姆雷特语料库
sentences = list(gutenberg.sents('shakespeare-hamlet.txt')) # import the corpus and convert into a listprint('type of corpus: ', type(sentences))print('length of corpus: ', len(sentences))
语料库类型:类“list”
语料库长度:3106
print(sentences[0]) # title, author, and yearprint(sentences[1])print(sentences[10])
[‘[‘, ‘the’, ‘悲剧’, ‘of’, ‘哈姆雷特’, ‘by’, ‘威廉’, ‘莎士比亚’, ‘1599’, ‘]’]
[‘actus’, ‘primus’, ‘.’]
[‘弗兰’, ‘.’]
预处理数据
使用re模块预处理数据将所有字母转换为小写删除标点符号、数字等。
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 yearprint(sentences[1])print(sentences[10])
[‘the’、’悲剧’、’of’、’哈姆雷特’、’by’、’威廉’、’莎士比亚’]
[‘actus’, ‘primus’]
[‘弗兰’]
创建和训练模型
创建 word2vec 模型并使用 hamlet 语料库对其进行训练关键参数说明(https://radimrehurek.com/gensim/models/word2vec.html)句子:训练数据(必须是带有标记化句子的列表)size:嵌入空间的尺寸sg: cbow 如果为 0,skip-gram 如果为 1窗口:每个上下文所占的单词数(如果窗口大小为3,考虑左邻域中的3个单词和右邻域中的3个单词)min_count:词汇表中包含的最小单词数iter:训练迭代次数workers:要训练的工作线程数量
model = word2vec(sentences = sentences, size = 100, sg = 1, window = 3, min_count = 1, iter = 10, workers = pool()._processes)model.init_sims(replace = true)
保存和加载模型
word2vec模型可以本地保存和加载这样做可以减少再次训练模型的时间
model.save('word2vec_model')model = word2vec.load('word2vec_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 wordsdef cosine_similarity(v1, v2): return 1 - spatial.distance.cosine(v1, v2)cosine_similarity(v1, v2)
0.99437165260314941
参考文献:
立即学习“Python免费学习笔记(深入)”;
原始论文:mikolov, t.、chen, k.、corrado, g. 和 dean, j. (2013)。向量空间中单词表示的有效估计。 arxiv 预印本 arxiv:1301.3781.
以上就是使用 Python 进行词嵌入:Wordc的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1349858.html
微信扫一扫
支付宝扫一扫