赞
踩
欢迎关注我的公众号NLP奇幻之旅,原创技术文章第一时间推送。
欢迎关注我的知识星球“自然语言处理奇幻之旅”,笔者正在努力构建自己的技术社区。
本文将会介绍在大模型(LLM)时代下,如何在开放领域进行三元组抽取。本文内容已开源至Github,网址为:https://github.com/percent4/llm_open_triplet_extraction .
在三年前,那时候还是BERT模型时代,笔者在三元组抽取方面做了一些探索尝试,分别在限定领域、开放领域进行三元组抽取,并进一步给出了构建知识图谱的例子。
以下是笔者关于这方面探索的文章:
所谓限定领域三元组抽取
,指的是在特定的Schema约束下,从文本中抽取出符合条件的三元组。笔者当时以2019语言与智能技术竞赛的三元组抽取比赛
为例,其数据集的三元组Schema为50种关系。
采用的模型为Pipeline模型,先用序列标注算法进行实体识别,再用关系分类模型进行关系分类,形成三元组,流程图如下:
所谓开放领域三元组抽取
,指的是不限定Schema,从文本中抽取出有效的三元组。笔者当时以自己标注的三元组数据(主要为人物关系、头衔职务等)为例,数据集规模为3200条样本,采用的模型流程图如下:
三元组抽取能够从非结构化数据(文本)中抽取出符合条件的(实体1, 关系, 实体2)或(实体1, 属性, 属性值)三元组,从而方便我们加工出知识图谱,因为知识图谱的基本单元就是三元组。
笔者以上述的开放领域三元组抽取
为例,在文学作品《平凡的世界》、《白鹿原》、《神雕侠侣》、《明朝那些事儿》、《曾国藩》和政治新闻中抽取三元组,结合人工整理,形成有价值的知识图谱。
关于知识图谱构建的例子,可参考Github项目:knowledge_graph_demo .
时间已进入大模型时代,用大模型来进行开放领域三元组抽取,应当有更好的效果。本文即是笔者的进一步尝试。有了大模型,以往难做的开放领域三元组抽取就变得较为容易了,因为大模型的文本生成模式,基本可以完成以往所有的NLP任务,这无疑是一次NLP领域的重大革命。
笔者在以往3200条关于开放领域三元组抽取样本的基础上,采用主动学习方法,将数据集扩充至5259条样本,涉及领域主要为人物关系、头衔职务等。数据集已上传至HuggingFace,网址为:jclian91/open_domain_triple_extraction .
对三元组数量进行统计分析,如下图所示:
我们构造了1680条无三元组的样本,这在数据集中十分重要,因为现实世界中的文本中包含有大量的无三元组的数据,因此,基于标注数据训练的模型需要有区分是否含有三元组的能力。
在介绍大模型微调三元组抽取前,我们先来看一下,微调后的模型在新样本的表现。
来源网站:https://www.chinanews.com/cj/2023/09-25/10083719.shtml
可视化页面抽取结果如下:
形成的知识图谱如下:
来源网站:https://www.jjxw.cn/xinwen/jjsz/202309/t20230926_6225481.html
可视化页面抽取结果如下:
形成的知识图谱如下:
本文采用Firefly
框架和基座模型Baichuan2-13B-Base
,在开放领域三元组抽取数据集上进行微调(SFT)。
只需要将数据加工成Firefly
框架支持的对话格式,prompt构造如下:
给定以下文本,请分析并提取其中的关系三元组。每个三元组应该包括主体(人物、组织或物体)、关系和客体(人物、地点或物体)。如果文本中没有明显的关系,请返回空字符串。\n\n文本: “{content}”\n\n请按照以下格式提取关系三元组列表:\n- (主体,关系,客体)\n- (主体,关系,客体)\n\n如果没有可识别的关系,请返回空字符串。
训练参数如下:
{ "output_dir": "output/firefly-baichuan2-13b-spo", "model_name_or_path": "/workspace/Baichuan2-13B-Base", "train_file": "./data/spo.jsonl", "num_train_epochs": 10, "per_device_train_batch_size": 4, "gradient_accumulation_steps": 2, "learning_rate": 1e-4, "max_seq_length": 550, "logging_steps": 100, "save_steps": 100, "save_total_limit": 1, "lr_scheduler_type": "constant_with_warmup", "warmup_steps": 300, "lora_rank": 64, "lora_alpha": 16, "lora_dropout": 0.05, "gradient_checkpointing": true, "disable_tqdm": false, "optim": "paged_adamw_32bit", "seed": 42, "fp16": true, "report_to": "tensorboard", "dataloader_num_workers": 0, "save_strategy": "steps", "weight_decay": 0, "max_grad_norm": 0.3, "remove_unused_columns": false }
对开放领域三元组抽取进行模型评估应当是一件困难的事情,因为三元组的Schema是不受约束的。但好在,笔者构建的数据集主要是从新闻、小说中采集的关于人物关系、头衔职务的数据,因此,笔者又收集了来自各个网站的新闻、小说中的三元组,共100条评估样本,文件为evaluate_data.xlsx
,前几行如下:
文本 | 真实三元组 | 来源 | 网址 |
---|---|---|---|
新华社杭州9月24日电(记者姬烨、董意行)国际奥委会主席巴赫23日在杭州出席了第19届亚运会开幕式,他称赞这场开幕式是数字创新和人文风采的完美结合。 | (新华社,记者,姬烨)(新华社,记者,董意行)(国际奥委会,主席,巴赫) | 新华网 | https://www.news.cn/sports/2023-09/24/c_1212274341.htm |
2022年11月,法国总统马克龙访问泰国,受到泰国国王哇集拉隆功接见。希里婉瓦丽出现在父亲身边。 | (法国,总统,马克龙)(泰国,国王,哇集拉隆功) | 网易新闻 | https://www.163.com/dy/article/IFDIJR03051283GO.html |
“这位是红岸基地的雷志成政委。我是杨卫宁,基地的总工程师。离降落还有一个小时,你休息吧。” | (红岸基地,政委,雷志成)(基地,总工程师,杨卫宁) | 鲲弩小说 | https://www.kunnu.com/santi/26653.htm |
对三元组抽取的评估办法,笔者借鉴了苏神的思路,主要参考代码为 examples/task_relation_extraction.py .
最终的评估结果为:
f1: 0.84831, precision: 0.90419, recall: 0.79894: : 100it
这几年来,笔者一直在思考如何在开放领域进行三元组抽取,但在BERT模型时代受限太大,基本就是传统的限定领域的关系抽取模型。
大模型的出现,无疑是现阶段解决开放领域三元组抽取的最佳方式,也算是了了笔者多年的一个夙愿。
当然,大模型在解决开放领域中三元组抽取的过程中并不是万能的,还有许多问题待解决,笔者尝试着列举如下:
以上内容笔者已开源至Github,网址为:https://github.com/percent4/llm_open_triplet_extraction,欢迎大家参考~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。