中国科学院计算技术研究所网络数据科学与技术重点实验室近日发布了
深度文本匹配开源项目
MatchZoo。MatchZoo是一个Python环境下基于TensorFlow开发的开源文本匹配工具,让大家更加直观地了解深度文本匹配模型的设计、更加便利地比较不同模型的性能差异、更加快捷地开发新型的深度匹配模型。MatchZoo提供了基准数据集(TREC MQ系列数据、WiKiQA数据等)进行开发与测试,整合了当前最流行的深度文本匹配的方法(包括
DRMM
[1]
, MatchPyramid
[2]
, DUET
[3]
, MVLSTM
[4]
, aNMM
[5]
, ARC-I
[6]
, ARC-II
[6]
, DSSM
[7]
, CDSSM
[8]
等算法的统一实现),旨在为信息检索、数据挖掘、自然语言处理、机器学习等领域内的研究与开发人员提供便利, 可以应用到的任务场景包括文本检索,自动问答,复述问题,对话系统等等。作为一个开源项目,欢迎大家给我们提供宝贵的建议与意见,同时也欢迎大家申请加入我们的开发队伍。
GitHub
:
https://github.com/faneshion/MatchZoo
MatchZoo工具具有容易拓展和便于设计新的深度文本匹配模型的特点,其结构如图所示:
MatchZoo使用了Keras中的神经网络层,并有数据预处理,模型构建,训练与评测三大模块组成:
-
模型构建模块(
machzoo/models/, matchzoo/layers/):该模块基于Keras以帮助我们快速开发。Keras中包含了深度学习模型中广泛使用的普通层,如卷积层、池化层、全连接层等,除此之外,在matchzoo/layers/中,我们还针对文本匹配定制了特定的层,如动态池化层、张量匹配层等。这些基本的层操作使得我们能够快速高效地实现复杂的深度文本匹配的模型,在matchzoo/models/中,我们实现了目前主流的深度文本匹配模型(如DRMM, MatchPyramid, DUET, MVLSTM, aNMM, ARC-I, ARC-II, DSSM, CDSSM等),具体的模型介绍请参照后续的模型部分。
-
训练与评测模块(
matchzoo/losses, matchzoo/metrics/):该模块提供了针对回归、分类、排序等问题的目标函数和评价指标函数。例如,在文本排序中常用的基于单文档的目标、基于文档对的目标、以及基于文档序列的目标。用户可以根据任务的需要选择合适的目标函数。在模型评估时,MatchZoo也提供了多个广为使用的评价指标函数,如MAP、NDCG、Precision,Recall等。同时,在文本排序任务中,MatchZoo还能生成兼容TREC的数据格式,可以方便地使用trec_eval
[9]
来进行模型评估。
基准测试
我们采用
TREC
MQ系列基准数据、WikiQA基准数据等进行开发与测试,以下我们以WikiQA数据为例说明MatchZoo的使用。
在项目的数据文件夹的WikiQA/run_data.sh 中,我们提供了从数据下载到预处理并生成MatchZoo数据格式的脚本,直接运行run_data.sh即可生成所需的数据。同时,matchzoo的模型文件夹中,针对WikiQA任务,我们为不同的模型配置了运行所需的参数,参数配置在matchzoo/models/README中有详细的说明。
在训练时,只需在MatchZoo/matchzoo中运行:
python main.py --phase train --model_file models/wikiqa_config/drmm_wikiqa.config
在测试时,可先在配置文件中指定要加载的模型参数文件,然后在MatchZoo/matchzoo中运行:
python main.py --phase predict --model_file models/wikiqa_config/drmm_wikiqa.config
我们对比了以下
10
个模型,不同模型的性能如下所示:
模型
|
性能指标
|
NDCG@3
|
NDCG@5
|
MAP
|
DSSM
|
0.3412
|
0.4179
|
0.3840
|
CDSSM
|
0.5489
|
0.6084
|
0.5593
|
ARC-I
|
0.5680
|
0.6317
|
0.5870
|
ARC-II
|
0.5647
|
0.6176
|
0.5845
|
MV-LSTM
|
0.5818
|
0.6452
|
0.5988
|
DRMM
|
0.6107
|
0.6621
|
0.6195
|