ChatGLM警情识别实战(三)

模型选取

确定数据脱敏方案后,就要开始选取模型,任务的关键在于机器阅读理解(Machine Reading Comprehension, MRC),该任务也可以称为命名实体识别,根据内容选取了以下模型:

BERT-MRC模型

BERT-MRC模型是目前实体识别领域的一个SOTA模型,在数据量较小的情况下效果较其他模型要更好,原因是因为BERT-MRC模型可以通过问题加入一些先验知识,减小由于数据量太小带来的问题,在实际实验中,在数据量比较小的情况下,BERT-MRC模型的效果要较其他模型要更好一点。BERT-MRC模型很适合在缺乏标注数据的场景下使用。
具体理论知识可以参考这篇文章

https://blog.csdn.net/eagleuniversityeye/article/details/109601547

BERT-MRC的作用

一图搞懂
在这里插入图片描述
可以看到,该模型对任务需求十分契合,这也是最开始敲定这个模型的原因之一

BERT-MRC本地部署与使用

首先和bert-base-chinese模型一样确定环境已经安装了transformer,否则需要安装

pip install transformers

然后输入一下内容,该模型是基于大规模MRC数据再训练的,使用大量中文MRC数据训练的roberta_wwm_ext_large模型,效果比原版要更好
具体可以参考该模型的github

# Load model directly
from transformers import AutoTokenizer, AutoModelForQuestionAnswering

tokenizer = AutoTokenizer.from_pretrained("luhua/chinese_pretrain_mrc_roberta_wwm_ext_large")
model = AutoModelForQuestionAnswering.from_pretrained("luhua/chinese_pretrain_mrc_roberta_wwm_ext_large")

模型默认会下载到本地路径C:\Users\.cache\huggingface\hub\models--luhua--chinese_pretrain_mrc_roberta_wwm_ext_large下,也可以通过dir指定下载路径。注意:如果指定下载路径,调用的时候也需要指定路径

接下来就可以在本地部署使用了

# Load model directly
from transformers import pipeline
from transformers import AutoTokenizer, AutoModelForQuestionAnswering

tokenizer = AutoTokenizer.from_pretrained("luhua/chinese_pretrain_mrc_roberta_wwm_ext_large")
model = AutoModelForQuestionAnswering.from_pretrained("luhua/chinese_pretrain_mrc_roberta_wwm_ext_large")

qa = pipeline(task='question-answering',model=model,tokenizer=tokenizer)
print(qa(question=["报警人是谁"],context='报警人叫张三,身份证号是450481197804234431,今天在某中学收到一个盗用我学生的QQ号向我求助急用钱,根据对方的提示操作被诈骗了1000元,请派警。嫌疑人李四 光大银行 4270286502778806'))

在这里插入图片描述

# Load model directly
from transformers import pipeline
from transformers import AutoTokenizer, AutoModelForQuestionAnswering

tokenizer = AutoTokenizer.from_pretrained("luhua/chinese_pretrain_mrc_roberta_wwm_ext_large")
model = AutoModelForQuestionAnswering.from_pretrained("luhua/chinese_pretrain_mrc_roberta_wwm_ext_large")

qa = pipeline(task='question-answering',model=model,tokenizer=tokenizer)
print(qa(question=["嫌疑人是谁"],context='报警人叫张三,身份证号是450481197804234431,今天在某中学收到一个盗用我学生的QQ号向我求助急用钱,根据对方的提示操作被诈骗了1000元,请派警。嫌疑人李四 光大银行 4270286502778806'))

在这里插入图片描述
可以看到,模型会对自己的答案进行一个打分(也可以认为是模型对该答案的正确率的判断),给出答案的起始和结束地址以及答案本身

BERT-MRC的弊端

经过一系列测试,我们可以发现该模型十分契合任务需求,但是我并没有选择继续做下去了,主要是它不够大(我的任务是大模型)由我的搭档继续测试训练,等到他写了关于该模型的训练时会在此附上引用学习。接下来讲一下该模型的问题:

  1. 提问query不能嵌套问题,即问题只能包含一个命名实体,当有多个命名实体时只会回答其中一个且准确率不高
# Load model directly
from transformers import pipeline
from transformers import AutoTokenizer, AutoModelForQuestionAnswering

tokenizer = AutoTokenizer.from_pretrained("luhua/chinese_pretrain_mrc_roberta_wwm_ext_large")
model = AutoModelForQuestionAnswering.from_pretrained("luhua/chinese_pretrain_mrc_roberta_wwm_ext_large")

qa = pipeline(task='question-answering',model=model,tokenizer=tokenizer)
print(qa(question=["报警人和嫌疑人分别是谁"],context='报警人叫张三,身份证号是450481197804234431,今天在某中学收到一个盗用我学生的QQ号向我求助急用钱,根据对方的提示操作被诈骗了1000元,请派警。嫌疑人李四 光大银行 4270286502778806'))

在这里插入图片描述

  1. BERT-MRC模型在不同的数据集上的效果差异比较大,而且数据处理也非常影响模型的性能,所以BERT-MRC模型是一个性能非常不稳定的模型,需要使用者理解其内部的原理后采用合适的方法来使用。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值