当前位置:   article > 正文

ChatGLM警情识别实战(三)_chatglm3 识图

chatglm3 识图

模型选取

确定数据脱敏方案后,就要开始选取模型,任务的关键在于机器阅读理解(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
  • 1

然后输入一下内容,该模型是基于大规模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")
  • 1
  • 2
  • 3
  • 4
  • 5

模型默认会下载到本地路径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'))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

# 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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

  1. BERT-MRC模型在不同的数据集上的效果差异比较大,而且数据处理也非常影响模型的性能,所以BERT-MRC模型是一个性能非常不稳定的模型,需要使用者理解其内部的原理后采用合适的方法来使用。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/606464
推荐阅读
相关标签
  

闽ICP备14008679号