Word2Vec的使用心得

我们这次要做的东西是做中文的Word2Vec词向量
网上有很多讲Word2Vec的,我发现似乎都不能直接用。经过一天的努力,勉强算是搞懂了这个词向量到底是怎么回事。所以记录一下。

首先我们要做的东西就是先将我们的中文进行分词。
这里我使用到的数据集是Paws-x中的中文的trnslated_train.tsv
来进行Word2Vec词向量的训练。

数据集的话在https://github.com/google-research-datasets/paws/tree/master/pawsx上面去下载

分词工具使用的是jieba
如果没有安装jieba的可以直接控制台输出

pip install jieba

如果嫌弃太慢的话,可以直接去PyPI上去下载离线包。

下面开始贴代码:
首先是分词的:

import jieba
import jieba.analyse
import jieba.posseg as pseg
import codecs,sys
import csv

f=codecs.open("translated_train.tsv",'r',encoding='utf-8')#文件放在根目录下
target=codecs.open("test1.txt","w",encoding="utf-8")
print("open files")
reader=csv.reader(f,delimiter='\t')#读取tsv文件
line_num=1
for i ,line in enumerate(reader):
    print("---processing", line_num, 'article------')
    sentence=line[1]+line[2]
    line_seg = " ".join(jieba.cut(sentence))#分词操作
    target.writelines(line_seg)#写入目标文档
    line_num += 1

f.close()
target.close()
exit()

下面就是重点了:
在保存词向量的时候,有三种方法。
第一种方法

from gensim.models import Word2Vec#注意这个
from gensim.models.word2vec import LineSentence
import multiprocessing
model=Word2Vec(LineSentence("test1.txt"),size=400,window=5,min_count=1,workers=multiprocessing.cpu_count())
model.save("three.model")

其得到的文件是:
在这里插入图片描述
这样的三个文件,总大小大概在140M

第二种方法

from gensim.models.word2vec import LineSentence
from gensim.models import word2vec#重点
import multiprocessing
model=word2vec.Word2Vec(LineSentence("test1.txt"),size=400,window=5,min_count=1,workers=multiprocessing.cpu_count())#重点
model.save("three.model")

相信你也发现了这两种方法的区别就是你导入了哪个包的区别,当然训练模型时使用的代码的问题。
区别就是一个使用gensim.model中的Word2Vec训练。
一个使用 gensim.models.word2vec中的Word2Vec训练。

上面的两种方法还有一个共通之处,那就是他们都是通过Word2Vec.load()来加载的

model1=Word2Vec.load("three.model")#加载模型
testwords=["公共"]
res=model1.most_similar(testwords[0])#计算与这个词相近的词语们
print(res)

输出如下:

[('住房', 0.8683056235313416), ('工业', 0.8203228116035461), ('Vorster', 0.8181160688400269), ('机构', 0.8158144950866699), ('办事处', 0.8137047290802002), ('中心', 0.8122843503952026), ('Shornur', 0.8105089
664459229), ('Palakkad', 0.810126781463623), ('大厅', 0.8085148334503174), ('二级', 0.8020211458206177)]

使用上面两种方法保存的模型,有的时候你只有一个模型文件,那时候可能是因为你的模型数据不够大。比如你将上面创建模型的代码改为64时,你就得到一个只有40M的model文件,一样能用。

并且记录一个自己遇到的坑

那就是记住一定不能直接将分好词的数据直接放入模型中进行加载,那样的话,你是加载不出数据的。你需要将这个分好词的数据保存成文本文件,然后使用LineSentence()来读取获得。

如果你出现了自己的模型文件只有2M或者3M,并且使用model中的什么相似性计算等方法的时候,提示没有该word时,可能就是这个原因。

然后是
第三种方法
不管导入哪个包
只要用下面这个句代码就可以了。

model.wv.save_word2vec_format("four.model", binary=False)

得到的文件只有一个
在这里插入图片描述
这个文件大小大概在237M左右。
里面的东西,就是单纯的词向量。非常单纯。
你可以打开看看。

不过这个模型的加载需要
使用下面两句代码

from gensim.models import KeyedVectors
model1=KeyedVectors.load_word2vec_format("two.model")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值