您的位置:首页 > 其它

word2vec学习笔记

2013-12-02 12:52 211 查看
谷歌已经使用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

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

怎么样,是不是觉得还挺靠谱的?补充一点,由于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/

/article/8307299.html

http://www.cnblogs.com/james1207/archive/2013/08/18/3266481.html

/article/11453194.html

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

注:本文章大部分为转载,后面的参考里有列出地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: