雖然早就對NLP有一丟丟接觸,但是最近真正對中文文本進行處理才深深感覺到自然語言處理的難度,主要是機器與人還是有很大差異的,畢竟人和人之間都是有差異的,要不然不會講最難研究的人嘞
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~不華麗的分割線~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我了解的對詞義理解畢竟優秀的當屬word2vec了,在訓練結束后能得到跟我們人類理解的相似詞義很類似的結果,就像‘’男生‘’‘’女生‘’這些詞的含義類似一樣,網上已經有很多如何訓練word2vec向量的方法及代碼了,為了看起來完整,我把我自己的也貼上來吧(我的原數據存儲在數據庫中):
1.訓練過程:
#訓練詞語為向量表示
def w2v_train(self):
#######數據獲取####################################################
ques = self.cu.execute('select question from activity')#從數據庫提取文本
da_all = []
for d in ques:
da_all.append(d[0])
sentences = self.get_text(da_all)#分詞結果列表
#######訓練的主要步驟######################################################
model = Word2Vec()
model.build_vocab(sentences)
model.train(sentences,total_examples = model.corpus_count,epochs = model.iter)
model.save("./tmp/user_w2corpus")#保存模型,之后使用該模型:model=gensim.models.Word2Vec.load('./tmp/user_w2corpus')
model.wv.save_word2vec_format("./tmp/user_w2corpus_word_old.txt")#將訓練好的詞向量保存為TXT文檔,之后使用該模型:
#model = gensim.models.KeyedVectors.load_word2vec_format('./tmp/user_w2corpus_word_old.txt')
#注意兩種讀取詞向量模型的方法是不同的。TXT文檔的詞向量可以不需要通過model['string']得到詞向量,還可以通過循環一次將每個單詞(或字符)的向量讀出來
def get_text(self,text):#傳入的text是一個句子存儲在列表中的形式
import jieba
# 調用分詞方法時執行這三行
f = open("./stopword.txt", 'r+', encoding="UTF-8")
stop_list = f.read()
txt = []
# 對空格,換行符、停用詞進行處理
for i in text:
result = []
# 對文檔進行分詞處理,采用默認模式
seg_list = jieba.cut(i)
for seg in seg_list:
seg = ''.join(seg.split())
if (seg != '' and seg != "\n" and seg != "\n\n"):
if seg not in stop_list:
result.append(seg)
txt.append(result)
return txt
2.調用訓練好的結果分析問題
import gensim
word_vectors=gensim.models.KeyedVectors.load_word2vec_format('./tmp/user_w2corpus',binary=False)
sim=word_vectors.most_similar(u'蛋白質',topn=10)
print ('\n蛋白質-top10:')
for item in sim:
print (item[0],item[1])
注意!!!!!!寫本文的初衷是感謝博客上的一位好人給出了自己訓練好的word2vec向量,我們可以不需要親自訓練,拿來直接用,因為自己訓練的很有可能會由於數據量不足而導致效果不太好
資源鏈接:http://pan.baidu.com/s/1dFeNNK9
另外,該博客的鏈接也在此為大家貼出來, http://www.cnblogs.com/robert-dlut/p/6586621.html
最后的最后,我想聲明我是最近才想着把自己遇到的問題都記錄下來,所以如果侵權麻煩聯系我刪除,如果覺得有點用的話麻煩點個贊之類的,嘿嘿,在此謝過~~
