使用bert进行事件抽取。
scikit-learn==1.1.3
scipy==1.10.1
seqeval==1.2.2
transformers==4.27.4
pytorch-crf==0.7.2
--checkpoint:模型和配置保存位置
--model_hub:预训练模型
----chinese-bert-wwm-ext:
--------vocab.txt
--------pytorch_model.bin
--------config.json
--data:存放数据
----duee
--------ori_data:原始的数据
--------ner_data:处理之后的数据
------------labels.txt:标签
------------train.txt:训练数据
------------dev.txt:测试数据
--------re_data:
------------labels.txt:关系标签
------------train.txt:训练数据
------------dev.txt:测试数据
------------rels.txt:该数据集没有,因为实体只有两类,有的话则是哪些实体之间具有关系
--config.py:配置
--model.py:模型
--process.py:处理ori数据得到ner数据和re数据
--predict.py:加载训练好的模型进行预测
--ner_main.py:实体识别训练和测试
--re_main.py:关系识别训练和测试
使用的方法:
这里以duee数据为例。
1、去https://huggingface.co/hfl/chinese-bert-wwm-ext/tree/main下载相关文件到chinese-bert-wwm-ext下。搜索千言数据集下载duee1.0,解压后将相关json放置在ori_data下。
2、在process.py里面定义将ori_data里面的数据处理得到ner_data下的数据和re_data下的数据。
ner_data下数据样本是这样的:
--labels.txt
财经/交易_出售/收购
组织行为_罢工
人生_出轨
财经/交易_涨停
人生_失联
灾害/意外_起火
竞赛行为_退赛
人生_婚礼
......
--train.txt/dev.txt
{"id": "cba11b5059495e635b4f95e7484b2684", "text": ["消", "失", "的", "“", "外", "企", "光", "环", "”", ",", "5", "月", "份", "在", "华", "裁", "员", "9", "0", "0", "余", "人", ",", "香", "饽", "饽", "变", "“", "臭", "”", "了"], "labels": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B-组织关系_裁员", "I-组织关系_裁员", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
一行一条样本,格式为BIO。
re_data下的数据样本是这样的:
--labels.txt
{
"财经/交易_出售/收购": [
"时间",
"出售方",
"交易物",
"出售价格",
"收购方"
],
"财经/交易_跌停": [
"时间",
"跌停股票"
],
"财经/交易_加息": [
"时间",
"加息幅度",
"加息机构"
],
......
}
--train.txt/dev.txt
{"id": "cba11b5059495e635b4f95e7484b2684", "text": ["消", "失", "的", "“", "外", "企", "光", "环", "”", ",", "5", "月", "份", "在", "华", "裁", "员", "9", "0", "0", "余", "人", ",", "香", "饽", "饽", "变", "“", "臭", "”", "了"], "start": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "end": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], "prompt": "组织关系_裁员的裁员人数"}
3、在config.py里面定义一些参数,比如:
--max_seq_len:句子最大长度,GPU显存不够则调小。
--epochs:训练的epoch数
--train_batch_size:训练的batchsize大小,GPU显存不够则调小。
--dev_batch_size:验证的batchsize大小,GPU显存不够则调小。
--save_step:多少step保存模型
其余的可保持不变。注意:实体识别最大长度和关系抽取最大长度要保持一致。
4、在ner_main.py里面修改data_name为数据集名称。需要注意的是名称和data下的数据集名称保持一致。最后运行:python ner_main.py
5、在re_main.py里面修改data_name为数据集名称。需要注意的是名称和data下的数据集名称保持一致。最后运行:python re_main.py
5、在predict.py修改data_name并加入预测数据,最后运行:python predict.py
触发词识别:
max_seq_len=256
epochs=3
train_batch_size=32
dev_batch_size=32
论元识别:
max_seq_len=256
epochs=1
train_batch_size=32
dev_batch_size=32
触发词识别:
precision recall f1-score support
交往_会见 0.90 1.00 0.95 9
交往_感谢 0.88 0.88 0.88 8
交往_探班 1.00 0.82 0.90 11
交往_点赞 0.83 0.91 0.87 11
交往_道歉 0.70 1.00 0.83 19
产品行为_上映 0.85 0.94 0.89 35
产品行为_下架 0.92 0.96 0.94 24
产品行为_发布 0.79 0.88 0.84 153
产品行为_召回 0.95 0.97 0.96 36
产品行为_获奖 0.85 0.69 0.76 16
人生_产子/女 0.73 0.73 0.73 15
人生_出轨 0.50 0.25 0.33 4
人生_分手 0.84 0.89 0.86 18
人生_失联 0.80 0.86 0.83 14
人生_婚礼 0.67 1.00 0.80 6
人生_庆生 0.73 0.69 0.71 16
人生_怀孕 1.00 0.75 0.86 8
人生_死亡 0.78 0.81 0.80 107
人生_求婚 0.83 1.00 0.91 10
人生_离婚 0.87 0.89 0.88 38
人生_结婚 0.79 0.79 0.79 43
人生_订婚 1.00 0.89 0.94 9
司法行为_举报 0.86 1.00 0.92 12
司法行为_入狱 0.82 0.86 0.84 21
司法行为_开庭 0.82 1.00 0.90 14
司法行为_拘捕 0.88 0.94 0.91 90
司法行为_立案 0.80 0.89 0.84 9
司法行为_约谈 0.97 1.00 0.99 33
司法行为_罚款 0.91 0.88 0.89 33
司法行为_起诉 0.73 0.90 0.81 21
灾害/意外_地震 0.75 0.75 0.75 20
灾害/意外_坍/垮塌 0.75 0.82 0.78 11
灾害/意外_坠机 0.80 0.92 0.86 13
灾害/意外_洪灾 0.67 0.57 0.62 7
灾害/意外_爆炸 0.89 0.80 0.84 10
灾害/意外_袭击 0.69 0.65 0.67 17
灾害/意外_起火 0.89 0.86 0.88 29
灾害/意外_车祸 0.66 0.77 0.71 35
竞赛行为_夺冠 0.72 0.71 0.71 65
竞赛行为_晋级 0.76 0.86 0.81 36
竞赛行为_禁赛 0.75 0.83 0.79 18
竞赛行为_胜负 0.86 0.83 0.85 271
竞赛行为_退役 0.85 1.00 0.92 11
竞赛行为_退赛 0.89 0.89 0.89 18
组织关系_停职 0.92 1.00 0.96 11
组织关系_加盟 0.88 0.72 0.79 53
组织关系_裁员 0.86 0.86 0.86 22
组织关系_解散 0.59 1.00 0.74 10
组织关系_解约 0.00 0.00 0.00 5
组织关系_解雇 0.71 0.38 0.50 13
组织关系_辞/离职 0.79 0.94 0.86 71
组织关系_退出 0.78 0.95 0.86 22
组织行为_开幕 0.85 0.97 0.91 30
组织行为_游行 0.89 0.67 0.76 12
组织行为_罢工 0.89 1.00 0.94 8
组织行为_闭幕 0.90 1.00 0.95 9
财经/交易_上市 0.86 0.75 0.80 8
财经/交易_出售/收购 0.78 0.88 0.82 24
财经/交易_加息 0.00 0.00 0.00 3
财经/交易_涨价 0.50 0.20 0.29 5
财经/交易_涨停 0.97 1.00 0.98 28
财经/交易_融资 0.93 0.88 0.90 16
财经/交易_跌停 0.81 0.87 0.84 15
财经/交易_降价 0.44 0.70 0.54 10
财经/交易_降息 0.00 0.00 0.00 4
micro avg 0.82 0.85 0.83 1783
macro avg 0.77 0.80 0.78 1783
weighted avg 0.82 0.85 0.83 1783
论元识别:
总共:3527,正确:1963,准确率:0.5565636518287497
融合预测:
文本>>>>> 振华三部曲的《暗恋橘生淮南》终于定档了,洛枳爱盛淮南谁也不知道,洛枳爱盛淮南其实全世界都知道。
实体>>>>> {'产品行为_上映': [('定档', 16, 17)]}
关系>>>>> {'产品行为_上映': [('上映方', '振华', 0, 1), ('上映影视', '振华三部曲的《暗恋橘生淮南》', 0, 13)]}
====================================================================================================
文本>>>>> 腾讯收购《全境封锁》瑞典工作室 欲开发另类游戏大IP
实体>>>>> {'财经/交易_出售/收购': [('收购', 2, 3)]}
关系>>>>> {'财经/交易_出售/收购': [('出售方', '腾讯', 0, 1), ('交易物', '《全境封锁》瑞典工作室 欲开发另类游戏大IP', 4, 25), ('收购方', '腾讯', 0, 1)]}
====================================================================================================
文本>>>>> 6月22日,山外杯第四届全国体育院校篮球联赛(SCBA)在日照市山东外国语职业技术大学拉开战幕。
实体>>>>> {'组织行为_开幕': [('拉开', 43, 44), ('幕', 46, 46)]}
关系>>>>> {'组织行为_开幕': [('时间', '6月22日', 0, 4), ('地点', '日照市山东外国语职业技术大学', 29, 42), ('活动名称', '山外杯第四届全国体育院校篮球联赛(SCBA)', 6, 27)]}
====================================================================================================
文本>>>>> e公司讯,工信部装备工业司发布2019年智能网联汽车标准化工作要点。
实体>>>>> {'产品行为_发布': [('发布', 13, 14)]}
关系>>>>> {'产品行为_发布': [('时间', '2019年', 15, 19), ('发布产品', '2019年智能网联汽车', 15, 25), ('发布方', '工信部装备工业司', 5, 12)]}
====================================================================================================
文本>>>>> 新京报讯 5月7日,台湾歌手陈绮贞在社交网络上宣布,已于两年前与交往18年的男友、音乐人钟成虎分手。
实体>>>>> {'人生_分手': [('分手', 48, 49)]}
关系>>>>> {'人生_分手': [('时间', '两年前', 29, 31), ('分手双方', '台湾歌手陈绮贞', 11, 17), ('分手双方', '音乐人钟成虎', 42, 47)]}
====================================================================================================
文本>>>>> 国际金价短期回调 后市银价有望出现较大涨幅
实体>>>>> {}
关系>>>>> {}
====================================================================================================
文本>>>>> 央视名嘴韩乔生在赛前为中国男篮加油,期待球队展现英雄本色,输球后的韩乔生也相当无奈,他用3个“没有”来点评中国男篮,没有投手、没有经验、没有体力,实在太扎心。
实体>>>>> {'竞赛行为_胜负': [('输球', 29, 30)]}
关系>>>>> {'竞赛行为_胜负': []}
====================================================================================================
文本>>>>> 8月31日,第四届两岸关系天府论坛在四川眉山市举行。
实体>>>>> {'组织行为_开幕': [('举行', 23, 24)]}
关系>>>>> {'组织行为_开幕': [('时间', '8月31日', 0, 4), ('地点', '四川眉山市', 18, 22), ('活动名称', '第四届两岸关系天府论坛', 6, 16)]}
====================================================================================================
文本>>>>> 6月10日基金异动:申万菱信中证申万电子行业投资指数分级B较前一交易日上涨6.6837%
实体>>>>> {'财经/交易_涨价': [('上涨', 35, 36)]}
关系>>>>> {'财经/交易_涨价': [('时间', '6月10日', 0, 4), ('涨价幅度', '6.6837%', 37, 43), ('涨价方', '申万菱信', 10, 13)]}
====================================================================================================
文本>>>>> 期间,肖某及其父母向被告黄某支付了彩礼14万元。
实体>>>>> {}
关系>>>>> {}
====================================================================================================
文本>>>>> 9月8日,第七届中国(绵阳)科技城国际科技博览会成果发布会举行。
实体>>>>> {'组织行为_开幕': [('会举行', 28, 30)]}
关系>>>>> {'组织行为_开幕': [('时间', '9月8日', 0, 3), ('地点', '第七届中国(绵阳)科技城', 5, 16), ('活动名称', '第七届中国(绵阳)科技城国际科技博览会', 5, 23)]}
====================================================================================================
文本>>>>> 今日,,张晋发布视频,通告蔡少芬喜怀三胎!
实体>>>>> {'人生_产子/女': [('怀', 17, 17)]}
关系>>>>> {'人生_产子/女': [('时间', '今日', 0, 1), ('产子者', '蔡少芬', 13, 15), ('出生者', '蔡少芬', 13, 15)]}
====================================================================================================
由于这几个项目的代码结构都差不多,而且都和信息抽取相关,就一起放在这。