NLP(七十五)大模型时代下的开放领域三元组抽取

您所在的位置:网站首页 数据抽取翻译 NLP(七十五)大模型时代下的开放领域三元组抽取

NLP(七十五)大模型时代下的开放领域三元组抽取

2024-06-13 02:47| 来源: 网络整理| 查看: 265

欢迎关注我的公众号NLP奇幻之旅,原创技术文章第一时间推送。

欢迎关注我的知识星球“自然语言处理奇幻之旅”,笔者正在努力构建自己的技术社区。

本文将会介绍在大模型(LLM)时代下,如何在开放领域进行三元组抽取。本文内容已开源至Github,网址为:https://github.com/percent4/llm_open_triplet_extraction .

回顾

在三年前,那时候还是BERT模型时代,笔者在三元组抽取方面做了一些探索尝试,分别在限定领域、开放领域进行三元组抽取,并进一步给出了构建知识图谱的例子。

以下是笔者关于这方面探索的文章:

NLP(二十六)限定领域的三元组抽取的一次尝试

NLP(二十七)开放领域的三元组抽取的一次尝试

知识图谱构建举例

限定领域三元组抽取

所谓限定领域三元组抽取,指的是在特定的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条无三元组的样本,这在数据集中十分重要,因为现实世界中的文本中包含有大量的无三元组的数据,因此,基于标注数据训练的模型需要有区分是否含有三元组的能力。

可视化

在介绍大模型微调三元组抽取前,我们先来看一下,微调后的模型在新样本的表现。

例子1

来源网站:https://www.chinanews.com/cj/2023/09-25/10083719.shtml

可视化页面抽取结果如下:

形成的知识图谱如下:

例子2

来源网站: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.htm2022年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,欢迎大家参考~

推荐阅读 NLP(二十六)限定领域的三元组抽取的一次尝试NLP(二十七)开放领域的三元组抽取的一次尝试知识图谱构建举例


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3