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∗oj=ej E ∗ o j = e j 计算出 ej e j , 将各个 ej e j 输入神经网络模型,通过反向传播和梯度下降计算E,从而预测出”juice”。
- 训练语言模型时通常选择目标词的前几个词来预测目标词。(历史窗口常选4)
- 而在其他的词嵌入中可以利用不同的方法选取上下文:
- 选取目标词之前的几个词
- 选取目标词前后的几个词
- 选取目标词前的一个词
- 选取目标词附近的一个词,(一种Skip-Gram模型的思想)
2.6 Word2Vec
Word2Vec算法是一种简单的计算更加高效的方式来实现对词嵌入的学习。
Skip-grams
抽取上下文(Content)和目标词(Target)配对,来构造一个监督学习问题。
随机选择一个词作为上下文,同时在上下文的一定距离范围内随机选择另外一个词作为目标词。
模型流程
- 词汇表:Vocab size = 10000
- 基本监督学习:构建上下文(C)和目标词(T)的映射关系:C——T