您的位置:首页 > 其它

word2vec找文本相似词小试牛刀

2015-10-20 11:48 344 查看
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这个神器。不过gensim中的word2vec不是用神经网络,而是词袋模型。



Figure 1-1: gensim word2vec

参考博客:
http://rare-technologies.com/word2vec-tutorial/ http://ju.outofmemory.cn/entry/80023

二、语料

采用之前爬取的新浪娱乐的文本。

三、分词

分词,采用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




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

找出相似的词:

./distance shifeng/vectors_word.bin




Figure 1-4: 进行测试

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



Figure 1-5: 多个文件输出

五、其他

由于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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: