2.1 词汇表征
- 前面内容中,我们直接使用英文单词来表征词汇,但是对于计算机来说,是无法直接认识单词的。
- 为了让计算机能够能更好地理解我们的语言,建立更好的语言模型。
- 这就需要将词汇进行表征。下面是几种不同的词汇表征方式。
one-hot 表征
利用one-hot向量,将单词表示为词典大小的向量,字典中对应该单词的位置为1,其余位置为0。
缺点:将每个词孤立了起来,泛化能力不强。每个词向量之间的距离都一样,内积均为0,无法获取词与词之间的相似性和关联性。
特征表征:词嵌入
用多个不同的特征来对各个词汇进行表征,每个单词对于每个特征都有一个相关特征值,多个特征的特征值组成单词的特征向量,相似的词的特征向量就比较接近,从而可以获取词与词之间的相似性和关联性。
使用t-SNE算法将高维的词向量映射到2维空间,对词向量进行可视化,可以看出对于相似的词总是聚集在一块儿
常用的多维转换为二维的方法:t-SNE
词好像一个一个的嵌入到了一个多维空间中,所以叫做词嵌入。
2.2 使用词嵌入
词嵌入对每个单词进行特征化表示,这种表示方法可以应用到NLP中。
命名实体识别
如下图所示,学习到第一个句子: sally Johnson is an orange farmer, 根据orange与apple相似,可以推断出Robert Lin也是一个人名。但是如果我们没有学习过durian cultivator 那么我们就不知道durian也是一种水果,cultivator和farmer也类似。这种情况可以采用迁移学习。
词嵌入的迁移学习
和之前学习的迁移类似,都是利用已有模型的成果迁移到我们的模型上进行进一步的学习。
下面是词嵌入迁移学习的步骤:
- 第一步:从大量的文本集合中学习word Embeddings(1-100B words),或者从网上下载预训练好的词嵌入模型;
- 第二步:将词嵌入模型迁移到我们小训练集的新任务上;
- 第三步:可选,使用我们新的标记数据对词嵌入模型继续进行微调。
词嵌入与人脸编码
之前我们学习人脸识别时,通过同样的卷积神经网络给两张人脸照片编码,生成向量,比较向量的距离来确定是否是同一个人。与这里的词嵌入根据不同特征生成向量再比较向量的距离判断相似度,是基本类似的。
不同之处在于,人脸识别算法可以对任意一张人脸生成向量;而词嵌入只能对已有词汇表中的词给出向量,未学习过的词无法识别。
2.3 词嵌入的特性
类比推理
词嵌入可以实现类比推理。通过不同词向量之间的相减计算,可以发现不同词之间的类比关系。
- man——woman
- king——queen
这个例子中多维向量相减后发现性别维度不同,其他维度减完基本为0。但是多维向量利用t-SNE算法映射到二维后这个方法就不灵了,因为映射算法是非线性的,距离关系变了。
距离相似度
计算词与词之间的相似度,实际上是在多维空间中,寻找词向量之间各个维度的距离相似度。
相似度函数
余弦相似度函数(Cosine similarity)
2.4 嵌入矩阵
对一个词汇表学习词嵌入模型就是学习这个词汇表对应的一个嵌入矩阵E。
- 矩阵E:词汇个数*特征个数
- o:词汇的one-hot向量
- e: 词汇的特征向量
对于第j个词汇有:
2.5 学习词嵌入
早期的词嵌入算法比较复杂,随着时间发展,现在变得越来越简单。
下面例子中,要学习”juice”, 可以利用上面的 计算出 , 将各个 输入神经网络模型,通过反向传播和梯度下降计算E,从而预测出”juice”。
- 训练语言模型时通常选择目标词的前几个词来预测目标词。(历史窗口常选4)
- 而在其他的词嵌入中可以利用不同的方法选取上下文:
- 选取目标词之前的几个词
- 选取目标词前后的几个词
- 选取目标词前的一个词
- 选取目标词附近的一个词,(一种Skip-Gram模型的思想)
2.6 Word2Vec
Word2Vec算法是一种简单的计算更加高效的方式来实现对词嵌入的学习。
Skip-grams
抽取上下文(Content)和目标词(Target)配对,来构造一个监督学习问题。
随机选择一个词作为上下文,同时在上下文的一定距离范围内随机选择另外一个词作为目标词。
模型流程
- 词汇表:Vocab size = 10000
- 基本监督学习:构建上下文(C)和目标词(T)的映射关系:C——T
- (one-hot)——E(词嵌入矩阵)—— (词嵌入)——Softmax层——ŷ
- softmax: theta 是与输出t有关的参数
- 损失函数:softmax经常使用这个损失函数
- 反向传播梯度下降进行训练,得到模型的参数E和softmax的参数
存在的问题
- 在Softmax单元中,需要对所有10000个整个词汇表的词做求和计算,计算量庞大。
- 简化方案:使用分级softmax分类器(相当于一个树型分类器,每个节点都是可能是一个二分类器),其计算复杂度是前面的log|v|级别。在构造分级softmax分类器时,一般常用的词会放在树的顶部位置,而不常用的词则会放在树的更深处,其并不是一个平衡的二叉树。
如何采样上下文
在构建上下文目标词对时,如何选择上下文与模型有不同的影响。
- 对语料库均匀且随机地采样:使得如the、of、a等这样的一些词会出现的相当频繁,导致上下文和目标词对经常出现这类词汇,但我们想要的目标词却很少出现。
- 采用不同的启发来平衡常见和不常见的词进行采样。(实际使用的方法)。
2.7 负采样
Skip-grams 随机选取目标词,构建监督学习任务,能够学习到一个实用的词嵌入模型。
但是softmax计算的时间复杂度较高。
下面介绍一种改善的学习问题:负采样。其能够做到的和Skip-grams模型相似,但其学习算法更加有效。
负采样的计算过程
选定上下文后,选取一个目标词标记为1,选取k个非目标词(负采样)标记为0,建立模型进行训练。
小数据集,k=5-20;大数据集,k=2-5。(数据集越大,k越小)
将庞大维度的softmax改为k+1个二分类问题
如何选取负样本
- 单词频率:导致一些类似a、the、of等词的频率较高
- 均匀随机:没有很好的代表性
- 论文推荐:
其中 为单词频率
2.8 GloVe 词向量
GloVe(global vectors for word representation)词向量模型是另一种计算词嵌入的方法,虽然没有Skip-grams模型用的多,但这种模型更加简单。
GloVe模型
GloVe词向量模型中,要定义一个量Xij,表示目标词i出现在上下文j的次数。模型的优化目标如下:
- 其中,因为当 为0时, 便没有意义,所以添加 的加权项,当 时, ,另外 对于一些频繁词和不频繁词有着启发式的平衡作用
- 另外, 这一项中, 和 都是需要学习的参数,在这个目标算法中二者是对称的关系,所以我们可以一致地初始化Θ和e,然后用梯度下降来最小化输出,在处理完所有词后,直接取二者的平均值作为词嵌入向量: ,这与前面的算法有所不同。
输出能够对上下文和目标两个词同时出现的频率进行很好的预测,从而得到我们想要的词嵌入向量。
2.9 情绪分类
情绪分类就是通过一段文本来判断喜好态度,这是NLP中最重要的模块之一。
平均值或和预测
- 获取一个训练好的词嵌入矩阵E
- 得到每个词的词嵌入向量,并对所有的词向量做平均或者求和
- 输入到softmax分类器中,得到最后的输出ŷ
缺点:没有考虑词序,比如 not so good 看到good以为好呢。
RNN 模型
- 获取一个训练好的词嵌入矩阵E
- 得到每个词的词嵌入向量,输入到many-to-one的RNN模型中
- 通过最后的softmax分类器,得到最后的输出ŷ
优点:考虑了词序,效果好很多。
2.10 词嵌入消除偏见
人工智能算法已经被应用到做一些非常重要的社会决策中,因此我们需要尽可能地保证其不受非预期形式的偏见的影响,如性别、种族歧视等等。
机器学习中的偏见
机器学习的偏见来自于语料库中偏见,比如学习的文章是有偏见的作者写的。
消除偏见的方法
- 定义偏见的方向:如性别
- 对大量性别相对的词汇进行相减并求平均:e_{he}−e_{she}、e_{male}−e_{female} 。。。
- 通过平均后的向量,则可以得到一个或多个偏见趋势相关的维度,以及大量不相关的维度
- 中和化
- 对每一个定义不明确的词汇调整到偏见相关维度的距离中轴线上,如 docter,nurse
- 均衡化
- 将定义明确的男女成对的词调整到偏见相关维度的距离中轴线堆成的位置,如gradmother和gradfather
通过图中论文了解更多细节。