word2vec学习笔记[转]

来源:互联网 发布:淘宝店铺最多扣多少分 编辑:程序博客网 时间:2024/06/09 21:02

谷歌已经使用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)进行分析了:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. ./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 下面再输入计算距离的命令即可计算与每个词最接近的词了:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. ./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 

顺便分享一下分词后的数据:  http://yunpan.cn/QXh8MyWGXzLYY    (所有新闻分词后拼接为一行了, 以空格分割,可以直接作为本次的输入)


怎么样,是不是觉得还挺靠谱的?补充一点,由于word2vec计算的是余弦值,距离范围为0-1之间,值越大代表这两个词关联度越高,所以越排在上面的词与输入的词越紧密。

至于聚类,只需要另一个命令即可:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  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    

按类别排序:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. 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


注:本文章大部分为转载,后面的参考里有列出地址

1 0
原创粉丝点击