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>