1. 单词含义的表示
我们如何表示一个单词的意思
下面是意思的定义:
- 用词语,语句表示的想法或观点
- 人们使用词汇,符号来表达的想法
- 在一篇文章和艺术品表达的观点
最常见的意思语言学表现形式: - 符号⟺被标记的观点或者事物= 含义
我们如何在表示可用的单词意思
常见的答案是:使用一个分类系统,例如想WordNet一样,分类系统包含了上义词关系和同义词集合。
![1531909-79ef2fe75c5b3397.png](https://i-blog.csdnimg.cn/blog_migrate/a5df28d2ea408116e450cd8128155029.webp?x-image-process=image/format,png)
我们这种离散表示(discrete representation)方法的缺点
- 单词数量非常多但是忽视了单词之间的细微差别
例如同义词:
adept, expert, good, practiced, proficient, skillful?
- 不能及时更新新单词:
wicked, badass, nifty, crack, ace, wizard, genius, ninja
- 具有主观性
- 需要人工创建和调整
- 很难准确地计算出单词相似性
绝大数基于规则和统计学建立的NLP工作将单词当作最小单位(atomic symbols):hotel, conference, walk
但是在向量空间中,单词可以表示为具有1个1和很多0的one-hot向量:
![1531909-f7969f9d5e723d3a.png](https://i-blog.csdnimg.cn/blog_migrate/beba2a13ff8ec529d094aa275a71f8e1.webp?x-image-process=image/format,png)
这是一种局部表示(localist representation)
从符号(symbolic)到分布式表示(distributed representations)
符号表示存在自身的一些问题,比如对于web搜索:
- 如果我们搜索[Dell notebook battery size],我们可能得到含有“Dell laptop battery capacity”的文档
- 如果我们搜索[Seattle motel],可能匹配到含有“Seattle hotel”的文档。
但是
![1531909-2295d7c0e2eecc2e.png](https://i-blog.csdnimg.cn/blog_migrate/aee22e97b459ce763c99c248e678b593.webp?x-image-process=image/format,png)
查询和文档向量是正交的,所以one-hot向量不能体现出单词的相似性。
因此,我们需要找到一种可以直接用向量编码含义的方法。
基于分布相似性的表示方法
从上下文中推断一个单词的含义
![1531909-031f0c01aa2c3c64.png](https://i-blog.csdnimg.cn/blog_migrate/be73d8f6037baa267b472fdf6ded1998.webp?x-image-process=image/format,png)
下面是现代统计自然语言处理(NLP)最成功的思想之一:
![1531909-76abb2b682584d4b.png](https://i-blog.csdnimg.cn/blog_migrate/387459364fb813776cc9d23fbae87ca6.webp?x-image-process=image/format,png)
通过向量定义单词的含义
通过为每个单词类型构建一个密集的向量,我们可以预测其上下文中出现的其他单词。
这些其他单词也是用向量表示,并且是可递归调整的。
学习神经网络词嵌入的基本思想
定义一个可以预测中心词上下文的模型:
![1531909-65d9f27e816dbb62.png](https://i-blog.csdnimg.cn/blog_migrate/16b2f62269722b8de2a1c06070fa751c.webp?x-image-process=image/format,png)
所示函数:
![1531909-0abfd1a27a0e7cd4.png](https://i-blog.csdnimg.cn/blog_migrate/64106e589027501dd352aef87b9b8746.webp?x-image-process=image/format,png)
其中,在一个很大语料库的不同位置获取上下文(不同的t),不断调整词向量以将损失最小化。
直接学习低维词向量
这种方法不是新颖的,下面是相关的研究论文和深度学习方法:
- Learning representations by back-propagating errors
(Rumelhart et al., 1986) - A neural probabilistic language model (Bengio et al., 2003)
- NLP (almost) from Scratch (Collobert & Weston, 2008)
- A recent, even simpler and faster model:
word2vec (Mikolov et al. 2013) àintro now
2. Word2Vec的主要思路
一句话总结:
“在每个单词和单词上下文之间进行预测”
- 两个算法:
- Skip-Gram(SG)
通过给出的中心词来预测上下文(假设单词之间相互独立) - 连续词袋模型(CBOW)
从上下文中预测中心词(目标词)
- Skip-Gram(SG)
- 两个优化的训练方法:
- Hierarchical softmax
- Negative sampling(负采样)
Skip-Gram
![1531909-e3cfb163909623f7.png](https://i-blog.csdnimg.cn/blog_migrate/c195ecfcba8c21ecd1726e5911635fa6.webp?x-image-process=image/format,png)
3. 更多Word2Vec细节
对于每个单词(从1到T),我们预测窗口半径大小为m的上下文词汇。
目标函数:最大化预测中心词的上下文概率。
![1531909-9e72cc1ee1c89dc9.png](https://i-blog.csdnimg.cn/blog_migrate/49cb6fff22fbab987924f9d735f3c9fd.webp?x-image-process=image/format,png)
其中θ表示我们需要优化的所有参数。
目标函数-objective function
- 术语:Loss function = cost function = objective function
- 通用的概率分布损失:交叉熵损失(Cross-entropy loss)
Softmax函数:将RV映射到概率分布的标准函数
![1531909-fade10f23be6ea95.png](https://i-blog.csdnimg.cn/blog_migrate/421430e3dfd5229115b54805bd8b986f.webp?x-image-process=image/format,png)
下面是Skip-Gram的示意图:
![1531909-4f6970ddf15f7814.png](https://i-blog.csdnimg.cn/blog_migrate/dd1b88bf13bae3fd083f399a2a503037.webp?x-image-process=image/format,png)
4 .梯度的推导
目标函数:
![1531909-893bbadc842853e8.png](https://i-blog.csdnimg.cn/blog_migrate/6861a716bb5de84e282840ae0a6c6cf3.webp?x-image-process=image/format,png)
以下面计算概率的公式:
![1531909-8aff8e15bf49065d.png](https://i-blog.csdnimg.cn/blog_migrate/5a54e1f74c9ba555e1ecc866092e67ca.webp?x-image-process=image/format,png)
具体的推导过程:
![1531909-8413f103560e5b20.png](https://i-blog.csdnimg.cn/blog_migrate/d985d10278e713c8df0873aaf58ecf8f.webp?x-image-process=image/format,png)
![1531909-784485f28c7060e5.png](https://i-blog.csdnimg.cn/blog_migrate/a4c9422327352e97918e369fd1c63af9.webp?x-image-process=image/format,png)
![1531909-bae76c8094d2aebb.png](https://i-blog.csdnimg.cn/blog_migrate/3138dd2c1c6b810f02b7745f8a8ffdf6.webp?x-image-process=image/format,png)
![1531909-77710b77aba7144d.png](https://i-blog.csdnimg.cn/blog_migrate/59a13778369bc1f19bbcc4c89e562c56.webp?x-image-process=image/format,png)
5. 损失/目标函数
![1531909-d7f0c8d5b097fd18.png](https://i-blog.csdnimg.cn/blog_migrate/52e40cd4dcf932d9555f94acbb2eaf86.webp?x-image-process=image/format,png)
梯度下降
-首先, 为了对整个训练数据最小化J(θ),需要计算出所有窗口的梯度
- 更新每个参数θ
- 步长为α
- 对于所有参数θ的矩阵表示:
![1531909-f80dbc518386dca4.png](https://i-blog.csdnimg.cn/blog_migrate/ff0ca885f6b3de69f689dbd6db334119.webp?x-image-process=image/format,png)
批梯度下降(Vanilla Gradient Descent Code)
![1531909-57711744823abc72.png](https://i-blog.csdnimg.cn/blog_migrate/cef3be6932c6703976d21a9b82fdf8d6.webp?x-image-process=image/format,png)
对于一个简单二元凸函数,下面轮廓线显示了目标函数变化:
![1531909-3a83e8a07098831f.png](https://i-blog.csdnimg.cn/blog_migrate/8ee703fce575d492cfa3763470eed0af.webp?x-image-process=image/format,png)
随机梯度下降法
上面方法有以下弊端:
- 语料库非常大,具有40B的字符和窗口
- 每次参数更新需要等待很长时间
-
对于神经网络的效果很差
所以我们采用下面的方法: