最近在学习斯坦福大学的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 |
HS |
NEG |
HS |
NEG |
|
python |
|
|
HS |
|
|
HS |
|
HS |
|
||
C++ |
未知 |
未知 |
未知 |
未知 |
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