直接去做指定消解,市面上大多模型要么没法以小样本形式,要么模型太大,就两张k80的我跑不了,提供一种使用PaddleNlp的UIE模型进行指代消解的思路
我的场景是公安笔录,训练只用了三条实际对话数据,脱敏一条给大家看看:
问:我们是翻斗花园派出所的民警(出示人民警察证),现依法对你进行询问。你应当如实回答我们的询问并协助调查,不得伪造、隐匿、毁灭证据,否则将承担法律责任。你有权对有关情况进行陈述和申辩,有权就被询问事项自行提供书面材料,有权拒绝回答与案件无关的问题,有权对公安机关负责人、办案民警、鉴定人、翻译人提出回避申请,有权核对询问笔录,对笔录记载有误或者遗漏之处提出更正或补充意见。如果你的回答内容涉及国家秘密、商业秘密或者个人隐私,公安机关会予以保密。以上权利、义务告知,你听明白了吗?有何要求?答:听明白了。没有要求。问:我们是翻斗花园派出所的工作人员(出示人民警察证),现依法向你询问有关问题,请你如实回答,对与本案无关的问题,你有拒绝回答的权利,你听清楚了吗?答:听清楚了。问:你要如实回答提问,陈述事实,诬告或者作伪证要负法律责任,明白吗?答:明白。问:你的个人情况?答:我叫海绵宝宝,女性,汉族,大学文化程度,政治面貌:群众,2048年10月29日出生,户籍所在地海之霸蟹堡王小区098号,现住太平洋比基尼海滩比奇堡贝克街126号,职业:无,工作单位:无,居民身份证号码:1234567890,联系电话:1234567890。问:你因何事报警?答:我被打了。问:什么时间?在什么地点?答:2591年7月34日0时许,在贝壳街123号KFC门口。问:你把当时的情况详细地说一遍。答:2591年7月35日晚上8点多,我在章鱼哥的家中喝酒,吃饭完以后我们就去KTV唱歌,唱完歌以后我们就去KFC吃夜宵,吃夜宵的时候章鱼哥的男朋友,他姓痞,吃饭的时候他和我说话就总说脏话,然后我有点不愿意我就站起来往外走,走到门口的时候,他还说脏话,我就也骂了他一句,之后我就走出KFC的门口叫了一辆车,我就在门口等车,这时候章鱼哥的男朋友在后面就打了我后背一拳,然后他走到我前面用手抓着我脖领子,然后我们就被人劝开了,我就打了个车离开了,我在车上的时候章鱼哥的男朋友还发微信骂我,我就报警了。问:都有谁参与打架?答:章鱼哥的男朋友和我。问:为什么发生打架?答:就因为他和我说话总带脏字,然后我不愿意了就走了,然后回了他一句,他就打我了。问:你认识殴打你的人吗?答:认识,他是章鱼哥的男朋友,姓痞,好像叫痞老板,具体哪几个字我不清楚。问:说一下他的体貌特征及衣着打扮?答:体型微胖,身高15左右,双眼皮问:你是否受伤?伤是怎么造成的?答:我后背疼,是章鱼哥男朋友痞老板打的。问:他是怎么打你的?答:用拳头打了我后背一下。问:你有无还手?答:没有。问:你还有什么需要补充说明的吗?答:没有。问:你以上所讲的是否属实?答:属实。
数据标注方式使用doccano或现在PadddleNLP主推的Label Studio,标签有四种:
这里使用的是doccano
被询问人:需要标注实际被询问人名字
被询问人指代词:需要标注实际被询问人名字的指定,你我他等等
嫌疑人甲:需要标注实际被询问人提到的第一个涉案人名字
嫌疑人甲指定词:需要标注实际被询问人提到的第一个涉案人名字,你我他等等
上面的提到的三条笔录结构比较简单,只有被询问人和一个施害者或一个受害者,所以只有四个标签,可以根据自己的业务进行调整
下面基本无脑化操作,具体数据转化和模型训练代码参考:
PaddleNLP/applications/information_extraction at develop · PaddlePaddle/PaddleNLP · GitHub
训练完后:
测试效果代码:
from pprint import pprint
from paddlenlp import Taskflow
import jieba.posseg as pseg
schema = ['被询问人', '被询问人指代词','嫌疑人甲','嫌疑人甲指代词']
# 设定抽取目标和定制化模型权重路径
# with open("./for_chushi_anaphora /checkpoint-600")
def isname(single_word_string):
pair_word_list = pseg.lcut(single_word_string)
for eve_word, cixing in pair_word_list:
if cixing == "nr":
return True
return False
my_ie = Taskflow("information_extraction", schema=schema, task_path='./for_chushi_anaphora /checkpoint-1100')
data_try = "问:我们是翻斗花园派出所的民警(出示人民警察证),现依法向你讯问有关问题,你有权陈述有罪的情节或者无罪的辩解,向你讯问的问题你应当如实回答,与本案无关的问题你有拒绝回答的权利,你听清楚了吗?答:我清楚了。问:现依据《中华人民共和国刑事诉讼法》第十五条之规定,如你自愿如实供述自己的罪行,承认指控的犯罪事实,愿意接受处罚,可以依法从宽处理,你听明白了吗?答:我明白了。问:这是《犯罪嫌疑人诉讼权利义务告知书》,交给你收执并阅读,你如果不识字,我们可以读给你听,你听明白了吗?答:我明白了问:现依据《中华人民共和国刑事诉讼法》第三十四条规定,你有权聘请律师作为你的辩护人,如果因经济困难或者其他原因没有委托辩护律师的,可以向法律援助机构申请法律援助,你听清了吗?答:我清楚了问:根据有关法律规定,如果你认为我们与本案有利害关系,可能影响案件的公正处理,你有权申请回避,你申请吗?答:我不申请。问:你的个人情况?答:我叫高启强,男性,汉族,大专文化程度,政治面貌:群众,1981年3月35日出生,户籍所在地太平洋比基尼海滩比奇堡贝克街82号,现住太平洋比基尼海滩比奇堡贝克街9号楼801,职业:卖鱼的,工作单位:克力架俱乐部,居民身份证号码:123456789,联系电话:123456789。问:民警就你涉嫌故意伤害罪一事继续向你了解一下情况?答:好的,我一定积极配合。问:你在讲一下具体的打架经过?答:我走过来去找到之后,他先是辱骂我,我生气了先是用右手握拳打了安欣面部几下,接着我半蹲着又用右手握拳打了安欣胸部和腹部几下,最后我还用脚踢了安欣腹部一下,过程中安欣用手挠了我的面部,之后我就被人拉走分开了,起身之后安欣跑过来用拳打了我一下,我也跑过去打了他后脑一下,之后我们就没有打架了。问:安欣左手骨折是怎么造成的?答:我实在回忆不起来了,但肯定是我造成的,有可能在我打他的时候,他倒下的瞬间用左手撑的时候造成骨折的,也有可能是是在打他的过程中,我无意中用脚踩到他了。问:安欣肋骨骨折是如何造成的?答:都是我殴打造成的。问:安欣面部的伤情是怎么造成的?答:也是我殴打造成的。问:你习惯使用哪只手?答:右手,吃饭、写字都是右手。问:你是否还有追究安欣殴打和辱骂你的法律责任?答:不追究了。问:公安机关在讯问查证期间,是否保障了你的饮食和休息?答:保障了我的饮食和休息。问:办案民警在对你的整个调查过程中,是否有侵犯你人身权力的言行?答:没有。问:你还有什么要补充的吗?答:没有。问:你以上说的是否属实?答:属实。问:以上笔录请你仔细阅看。如果记录有误请指出来,我们即给予更正。请你确认记录无误后再在笔录上逐页签名。答:好的。"
data = my_ie(data_try)
data_try_2 = list(data_try)
xunwen_name = ''
xuanyi_name = ''
for i in range(len(data[0]["被询问人"])):
if isname(data[0]["被询问人"][0]["text"]):
xunwen_name = data[0]["被询问人"][0]["text"]
for i in range(len(data[0]["嫌疑人甲"])):
if isname(data[0]["嫌疑人甲"][0]["text"]):
xuanyi_name = data[0]["嫌疑人甲"][0]["text"]
continue
for i in range(len(data[0]["被询问人指代词"])):
xunwen_zhi_start = data[0]["被询问人指代词"][i]["start"]
xunwen_zhi_end = data[0]["被询问人指代词"][i]["end"]
del data_try_2[xunwen_zhi_start:xunwen_zhi_end]
data_try_2.insert(data[0]["被询问人指代词"][i]["start"], xunwen_name)
for i in range(len(data[0]["嫌疑人甲指代词"])):
xunwen_zhi_start = data[0]["嫌疑人甲指代词"][i]["start"]
xunwen_zhi_end = data[0]["嫌疑人甲指代词"][i]["end"]
del data_try_2[xunwen_zhi_start:xunwen_zhi_end]
data_try_2.insert(data[0]["嫌疑人甲指代词"][i]["start"], xuanyi_name )
data_try_3 = "".join(data_try_2)
data_try_3 = data_try_3.replace("问:","\n问:",-1)
data_try_3 = data_try_3.replace("答:","\n答:",-1)
print(data_try_3)
输出效果:
问:我们是翻斗花园派出所的民警(出示人民警察证),现依法向高启强讯问有关问题,高启强有权陈述有罪的情节或者无罪的辩解,向你讯问的问题高启强应当如实回答,与本案无关的问题高启强有拒绝回答的权利,高启强听清楚了吗?
答:高启强清楚了。
问:现依据《中华人民共和国刑事诉讼法》第十五条之规定,如高启强自愿如实供述自己的罪行,承认指控的犯罪事实,愿意接受处罚,可以依法从宽处理,高启强听明白了吗?
答:高启强明白了。
问:这是《犯罪嫌疑人诉讼权利义务告知书》,交给高启强收执并阅读,高启强如果不识字,我们可以读给高启强听,高启强听明白了吗?
答:高启强明白了
问:现依据《中华人民共和国刑事诉讼法》第三十四条规定,高启强有权聘请律师作为高启强的辩护人,如果因经济困难或者其他原因没有委托辩护律师的,可以向法律援助机构申请法律援助,高启强听清了吗?
答:高启强清楚了
问:根据有关法律规定,如果高启强认为我们与本案有利害关系,可能影响案件的公正处理,高启强有权申请回避,高启强申请吗?
答:高启强不申请。
问:高启强的个人情况?
答:高启强叫高启强,男性,汉族,大专文化程度,政治面貌:群众,1981年3月35日出生,户籍所在地太平洋比基尼海滩比奇堡贝克街82号,现住太平洋比基尼海滩比奇堡贝克街9号楼801,职业:卖鱼的,工作单位:克力架俱乐部,居民身份证号码:123456789,联系电话:123456789。
问:民警就高启强涉嫌故意伤害罪一事继续向高启强了解一下情况?
答:好的,我一定积极配合。
问:高启强在讲一下具体的打架经过?
答:高启强走过来去找到之后,安欣先是辱骂高启强,高启强生气了先是用右手握拳打了安欣面部几下,接着安欣半蹲着又用右手握拳打了安欣胸部和腹部几下,最后安欣还用脚踢了安欣腹部一下,过程中安欣用手挠了高启强的面部,之后高启强就被人拉走分开了,起身之后安欣跑过来用拳打了高启强一下,高启强也跑过去打了安欣后脑一下,之后我们就没有打架了。
问:安欣左手骨折是怎么造成的?
答:高启强实在回忆不起来了,但肯定是高启强造成的,有可能在高启强打他的时候,安欣倒下的瞬间用左手撑的时候造成骨折的,也有可能是是在打他的过程中,高启强无意中用脚踩到安欣了。
问:安欣肋骨骨折是如何造成的?
答:都是高启强殴打造成的。
问:安欣面部的伤情是怎么造成的?
答:也是高启强殴打造成的。
问:高启强习惯使用哪只手?
答:右手,吃饭、写字都是右手。
问:高启强是否还有追究安欣殴打和辱骂高启强的法律责任?
答:不追究了。
问:公安机关在讯问查证期间,是否保障了高启强的饮食和休息?
答:保障了高启强的饮食和休息。
问:办案民警在对高启强的整个调查过程中,是否有侵犯高启强人身权力的言行?
答:没有。
问:高启强还有什么要补充的吗?
答:没有。
问:高启强以上说的是否属实?
答:属实。
问:以上笔录请高启强仔细阅看。如果记录有误请指出来,我们即给予更正。请高启强确认记录无误后再在笔录上逐页签名。
答:好的。
Process finished with exit code 0
看效果还是不错的,个别词没有替换成功,估测为训练数据太少的原因