word2vec介绍
word2vec是一个将单词转换成向量形式的工具。可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度。
除了google自己的word2vec工具,感兴趣的牛人们也相继编写了各自不同的版本,下面列举一下目前出现的版本以及相对应的地址,供大家选择。如下表:
版本 地址:
C | http://word2vec.googlecode.com/svn/trunk/ |
python | http://radimrehurek.com/gensim/ |
Java | https://github.com/ansjsun/Word2VEC_java |
C++ | https://github.com/jdeng/word2vec |
word2vec的安装
本文介绍Ubuntu linux环境下安装python版本的word2vec。
1.先安装cython:
sudo pip install Cython
- 安装 word2vec: sudo pip install word2vec
sudo pip install word2vec
word2vec的使用
准备python环境,安装pycharm
PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。
1官网选择Free,open-source的pycharm的linux版本的安装包下载。
2.解压
tar zxvf pycharm-community-2017.2.4.tar.gz
3.打开bin文件,打开终端,输入./pycharm.sh,回车之后就可以运行该软件了,之后软件会自动在启动器添加快捷方式。
4.打开pycharm,创建project->word2vec
5.新建test.py文件
接着就可以在test.py中编写测试word2vec的相关代码了。
准备语料库
从http://mattmahoney.net/dc/text8.zip 下载text8.zip文件,并解压到/usr/bin/python2.7/word2vec下面(text8是一个将近100M的文本文件)
语料库text8内容如下:
使用word2vec训练词向量
1.先导入word2vec包
import word2vec
word2vec.word2vec('text8','text8.txt',size=100,binary=0,verbose=True)
训练得到的词向量为:
word2vec(train, output, size=100, window=5, sample='1e-3', hs=0,
negative=5, threads=12, iter_=5, min_count=5, alpha=0.025,
debug=2, binary=1, cbow=1, save_vocab=None, read_vocab=None,
verbose=False)
word2vec的常用参数介绍:
train:要训练的文件;
output:输出的词向量文件;
size:词向量维度大小;
window=5:训练的窗口,训练的窗口为5就是考虑一个词的前5个词和后5个词(实际代码中还有一个随机选窗口的过程,窗口大小<=5) ;
sample:采样的阈值,如果一个词语在训练样本中出现的频率越大,那么就会被采样;
hs:如果为1则会采用hierarchica·softmax技巧。如果设置为0,则negative sampling会被使用;
negative:如果>0,则会采用negativesamp·ing,用于设置多少个noise words;
min_count:可以对字典做截断. 词频少于min_count次数的单词会被丢弃掉, 默认值为5;
binary:表示输出的结果文件是否采用二进制存储,0表示不使用(即普通的文本存储,可以打开查看),1表示使用,即vectors.bin的存储类型;
cbow:是否使用cbow模型,0表示使用skip-gram模型,1表示使用cbow模型,默认情况下是skip-gram模型,cbow模型快一些,skip-gram模型效果好一些 ;
save_vocab:词汇表保存到文件;
read_vocab:词汇表从文件中读取,不从训练数据中读取。
2.下面介绍一些有关word2vec的使用
word2vec.word2vec('text8','text8.bin',size=100,verbose=True)
通过训练预料生成bin二进制模型,模型生成后下次执行可以不用再调用该语句,直接用下面的方法加载即可。
model = word2vec.load("text8.bin")
查看词向量的大小
model.vectors.shape
查看词向量内容
model.vectors
查看'dog'的词向量内容
model['dog'].shape
model['dog'][:10]
查找与词'socks'余弦相似度大的词
indexes, metrics = model.cosine('socks')
model.generate_response(indexes, metrics)
其他的使用可参考:
http://nbviewer.jupyter.org/github/danielfrg/word2vec/blob/master/examples/word2vec.ipynb