投资知道 基于BERT的中文问答匹配检测

投资知道 问题答案匹配

本项目基于BERT中文预训练模型,使用huggingface transformers开源工具库实现中文关于投资知道的问题答案匹配检测系统的模型实现。
问题适用场景:投资问答/论坛等,自动检测问题答案是否匹配,代替人工审核。

模型、代码及数据下载地址

所有数据、模型及代码下载链接:百度网盘地址,提取码: doh9
原始BERT预训练模型为chinese_wwm_pytorch,下载地址哈工大崔一鸣开源的中文预训练模型,网盘上也有,主要需3个文件,按huggingface库要求改名,具体见file_utils.py,模型bin文件,配置json文件和词表txt文件。

数据分析及预处理

原始数据结构 title/question/reply/is_best,question大部分为空。处理方式详见 preprocess_data_touzi.ipynb
查看数据概况:
投资知道数据格式
数据概况总共588159条数据,数据分布:

  1. question数据分布

    question为空的有: 439921
    question 与 title 内容相同的有: 10542291253
    question 不为空,且与title 内容不相同的有: 56985
    
  2. 分析question与title不同的5W6数据
    在这里插入图片描述前2列为title与question

  3. question数据处理:
    1>考虑title与question的长度。2>考虑title与question的文本相似度。
    对于文本相似度大于一定值的取长度较长的数据,对于文本相似度较低的,互为补充考虑将question与title拼接起来作为最终的best_title。相似度较低
    相似度较高

is_best表示数据集中问题与答案是否匹配,0为不匹配,1为匹配。考虑两种处理方式:

  1. 直接用预处理过question的数据集
  2. 借鉴neg sample思想,筛选出有正确reply的数据集,并构建negative reply数据。neg reply的生成方式为:若数据有负例则采用,若无则挑选非该问题的正例作为neg reply

方式2同时可以考虑一正一负,或者一正四负的数据集。最后构建了3份训练、开发、测试数据集,并在小数据集上试验观察后决定最终采用的数据集

模型训练及结果分析

强烈推荐使用huggingface transformers开源的代码库,几乎涵盖了nlp当前最火最好的各种预训练模型。
使用chinese_wwm_pytorch中文整词预训练好的BERT模型,做句子pair的分类任务:

		df = pd.read_csv(path)
        examples = []
        titles = df["best_title"].astype("str").tolist()
        reply = df["reply"].astype("str").tolist()
        labels = df["is_best"].astype("int").tolist()
        for i in range(len(labels)):
            guid = "%s-%s" % (set_type,i) examples.append(InputExample(guid=guid,text_a=titles[i],text_b=reply[i],label=labels[i]))
        return examples

使用BertForSequenceClassification类取出CLS token,经Linear层得到logits后和label计算交叉熵损失,优化函数使用带weight decay的Adam,初始学习率设置较小为2e-5,激活函数为gelu。在项目根目录下运行:bash run_bert_base.sh,注意按需修改各项参数。
对于预处理后的3种数据集,我们选择在一份小数据集(原始数据有8300条)–保险知道上做对照实验来确定最终选择,所有数据集都跑20k个iteration,对照结果如下图:
深红色为one-four,蓝色为one-one,浅红色为原始数据
学习率下降曲线
dev上的准确率曲线
最终采用one pos one neg的数据作为最后的投资知道分类模型数据集,总共训练了10个epoch,每30K迭代保存一次模型,训练结束共保存了24个checkpoint,模型在checkpoint-330000达到最大dev acc 0.9627821678038782。模型acc曲线如下:
acc曲线

模型部署

本项目更多的用处还是作为接口向外提供服务,因为没有完整的产品线这里就只做一个简单的网页部署。使用网页版Flask部署,在项目根目录下创建一个templates文件夹,存放FQA.html文件,另外需要一个flaskServer.py提供http服务。网盘里都有提供,展示页面如下:在这里插入图片描述

总结

本文在chinese-wmm-pytorch预训练模型下,fine-tuning了投资知道问题、答案匹配的文本分类模型,准确率达到96.27%,可用于问答、知道等论坛应用中的自动检测。BERT模型在nlp中确实厉害,后续还可以尝试更强的RoBERTa模型。在论坛问答应用中还有个特别重要的功能就是最佳答案推荐,基于已有的问答库,对用户提出的新问题,给出推荐答案,后续尝试这个问题的解决方案。

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值