目录
How to exploit context? 如何利用上下文
感谢B站up主搬运的课程:
【李宏毅2020机器学习深度学习(完整版)国语】 https://www.bilibili.com/video/BV1JE411g7XF/?share_source=copy_web&vd_source=262e561fe1b31fc2fea4d09d310b466d
Word Embedding
- 一开始我们用语义向量来表示单词,每一维表示一个单词,但这样无法知道各个词之间的关系,此即 1-of-N Encoding ,各个单词之间是独立的~
- 我们可以用 Word Class 对各个单词进行分类,但类与类之间仍有一些联系(比如动物与植物都是生物,动作不是;类一与类二都与动物有关,植物与动物没有关系)无法体现~
- 那么我们就应该将他们 project 映射到一个高维空间中,就如图中右上角的二维空间(横轴将行为与生物区分开;纵轴则将与动物有关与无关的词分开),此即 Word Embedding
机器学习 Word Embedding 的过程就是一个 Unsupervised Learning 的过程,因为我们手上仅有一大堆的文本作为输入,我们并没有提供真正的 Word Embedding 应该长什么样。
机器需要通过阅读大量的文本,通过 context 上下文来学出 Word Embedding ~
How to exploit context? 如何利用上下文
Count based 基于数量的
如果单词 和 常常一起出现,那么在多维空间中的这两个单词的向量就会靠的更近。
Prediction based 基于预测的
要做的就是预测下一个词
把单词 用 1-of-n 编码表示,并作为输入放到 NN 中,让输出是下一个位置 出现每一个单词的几率,把 first hidden layer 取出,我们便可将 、 ……作为维度称为我们要的 Word Embedding~
为什么可以这样做呢?
因为在这个 prediction model 中,我们预测的是下一个单词出现的概率,那么在 hidden layer 中学出来的就是各个 word 的特征,那这样放到多维空间中准没错。
我们可以对上面这样的方法进行拓展,将前面的多个词一同作为输入,当然,连接到同一个 上的参数必须是共享的
为什么要共享参数?
一个很直觉、很合理的解释:
来自2个位置前的 "apple" 和来自1个位置前的 "apple" ,如果不共享参数的话,这显然是不同的输入,会导致 train 出的神经元不同(或是权重, ),这自然是不合理的,一个单词不应该映射出不一样的多维空间向量。
实操中做参数更新时,将两参数初始化为相同的值,在 Gradient Descent 时将所有梯度一并减去即可。
Train
左边是我们收集到的数据,就让机器去最小化预测模型的交叉熵即可。