Bengxy

word2vec实验

字数统计: 680阅读时长: 2 min
2016/09/16 Share

word2vec简介

word2vec是2013年Google的Tomas Mikolov等人提出的,用 神经网络 构建 词向量 的算法。

其本质是一种network node embedding的方法,即通过一定的策略,将网络中的节点表达成向量的形式,同时能够保证网络中相似或相关的节点在新的向量空间内,保持相似性(距离接近)。

单词看做一个节点,句子就是网络中的一条path。

257cbf5d6ae598a32877a6f98a4c4dcf.md.png

发展至今,node embedding在此基础上也有了很多新的方法涌现,如《DeepWalk》(论文源码《Line》(论文源码等。
但是Word2Vec一直是作为最经典的方法,在很多实际生产中然后有广泛应用。

Word2Vec的理论请参考论文《Efficient Estimation of Word Representations in Vector Space》,有兴趣的可以参考源码。
源码的实现有好多版本,其中以Google Tensor Flow的实现,以及gensim版本用的最广泛。

中文上的实验

实验具体信息参考

https://github.com/bengxy/word2vec_zh

实验说明

处理中文比英文多一些步骤。

字符编码转换

coding.py

负责编码转换,我直接把数据做成了utf-8版本,并且在git上附有utf-8版本的下载链接。

1
2
in_file = open(raw_dir+afile, encoding='gb18030')
out_file = open(pure_dir+afile, 'w', encoding='utf-8')

预处理

data_pre.py

试验中,我只对中文的预处理做了

  • 分词
  • 去掉stopwords

分词选用的jieba分词

首先,将一段话读入,然后直接用 jieba.lcut() 分词,获得cut_res

1
2
3
4
line = in_file.readline()
line = line.strip()
sentence = line
cut_res = jieba.lcut(sentence, cut_all=True)

接着调用 remove_stopwords() 函数

1
remove_stopwords(cut_res)

stopwords库是在程序一开始运行时就加载的,读取stopword.lib文件,每行是一个stopword,一次放入stopword集合中

1
2
3
4
5
6
7
8
9
10
def load_stopwords():
print('Load stopword_library...')
stopfile = open('stopword.lib')
stopwords_library = set([])
while True:
word = stopfile.readline()
if not word:
break
stopwords_library.add(word)
return stopwords_library

然后 remove_stopwords() 判断分词后的词组是否在stopwords_library中。

1
2
3
for i in cut_origin:
if i in stopwords_library:
cut_origin.remove(i)

预处理结束后的数据存放在 cut_data/cut.txt

模型

model.py

实验使用的是gensim的Word2vec模型。

数据集的vocabulary大小约为30000,所以在试验中,去除了出现次数小于30的单词,并设置embedding的大小为200维。

1
2
model = Word2Vec(min_count=30, size=200)
model.build_vocab(sentences)

然后训练,一次大概要1分钟左右,作为演示代码,迭代次数设置为1。在训练了1次的情况下,发现word embedding的效果还行。

1
2
3
for i in range(1):
print('Train model, Step ', i)
model.train(sentences)

查看结果

api.py

api.py 提供了查看单词相似词的功能。
执行:

1
python3 api.py

然后输入中文单词即可

实验结果

如图所示

91764b3f5f067976b8020600c5ba9dca.md.png

实验具体信息参考
https://github.com/bengxy/word2vec_zh

CATALOG
  1. 1. word2vec简介
  2. 2. 中文上的实验
    1. 2.0.1. 实验具体信息参考
  3. 2.1. 实验说明
    1. 2.1.1. 字符编码转换
    2. 2.1.2. 预处理
  4. 2.2. 模型
  5. 2.3. 查看结果
  6. 2.4. 实验结果