谷歌已经使用Deep Learning技术开发了许多新方法来解析语言,目前,谷歌开源了一款基于Deep Learning的学习工具——word2vec,这是首款面向大众的Deep Learning学习工具。
word2vec(word to vector)顾名思义,这是一个将单词转换成向量形式的工具。通过转换,可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度。
word2vec为计算向量词提供了一种有效的连续词袋(bag-of-words)和skip-gram架构实现,word2vec遵循Apache License 2.0开源协议。
word2vec的官方地址:https://code.google.com/p/word2vec/
下面介绍下word2vec的具体使用
1首先要做的肯定是从官网上下载word2vec的源码:http://word2vec.googlecode.com/svn/trunk/
2 然后把其中makefile文件的.txt后缀去掉,在终端下执行make操作
3 接下来就是输入语料(如data.txt)进行分析了:
./word2vec -train data.txt -output vectors.bin -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -binary 1
4 这里我们指定输出为vectors.bin文件,显然输出到文件便于以后重复利用,省得每次都要计算一遍
5 下面再输入计算距离的命令即可计算与每个词最接近的词了:
./distance vectors.bin
我这里以word2vec官网中给的questions-words.txt为例,给出几个例子:
当然,如果在处理中文语料时,要进行分词操作
这里就是用了中科院的分词ICTCLAS,C++版本的,在linux下运行比较简单,分词的程序放到CSDN上,需要的可以直接下载,包括库,分词词典,还有二进制程序,分词工具,点此进入下载。ICTCLAS分词器相关资料可以查看http://hi.baidu.com/drkevinzhang/
一些中文训练语料的获取:
1 在搜狗试验室中获取一些新闻数据,尽管比较老但是将就着用,其实感觉微博的数据会好些,一是数据量大,二是信息含量比较高(新鲜东西比较多),新闻的语料可以在http://www.sogou.com/labs/dl/ca.html 上获取,只要简单的注册一下就可以,在windows下下载还是比较麻烦的,需要用ftp工具,实际上可以用windows自带的ftp.exe就可以下载。
2
[ 腾讯新闻 ]
原始数据 http://download.csdn.net/download/shmei_cool/4788802
怎么样,是不是觉得还挺靠谱的?补充一点,由于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
总结一下:
整体来看,效果没有TFIDF计算的效果好,但是还是有很大希望提高的, 在短时间内能够算出这样的语料已经不错 的,而且还是任意关键词的语料。
改进:
1. 加大新闻量,采用GPU加速计算。
2. 对于需要计算的关键词,收集只包含这批关键词的新闻页面。 避免多而泛的情况出现。 而且这样也可以做到多机分布式的MapReduce计算。 那么在单机情况下只需要解决好比如100个词的语料效果。 (单机维护局部关键词)
3. 对于文本来说,该模型还是适合海量数据计算的。
4. 与classification模块接合, 对比之前用TFIDF计算的一些类别词的准确率和召回率。
参考:
http://blog.csdn.net/zhaoxinfan/article/details/11069485
https://code.google.com/p/word2vec/
http://blog.csdn.net/wdxin1322/article/details/16887525
http://www.cnblogs.com/james1207/archive/2013/08/18/3266481.html
http://blog.csdn.net/kevinew/article/details/11585945
http://www.douban.com/note/298095260/(豆瓣上的学习笔记)
后记:如果想要了解word2vec的实现原理,应该读一读官网后面的三篇参考文献。显然,最主要的应该是这篇: Distributed Representations of Words and Phrases and their Compositionality
这篇文章的基础是 Natural Language Processing (almost) from Scratch 其中第四部分提到了把deep learning用在NLP上。
最后附上word2vec的python java c++实现版本地址:
Python:http://radimrehurek.com/gensim/models/word2vec.html
Java:https://github.com/ansjsun/Word2VEC_java
C++:https://github.com/jdeng/word2vec
注:本文章大部分为转载,后面的参考里有列出地址