吴恩达深度学习课程学习笔记9

词汇表征

        One-hot表示法的一大缺点就是它把每个词孤立起来,这样使得算法对相关词的泛化能力不强。因此我们不用one-hot的表示方式,而是用特征化的表示来表示每一个词。我们学习这些词的特征和其数值化,如下图所示,假设有300个特征的话,这样每个词就用一个300维的向量表示。这样的话,意思相近的单词就会有相似的向量表示。对于不同的单词,这样会使算法泛化能力更好。

                                                                                   图2-1 单词的特征向量表示法举例

 

        但实际上,我们最终学习的特征不会像这里一样这么好理解,新的特征表示的东西肯定更难懂。尽管如此,这样却能使算法高效地发现词语之间的相似性。如果我们能学习到一个300维的特征向量,通常我们可以做的一件事是把这300维的数据嵌入到一个二维空间里,这样就可以可视化了。常规的可视化算法是t-SNE算法。如果看这些映射过来的结果,你会发现男人和女人这些词聚集在一块,国王和王后聚集在一块,一些动物又聚集在一块等。

        这种词嵌入算法,对于相近的概念,学到的特征也比较类似,在对这些概念可视化的时候,这些概念就比较相似,最终把它们映射为相似的特征向量。

 

使用词嵌入

        学习词嵌入的算法会考察非常大的文本集,通过考察大量的无标签文本,你可以发现橙子和榴莲相近,农民和培育家相近等。因此学习这种嵌入表达,把它们都聚集在一块。接下来你可以把这个词嵌入应用到你的命名实体识别任务中,尽管你只有一个很小的训练集。这就使得你可以使用迁移学习,把你从互联网上免费获得的大量无标签文本中学习到的知识,然后把这些知识迁移到一个任务中,比如你只有少量标记的训练数据集的命名实体识别任务中。

        用词嵌入做迁移学习的步骤:

  1. 先从大量的文本集中学习词嵌入,一个非常大的文本集,或者是可以下载网上与训练好的词嵌入模型;
  2. 然后你可以用这些词嵌入模型把它迁移到你的新的只有少量标注训练集的任务中。比如说用这个300维的词嵌入来表示你的单词。这样做的一个好处是你可以用更低维度的特征向量代替原来10000维的one-hot向量;
  3. 最后当你在你的新任务上训练模型时,在你的命名实体识别任务上,只有少量的标记数据集上,你可以自己选择要不要继续微调,用新的数据调整词嵌入。如果你标记的数据集不是很大,通常不用在微调词嵌入上费力气。

        词嵌入广泛应用于NLP领域,它已经用在命名实体识别、文本摘要、文本解析等NLP任务。在语言模型、机器翻译领域用的少一些,因为这些任务你有大量的数据。

        最后,词嵌入和人脸编码之间有奇妙的关系,它们本质上·很相似。但是在人脸识别领域和这里的词嵌入有一个不同就是在人脸识别中,我们训练一个网络任给一个人脸的照片,甚至是没有见过的照片,神经网络都会计算出相应的一个编码结果。而词嵌入则是有一个固定的词汇表,比如10000个单词,我们学习向量E1到E10000,学习一个固定的编码,固定的嵌入。

        人脸识别的算法未来可能涉及到海量的人脸照片,而自然语言处理有一个固定的词汇表,而像一些没有出现过的,我们就记为未知单词。

 

词嵌入的特性

        词嵌入有一个迷人的特性就是它还能帮助实现类比推理,例如它能学会man对于woman相当于boy对于girl。因为man和woman之间、king和queen之间还有boy和girl之间的向量差在性别这一维的特征是一样的。它还能学习加拿大的首都是渥太华,而相当于内罗毕对于肯亚。它还能学习big对于bigger相当于tall对于taller等。

        衡量向量的相似度,吴恩达老师推荐使用余弦相似度,余弦相似度的定义如下:

        其实求的就是两个向量之间的余弦夹角。如果你想还可以用平方距离或者欧氏距离来表示。从学术上说,比起测量相似度,这个函数更容易测量的是相异度,所以我们需要对其取负。不过还是余弦相似度用得更多一点。

 

嵌入矩阵

         当你应用算法来学习词嵌入时,实际上是学习一个嵌入矩阵。我们要做的就是学习一个嵌入矩阵E,它将是一个300×10000的矩阵,这个矩阵的各列代表10000个不同的单词所代表的不同向量。这个矩阵乘以单词的one-hot表示10000×1即可得到这个单词一个300维的向量。

        我们的目标是学习一个嵌入矩阵E,随机地初始化矩阵E,然后使用梯度下降法来学习这个300×10000矩阵中的各个参数。但当你动手实现时,用大量的矩阵和向量相乘来计算它效率是很低下的。因为one-hot向量是一个维度非常高的向量并且几乎所有元素都是0,所以矩阵向量相乘效率太低,因为我们要乘以一大堆0。所以在实践中,你会使用一个专门的函数,来单独查找矩阵E的某列。

 

学习词嵌入

        网络结构可以如下设置,输入各个单词的one-hot向量,与嵌入矩阵相乘后输入到神经网络,经过softmax层预测该句子最后的单词。假设嵌入矩阵是300*10000,则输入神经网络的维度就是输入单次数×300。一般可以设置输入的单词为要预测单词的前4位,那么输入的维度就是1200。最后经过梯度下降法不断优化嵌入矩阵的值,最后得出嵌入矩阵。

                                                                                 图2-2 词嵌入的网络结构简易图

 

         如果你要建立一个语言模型,那么一般选取目标词之前的几个词和之后的几个词作为上下文。如果你的目标是学习一个嵌入矩阵,当然也可以采用以上的方法,但可以尝试很多不同类型的上下文,比如目标词前4个词、目标词的前一个词、目标词附近的一个词等,这样也可以获得很好的词嵌入。

 

Word2Vec

        Skip-gram选取的上下文方式是随机选一个词作为上下文词,然后我们要做的是随机在一定词距内选另一个词,比如在上下文词前后5个词内或者前后10个词内,我们就在这个范围内选择目标词。整体结构如下所示,输入一个上下文单词的one-hot向量,与嵌入矩阵相乘得到特征向量,然后输入神经网络最后经过softmax层输出一个one-hot向量作为预测结果。

                                                                           图2-3 word2vec前向传递过程简易图

 

        损失函数可以这样设置

        实际上使用这个算法会遇到一些问题,首要的问题就是计算速度。尤其是在softmax模型中,每次你想要计算这个概率,你需要对你词汇表中的所有10000个词做求和计算,可能10000个词的情况还不算太差,如果你用一个100000或1000000的词汇表那么这个分母的求和操作是相当慢的。

        这里有一些解决方法,在文献中你会看到的是使用一个分级的softmax分类器,意思就是不是一下子就确定到底属于10000类中的哪一类,想象如果你有一个分类器,它告诉你目标词是在词汇表的前5000个中,还是在词汇表的后5000个词中。加如这个分类器告诉你这个词在前5000个词中,然后第二个分类器会告诉你,这个词在词汇表的前2500个词中,或者在词汇表的第二组2500个词中,诸如此类,直到最终你找到一个词准确所在的分类器,这就是如下这棵树的一个叶子节点,像这样有一个树形的分类器,意味着树上内部的每一个节点都可以是一个二分类器,比如logistic分类器,所以你不需要再为单次分类对词汇表中所有的10000个词求和了。实际上用这样的分类树,计算成本与词汇表大小的对数成正比。而不是词汇表大小的线性函数。

                                                                                            图2-4 分级softmax示例图

 

        在实践中,分级softmax分类器不会使用一棵完美平衡的分类树,或者说一棵左边右边分支词数相同的对称树。实际上,分级的softmax分类器会被构成常用词在顶部,不常用词会在树的更深处。因为你想更常见的词会更频繁,所以你可能只需要少量检索就可以获得常用单词像the和of,然而更少见到的词就更适合在树的较深处,因为你一般不需要到那样的深处。

        另外一个问题就是怎样对上下文c进行采样。一旦你对上下文c进行采样,那么目标词t就会在上下文c的(比如)正负10个词距内进行采样。

        一种选择是你可以就对语料库均匀且随机地采样,如果你那么做,你会发现有一些词像the,of,a,and,to此类是出现得相当频繁的。如果你这么做,你会发现你的上下文到目标词的映射会相当频繁地得到这些种类的词。但是其他词像orange、apple或durian就不会那么频繁地出现,你应该是不想你的训练集都是些出现得很频繁的词。因为这会导致你花大部分的力气来更新这些频繁出现的单词的ec 。但你想要花时间来更新像durian这些更少出现的词的嵌入。实际上词的分布p(c)并不是单纯的在训练集语料库上均匀且随机的采样得到的,而是采用了不同的启发来平衡更常见的词和不那么常见的词。

 

负采样

        生成正样本和上述一致,就是通过选取一个上下文单词,在其一定词距内随机选择一个目标词,这就是一个正样本。然后为了生成一个负样本,你将用相同的上下文词再在词典中随机选一个词,这就是一个负样本。如此重复用相同的上下文词再从字典中选取随机的词,生成k个负样本。如果出现了从字典中随机选到的词正好出现在上下文词距内这是没关系的。至于k值的选取,小数据集的话k从5到20比较好,如果你的数据集很大,k就选小一些,例如2到5。

        训练时用这个正样本和k个负样本进行训练,每次迭代中选择k个不同的随机负样本词,去训练你的算法。这个算法有一个重要的细节就是如何选取负样本。一个办法是可以根据其在语料中的经验频率进行采样,就是通过词出现的频率对其进行采样,但问题是这会导致你在like、the、of、and此类的词上有很高的频率,另一个极端就是用1比词汇表总词数均匀且随机地抽取负样本,这对于英文单词的分布是非常没有代表性的。一些学者研究发现,使用位于两种极端采样方法之间的采样方法有不错的效果,如下所示

        其中 是观测到的在语料库中的某个英文单词的词频。

 

GloVe词向量

        GloVe算法在NLP社区有着一定的势头,这个算法并不如word2Vec或者是sjip-gram模型用的多,但也有人热衷于它因为它的简便。

        GloVe算法做的就是使上下文词c和目标词t的关系开始明确化。它的优化目标如下所示

        其中 是单词j作为上下文词时,单词i在单词j词距范围内的次数。当 时, 。容易得到 。而 的作用是有些词在英语里出现十分频繁,比如说this、is、of、a。同时也有一些非常用词,比如durion,你还是想将其考虑在内,但又不像那些常用词这样频繁,因此,这个加权因子就可以是一个函数,即使是像durion这样不常用的词,它也能给予大量有意义的运算,同时也能够给频繁出现的词更大但不至于过分的权重。一件有关这个算法有趣的事是θ和e是完全对称的。所以那里的 就是对称的。如果你只看数学式的话,他们的功能其实很相近,你可以将它们颠倒或者将它们进行排序,实际上他们都输出了最佳结果。因此一种训练算法的方法是一致地初始化θ 和e,然后使用梯度下降来最小化输出。当每个词都处理完之后取平均值,如 。因为θ 和e在这个特定的公式里是对称的。

 

情感分类

        情感分类一个最大的挑战就是可能标记的数据集没有那么多,但是有了词嵌入,即使只有中等大小的标记的训练集,也能构建一个不错的情感分类器。

        若采用以下的网络结构就有有一个问题就是没有考虑词序,尤其是这样一个负面评价‘Completely lacking in good taste,good service, and good ambiance”,但是”good“这个单词出现了很多次,如果忽略词序,仅仅把所有单词的词嵌入加起来或者平均下来,你最后的特征向量会有很多good的表示,你的分类器可能会认为这是一个好的评论,尽管事实上是一个差评。

                                                                                     图2-5 情感分类的神经网络示例图

 

        故可以采用上周学习的RNN模型,网络结构如下所示,这样改进之后效果会好很多。如果你训练一个这样的算法,最后会得到一个很适合的情感分类算法。由于你的词嵌入是在一个更大的数据集里训练的,这样效果会更好,更好地泛化一些没有见过的新单词。

                                                                                         图2-6 情感分类的RNN示例图

 

词嵌入除偏

        有时在训练好的词嵌入中,假设man相对于computer_programmer,则woman相对于什么,词嵌入可能会输出homemaker。又假设Father相对于Doctor,则mother相对于什么,词嵌入可能会输出Nurse。这存在一个性别歧视等。词嵌入能够反映出性别、种族、年龄、性取向等其他方面的偏见,这些偏见都和社会经济状态相关。

        至于词嵌入,它们能够轻易学会用来训练模型的文本中的偏见内容,所以算法获取到的偏见内容,就可以反映出人们写作中的偏见。

        为了消除词嵌入的偏见,首先要做的事就是辨别出我们想要减少或想要消除的特定偏见的趋势。接着,下一步是中和步,对于那些定义不确切的词可以将其处理一下避免偏见。最后一步是均衡步,意思是说你可能会有这样的词对,例如grandmother和grandfather,或者是gril和boy,对于这些词嵌入,你只希望性别是其区别。我们想要确保的是像grandmother和grandfather这样的词都能够有一致的相似度,或者说相等的距离。最后一个细节是如何决定那个词是中立的,论文作者做的是训练一个分类器尝试解决,哪些词是有明确定义的,哪些词是性别确定的,哪些词不是。最后你需要平衡的词对的数目其实是很小的,至少对于性别歧视这个例子来说用手都能数出来。

                                                                                              图2-7 词嵌入除偏的图示

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值