雷锋网 AI 科技评论按,日前,中国科学院计算技术研究所网络数据科学与技术重点实验室开源深度文本匹配项目 MatchZoo。据悉,MatchZoo 整合了当前最流行的深度文本匹配的方法(包括 DRMM、MatchPyramid、 DUET、 MVLSTM、aNMM、 ARC-I、ARC-II、 DSSM、CDSSM 等算法的统一实现),提供基准数据集(例如 WiKiQA 数据)进行开发与测试,可以应用到的任务场景包括文本检索、自动问答、复述问题、对话系统等等。详细信息可以参见:深度文本匹配开源工具(MatchZoo)
雷锋网 AI 科技评论注意到,短短一周时间,该项目在 GitHub 上的 star 数便达到 480 个,在 MatchZoo 微信群里,大家不断提出相应的改进建议以及使用过程中碰到的 bug,开发人员也在持续解疑中。
MatchZoo 的开源毫无疑问让文本匹配任务更加便利,那么,在这一项目背后,究竟有哪些成员在努力,做这一项目的初衷是什么,在开源过程中又遇到了哪些挑战?带着这些疑问,雷锋网 AI 科技评论第一时间联系到该项目的核心开发人员——中科院计算所的博士生范意兴,以下为雷锋网 AI 科技评论与他的交流内容。
初衷以及团队
据范意兴介绍,MatchZoo 项目由中科院计算所的郭嘉丰研究员、兰艳艳副研究员以及程学旗研究员发起,目前团队的开发成员中有来自中科院计算所、清华大学以及美国 UMASS 大学的研究生。
「项目的核心开发人员是来自中科院计算所的学生,包括我、庞亮以及侯建鹏,我们几个完成了项目的初期的整体框架的设计与开发,并实现了大部分的文本匹配的模型。后续有来自 UMASS 的杨柳和清华大学的郑玉昆加入,在原来项目的基础上,加入了更多的文本匹配的模型。」
上图从左至右:侯建鹏,范意兴,庞亮
为什么会想到研发这样一套框架并进行开源呢?范意兴对雷锋网 AI 科技评论说到,「文本匹配任务是一个从信息检索任务、问答任务、对话任务中抽象出来的核心问题,也是我们实验室小组的一个重要方向,我们在文本匹配任务上已经积累了许多原创的模型,比如 MatchPyramid、MV-LSTM、MatchSRNN、DRMM 等等,但是没有一个统一的框架方便大家使用这些模型,同时,学术界在自然语言处理与信息检索研究方向也出现了大量模型,但是缺乏一个基准的环境来研究和对比已有的模型。」
基于前期的积累和当前的研究现状,他们选择开源深度文本匹配项目 MatchZoo。
他表示,「MatchZoo 旨在方便大家对比使用已有的文本匹配模型,开发新的文本匹配模型,以及把这些模型非常便捷的应用到自己的工作中去。」
MatchZoo 结构
根据此前介绍,可以看到,MatchZoo 使用了 Keras 中的神经网络层,由数据预处理、模型构建、训练与评测三大模块组成,具体结构如下图。
数据预处理模块:该模块包含通用的文本预处理功能,如分词、词频过滤、词干还原等,并将不同类型文本匹配任务的数据处理成统一的格式。
同时该模块针对不同的任务需求提供了不同的数据生成器,包括有基于单文档的数据生成器、基于文档对的数据生成器、以及基于文档列表的数据生成器。不同的数据生成器可适用于不同的文本匹配任务,如文本问答、文本对话、以及文本排序等。
模型构建模块:该模块包含了深度学习模型中广泛使用的普通层,如卷积层、池化层、全连接层等。除此之外,在这一模块中,他们还针对文本匹配定制了特定的层,如动态池化层、张量匹配层等。
训练与评测模块:该模块提供了针对回归、分类、排序等问题的目标函数和评价指标函数。用户可以根据任务的需要选择合适的目标函数。
在模型评估时,MatchZoo 也提供了多个广为使用的评价指标函数,如 MAP、NDCG、Precision,Recall 等。
而针对这些模块具体的细节,雷锋网 AI 科技评论与范意兴进行了如下讨论,以下为具体的问答环节。
AI 科技评论:MatchZoo 工具的可扩展性如何?作为一个工具,用户的体验很重要,你们在设计时考虑到了哪些易用性方面的需求?
范意兴:MatchZoo 工具的设计之初就是为了方便大家能快速的使用以及设计更多的深度文本匹配模型,因此,我们在设计 MatchZoo 时就充分的考虑了可扩展性,用户只用关注匹配模型本身而不用考虑数据输入以及目标优化,同时由于我们设计了统一的模型接口,在模型的实现方面,用户也只需实现基本的模型逻辑即可,从而能达到快速可扩展的需求。
AI 科技评论:对输入数据有什么具体的格式要求?在设计数据预处理模块时,对输入数据进行预处理操作最大的难点在哪里,你们是如何解决的?
范意兴:对于输入数据的格式可以有多种,最简单的数据格式是「label text1 text2」。
在数据预处理的操作中,最大的难点在于整个框架输入数据的可扩展性,因此我们将每一条数据对应上了一个唯一的 ID,然后专门在一个 relation 的文件中定义数据之间的匹配度关系。我们还将单词映射到了对应的词 ID,并生成了对应的词 ID 到词向量的映射。同时为了设计一套统一的适用于不同场景不同语言的数据预处理的方案,最大限度的保证数据预处理代码的灵活性,我们设计了一个数据预处理的类(Class Preprocess), 在该类中,我们实现了不同的数据预处理的函数,例如分词、词根还原、词频统计与过滤、以及大小写转换等,用户可以根据自己的需要选择合适的数据预处理的方式,对于有特殊需求的用户,也可以基于我们的数据预处理的类方便的扩展。
AI 科技评论:出于快速构建模型的考虑,你们针对文本匹配定制了特定的层,比如动态池化层,张量匹配层等,这些定制化的层分别能实现什么功能?除了增加一些定制化的层,在模型构建模块,你们还做了哪些改进和优化呢?是否能自建可视化工具?
范意兴:针对文本任务的特定的需求,我们定制了不同的层,这些层和 TensorFlow 中其他的层具有统一的接口,用户可以像使用 TensorFlow 中内置的层一样来使用这些层。除此之外,在 matchzoo/layers/中,我们还针对文本匹配定制了特定的层,如动态池化层、张量匹配层等。
动态池化层主要是针对文本变长的特性设计的,在文本相关的任务中,文本的长度差异非常的大,例如一篇新闻的长度变化可以从几十个字到几万个字;在神经网络模型的逐层抽象过程中需要将不同的输入映射到相同的特征空间中,然而在图像中常用的裁剪或是填补方案在文本处理时,会导致严重的信息损失或是引入过多的噪音,因此,我们实现的动态池化层能避免裁剪或是填补方案带来的问题,针对不同文本的长度的需要进行动态池化。
张量匹配层主要是能够建模两个词向量之间更加复杂的模式匹配,当前大部分的文本相关任务都依赖于词向量,不同词之间的交互就转变成其词向量的交互,使用张量匹配层,能更加充分的捕捉词向量中不同维度的各种交互。
除了定制化的层,在模型构建中,我们还设计了统一的模型接口,用户也可以基于我们的模型接口方便快速的开发其他文本模型,另外我们也提供了很多成熟模型的完整实现。
目前我们还没有为 MatchZoo 构建可视化的工具,后续我们会考虑加上可视化的工具,方便用户的使用。
AI 科技评论:除了前面提到的两个模块,还有训练与评测模块,在模型的训练时这个工具在速度等方面的优势如何?除此之外,你们还考虑到了哪些技术细节?
范意兴:由于我们的工具是基于 TensorFlow 构建的,因此能很方便的利用 GPU 进行训练和测试,训练的速度与模型的复杂程度相关;在目前 MatchZoo 的样例数据集 WikiQA 上,我们在一个 K80 的 GPU 上测试,目前实现的模型中,最复杂的 MV-LSTM 在训练 50 分钟就已经收敛达到最好的效果,其他的模型基本都在 30 分钟左右即可收敛。另一个值得一提的是,我们针对数据量非常大的情况,设计了一个动态样本(包括单文档样本、文档对样本、以及文本列表样本)构建的方法,避免在大数据的场景下内存不足以存放大量的数据时的问题。
AI 科技评论:在 MatchZoo 整体的设计过程中,你们遇到的最大挑战是什么?具体是如何解决的?
范意兴:在 MatchZoo 的整体设计过程中,最大的挑战是工具的架构设计,需要设计一个适应不同模型的统一的框架,同时也要兼顾 TensorFlow 本身的模型构建的特性。我们对不同的匹配模型分析后,抽象出统一的接口,并将整体的实现切分成数据预处理模块、模型构建模块、以及模型训练与评估模块,以便于不同用户在不同需求下使用该工具的可扩展性。
AI 科技评论:在开发 MatchZoo 工具的过程中有哪些经验和心得可以和大家分享呢?
范意兴:开发一个 MatchZoo 文本匹配工具需要对不同匹配算法抽象出统一的接口,良好的架构能够使得工具能方便的扩展。另外,在一些子模块的设计上也要充分考虑灵活性和通用性,比如数据预处理模块,必须考虑到不同任务下输入的多样性,所以要尽可能抽象出能够较好泛化的输入接口。
后记
可以看到,MatchZoo 在灵活性和通用性上进行了多方面的考虑,开发团队还专门设计动态的样本构建方法来应对数据量极大的情况,此外,在模型的训练上,也能较快达到收敛效果。那么在未来,他们还会进行哪些方面的更新呢?
「目前除了及时的反馈大家提出的问题,我们也正在加入更多的 state-of-the-art 的深度文本匹配的模型。」范意兴说道,「除此之外,我们正在为文本分类任务也添加一个公开的基准测试数据集,并给出相应的模型参数配置和性能结果。同时针对工具的使用方面,目前我们是采用 json 文件来确定模型输入和数据的输入,这种方式可以方便快速的实验验证效果,但却给项目的线上直接使用带来一定的麻烦,我们后续也会提供更多的输入接口以支持线上项目的直接使用。」
在这里提个小插曲,当看到 MatchZoo 是基于 Python2 的时候,很多同学第一时间都会想到,什么时候能支持 Python3,毕竟后者是未来主流,这也是 AI 科技评论想问的问题。与此同时,在 MatchZoo 微信群里,也有同学在反映这个问题,短短三天时间,开发团队就表示,「最新的版本已经添加了对 Python 3 的支持,欢迎大家测试。」
当然,除了语言支持的问题,开发团队也一直在积极解决大家提出的疑问,例如对某段代码的解释、实际的操作案例等。不过雷锋网 AI 科技评论注意到,目前 MatchZoo 主要是由学生团队来维护,那么接下来是否会在维护上遇到挑战呢?
范意兴这样说道:「在开源之后,一直有学术界和工业界的朋友加入,开发团队逐渐变大,因此沟通和维护的成本也会变大。」不过他也表明,目前他们团队的人数还比较少,在代码的更新和维护方面还没遇到大的问题。
而对于未来,他表示:「我们 MatchZoo 的项目是开源的,也希望能吸引更多的相关开发人员加入,一起把这个工具做得更好。目前最希望能和相关公司合作,了解不同任务场景下的现实挑战是什么,我们也希望这些算法能在真实的应用场景中发挥作用。」