NLP with deep learning(一) word2vec——词向量和语言模型

时间:2022-05-08 01:43:44

最近在学习斯坦福大学的natural language processing with deep learning课程,将其称之为deep nlp吧,课程链接:点击打开链接,网上公开视频课程:点击打开链接

深度学习作为现在计算机视觉,自然语言处理等人工智能甚至计算机领域的热门工具和技术,在很多方面取得了显著成果,最近几年在自然语言处理上收到了广泛应用。

1.词向量和语言模型

词向量就是用一个向量来表示一个词,可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度。 词向量主要包括两种表示方法:

1.1 one hot representation

所谓“one hot”就是向量中仅包含一个1,其余位置为0,例如下面词向量motel:[0,0,0,0,0,0,0,1,0,0,0];hotel:[0,0,0,0,1,0,0,0,0,0,0],这种表示的向量长度与词汇数量有关,例如一些数据的纬度情况如下:

20K (speech) – 50K (PTB) – 500K (big vocab) – 13M (Google 1T) 

这种表示方法中,所有词向量的内积为0,即它们都是正交的。

1.2 Distributed Representation

这种向量相对于one hot 方法向量纬度更低,为每一类单词构建一个稠密向量,选择能较好预测它的上下文内容的向量作为其表示,一般是这个样子:[0.286,0.792,-0.177,-0.107......],其原理和相关知识可以参见:distributed representation

1.3 语言模型

自然语言处理中常用的语言模型为n-gram模型,这是一个基于概率的统计语言模型,更多内容参考:deep learning in nlp,关于词向量和语言模型的博客已经有很多个,而且大多数也很相似,所以这里不再重复相关内容,主要介绍一下word2vec的原理和代码的训练和使用。

2.word2vec

word2vec是2013年Google中开源的一款工具。2013年神经网络的各种算法都已经相当的成熟了,word2vec核心是神经网络的方法,采用 CBOW(Continuous Bag-Of-Words,即连续的词袋模型)和 Skip-Gram 两种模型,将词语映像到同一坐标系,得出数值向量的高效工具。

版本

地址

CBOW

Skip-Gram

C

http://word2vec.googlecode.com/svn/trunk/

HS

NEG

HS

NEG

python

http://radimrehurek.com/gensim/

 

 

HS

 

Java

https://github.com/ansjsun/Word2VEC_java

HS

 

HS

 

C++

https://github.com/jdeng/word2vec

未知

未知

未知

未知

(注:此图转自:word2vec使用指导

2.1:c语言

c语言版本在Linux环境下,直接用make编译, 使用./demo-word.sh运行示例代码脚本,然后可以对模型进行训练和使用。

2.2:python

python的命令为:

python word2vec.py -train tx -model vb -cbow 0 -negative 0 -dim 5

2.3:java

将java工程下载后,倒入maven项目,然后新建一个测试代码,word2vec.java将Word2VEC_java内容拷贝进去即可运行

2.4:c++

c++版本通过c++ 11规范编写,需要g++版本支持多线程,