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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值