快捷搜索:  汽车  科技

最新的nlp生成算法,NLP系列之词向量-共现矩阵

最新的nlp生成算法,NLP系列之词向量-共现矩阵【中国】:【1,0,0,0,0,0,0】 【爱】: 【0,1,1,0,0,1,0】来来来,我们举个栗子: 【我,爱,中国,也,喜欢,地球】,经过训练后,词向量表示为: 【我】: 【1,0,1,0,1,1,0】

最新的nlp生成算法,NLP系列之词向量-共现矩阵(1)

在上一期中,我们了解到词向量的第一种表示方式——独热表示( one-hot ),其表示简单清晰,如同生物界中的单细胞生物一样单纯,这么单纯的表示方式也有它不足的地方的:

  • 每个词典之间无任何关联,无法表示出在语义层面上词语之间的联系。
  • 词汇表一般比较大,上百万千万,甚至上亿,这样每个词都有用至少百万维的向量来表示,向量太稀疏,内存空间占用太大。

本期将用新的表示方法来解决上述问题——密集向量 distributed representation

密集向量 distributed representation:

即分布式表示,可以克服独热表示( one-hot )的上述缺点,基本思路是通过训练将每个词映射成一个固定长度的短向量,所有这些向量就构成一个词向量空间,每一个向量可视为该空间上的一个点。此时向量长度可以自由选择,与词典规模无关。

来来来,我们举个栗子:

【我,爱,中国,也,喜欢,地球】,经过训练后,词向量表示为:

【我】: 【1,0,1,0,1,1,0】

【爱】: 【0,1,1,0,0,1,0】

【中国】:【1,0,0,0,0,0,0】

【也】: 【0,0,1,0,0,0,0】

【喜欢】: 【1,1,1,0,0,1,0】

【地球】: 【0,0,0,0,1,1,0】

通过上面向量值的比较,发现【爱】和【喜欢】的向量值很接近,说明他们直接的关系更加紧密,其他词之间的向量值相差却很大。

这种表示方式能更精准的体现词与词之间的语义关系,比独热表示( one-hot )的稀疏向量更有优势。

如何能训练出能体现词与词之间的语义关系的词向量呢?

最新的nlp生成算法,NLP系列之词向量-共现矩阵(2)

咱们可以考虑词与词之间的共现问题来统计——基于共现矩阵模型

通过统计一个事先指定大小的窗口内单词的共现次数,来解决维度变化问题。这种方法以单词周边的共现词的次数做为当前的词向量。

来来来,咱们再举个栗子:

  • 我\喜欢\爬山
  • 我\爱\NLP
  • 我\喜欢\运动
  • 我\爱\游戏

考虑的窗口大小为1 则共现矩阵如下:

喜欢

爬山

NLP

运动

游戏

0

2

2

0

0

0

0

喜欢

2

0

0

1

0

1

0

2

0

0

0

1

0

1

爬山

0

1

0

0

0

0

0

NLP

0

0

1

0

0

0

0

运动

0

1

0

0

0

0

0

游戏

0

0

1

0

0

0

0

共现矩阵的行(或列)可表示为对应的词向量。如"我"的词向量为[0 2 2 0 0 0 0]。同时可以知道"爱","喜欢"的词向量相似度较高,他们具有相近的意思。

上面的矩阵只是一个7*7的矩阵,如果预料很多上百万怎么办?

有人会说可以用奇异值分解SVD、PCA将矩阵维度降低,but,but,but,即使降低维度后,依然存在一些问题:

  • 矩阵X的维度经常改变
  • 由于大部分词并不共现而导致的稀疏性
  • 矩阵维度过高带来的高计算复杂度

这些问题怎么办呢?不急,我们将在下一期中一一介绍。

猜您喜欢: