中科院发布:深度文本匹配开源工具

-免费加入AI技术专家社群>>

中国科学院计算技术研究所网络数据科学与技术重点实验室近日发布了深度文本匹配开源项目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中的神经网络层,并有数据预处理,模型构建,训练与评测三大模块组成:

数据预处理模块(matchzoo/inputs/):该模块包含通用的文本预处理功能,如分词、词频过滤、词干还原等,并将不同类型文本匹配任务的数据处理成统一的格式,具体包含如下的几个文件:

corpus_preprocessed.txt:问题及回答内容文件,每行以(id, length, word_id)格式书写,分别表示问题或者回答的id,文本长度,以及词id;

relation_train.txt, relation_valid.txt, relation_test.txt:训练,验证, 测试文件,每行以(rel,query_id, doc_id) 格式书写,分别表示问题与回答的相关度(数据中1为相关,0为不相关),问题的id,以及答案的id;

embed_glove_d50:词向量文件,每行以(id, embeddings)格式书写,分别表示词向量的id,以及每个embedding分量,该文件根据模型需要可选择性的提供。

同时该模块针对不同的任务需求提供了不同的数据生成器,包括有基于单文档的数据生成器、基于文档对的数据生成器、以及基于文档列表的数据生成器。不同的数据生成器可适用于不同的文本匹配任务,如文本问答、文本对话、以及文本排序等。

模型构建模块(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]来进行模型评估。

基准测试

我们采用TRECMQ系列基准数据、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个模型,不同模型的性能如下所示:

由于WikiQA数据量大小的限制,这里ARC-I, ARC-II, MV-LSTM, DRMM, aNMM, DUET, MatchPyramid, DRMM_TKS都使用了预先训练好的Glove[10]词向量来初始化单词表达。这里的评价指标的得分是根据在验证数据集上的MAP指标选出的最佳模型在测试数据集上计算所得。由于WikiQA是一个排序的问题,这里统一采用的是pair-wise的hinge 损失函数。不同模型在训练数据集上的损失曲线如下图1所示,同时,不同模型在测试数据集上的MAP指标如图2所示。

图 1 训练loss曲线图

图 2 测试的MAP性能曲线图

本文来自企鹅号 - AI讲堂媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Echo is learning

machine learning 之 Anomaly detection

961
来自专栏云时之间

NLP入门之形式语言与自动机学习(一)

第一篇:集合与推理方法 1:我们为什么要学习形式语言与自动机 任何一门科学都有其自身的理论基础,计算机科学也是这样.大家现在看看计算机的技术变化的很快,现在我们...

73113
来自专栏人工智能

通过JS库Encog实现JavaScript机器学习和神经学网络

在本文中,你会对如何使用 JavaScript 实现机器学习这个话题有一些基本的了解。

1.3K10
来自专栏AI研习社

中科院计算所开源深度文本匹配开源工具 MatchZoo

中国科学院计算技术研究所网络数据科学与技术重点实验室近日发布了深度文本匹配开源项目 MatchZoo。MatchZoo 是一个 Python 环境下基于 Ten...

3106
来自专栏Vamei实验室

概率论02 概率公理

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

691
来自专栏数据派THU

自然语言处理如何检查拼写错误?(Tensorflow实例教程、源代码)

原文:Towards Data Science 作者:Dave Currie 来源:机器人圈 本文长度为2400字,建议阅读5分钟 本文教你用TensorFlo...

6858
来自专栏机器学习算法与Python学习

神经网络图灵机

摘要 本文通过引入一个使用注意力程序进行交互的外部存储器(external memory)来增强神经网络的能力。新系统可以与图灵机或者冯·诺依曼体系相类比,但每...

3399
来自专栏大数据挖掘DT机器学习

如何使用sklearn进行数据挖掘?

1.1 数据挖掘的步骤 数据挖掘通常包括数据采集,数据分析,特征工程,训练模型,模型评估等步骤。使用sklearn工具可以方便地进行特征工程和模型训练工作,在...

3276
来自专栏程序员宝库

使用 JavaScript 实现机器学习和神经学网络

英文:JeffHeaton 译文: 云+社区/白加黑大人 https://cloud.tencent.com/developer/article/103589...

35710
来自专栏me的随笔

【译】10个机器学习的JavaScript示例

原文地址:10 Machine Learning Examples in JavaScript

562

扫码关注云+社区