利用work2vec将中文转换成300维度的词向量

踩过很多坑,查过很多相关资料,最终终于将中文转换成词向量。

在此,分享给正在刨坑的程序猿。

将去掉停用词的中文词列表使用word2vec转成词向量bin文件

做法:

第一步:利用linux虚拟机将中文转换成词向量bin文件

使用命令在虚拟机中进行转词向量: 注意:必须cd到word2vec/w2v/trunk下面才能使用 ./word2vec nohup ./word2vec -train /usr/local/python3/word2vec/w2v/suopc/spchzsss.txt -output /usr/local/python3/word2vec/w2v/suopc/spchzsss.bin -cbow 0 -size 300 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -binary 1 &  (参数不懂的可自己去查哦)

threads 进程个数 binary 保存结果为2进制 cbow 0=skip-gream 1=cbow sample:采样阈值 运行完命令之后,得到词向量spchzsss.bin文件。

注意:中文词必须是linux格式,否则转换出来的每个词可能有问题,导致bin文件无法使用。

再将词向量bin文件转换成txt文件

# -*- coding: utf-8 -*-
import gensim
from gensim.models import word2vec

model = gensim.models.KeyedVectors.load_word2vec_format('spchzsss.bin',binary=True)
model.save_word2vec_format('spchzsss.txt', binary=False)
print(model.shape)

将txt文件转换成numpy格式的文件

import numpy as np
import tensorflow as tf

emb = []
vocab = []
with open('spchzking.txt','rb') as f:
    print(f)
    for line in f.readlines():
        row=line.strip().split(' '.encode())
        vocab.append(row[0])
        emb.append(row[1:])
    emb = np.array(emb,dtype="float32")  #,dtype="float32"
    print(emb)
    ss = np.save("spchzking.npy",emb)
    print('转换完毕')

再从bin转换成的txt文件中获取中文词列表。然后将列转换成行

#!/usr/bin/python3
#open file
f = open("spcbestnew.txt","w",encoding='utf8')  #转换之后的文件
f2 = open("spcbest.txt","r",encoding='utf8')  #要转换的文件

#bian li wenjian,bing xie ru xin wen jian
for line in f2.readlines():
    line=line.strip('\n')
    f.write(line+' ')

#close file
f.close()
f2.close()

将转换之后的txt文件转换成numpy格式的文件

import numpy as np
import tensorflow as tf

emb = []
vocab = []
with open('spchzkwordlists.txt','r',encoding='utf-8') as f: #如果转换成二进制格式,将r改成rb,split(' '.encode()),去掉encoding='utf-8'
    print(f)
    for line in f.readlines():
        row=line.strip().split(' ') #.encode()
        #print(row)
        #vocab.append(row[0:])
        #emb.append(row[1:])
    #emb = np.array(emb)  #,dtype="float32"
    #print(emb)
    ss = np.save("spchzkwordlists.npy",row)
    print('转换完毕')

测试:

import numpy as np
#wordVectors = np.load('spchzking.npy')
#wordVectors = np.load('wordsList.npy')
wordVectors = np.load('spchzkwordlists.npy')
print(len(wordVectors))
print("加载完成")

import numpy as np
import gensim
wordsList = np.load('spchzkwordlists.npy')
print('Loaded the word list!')  #加载了单词列表
wordsList = wordsList.tolist() #Originally loaded as numpy array
wordsList = [word for word in wordsList] #Encode words as UTF-8
wordVectors = np.load('spchzkvector.npy')
print(len(wordsList))
print(wordVectors.shape)

最终的运行结果如下:

注:此博文是8月份研究的,现在才记录,难免会有一些遗忘,欢迎感兴趣的朋友一起交流。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值