word2vec找文本相似词小试牛刀

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这个神器。

word2vec找文本相似词小试牛刀_第1张图片
Figure 1-1: 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

word2vec找文本相似词小试牛刀_第2张图片

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  

Figure 1-3: 对文件进行训练

找出相似的词:

./distance shifeng/vectors_word.bin

word2vec找文本相似词小试牛刀_第3张图片
Figure 1-4: 进行测试


将结果输出到文件中,利用管道符更加方便快捷

word2vec找文本相似词小试牛刀_第4张图片
Figure 1-5: 多个文件输出


五、其他

由于word2vec计算的是余弦值,距离范围为0-1之间,值越大代表这两个词关联度越高,所以越排在上面的词与输入的词越紧密。至于聚类,只需要另一个命令即可:
./word2vec -train resultbig.txt -output classes.txt -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -classes 500  
按类别排序
sort classes.txt -k 2 -n > classes.sorted.txt 



你可能感兴趣的:(自然语言处理)