preface: 找出語料中跟某個詞類似的詞。
word2vec作爲google的一個開源工具,比較強大,效果也比較好,便試試。
一、工具
下載:http://word2vec.googlecode.com/svn/trunk/(翻牆)
也可以從CSDN下載:http://download.csdn.net/detail/hortond/8095703
官方教程:https://code.google.com/p/word2vec/(翻牆)
類似博客:
利用中文數據跑word2vec:http://www.tuicool.com/articles/RB7fqaB
利用word2vec對關鍵詞進行聚類:http://blog.csdn.net/zhaoxinfan/article/details/11069485
豆瓣word2vec的學習思路:http://www.douban.com/note/298095260/(有原理說明)
另外python gensim包自帶word2vec這個神器。
參考博客:
http://rare-technologies.com/word2vec-tutorial/
http://ju.outofmemory.cn/entry/80023
http://www.52nlp.cn/中英文維基百科語料上的word2vec實驗
二、語料
採用之前爬取的新浪娛樂的文本。
三、分詞
分詞,採用python jieba分詞,數據存在data文件夾下,新浪娛樂每篇文章一個txt文件。共計85317個文件夾。
#!/usr/bin/env python # coding=utf-8 import jieba import os import codecs num = 0 for i in os.walk("data"): for j in i[2]: # print j try: fw = codecs.open("pickle_jiebatest.txt","a") f = codecs.open("data/"+j,encoding="utf-8",errors="strict") for k in f.readlines(): line = k.strip() word_list = jieba.cut(line) new_s = " ".join(word_list) fw.write(new_s+"\n") fw.close() except: # print j,num pass num+=1 if num%1000==0: print "===========================================處理個數:",num
Figure 1-2: 分好詞的語料
四、word2vec訓練
一句命令即可,進行訓練,具體的參數待學習,改輸入文件輸出文件即可,輸出一個模型文件
./word2vec -train shifeng/pickle_jieba.txt -output shifeng/vectors_word.bin -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -binary 1
找出相似的詞:
./distance shifeng/vectors_word.bin
將結果輸出到文件中,利用管道符更加方便快捷
五、其他
由於word2vec計算的是餘弦值,距離範圍爲0-1之間,值越大代表這兩個詞關聯度越高,所以越排在上面的詞與輸入的詞越緊密。至於聚類,只需要另一個命令即可:
<span style="font-size:18px;">./word2vec -train resultbig.txt -output classes.txt -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -classes 500 </span>
按類別排序
<span style="font-size:18px;">sort classes.txt -k 2 -n > classes.sorted.txt </span>