gensim word2vec训练词向量到tensorflow加载使用词向量

from gensim import word2vec as w2v
from gensim.models import Word2Vec
import logging
logging.basicConfig(format = '%(asctime)s : %(levelname)s : %(message)s', level = logging.INFO)

训练词向量:

sentences= w2v.LineSentence('./big_corpus_preprocessed.txt')
model= w2v.Word2Vec(sentences,size=100,window=5,sg=1,min_count=5)

此处big_corpus_preprocessed.txt的格式是一行一句话,每句话的词语用空格隔开。
然后保存词向量为txt文件格式:

word_vector = zip(model.wv.vocab, model.wv.vectors)
output = open('./w2v.txt', 'w', encoding='utf-8')
for item in word_vector:
    vector = [str(v) for v in item[1]]
    vector = ' '.join(vector)
    output.write(item[0]+'\t'+vector.strip()+'\n')
output.close()

w2v.txt里每一行为一个词和它的词向量。词和词向量用制表符隔开。
tensorflow加载使用词向量,网络这样搭:

W=tf.Variable(tf.constant(0.0, shape=[self.EMBEDDING_SIZE,self.EMBEDDING_DIM]), trainable=False, name='W')
self.embedding_placeholder = tf.placeholder(tf.float32, shape=[self.EMBEDDING_SIZE,self.EMBEDDING_DIM])
embedding_init = W.assign(self.embedding_placeholder)
input_embedding=tf.nn.embedding_lookup(embedding_init,self.tf_x)

在喂数据的时候把词向量也喂进去即可:

feed_dict={model.tf_x: batch_x, model.tf_y: batch_y, model.keep_prob: 0.5, model.embedding_placeholder: embedding})

embedding即是我们训练好的w2v词向量。它来自于我们之前保存的w2v.txt文件,我也给出大概的代码:

def get_embedding():
    input=open('w2v.txt','r',encoding='utf-8')
    embedding=[]
    for line in input.readlines():
         vector=line.strip().split()[1:]
         vector=[float(v) for v in vector]
         embedding.append(vector)
    return embedding

这是大致的词向量应用过程,具体应用要灵活变通。比如这里的词向量是static的,不进行fine-tunning,又比如词向量怎么对应词汇表,w2v.txt里的词怎么运用。这些要看你具体的数据和任务。
最后附上也可以参考的文章:
https://blog.csdn.net/fkyyly/article/details/80273935
对你有帮助的话点一下喜欢或者关注我呗,谢谢。

你可能感兴趣的:(gensim word2vec训练词向量到tensorflow加载使用词向量)