word2vec代码_word2vec词向量可视化聚类与Bert词向量可视化聚类对比

在我的第一篇文章里我介绍了Bert生成词向量并进行了简单的可视化和聚类,得到的效果很不错。想到之前我也用过word2vec做过类似的事情,所以就想着用两种词向量生成方法进行一下对比。直接上代码吧:

from gensim.models import Word2Vec
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
KM = KMeans(n_clusters=2)
model = Word2Vec.load("C:UsersAdministratorDesktopword2vecWord60.model") #加载训练好的模型
corpus = []
B = model.wv.index2word  #获取word2vec训练过的词汇
gb = open('C:UsersAdministratorDesktopfunNLP-masterdata动物词库THUOCL_animal.txt',encoding='utf-8').readlines()
for word in gb[:30]:    #为了方便,每个词库只取了前面30个单词
    word = word.split('t')
    if word[0] in B:
        corpus.append(word[0])

fb = open('C:UsersAdministratorDesktopfunNLP-masterdata地名词库THUOCL_diming.txt',encoding='utf-8').readlines()
for word in fb[:30]:
    word = word.split('t')
    if word[0] in B:
        corpus.append(word[0])
vector = model[corpus]
vector_ = pca.fit_transform(vector)
y_ = KM.fit_predict(vector_)
plt.rcParams['font.sans-serif'] = ['FangSong']
plt.scatter(vector_[:,0],vector_[:,1],c=y_)
for i in range(len(corpus)):    #给每个点进行标注
    plt.annotate(s=corpus[i], xy=(vector_[:, 0][i], vector_[:, 1][i]),
                 xytext=(vector_[:, 0][i] + 0.1, vector_[:, 1][i] + 0.1))
plt.show()

这里用到的是别人已经训练好的模型,文末我会给出下载连接。把里面的三个文件都下载放在同一个目录就能用了。

得到的效果如下图:

00abe6ce9135a895eb3413b04a8493b6.png
word2vec生成的词向量并聚类

我再把之前用Bert生成的词向量聚类效果放在下面对比下:

f904c95b9d7f6bc3864100bee59f5378.png

总的来说两种词向量聚类效果都还算不错。但是word2vec的不仅错误率要高(可以从图中看到美国、德国、亚洲、南方、大陆等词汇都分错了),而且有些词汇不在训练词汇中,所以无法给出词向量(比如小尾寒羊)。

训练好的文件下载地址:https://pan.baidu.com/s/1fWVnqLIhwRBftETzIEN9_A

提取码:dgjp

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值