深度学习在文本对分类中的应用

本文探讨了使用深度学习技术解决文本对分类问题的方法,包括神经网络模型的设计、实验结果及技术细节,特别关注了Quora数据集和SNLI语料库的应用。

深度学习在文本对分类中的应用

某平台近期发布了其平台上的首个数据集:包含40万个问题对,并标注了这些问题是否请求相同的信息。该数据集规模大、真实且相关,是一种罕见的组合。本文将解释如何利用深度学习技术解决文本对分类任务,结合新旧技巧与技术。

文本对分类的挑战

文本对分类是自然语言处理中的重要问题类型,其挑战在于通常无法通过单个词语解决问题。例如,判断两个问题是否重复、标题是否与故事匹配,或链接是否指向错误页面,都需要同时考察两个文本项。

数据集比较

近期文本对分类方法主要在斯坦福自然语言推理(SNLI)语料库上开发。该语料库包含50万对短句,标注了句子间的逻辑关系(蕴含、矛盾或中立)。尽管SNLI数据集比以往资源大100倍,但其数据较为人工化,而某平台的数据集则更贴近实际应用场景。

神经网络模型设计

设计神经网络时,关键决策是选择独立表示还是联合表示文本含义。独立表示允许网络单独处理文本并生成向量表示,适用于需要多次比较同一文本的场景。然而,联合表示模型在文本对任务中具有更高的准确性。

神经词袋模型

本文描述了一种简单的句子编码模型——“神经词袋”,使用Thinc库实现。该模型通过预训练词嵌入向量生成句子表示,并通过平均池化和最大池化操作拼接结果,最终通过深度Maxout网络和Softmax层进行分类。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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)  
    )  

实验结果

神经词袋模型在Quora和SNLI数据集上的准确率分别为82.8%和88.5%。模型宽度设为128,深度为1(即仅使用一个Maxout层),未使用dropout,初始批大小为1,逐步增加至256。

负结果:Maxout窗口编码

尝试通过卷积层引入位置信息的模型(Maxout窗口编码,MWE)在文本对分类中效果不佳,与之前关于BiLSTM在SNLI任务中效果有限的报告一致。

总结

文本对分类技术尚处于早期阶段,但已展现出广阔的应用前景。未来计划开发交互式演示,探索不同模型在Quora和SNLI数据上的表现。

资源

  • 某平台首个数据集发布
  • 斯坦福自然语言推理(SNLI)语料库
  • Thinc:某机构的机器学习库

参考文献

  • Parikh等(2016):《自然语言推理的可分解注意力模型》
  • Bowman等(2015):《用于学习自然语言推理的大规模标注语料库》
  • Collobert等(2011):《从零开始的自然语言处理》
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计