2 对外在性任务进行训练
前面我们着重讨论了内在性任务,并且强调了它们在生成 优质词嵌入技术(词向量)
中的重要性。当然,最终目的是利用词向量解决外部的实际问题。 这里我们讨论处理外部任务的一般方法。
2.1 问题描述
大多数的 NLP 外部任务都可以被描述成分类任务。比如说,我们可以对句子做情感分类,判断其指代的情况是褒义,贬义还是中性的。 类似的,在命名实体识别(NER) 中,我们需要找出上下文中的中心词所属的类别。例如输入为“Jim bought 300 shares of Acme Corp. in 2006”, 我们期望分类完成后的输出是, “”[Jim]人名 bought 300 shares of [Acme Corp.]机构名 in [2006]时间.”
图 5:针对词向量的分类问题,上图是一个二维词向量分类问题,用简单的线性分类器,比如逻辑回归和支持向量机完成分类
对于这样的问题,我们一般有以下形式的训练集:
其中是用某种方法生成的 d 纬词向量。
是一个 C 维 one-hot 编码向量(译者注:one-hot,“独热”,意为只有一个元素为 1,其余元素均为 0),用来表示我们最终要预测的标签(感情色彩,其他词,专名,买/卖决策,等)。在一般的机器学习任务中, 我们通常固定输入数据和目标标签,然后用最优化技术(诸如梯度下降法,L-BFGS 法,牛顿法等)训练权重。在自然语言处理中,我们引入了重训练的想法,也就是针对外在性任务时,重新训练输入的词向量。接下来我们讨论何时需要进行这样的操作,以及为什么考虑这么做。
2.2 重训练词向量
应用贴士:在训练集比较大的时候,才需要进行词向量重训练,否则反而会影响精度。
我们一般先用一个简单的内部任务评价来初始化用于外部任务评价的词向量。在很多情况下,这些预训练的词向量的在外部任务中的表现已经非常好了。 然而,一些情况下,这些词向量在外部任务中的表现仍然有提升空间。不过,重训练词向量是由风险的。
图 6:我们看到”Telly”, “TV”, 和 “Television” 在重训练之前的分类是准确的。”Telly” 和 “TV” 在外部任务训练集中,而”Television”只出现在测试集中。
如果要在外部任务上重新训练词向量,我们需要保证训练集的大小足够覆盖词库中的大多数单词。因为 Word2Vec 或 GloVe 生成的语义相关的词会在词空间中落在同一部分位置。如果我们用一个比较小的训练集去重训练,这些词在词空间中的位置就会发生变化,在最终任务上的精确度反而可能降低。我们看一个例子。图 6 中预训练的 2 维词向量在某个外部分类任务重被正确分类了。 我们如果只重新训练其中两个词向量,因为训练集较小,从图 7 中我们可以看到,由于词向量的更新,分类边界的变化,其中一个单词被错误的分类了。
因此,如果训练集较小,则最好不好重训练词向量。如果训练集很大,重训练也许能够提升精度。
图 7:我们看到”Telly”和”TV”在重训练之后的分类是准确的。而”Television”的分类错了,因为它只出现在测试集中,训练集中没见着。
2.3 Softmax 分类与正则化
我们知道 Softmax 分类函数形式大概是下面这个样子:
上面我们计算了词向量 x 属于类别 j 的概率。然后根据互熵损失函数,一个单词在模型中的损失如下:
因为上式中的只有在 x 属于正确的类时才等于 1,其他均为 0。如果我们假设 k 是那个正确的类,那上式可以简化为:
当然,我们数据集内不止这一个单词,假设我们的训练集是有 N 个数据点的数据集,那总损失应该有如下的形式:
这个公式有一点点不同,注意到其实这里的现在是个函数,返回每个
所对应的正确的类。
咱们来估一估,如果我们同时要训练模型中的权重参数(W) 和词向量(x), 需要训练多少个参数呢? 一个以 d-维词向量为输入,输出一个其在 C 个类上的分布的简单的线性模型需要 C·d 个参数。如果我们训练时更新词库中每个单词的词向量,则需要更新|V|个词向量,而每一个都是 d 维。综合一下,我们知道,一个简单的线性分类模型需要更新个参数。
对于一个简单的线性模型来说,这个参数量就显得非常大了,带来的问题是模型很容易在数据集上过拟合。为了缓解过拟合,我们需要引入一个正则项,用贝耶斯的角度来讲,这个正则项其实就是一个给模型的参数加上了一个先验分布,从而希望他们的值更接近 0。
$$
如果咱们找到合适的正则项权重λ,那最小化上面的损失函数得到的模型,不会出现某些权重特别大的情况,同时模型的泛化能力也很不错。需要多说一句的是,正则化这个操作,在我们接触到神经网络这种复杂的模型的时候,更加重要,咱们更应该约束一下,不让模型那么容易过拟合。
2.4 词窗分类
图 8:我们这里看到的是一个中心词,和长度为 2 的左右窗口内的词。 这种上下文可以帮助我们分辨 Paris 是一个地点,还是一个人名
我们前面提到的外部任务都是以单个单词为输入的。实际上,由于自然语言的特性,这种情况很少会出现。在自然语言中,有很多一词多义的情况,这时候我们一般会参考上下文来判断。 比如说,如果你要给别人解释”真有你的”是什么意思。你马上就知道根据上下文的不同,”真有你的” 可以是称赞,也可以是生气。 所以在大多数的情况下,我们给模型输入的是一个词序列。这个词序列由一个中心词向量和它上下文的词向量组成。上下文中词的数量又叫词窗大小,任务不同这个参数的取值也不同。一般来讲,小窗口在句法上的精度较高,大窗口在语义上的表现较好。如果我们要把词窗作为 Softmax 模型的输入,我们只要把换成以下形式的
那相应的,我们计算损失函数梯度的时候,得到的就是如下形式的向量了:
多说一句的是,这个过程中的每一项其实都是独立的,因此在现在工业界的实际操作中,这一步是可以进行分布式计算的。
2.5 非线性分类器
![]() | ![]() |
---|---|
图 9 | 图 10 |
最后我们简单提一下非线性的分类模型,如神经网络。在图 9 中我们可以看到很多点被错误的分类了。在图 10 中,如果使用非线性的决策边界,我们发现训练集中的样本就可以被分对了(因为分界线可以弯曲了嘛)。这是一个简化的例子,但是已经足以说明,为什么实际应用中很多时候需要非线性的决策边界。接下来的课程里,我们会逐步讲到神经网络,这个在深度学习中表现尤为出色的非线性模型。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论