模型简介
模型特点
模型能力
使用案例
license: cc-by-nc-sa-4.0 datasets:
- 浙江大学知识引擎实验室/信息抽取语料库
- 浙江大学知识引擎实验室/指令式信息抽取数据集 language:
- 英文
- 中文
OneKE:面向知识抽取的双语大语言模型
OneKE是什么?
OneKE是由蚂蚁集团与浙江大学联合研发的大规模知识抽取模型框架,具备中英双语、多领域多任务的通用知识抽取能力,并提供全流程工具链支持。OneKE以开源形式贡献给OpenKG开放知识图谱社区。
基于非结构化文档的知识构建一直是知识图谱规模化落地的关键挑战之一。现实世界信息的高度碎片化与非结构化特性,以及抽取内容与其自然语言表达之间的巨大差异,往往导致大语言模型在信息抽取任务中表现欠佳。自然语言文本常因隐含性、长距离上下文关联而存在歧义、多义与隐喻现象,为知识抽取任务带来显著挑战。针对这些问题,蚂蚁集团与浙江大学结合双方在知识图谱与自然语言处理领域多年的技术积累,联合构建并升级了蚂蚁百灵大模型在知识抽取领域的能力,发布了包含基于Chinese-Alpaca-2-13B全参数微调版本的双语知识抽取框架OneKE。评测指标显示,OneKE在多个全监督与零样本实体/关系/事件抽取任务上均取得了相对较好的效果。
统一知识抽取框架具有广泛的应用场景,能大幅降低领域知识图谱的构建成本。通过从海量数据中抽取结构化知识以构建高质量知识图谱,建立知识要素间的逻辑关联,可实现可解释的推理与决策。也能通过增强大模型缓解幻觉提升稳定性,加速大模型垂直领域应用。例如医疗领域可通过知识抽取将医生经验转化为结构化、规则化管理,构建可控辅助诊疗与医疗问答系统;金融领域可抽取金融指标、风险事件、因果逻辑与产业链,实现金融报告自动生成、风险预测与产业链分析;政务领域可实现政务条例知识化管理,提升公共服务效率与准确性。
OneKE如何训练?
OneKE主要聚焦于模式泛化的信息抽取。由于现有抽取指令数据存在格式不规范、噪声大、多样性不足等问题,OneKE采用了抽取指令规范化清洗、困难负样本收集、基于模式的批量指令构建等技术,具体可参考示意图。更详细信息请参阅论文"IEPile: Unearthing Large-Scale Schema-Based Information Extraction Corpus [Github]"。
OneKE与其他大模型在零样本泛化对比结果如下:
NER-en
: CrossNER_AI, CrossNER_literature, CrossNER_music, CrossNER_politics, CrossNER_scienceNER-zh
: WEIBONER, bosonRE-zh
: COAE2016, IPRE, SKE2020RE-en
: FewRel, Wiki-ZSLEE-en
: CrudeOilNews, WikiEvents, RAMSEE-zh
: FewFC, CCF Law
全监督效果
快速上手OneKE
极简入门
建议至少具备20GB显存进行训练与推理。
import torch
from transformers import (
AutoConfig,
AutoTokenizer,
AutoModelForCausalLM,
GenerationConfig,
BitsAndBytesConfig
)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model_path = 'zjunlp/OneKE'
config = AutoConfig.from_pretrained(model_path, trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
# 4-bit量化版OneKE
quantization_config=BitsAndBytesConfig(
load_in_4bit=True,
llm_int8_threshold=6.0,
llm_int8_has_fp16_weight=False,
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
)
model = AutoModelForCausalLM.from_pretrained(
model_path,
config=config,
device_map="auto",
quantization_config=quantization_config,
torch_dtype=torch.bfloat16,
trust_remote_code=True,
)
model.eval()
system_prompt = '<<SYS>>\nYou are a helpful assistant. 你是一个乐于助人的助手。\n<</SYS>>\n\n'
sintruct = "{\"instruction\": \"You are an expert in named entity recognition. Please extract entities that match the schema definition from the input. Return an empty list if the entity type does not exist. Please respond in the format of a JSON string.\", \"schema\": [\"person\", \"organization\", \"else\", \"location\"], \"input\": \"284 Robert Allenby ( Australia ) 69 71 71 73 , Miguel Angel Martin ( Spain ) 75 70 71 68 ( Allenby won at first play-off hole )\"}"
sintruct = '[INST] ' + system_prompt + sintruct + '[/INST]'
input_ids = tokenizer.encode(sintruct, return_tensors="pt").to(device)
input_length = input_ids.size(1)
generation_output = model.generate(input_ids=input_ids, generation_config=GenerationConfig(max_length=1024, max_new_tokens=512, return_dict_in_generate=True))
generation_output = generation_output.sequences[0]
generation_output = generation_output[input_length:]
output = tokenizer.decode(generation_output, skip_special_tokens=True)
print(output)
更详细推理请参考DeepKE-llm/InstructKGC/6.1.2IE专用模型。
进阶使用OneKE
OneKE指令格式
OneKE中的指令格式为类JSON的字典型字符串,由三个字段组成:
(1) 'instruction'
,即任务描述,用自然语言说明模型扮演的角色与需完成任务;
(2) 'schema'
,待抽取标签列表,明确指示待抽取信息的关键字段,反映用户需求,具有动态可变性;
(3) 'input'
,指待抽取信息的源文本。
以下是各类任务的指令示例:
命名实体识别(NER)
{
"instruction": "你是专门进行实体抽取的专家。请从input中抽取出符合schema定义的实体,不存在的实体类型返回空列表。请按照JSON字符串的格式回答。",
"schema": ["人物姓名", "学历", "职位", "国籍"],
"input": "刘志坚先生:1956年出生,中国国籍,无境外永久居留权,中共党员,大专学历,高级经济师。"
}
关系抽取(RE)
{
"instruction": "你是专门进行关系抽取的专家。请从input中抽取出符合schema定义的关系三元组,不存在的关系返回空列表。请按照JSON字符串的格式回答。",
"schema": ["父亲", "丈夫", "邮政编码", "母亲"],
"input": "丁龙拿出自己一生的积蓄12000美元,这在19世纪末无疑是一笔巨款,并和卡朋蒂埃的捐赠一起作为哥伦比亚大学东亚研究的启动资金。"
}
知识图谱构建(KGC)
{
"instruction": "你是一个图谱实体知识结构化专家。根据输入实体类型(entity type)的schema描述,从文本中抽取出相应的实体实例和其属性信息,不存在的属性不输出, 属性存在多值就返回列表,并输出为可解析的json格式。",
"schema": [
{
"entity_type": "人物",
"attributes": ["中文名", "英文名", "祖籍", "出生日期", "出生地", "职业", "毕业院校", "作品", "获奖情况"]
}
],
"input": "周杰伦(Jay Chou),1979年1月18日生于中国台湾省新北市,祖籍福建省泉州市永春县,中国台湾流行乐男歌手、音乐人、演员、导演、编剧,毕业于淡江中学。2000年发行首张个人专辑《Jay》。2001年发行的专辑《范特西》奠定其融合中西方音乐的风格。2002年举行“The One”世界巡回演唱会;同年凭借歌曲《爱在西元前》获得第13届台湾金曲奖最佳作曲人奖。"
}
事件抽取(EE)
{
"instruction": "你是专门进行事件提取的专家。请从input中抽取出符合schema定义的事件,不存在的事件返回空列表,不存在的论元返回NAN,如果论元存在多值请返回列表。请按照JSON字符串的格式回答。",
"schema": [
{
"event_type": "金融/商业-加息",
"trigger": true,
"arguments": [
"时间"
]
},
{
"event_type": "金融/商业-降息",
"trigger": true,
"arguments": [
"降息幅度"
]
},
{
"event_type": "金融/商业-涨价",
"trigger": true,
"arguments": [
"涨价方"
]
},
{
"event_type": "金融/商业-降价",
"trigger": true,
"arguments": [
"降价方",
"时间"
]
}
],
"input": "AI风控解决方案提供商维择科技获数千万美元C+轮融资"
}
事件触发词识别(EET)
{
"instruction": "你是专门进行事件提取的专家。请从input中抽取出符合schema定义的事件类型及事件触发词,不存在的事件返回空列表。请按照JSON字符串的格式回答。",
"schema": ["组织关系-解散", "组织关系-裁员", "组织关系-解雇", "竞争行为-晋升"],
"input": "雀巢裁员4000人:时代抛弃你的时候,连招呼都不会打!"
}
事件论元抽取(EEA)
{
"instruction": "你是专门进行事件论元提取的专家。请从input中抽取出符合schema定义的事件论元及论元角色,不存在的论元返回NAN或空字典,如果论元存在多值请返回列表。请按照JSON字符串的格式回答。",
"schema": [{"event_type": "组织关系-辞职/离职", "arguments": ["离职方", "时间", "原组织"]}],
"input": "雀


