当前位置:   article > 正文

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

中文词向量 bin

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

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

将去掉停用词的中文词列表使用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月份研究的,现在才记录,难免会有一些遗忘,欢迎感兴趣的朋友一起交流。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/607227
推荐阅读
相关标签
  

闽ICP备14008679号