使用gensim实现word2vec,再使用t-SNE压缩可视化

使用gensim的word2vec做的一点小实验……
1.首先对文本进行word2vec
网上语料库很多,可以随便找一找

import gensim,logging
import gensim, logging
import os
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
class MySentences(object):
    def __init__(self, dirname):
        self.dirname = dirname
 
    def __iter__(self):
        for fname in os.listdir(self.dirname):
            for line in open(os.path.join(self.dirname,fname),encoding='gbk'): #我要读取的都是中文,使用gkb好一些
                yield line.split()
sentences =MySentences('E:\\test\\')#读取目录里所有文件

model = gensim.models.Word2Vec(sentences,size=100, min_count=1,window =2,sg=1,hs=1,iter=20)

size=100:向量维数100维
min_count=1:最小词频为1
window =2:窗口大小为2
sg=1:使用skip-gram方法
hs=1:使用softmax function
iter=20:迭代20次(我记得默认是5次)
2.保存生成的模型,以便使用
两种方式:
第一种:可以更加快速加载的模型

model.save("E:\\word2vec1.model")

第二种:可以用文本查看的模型,但是加载慢(不进行可视化展示了)

modelX.wv.save_word2vec_format("E:\\word2vec1.vector")
modelX.wv.save_word2vec_format("E:\\word2vec1.bin")

3.加载模型

X = model.load("E:\\word2vec1.model")

4.搞一些相似度之类的东西
对我来说,是我想要的东西,相似度可以

X.wv.most_similar(u'综合商场')
#输出
[('体育户外', 0.6556961536407471),
 ('母婴儿童', 0.6473106145858765),
 ('电影院', 0.5801295638084412),
 ('数码家电', 0.5358222126960754),
 ('综合体育场馆', 0.5341006517410278),
 ('培训', 0.5147511959075928),
 ('钟表店', 0.5030048489570618),
 ('小商品市场', 0.49604037404060364),
 ('服饰鞋包', 0.47768259048461914),
 ('花鸟鱼虫', 0.4769262373447418)]

5.t-SNE压缩向量可视化
#t-SNE

from matplotlib.font_manager import *  
import matplotlib.pyplot as plt 
modelX = gensim.models.Word2Vec.load("E:\\word2vec1.model")#我重新加载一下
X = modelX[modelX.wv.vocab]
X_tsne = TSNE(n_components=2).fit_transform(X)#n_components=2,压缩成2维
list = []#我想图片显示文字,所以把文字存在了列表里,可能有更好的办法,但是我目前没找到,也不知道去哪里找一下
words = modelX.wv.vocab
for word in words:
    print(word)
    list.append(word)

plt.figure(figsize=(30, 15)) #图片大小
myfont = FontProperties(fname='E:\\文泉驿正黑.ttf')#文字样式,不用的话,我显示的都是方块……

plt.scatter(X_tsne[:,0],X_tsne[:,1])
for i in range(len(X_tsne)):
    x=X_tsne[i][0]
    y=X_tsne[i][1]
    plt.text(x , y,list[i],fontproperties=myfont,size = 16)
 
plt.show()

效果一般,但是东西是出来了(毕竟我想要的是这个过程。调参啥的之后再研究)
在这里插入图片描述

结束实验~~~

首先,需要安装gensim库。可以使用pip命令进行安装: ``` pip install gensim ``` 然后,我们需要准备一个语料库(corpus)作为训练数据。语料库可以是一个文本文件,每一行是一个句子,或者是一个已经分好词的列表。 下面是一个使用gensim实现word2vec的示例代码: ```python from gensim.models import Word2Vec # 读取语料库 sentences = [] with open('corpus.txt', 'r', encoding='utf-8') as f: for line in f: words = line.strip().split() sentences.append(words) # 定义模型 model = Word2Vec(sentences, size=100, window=5, min_count=5, workers=4, sg=0) # 保存模型 model.save('word2vec.model') # 加载模型 model = Word2Vec.load('word2vec.model') # 使用模型计算相似度 similarity = model.wv.similarity('word1', 'word2') print('Similarity between word1 and word2:', similarity) # 找出与指定词语最相似的词语 most_similar = model.wv.most_similar('word') print('Most similar words:', most_similar) ``` 在这段代码中,我们首先读取语料库,然后使用Word2Vec类定义模型。其中,size表示词向量的维度,window表示词向量上下文的窗口大小,min_count表示出现次数小于min_count的词语将被忽略,workers表示训练时使用的线程数,sg表示使用的模型类型,sg=0表示使用CBOW模型,sg=1表示使用Skip-gram模型。 然后,我们可以使用save方法保存模型,使用load方法加载模型。最后,使用wv.similarity方法计算两个词语之间的相似度,使用wv.most_similar方法找出与指定词语最相似的词语。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值