深度文本匹配的基本方法

开篇

这里主要的内容来自庞亮博士的一篇综述性论文,后面会放出论文的参考地址。

摘要

深度文本匹配模型可以分为三类:
基于单语义文档表达的深度学习模型
基于单语义文档表达的深度学习模型主要思路是,首先将单个文本先表达成一个稠密向量(分布式表达),然后直接计算两个向量间的相似度作为文本间的匹配度。
基于多语义文档表达的深度学习模型
基于多语义的文档表达的深度学习模型认为单一粒度的向量来表示一段文本不够精细,需要多语义的建立表达,更早地让两段文本进行交互, 然后挖掘文本交互后的模式特征, 综合得到文本间的匹配度。
直接建模匹配模式的深度学习模型
而直接建模匹配模式的深度学习模型则认为匹配问题需要更精细的建模匹配的模式

文本匹配主要面临的挑战

这里说白了就是我们模型需要克服和解决的一些困难,解决实际问题的时候我们往往需要面对的也是这些问题。

  1. 词语匹配的多元性
    不同的词语可能表示的是同一个语义,比如同义词, “荷花” 、“莲花”、“水芙蓉”、“芙蕖”,它们表示的都是同一种植物;同理一个相同的词在不同的语境下会有不同的语义,比如“苹果”既可以是一种水果,也可以是一家公司, 亦可以是一个品牌。
  2. 短语匹配的结构性
    多个词语可以按照一定的结构组合成短语,匹配两个短语需要考虑短语的结构信息。比如“机器学习”和“机器学习”是两个词顺序匹配的,而“机器学习”和“学习机器” 只有词语是匹配的,而顺序是打乱的。这两种情况的匹配程度是不一样的。
  3. 文本匹配的层次性
    文本是以层次化的方式组织起来的,词语组成短语,短语组成句子,句子组成段落,段落组成篇章。这样一种特性使得我们在做文本匹配的时候需要考虑不同层次的匹配信息,按照层次的方式组织我们的文本匹配信息。

传统文本匹配依赖于大量的人工特征,泛化能力比较差,深度文本匹配可以自动提取特征,层次结构也更加好。

卷积神经网络和循环神经网络

卷积神经网络的卷积核的结构能够建模局部化信息,并有平移不变性的特性,堆叠起来的卷积层可以很方便地模拟语言层次化的特性。而循环神经网络更偏向于序列化建模,类似人类阅读文本的方式每次将历史的信息压缩到一个向量,并作用于后面的计算,符合建模文本的序列性。

基于单语义文档表达的深度学习模型

两个基本问题:如果做文档的语义表示和如何计算语义表示的相似性

Siamese 网络结构

全连接神经网络

深度语义结构模型(Deep Semantic Structured Model, DSSM)是最早将深度模型应用在文本匹配的工作之一,该模型主要针对查询项和文档的匹配度进行建模,相对于传统文本匹配的模型,该方法有显著的提升。深度语义结构模型是个典型的Siamese 网络结构,每个文本对象都是由五层的网络单独进行向量化的,最后计算两个文本向量的余弦相似度来决定这两段文本的相似程度。

MatchZoo库 readme

MatchZoo是一个用于文本匹配的工具包。它的开发重点是促进深文本匹配模型的设计,比较和共享。有许多深度匹配方法,如DRMM,MatchPyramid,MV-LSTM,aNMM,DUET,ARC-I,ARC-II,DSSM和CDSSM,采用统一接口设计。与MatchZoo相关的潜在任务包括文档检索,问题回答,会话响应排名,复述识别等。我们很乐意接收来自所有MatchZoo用户的任何代码贡献,建议和评论。

安装

git clone https://github.com/faneshion/MatchZoo.git
cd MatchZoo
python setup.py install

使用

python matchzoo/main.py --phase train --model_file examples/toy_example/config/arci_ranking.config
python matchzoo/main.py --phase predict --model_file examples/toy_example/config/arci_ranking.config

overview

整体框架如下

工具包中有三个主要模块,分别是数据准备,模型构建,培训和评估。这三个模块实际上被组织为数据流的管道。

数据准备

数据准备模块旨在将不同文本匹配任务的数据集转换为统一格式作为深度匹配模型的输入。用户提供包含文本对及其标签的数据集,并且该模块生成以下文件。

  1. 词典
    记录从每个单词到称为wid的唯一标识符的映射。可以通过预定义规则过滤掉过于频繁(例如停用词),过于罕见或嘈杂(例如传真号码)的词。
  2. 语料库文件
    记录从每个文本到称为tid的唯一标识符的映射,以及该文本中包含的一系列单词标识符。请注意,此处每个文本都被截断或填充到用户自定义的固定长度。

  3. 关系文件
    保存两个文本之间的关联标签,两个tid和关联标签

  4. 更加详细的细节
    数据细节

模型构建

在模型构建模块中,我们采用Keras库来帮助用户方便地逐层构建深度匹配模型。 Keras图书馆提供了一组常用的神经网络层,如卷积层,池化层,全连接层等。为了进一步促进深层文本匹配模型的构建,我们扩展了Keras库,以提供专门为文本匹配设计的一些层接口。

此外,该工具包实施了两组具有代表性的深层文本匹配模型,即以表示为中心的模型和以交互为中心的模型。

训练和评价

为了学习深度匹配模型,该工具包为回归,分类和排序提供了各种目标函数。例如,与排名相关的目标函数包括几个众所周知的逐点,成对和列表损失。用户可以灵活地在训练阶段获取不同的目标函数以进行优化。一旦模型被训练,该工具包可用于产生匹配分数,预测匹配标签,或者针对输入文本对目标文本(例如,文档)进行排名。

benchmark

在这里,我们采用两个代表性数据集作为示例,以显示MatchZoo在排名和分类中的用法。对于排名任务,我们使用WikiQA数据集作为示例。对于分类任务,我们使用QuoraQP数据集作为示例。

WikiQA for Ranking

WikiQA是用于问答的答案句选择的流行基准数据集。我们提供了一个脚本来下载数据集,并将其准备为MatchZoo数据格式。在models目录中,有关WikiQA数据集的每个模型的许多配置。

使用drmm作为一个例子

python matchzoo/main.py --phase train --model_file examples/wikiqa/config/drmm_wikiqa.config

python matchzoo/main.py --phase predict --model_file examples/wikiqa/config/drmm_wikiqa.config

QuoraQP for Classification

QuoraQP(Quora问题对)是来自kaggle的文本匹配竞赛,用于预测所提供的一对问题是否具有相同的含义。我们提供了一个脚本来下载数据集,并将其准备为MatchZoo数据格式。在models目录中,有关QuoraQP数据集的每个模型的许多配置。

使用MatchPyramid作为一个例子

python matchzoo/main.py --phase train --model_file examples/QuoraQP/config/matchpyramid_quoraqp.config

python matchzoo/main.py --phase predict --model_file examples/QuoraQP/config/matchpyramid_quoraqp.config

猜你喜欢

转载自blog.csdn.net/Ding_xiaofei/article/details/80924994