Quora近期发布了其平台首个数据集:包含40万个问题对,并标注了这些问题是否请求相同信息。该数据集规模大、真实且相关——这是罕见的组合。本文将介绍如何利用深度学习和一些新颖及成熟的技术来解决文本对分类任务。
Quora数据集是自然语言处理中一个重要问题类型——文本对分类的实例。这类问题具有挑战性,因为通常无法通过观察单个词汇来解决。没有任何一个词能告诉你两个问题是否重复,或者某个标题是否与文章匹配。你必须同时审视两个文本项。这很困难,但也很有价值。目前这类模型已经表现得相当出色。
近期的文本对分类方法主要基于斯坦福自然语言推理(SNLI)语料库开发。该语料库提供超过50万对短句,并带有标注,指示句子间是否存在蕴含、矛盾或中立逻辑关系。SNLI数据集比以往类似资源大100倍以上,使得深度学习模型得以应用。然而,该数据也相当人工化——文本与你应用中可能遇到的真实文本差别较大。
SNLI方法:SNLI语料库的文本由某众包平台上的微任务工作者收集。工作者被展示一张图片标题(本身由之前标注项目的工作者生成),并被要求写出三个替代标题:一个与原标题矛盾、一个真实、一个可能真实也可能虚假。
Quora数据示例 | SNLI语料库示例 | 标签 |
|---|---|---|
班加罗尔最好的数字营销机构是哪家? | 一个人骑着马跳过一架破损的飞机 | 0 |
浦那最好的数字营销学院是哪家? | 一个人正在训练他的马参加比赛 | 0 |
什么导致某人产生嫉妒? | 人们在天主教堂里听唱诗班 | 1 |
我该怎么做才能避免嫉妒别人? | 唱诗班在教堂唱歌 | 1 |
首次使用SNLI数据时,我担心有限的词汇量和相对字面的句子会使问题过于简单。Quora数据为我们提供了绝佳的机会来检验进展:在SNLI数据上开发的模型在真实任务中是否真正有用?还是人工数据误导了我们对模型构建方式的结论?
设计文本对任务的神经网络时,最重要的决策可能是:是独立表示文本的含义,还是联合表示。独立表示意味着网络可以单独读取一个文本并为其生成向量表示。如果你需要对同一批文本进行大量比较(例如寻找两两相似度),这种方法很好。然而,独立阅读句子会使文本对任务更加困难。在将句子缩减为向量之前联合阅读它们的模型具有精度优势。
本文我将描述一个非常简单的句子编码模型,使用所谓的“神经词袋”方法。该模型基于Thinc实现。
使用Thinc进行文本对分类
with model.define_operators({'>>': chain, '**': clone, '|': concatenate}):
sent2vec = (
flatten_add_lengths
>> with_getitem(0, StaticEmbed(get_vectors, width))
>> (mean_pool | max_pool)
)
model = (
((Arg(0) >> sent2vec) | (Arg(1) >> sent2vec))
>> Maxout(width) ** depth
>> Softmax(2)
)首先,为句子中的每个词获取预训练的“词嵌入”向量。静态嵌入维度较长,学习重新加权这些维度是有用的——因此学习一个投影矩阵,将嵌入向量映射到较短的width维度。这得到两个二维数组(每个句子一个)。为了学习问题对的分类标签,需要获得句子对的单一向量。使用多种池化操作并拼接结果效果较好。上述代码中,创建了逐元素平均值和最大值的向量(分别称为“均值池化”和“最大池化”),并拼接结果。然后将每个句子的向量拼接,馈送到深度Maxout网络,最后由Softmax层进行预测。
指标 | 均值池化 | 最大池化 | 均值+最大池化 |
|---|---|---|---|
Quora准确率 | 80.9 | 82.3 | 82.8 |
SNLI准确率(二分类) | 85.1 | 88.6 | 88.5 |
宽度设为128,深度设为1(即Softmax前仅使用一层Maxout)。由于模型参数极少(小于1MB,因为不更新词向量),未使用dropout。初始批次大小为1,每轮增加0.1%,最大到256。
我尝试了使用卷积层编码有限位置信息的模型。我采用的新方案称为Maxout窗口编码(MWE)。方法非常简单:对于句子中的每个词i,通过拼接(i-1, i, i+1)的向量形成新向量。如果句子长度为N,向量宽度为M,此步骤将输入(N, M)矩阵并返回(N, M×3)矩阵。然后使用maxout层将拼接后的3M长度向量映射回M长度向量。
MWE层与BiLSTM目标相同:提取更好的词特征。大多数NLP神经网络以嵌入层开始。在此层之后,词特征是位置无关的——“duck”这个词的向量总是相同,无论周围是什么词。这显然是不理想的,因为“duck”的含义确实随上下文变化。MWE通过让每个词观察相邻两个词的上下文来改写其向量表示。
文本对分类模型可以实现许多有趣的功能。这项技术仍然相当年轻,应用尚未被充分探索。我们已经有了一段时间良好的单文本分类技术——但精确建模文本间关系的能力是相当新的。期待看到人们基于此构建的应用。FINISHED
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。