我们的信息抽取系统采用了多阶段处理流程,充分利用BERT模型的强大能力。以下是一个具体例子,详细说明整个过程:
2021年3月15日,苹果公司在加利福尼亚州库比蒂诺总部发布了新款iPad Pro。这款设备搭载了M1芯片,大大提升了性能和电池续航能力。分析师预测,这将推动苹果在平板电脑市场的份额进一步增长。
使用微调的BERT模型进行NER任务,输出如下:
"entities": [
{"name": "苹果公司", "type": "ORG", "start": 17, "end": 21},
{"name": "加利福尼亚州", "type": "LOC", "start": 23, "end": 28},
{"name": "库比蒂诺", "type": "LOC", "start": 28, "end": 32},
{"name": "iPad Pro", "type": "PRODUCT", "start": 38, "end": 46},
{"name": "M1芯片", "type": "TECH", "start": 53, "end": 57}
]
将相同文本输入BERT进行事件抽取。使用以下标签序列作为真值计算损失函数:
trigger_labels = ['O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-发布事件', 'O', 'O', 'O', 'O', 'O']
argument_labels = ['B-时间', 'I-时间', 'I-时间', 'O', 'B-主体', 'O', 'B-地点', 'I-地点', 'I-地点', 'O', 'O', 'B-产品', 'I-产品', 'I-产品', 'O']
事件抽取模块的输出如下:
"events": [
{
"event_type": "发布事件",
"trigger": {
"text": "发布",
"start": 32,
"end": 34
},
"arguments": {
"时间": {"text": "2021年3月15日", "start": 0, "end": 11},
"主体": {"text": "苹果公司", "start": 17, "end": 21},
"地点": {"text": "加利福尼亚州库比蒂诺总部", "start": 23, "end": 34},
"产品": {"text": "新款iPad Pro", "start": 36, "end": 46}
}
},
{
"event_type": "技术应用",
"trigger": {
"text": "搭载",
"start": 51,
"end": 53
},
"arguments": {
"主体": {"text": "这款设备", "start": 47, "end": 51},
"技术": {"text": "M1芯片", "start": 53, "end": 57}
}
},
{
"event_type": "性能提升",
"trigger": {
"text": "提升",
"start": 61,
"end": 63
},
"arguments": {
"主体": {"text": "这款设备", "start": 47, "end": 51},
"方面": [
{"text": "性能", "start": 64, "end": 66},
{"text": "电池续航能力", "start": 67, "end": 73}
]
}
},
{
"event_type": "市场预测",
"trigger": {
"text": "预测",
"start": 77,
"end": 79
},
"arguments": {
"主体": {"text": "分析师", "start": 74, "end": 77},
"内容": {"text": "苹果在平板电脑市场的份额进一步增长", "start": 80, "end": 98}
}
}
]
在这个过程中,我们利用NER结果:
- 约束论元选择,提高事件抽取准确性。
- 在后处理阶段修正输出,确保抽取的论元span与NER识别的实体边界一致。
因果关系抽取模块输出如下:
"causality": [
{
"cause": {
"event_type": "发布事件",
"trigger": "发布",
"arguments": {
"主体": "苹果公司",
"产品": "新款iPad Pro",
"时间": "2021年3月15日",
"地点": "加利福尼亚州库比蒂诺总部"
}
},
"effect": {
"event_type": "市场预测",
"trigger": "预测",
"arguments": {
"主体": "分析师",
"内容": "苹果在平板电脑市场的份额进一步增长"
}
}
},
{
"cause": {
"event_type": "技术应用",
"trigger": "搭载",
"arguments": {
"主体": "这款设备",
"技术": "M1芯片"
}
},
"effect": {
"event_type": "性能提升",
"trigger": "提升",
"arguments": {
"主体": "这款设备",
"方面": ["性能", "电池续航能力"]
}
}
}
]
事实性判别模块对每个抽取出的事件进行判断,输出如下:
"factuality": [
{
"event": {
"event_type": "发布事件",
"trigger": "发布",
"arguments": {
"主体": "苹果公司",
"产品": "新款iPad Pro",
"时间": "2021年3月15日",
"地点": "加利福尼亚州库比蒂诺总部"
}
},
"factuality": "事实",
"confidence": 0.95
},
{
"event": {
"event_type": "技术应用",
"trigger": "搭载",
"arguments": {
"主体": "这款设备",
"技术": "M1芯片"
}
},
"factuality": "事实",
"confidence": 0.92
},
{
"event": {
"event_type": "性能提升",
"trigger": "提升",
"arguments": {
"主体": "这款设备",
"方面": ["性能", "电池续航能力"]
}
},
"factuality": "事实",
"confidence": 0.88
},
{
"event": {
"event_type": "市场预测",
"trigger": "预测",
"arguments": {
"主体": "分析师",
"内容": "苹果在平板电脑市场的份额进一步增长"
}
},
"factuality": "预测",
"confidence": 0.85
}
]
在输出中:
- "事实"表示该事件被判断为已经发生或确定的事实。
- "预测"表示该事件被判断为未来可能发生的事情或预测。
- "confidence"表示模型对这个判断的置信度。
-
对于因果关系抽取和事实性判别任务,我们创新性地设计了输入方式。除原始文本外,我们还额外输入了事件的位置信息,使用标记插入方式(如[CLS]和[SEP])直接在输入中标记事件位置。这种方法省略了重新识别事件的步骤,减少了潜在错误。
-
在BERT输入处理中,我们巧妙利用BERT已有的特殊标记来表示事件信息,避免了扩展词汇表。例如:
encoded_text = f"[CLS] 事件类型 发布 [SEP] 主体 苹果公司 [SEP] 触发词 发布 [SEP] 产品 新款iPad Pro [SEP] {original_text} [SEP]"
这种方法允许我们在不修改模型或重新训练分词器的情况下,有效编码和利用事件信息。
通过这种多阶段、多任务的集成方法,我们的系统能够从文本中提取丰富的结构化信息,包括实体、事件、因果关系和事实性判断。这不仅提高了信息抽取的全面性和准确性,还展示了如何创新性地利用预训练语言模型来处理复杂的NLP任务。