中文 dev_WIKI+ALBERT+NER+W2V+Torchserve+前端的中文问答系统开源项目

项目介绍

项目地址:

nocoolsandwich/iamQA​github.com
1052817027ae173c34640688c5b5d916.png

这个项目是参照的DrQA想法搭建了一个中文的百科问答系统,通过该项目你可以使用上BERT和W2V(词向量搜索),NER(命名实体识别)等NLP模型方法去搭建你的中文问答系统。

涉及技术
NLP:BERT,ALBERT,NER,W2V
服务系统:torchserver,flask

除了NLP方法,本项目还涉及torchserve部署和flask后端,不过这些技术细节你都暂时不需要太了解,只需要通过readme的步骤即可搭建好你的中文问答系统,如果你想深入学习可以看项目源码。接下来我们各个模块深入讲解。

项目框架

本项目框架

6a963b256f36e3b53d140454e354a077.png

回答的流程:做entity link我们先NER识别出周星星,结果知识库没有周星星这个词条,然后W2V发现周星星就是周星驰,接着我们得到周星驰的词条,把问题和文档喂给bert,bert回答到是李小龙。这就是整个流程。出发之前我们先看下前辈DrQA。

先看一下QrQA这个项目的框架,这个是facebook团队在ACL 2017发表的,那时候BERT还没出生,这篇论文的主要贡献之一就是做了一个还可以的阅读理解模型,用的是sequence模型。

DrQA回答问题流程:

问题 》 retriever(索引问题相关文档) 》 reader(从文档抽取精确答案) 》 回答

ad620f0f7acc67497963f14ffc253c76.png

DrQA用的是ES文档搜索,当时我试了一下效果比较差,特别在对一些问题是关于某个的情况,比如问:川普毕业于哪里,搜索会指向文章里面有很多“川普”这两个字的文档,而不会指向川普的词条。我突然想到,可能是我对每条文档没有足够的拆分,如果文档拆分的颗粒度细一些可能不会出现这个问题。

c1028d880dac9552a99fb6609a8d54a8.png

对QrQA改造

对于上述问题document retriever很难指向实体文档,所以我换成了entity linking的方法,使用了NER和W2V的方法,同事针对阅读理解更换成中文数据集的BERT,具体可以看下列表格

7c9c453d38fe0441a8b0bf442eaaca8d.png

NLP模块

NER

NER使用的是CCKS2016 KBQA的问题数据构造,这样我们可以更容易识别出问题中的实体,具体是参照这个项目:

997261095/bert-kbqa​github.com
6801f6b925e8f9411943420b20095ff7.png

我在项目基础把模型载入更换成了hugging face的transformers,他也是pytorch写的,并且提供了更加友好的模型下载方式,这样可以的更换模型来进行实验。具体的代码修改我们只要关注到tokenizer和model,以及model的输出部分的调整。实体识别F1和准确率都是98%以上。

W2V

直接使用了这个项目训练好的W2V,使用的是综合语料的结果。

Embedding/Chinese-Word-Vectors​github.com
08c21336b9b87b675328ab13cb98efca.png

a560165de00c3742d0858230c6762624.png

READER

参考项目,

CLUEbenchmark​github.com

这是一个非常棒的中文GLUE(General Language Understanding Evaluation)项目,他叫CLUEbenchmark,基本包含所有的中文GLUE项目的benchmark。我们用的就是里面的CMRC2018baseline,中文阅读理解比较出名的数据集就是CMRC2018了,他是类SQuAD数据集,用于中文阅读理解问题。

关于reader的模型结果:

6712a3ac7d040d2b2b219a33ab340f72.png

ALBERT_base在dev的EM有66%,结果是稍微优于CLUEbenchmark的dev得分,这与使用的预训练模型在数据集和超参数等细节造成的。几个点的出入而已。值得注意的是test的得分,因为我没有在test上测试过,但是可以从他们的实验结果中得知我的模型在test的EM应该也在70%这样。

部署模块

torchserve

torchserve可以参考我这个文章,torchserve是给torch做模型部署的。

Nozhihu:torchserve模型部署与CMRC2018问答系统部署​zhuanlan.zhihu.com

前端交互

直接套用这个框架,改一改后端获取数据的方法就好了,改成从torchserve请求,得到访问结果。

drqa-webui​github.com

成果展示

这里贴几张,大家可以通过项目iamQA搭建,同时扩展你的知识库让系统懂更多,你也可以改进你的文档索引器,不一定使用Entity Linking的形式,使用ES对大量文档的索引是一个方法,也可以用深度匹配的形式,或者把知识库换成FAQ,做一个FAQ问答系统,套用上torchserve和前端。

nocoolsandwich/iamQA​github.com
1052817027ae173c34640688c5b5d916.png

952eaf73405887df8c6c4a674fe2c2f5.png

f98dcb3541955dd286c3be6fcca5b6c5.png

535996555b6bf86ce782232a521e63b9.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值