基于gensim实现word2vec模型(附案例实战)
什么是word2vec?
Word2Vec是google在2013年推出的一个NLP工具,它的特点是能够将单词转化为向量来表示,这样词与词之间就可以定量的去度量他们之间的关系,挖掘词之间的联系。用词向量来表示词并不是Word2Vec的首创,在很久之前就出现了。最早的词向量采用One-Hot编码,又称为一位有效编码,每个词向量维度大小为整个词汇表的大小,对于每个具体的词汇表中的词,将对应的位置置为1。比如我们有下面的5个词组成的词汇表:
采用One-Hot编码方式来表示词向量非常简单,但缺点也是显而易见的,一方面我们实际使用的词汇表很大,经常是百万级以上,这么高维的数据处理起来会消耗大量的计算资源与时间。另一方面,One-Hot编码中所有词向量之间彼此正交,没有体现词与词之间的相似关系。
Distributed representation可以解决One-Hot编码存在的问题,它的思路是通过训练,将原来One-Hot编码的每个词都映射到一个较短的词向量上来,而这个较短的词向量的维度可以由我们自己在训练时根据任务需要来自己指定。
下图是采用Distributed representation的一个例子,我们将词汇表里的词用"Royalty","Masculinity", "Femininity"和"Age"4个维度来表示,King这个词对应的词向量可能是(0.99,0.99,0.05,0.7)。当然在实际情况中,我们并不能对词向量的每个维度做一个很好的解释。
Word2Vec的原理
Word2Vec 的训练模型本质上是只具有一个隐含层的神经元网络(如下图)。
它的输入是采用One-Hot编码的词汇表向量,它的输出也是One-Hot编码的词汇表向量。使用所有的样本,训练这个神经元网络,等到收敛之后,从输入层到隐含层的那些权重,便是每一个词的采用Distributed Representation的词向量。比如,上图中单词的Word embedding后的向量便是矩阵 Wv x N 的第i行的转置。这样我们就把原本维数为V的词向量变成了维数为N的词向量(N远小于V),并且词向量间保留了一定的相关关系。
gensim实现word2vec模型(实战)
本次实战案例选取的数据集是四大名著中的三国演义。
首先使用jieba进行中文分词,
分词之后使用gensim库中的word2vec构建模
从结果中我们看出,与孔明相关性最高的是玄德、云长、孟获,也符合小说中的角色关系。
接着我们将模型可视化,
import numpy as np
from sklearn.decomposition import PCA
# 将词向量投影到二维空间
rawWordVec = []
word2ind = {}
for i, w in enumerate(model.wv.index_to_key):
rawWordVec.append(model.wv[w]) # 词向量
word2ind[w] = i # {词语:序号}
rawWordVec = np.array(rawWordVec)
X_reduced = PCA(n_components=2).fit_transform(rawWordVec) # PCA降2维
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"] #解决中文显示
plt.rcParams["axes.unicode_minus"] = False #解决符号无法显示
# 绘制星空图
# 绘制所有单词向量的二维空间投影
fig = plt.figure(figsize = (15, 10))
ax = fig.gca()
ax.set_facecolor("white")
ax.plot(X_reduced[:, 0], X_reduced[:, 1], ".", markersize = 1, alpha = 0.3, color = "black")
# 绘制几个特殊单词的向量
words = ["孙权", "刘备", "曹操", "周瑜", "诸葛亮", "司马懿","汉献帝"]
for w in words:
if w in word2ind:
ind = word2ind[w]
xy = X_reduced[ind]
plt.plot(xy[0], xy[1], ".", alpha =1, color = "orange",markersize=10)
plt.text(xy[0], xy[1], w, alpha = 1, color = "red")
最后,我们还可以做个类比关系实验,
比如,孔明是玄德的军师,那么曹操的军师是谁呢?
为什么国足有了归化球员世预赛结局还是这么惨?从中国队对沙特的比赛可以看出,归化球员的整体素质与技战术水平要高出中国球员一个档次。但是李铁就是对阿兰和洛国富视而不见。如果不是在对沙特的比赛中,他们有了45分钟的时间发挥,很多球
世乒赛男双无缘争冠,是不是中国乒乓历史上最差成绩?2021年休斯顿世乒赛已经正式结束,中国队拿到了五个赛事中除了男双以外的所有冠军。虽然不像上一届世乒赛大包大揽,但是这样的成绩在之前比赛中也是有过的。像2013年巴黎世乒赛,男双金
孙颖莎会不会夺得WTT世界杯女子单打冠军?只能说可能性比较大,在王曼昱出局,四分之一决赛和陈幸同火拼,陈梦王艺迪其中一个进决赛的情况下,莎莎夺冠的难度还是比较大的,尤其是陈梦这关难过。可能会,也可能不会。莎莎具备夺冠的实力
2021年很多大主播被封了,你觉得谁被封最为惋惜呢?没什么惋惜的。想封谁,都有其一定道理,只是站在什么角度看。我都不知道谁被封了,我就希望我不要被封!最好头条有个规定,什么情况下会被封?那我们可照章办事,不要学中国足协,想封谁就封谁
电子锁很容易就没电吗?暂时没有发现,我是2020年九月买的到现在一年多了,一直到现在还没提示电量低,家里基本每天都要用三四次。但是我家的是用了八节电视。可能电池比较多的原因一直没提示电量低。去年我是看到
抗美援朝战争,志愿军哪个军团参战次数最多?哪个军团歼敌最多?人民军队只是在红军时期才有过军团的建制,并且下面一般直辖数师,属于虚张声势迷惑敌人的番号,其实称为军更合理些。到解放战争和抗美援朝时期,已经组建了下辖数个军的兵团,所以提问在专业上
农村现在越来越冷清了?再过几年会不会就没有人住了?说问题前,请大家接个对联。上联国兴民融城圆梦下联农村确实进入大迁徙的时代诀择,这是我们伟大祖国强盛的福祉。随着时间的推移,农村尤其是偏远农村,会越来越冷清,再过十年左右除了镇级外的
你在校内遇到过哪些真实惊悚的事情?室友小曾,某个周末,带来一女孩,年纪跟我们差不多,说是高中同学,在美院上学,借住一下。十多天后,小曾失踪。我们大学在江南水乡某郊区,古色古香古韵,环境很好,与其说是大学,不如说是一
你见过特别无理取闹的人吗?见过,当我把摘好的桃子递到她手上时,她却接过来狠狠的摔到了地上,汁液溅满了我的裤子,我当时是那么的委屈,但是后来一车游客的仗义执言,又让我感到了满满的温情。多年前我在旅游公司做销售
长期喝茅台的人后来都怎样了?长期喝茅台的人,最后不是改喝茶,就是生病住院了,这点我深有体会,因为我妈妈做生意所在的小区,很多长期喝茅台的主,结果基本都是住院了,少有的几个也改成喝茶,滴酒不沾了。右上角关注帮忙
是否应该带孩子去旅行?你有什么看法?我认为应该带孩子去旅行,旅行是人生最好的修行。在旅途中孩子能认识并突破自我,在大自然中身体力行,不断学习。1学习不同的风土人情,尊重各地风俗习惯,更好的与当地人交谈。2锻练动手能力