投资知道 基于BERT的中文问答匹配检测_chinese_wwm_pytorch-程序员宅基地

技术标签: NLP  机器学习  深度学习  

投资知道 问题答案匹配

本项目基于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模型。在论坛问答应用中还有个特别重要的功能就是最佳答案推荐,基于已有的问答库,对用户提出的新问题,给出推荐答案,后续尝试这个问题的解决方案。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zp563987805/article/details/104350670

智能推荐

Ratelimitcache: Python缓存库,支持速率限制-程序员宅基地

文章浏览阅读339次,点赞8次,收藏8次。Ratelimitcache: Python缓存库,支持速率限制项目链接: https://gitcode.com/simonw/ratelimitcache?utm_source=artical_gitcode如果你正在寻找一个Python缓存库,并且希望对缓存操作进行速率限制,那么Ratelimitcache可能是你的理想选择。什么是Ratelimitcache?Ratelimitca..._python ratelimit基于什么

【爬虫】Xpath和CSS信息提取的方法异同点_xpath 获取css-程序员宅基地

文章浏览阅读2.3k次,点赞2次,收藏8次。Xpath和CSS信息提取的方法异同点_xpath 获取css

剑指 Offer(专项突击版)- 剑指 Offer II 052. 展平二叉搜索树(20220729)-程序员宅基地

文章浏览阅读95次。剑指 Offer II 052. 展平二叉搜索树

Xilinx AXI Interconnect_axi interconnect不同位宽-程序员宅基地

文章浏览阅读1.2w次,点赞12次,收藏118次。目录0、绪论1、AXI Crossbar1.1、几种可以选择的Crossbar 互联结构1.1.1、Crossbar mode (Performance Optimized)1.1.2、Shared Access mode (Area optimized)2、AXI Data Width Converter3、AXI Clock Converter4、AXI Pr..._axi interconnect不同位宽

Linux部署Django_Vue_linux 安装django vue3-程序员宅基地

文章浏览阅读340次。linux宝塔_linux 安装django vue3

win7访问smb文件服务器,win7系统配置smb服务器-程序员宅基地

文章浏览阅读1.3k次。win7系统配置smb服务器 内容精选换一换首次开机时,缺省进入遥控器配置向导界面。遥控器操作界面选择“系统设置 > 配置向导”,进入“配置向导”界面。网线连接:当终端有插入网线时,进入“LAN”界面(仅支持IPv4格式),如图3所示。请联系管理员获取网络配置方式,配置方式请参见表1。配置方式配置项操作自动获取终端通过DHCP(Dynamic Host Configuration操作系统镜像..._win7 设置smb访问方式

随便推点

关掉\禁用win7自动配置ipv4地址的方法 默认网关自动消失的解决办法_禁止修改网关命令-程序员宅基地

文章浏览阅读3w次,点赞2次,收藏4次。转载自: http://blog.csdn.net/zouqin369/article/details/6913692 今天去公司设置好IP后,无论怎么样都上不了internet,再次打开本地后发现默认网关自动消失,cmd下输入ipconfig后的现象如下: 物理地址. . . . . . . . . . . . . : 00-22-64-55-76-8F DHCP 已启用_禁止修改网关命令

Extjs4.2 window加载HTML,父子页面html传参_extjs中打开网页怎么传参-程序员宅基地

文章浏览阅读482次。Extjs的窗口是可以加载自己的HTML的,但这样两个页面就相当独立了,传参是个问题 ,网上也没有很好的解答清楚,猫猫今天就说清楚这个模式的传参要点。_extjs中打开网页怎么传参

计算机网络复习——Ch3点到点数据链路层_hdlc go-back-n-程序员宅基地

文章浏览阅读1.2k次。Ch3点到点数据链路层知识点1. 点到点数据链路层要解决的主要问题2. 常见的帧管理(帧定界)方法3. CRC的计算4. 流量控制的基本原理5. 常见错误及其处理机制6. 滑动窗口的概念、形式及工作原理7. ARQ(Automatic Repeat reQuest)协议工作原理:8. 连续ARQ(Go-back-N ARQ)工作原理(特别注意累计确认):9. 选择重传ARQ工作原理10. 了解(高..._hdlc go-back-n

oracle四大索引类型,各种Oracle索引类型介绍-程序员宅基地

文章浏览阅读2.6k次。逻辑上:Single column 单行索引Concatenated 多行索引Unique 唯一索引NonUnique 非唯一索引Function-based函数索引Domain 域索引物理上:Partitioned 分区索引NonPartitioned 非分区索引B-tree:Normal 正常型B树Rever Key 反转型B树Bitmap 位图索引索引结构:B-tree:适合与大量的增、删、..._oracle索引有哪几种类型

CountDownLatch闭锁_countdownlatch illegate-程序员宅基地

文章浏览阅读176次。11_countdownlatch illegate

推荐文章

热门文章

相关标签