nlp之 word2vec
计算机理解的语言
图片理解
我们前面 在KNN 中 处理图片
1,将图片变成 灰度图
2,将图片变成 01 文本文件 32*32
上图表示的是 0 。 上图中 0 表示没有像素的地方 1表示 手写过的地方有像素
3,将这个图片变成 1*1024 的一个向量 :[ 0000…1001000]
4, 在KNN 中就计算 向量直接的距离 越近 越表示的是哪个数字。
所有的 人工智能 都这么处理 图片的 然后让机器识别 。 我觉得还是比较靠谱的行为 , 咋们眼睛看一个东西的时候 也是 一行一行的对比 图片 才知道这个图片上写的啥 只不过 人眼比较厉害 一目 十行 的速度 一下就能看一个整体。 所以图像识别目前已经非常成熟 。
文字理解
one -hot 方式
比如 The dog barked at the mailman 这句话 。经常处理的时候 将这句话 每个单词 分解 。
the dog barked at mailman
the 1 0 0 0 0
dog 0 1 0 0 0
barked 0 0 1 0 0
mailman 0 0 0 0 1
1,这样做不是不可行 中文里面的各种单词 几百万个 那么这样的导致 每出现一个新词 就会扩大一列 , 这个词向量矩阵会越来越大。 而且计算起来 非常的消耗算力。
2, 矩阵计算
我们来看一下上图中的矩阵运算,左边分别是1 x 5和5 x 3的矩阵,结果应该是1 x 3的矩阵,按照矩阵乘法的规则,结果的第一行第一列元素为0 x 17 + 0 x 23 + 0 x 4 + 1 x 10 + 0 x 11 = 10,同理可得其余两个元素为12,19。如果10000个维度的矩阵采用这样的计算方式是十分低效的
能不能用一种 不管出现多少个单词 都用一个固定维度的向量去表示 ,并且计算效率比较高呢? 所以分布式向量就出现了
分布式词向量
1, 每个单词还是用 one-hot 的方式 将每个单词编码
2, 找一种映射关系 实现固定编码
实现这个过程 叫 word embedding
分布式词向量求解过程
Word2Vec模型是Google公司在2013年开源的一种将词语转化为向量表示的模型。Word2Vec是由神经概率语言模型演进而来,它对神经概率语言模型做了重要改进,提高了计算效率。
Word2Vec模型有两种主要的实现方式:连续词袋 模型(Continuous Bag-of-Word Model, CBOW Model) 和 skip-gram_模型。
Skip-gram
假如我们有一个句子 : “The quick brown fox jumps over lazy dog”
设定我们的窗口大小为2
神经网络模型:
用 假如 the :1000 0000 求解 quik : 0100 0000
隐藏层: x : 1000 0000 --> f( x) = f(1000 0000 ) = y
输入层: z = g(y) = solftMax(y) = 0100 0000
比如 用300 维表示 词向量 。
输入层 : one-hot 编码 10000 *1 矩阵
隐藏层: 300 * 10000
隐藏层* 输入层 = 300*1
输出层: 1 * 10000
‘’ 隐藏层结果*输出层= (300 * 1) * (1 * 10000) ‘’
softMax(30010000) : 110000
f(x) : 函数 未知 需要 求解
f(x) 的参数矩阵 就是我们要求的 词向量。
在看这幅图 :
了有效地进行计算,这种稀疏状态下不会进行矩阵乘法计算,可以看到矩阵的计算的结果实际上是矩阵对应的向量中值为1的索引,上面的例子中,左边向量中取值为1的对应维度为3(下标从0开始),那么计算结果就是矩阵的第3行(下标从0开始)—— [10, 12, 19],这样模型中的隐层权重矩阵便成了一个”查找表“(lookup table),进行矩阵计算时,直接去查输入向量中取值为1的维度下对应的那些权重值。隐层的输出就是每个输入单词的“嵌入词向量”。
这个就是隐藏层的 参数矩阵:
CBOW
还是这个句子: The quick brown fox jumps over lazy dog
计算模型:
1, 输入层 比如 用 quick brown 求 the
先用 one-hot 表达:
quick: 1000 brown : 0100 the : 0010
x = (1000 + 0100) / 2 =(0.5 ,0.5 ,0,0) 作为输入
2, 隐藏层:
y = f(x) = W *X = W*(0.5 ,0.5 ,0,0)
W 就是我们要求的词向量矩阵 。
3, 输出层
z = g(y) = solftMax(y) = 0010
结果:
变成了 词向量 可能出现 中国 + 首都 = 北京 这样的词向量 。
感悟
对比 图像理解 和 文字理解的过程 。
图像理解就是对比 里面的像素 比较符合 人的行为规范 一行一行的对比
文字理解 仅仅是求的一种 映射关系 不符合 人理解句子 主谓 宾 主系表 这样的语法规则 个人感觉nlp 的很多东西 只是统计学上的一种简单映射 没有真正理解句子的意思 语言变化万千 博大精深 所以成熟度不如图形图像处理。
参考文献:
https://www.leiphone.com/news/201706/PamWKpfRFEI42McI.html
https://www.cnblogs.com/pinard/p/7160330.html
https://www.jianshu.com/p/f456dd12f5e6