基于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")
最后,我们还可以做个类比关系实验,
比如,孔明是玄德的军师,那么曹操的军师是谁呢?
南京江岛半马开始报名,最美赛道特制奖牌等你来体验!现代快报讯(通讯员建萱记者杨晓冬)春日里出发,快来打卡最美江堤赛道!3月7日,现代快报记者从南京市建邺区2023南京江岛半程马拉松新闻发布会上获悉,本届半马赛事亮点颇多,不仅创新提
做数据分析选Python还是Java?用一个小例子,看看Python和Java读取CSV文件并进行数据分析时的代码量和难度。假设我们有一个CSV文件,其中包含某个城市每个月的平均温度和降雨量数据。我们需要读取这个CSV
互联网面试请简单介绍高并发场景中的Future设计模式?凭据管理在日常生活中,我们经常会遇到一种情况,就是在我们提出需求之后,由于服务者还没有准备好对应的实物交付给我们的时候,就会先给我们一张凭据,等到双方约定的时间到了之后,我们带着这
以太坊创造者转储多个Memecoins,加密崩溃是否迫在眉睫?以太坊联合创始人维塔利克布特林卖掉了他钱包里的大部分硬币。VitalikButerin卖出的硬币正在升值,就像上次shitcoins抛售大量shitcoins后失去大部分价值一样。
新兴跨境电商市场有哪些拉美市场有潜力吗如今跨境电商已经渐渐发展成为主流行业,成熟市场增长乏力,不妨将目光投向更为广阔的新兴市场。1。东南亚冠绝全球的电商增速(20。6),警惕竞争挤出风险东南亚近几年不断出现在跨境电商卖
俄禁用9款外国即时通讯软件微信入列俄罗斯监督机构和官方媒体周三(3月8日)证实,在中国颇为流行的即时通讯软件微信已被禁用。被禁的还有另外8款外国及乌克兰流行的APP。莫斯科悄无声息地突然对中国的微信出此重手,令很多
数据测试实践从一个bug开始的大数据引擎兼容性探索作者京东零售李晓洁我们常常忘记,天才也取决于其所能掌握的数据,即使阿基米德也无法设计出爱迪生的发明。ErnestDimnet在大数据时代,精准而有效的数据对于每个致力于长期发展的组
京东2022年女性消费报告深度悦己绽放自我价值在第113个国际劳动妇女节来临之际,京东消费及产业发展研究院发布2022年中国女性消费报告(以下简称报告)。报告显示,2022年,京东平台女性消费者整体成交额增速大幅领先男性,其中
低代码设计教程(三)管理平台当业务规模比较小系统复杂度不高时,运维测试数据分析管理等支撑功能主要由各系统或者团队独立完成。低代码系统建设的核心是快速构建不同的行业应用,如果各个行业应用都采取各自为政的方式来实
巴黎时装周,刘亦菲周冬雨关晓彤一个比一个美刘亦菲她的天仙名号真的不是白叫的,换上一身黑色皮裙,帅气又酷飒。半身裙露出两条大白腿,真是太好看了!很喜欢她身上这种随性,自然的状态,看起来很舒服。周冬雨周冬雨的这次是露腰撞色系的
刘雯巴黎时装周造型惹争议巴黎时装周上大家的造型很有争议,大家的服装面料几乎都很少,图中可以看刘雯身穿交叉绑带长裙,身材比例非常的好,上半身使用的布料非常的少。不知是何原因,刘雯本来就很瘦了,这次时装周后,