目录
在自然语言处理(NLP)领域,事件抽取是一项关键任务,它涉及从文本中识别和提取事件及其相关信息。
本文作者将介绍两种常见的事件抽取方法:使用清华大学开源的OmniEvent工具包和ChatGPT大模型方法。
我们将分析这两种方法的优缺点,并提供一些代码示例来展示其实际应用。
方法一:使用OmniEvent库
OmniEvent是清华大学开源的一款用于事件抽取的库,支持多种事件抽取任务,包括触发词检测、事件论元抽取等。该库提供了预训练模型和易于使用的接口,极大简化了事件抽取的实现。
全面涵盖各种范式,并对广泛使用的英文和中文数据集提供公平、统一的评估。模块化实现使 OmniEvent 具有高度可扩展性。
安装OmniEvent
首先,我们需要安装OmniEvent库。可以使用以下命令进行安装:
pip install omnievent
使用OmniEvent进行事件抽取
以下是一个使用OmniEvent进行事件抽取的示例代码:
from OmniEvent import infer
device='cpu'
# 初始化OmniEvent模型
def init_models(device='cpu'):
ed_model, ed_tokenizer = infer.get_pretrained("s2s-mt5-ed",device=device)
eae_model, eae_tokenizer = infer.get_pretrained("s2s-mt5-eae",device=device)
return (ed_model, ed_tokenizer,eae_model,eae_tokenizer)
# 进行事件抽取
def run_ee(models,news_text_list,device='cpu'):
schemas = ["<ace>"]*len(news_text_list)
ed_model, ed_tokenizer,eae_model,eae_tokenizer=models
events = infer.do_event_detection(ed_model, ed_tokenizer, news_text_list, schemas, device)
instances = infer.prepare_for_eae_from_pred(news_text_list, events, schemas)
if len(instances[0]["triggers"]) == 0:
results = [{
"text": instances[0]["text"],
"events": []
}]
return results
arguments = infer.do_event_argument_extraction(eae_model, eae_tokenizer, instances, device)
results = infer.get_eae_result(instances, arguments)
return results
text = "“中比动漫文化周”12日在布鲁塞尔中国文化中心开幕,旨在通过动漫这一独特的艺术形式,促进两国文化的交流与理解。"
models=init_models(device)
ee=run_ee(models,[text])
# 输出结果
for events in ee:
print("文本:", events['text'])
for event in events['events']:
print(f"事件类型: {event['type']}")
print(f"触发词: {event['trigger']}")
print(f"论元: {event['arguments']}")
Output:
文本: “中比动漫文化周”12日在布鲁塞尔中国文化中心开幕,旨在通过动漫这一独特的艺术形式,促进两国文化的交流与理解。
事件类型: 组织行为开幕
触发词: 开幕
论元: [{'mention': '12日', 'offset': [9, 12], 'role': '时间'}, {'mention': '布鲁塞尔中国文化中心', 'offset': [13, 23], 'role': '地点'}, {'mention': '“中比动漫文化周”', 'offset': [0, 9], 'role': '活动名称'}]
CPU times: user 21.2 s, sys: 78.3 ms, total: 21.3 s
Wall time: 5.53 s
OmniEvent优点
- 易用性高:OmniEvent提供了简单易用的API,用户可以快速上手。
- 预训练模型:库中包含多种预训练模型,可直接用于实际任务,减少训练成本。
- 多任务支持:支持多种事件抽取任务,包括触发词检测和事件论元抽取。
缺点
- 依赖数据集:虽然预训练模型能应对大部分任务,但特定领域的事件抽取可能需要额外的训练数据。
- 运行效率低: 模型是直接将ED任务和EAE任务合并为EE任务,因此耗时较长。(可将其分开,再得到ED任务结果后,选择满足条件的数据进行下一步EAE任务的测试)
方法二:使用大模型
大模型(如GPT-4、BERT等)在各种NLP任务中表现优异,也可用于事件抽取。大模型的优势在于其强大的语言理解能力和泛化能力。
由于经费有限,本文只能用网页版用来演示效果。项目中实际开发可以使用Pythonlangchain
工具包调用大模型api接口达到此效果。
使用GPT网页版进行事件抽取
input prompt:
给定的句子为:"“中比动漫文化周”12日在布鲁塞尔中国文化中心开幕,旨在通过动漫这一独特的艺术形式,促进两国文化的交流与理解。"
给定事件类型列表:['灾害/意外-坠机', '司法行为-举报', '财经/交易-涨价', '组织关系-解雇', '组织关系-停职', '财经/交易-加息', '交往-探班', '人生-怀孕', '组织关系-辞/离职', '组织关系-裁员', '灾害/意外-车祸', '人生-离婚', '司法行为-起诉', '竞赛行为-禁赛', '人生-婚礼',