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

Pascall ·
更新时间:2024-09-21
· 984 次阅读

投资知道 问题答案匹配

本项目基于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条数据,数据分布:

question数据分布

question为空的有: 439921 question 与 title 内容相同的有: 10542291253 question 不为空,且与title 内容不相同的有: 56985

分析question与title不同的5W6数据
在这里插入图片描述前2列为title与question

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

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

直接用预处理过question的数据集 借鉴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曲线

总结

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


作者:study for happy



投资

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章