Skip to content

Latest commit

 

History

History
222 lines (196 loc) · 7.11 KB

description.md

File metadata and controls

222 lines (196 loc) · 7.11 KB

多阶段信息抽取系统

我们的信息抽取系统采用了多阶段处理流程,充分利用BERT模型的强大能力。以下是一个具体例子,详细说明整个过程:

输入文本

2021年3月15日,苹果公司在加利福尼亚州库比蒂诺总部发布了新款iPad Pro。这款设备搭载了M1芯片,大大提升了性能和电池续航能力。分析师预测,这将推动苹果在平板电脑市场的份额进一步增长。

1. 命名实体识别(NER)

使用微调的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}
]

2. 事件抽取

将相同文本输入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结果:

  1. 约束论元选择,提高事件抽取准确性。
  2. 在后处理阶段修正输出,确保抽取的论元span与NER识别的实体边界一致。

3. 因果关系抽取

因果关系抽取模块输出如下:

"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": {
                "主体": "这款设备",
                "方面": ["性能", "电池续航能力"]
            }
        }
    }
]

4. 事实性判别

事实性判别模块对每个抽取出的事件进行判断,输出如下:

"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"表示模型对这个判断的置信度。

创新点

  1. 对于因果关系抽取和事实性判别任务,我们创新性地设计了输入方式。除原始文本外,我们还额外输入了事件的位置信息,使用标记插入方式(如[CLS]和[SEP])直接在输入中标记事件位置。这种方法省略了重新识别事件的步骤,减少了潜在错误。

  2. 在BERT输入处理中,我们巧妙利用BERT已有的特殊标记来表示事件信息,避免了扩展词汇表。例如:

    encoded_text = f"[CLS] 事件类型 发布 [SEP] 主体 苹果公司 [SEP] 触发词 发布 [SEP] 产品 新款iPad Pro [SEP] {original_text} [SEP]"

    这种方法允许我们在不修改模型或重新训练分词器的情况下,有效编码和利用事件信息。

通过这种多阶段、多任务的集成方法,我们的系统能够从文本中提取丰富的结构化信息,包括实体、事件、因果关系和事实性判断。这不仅提高了信息抽取的全面性和准确性,还展示了如何创新性地利用预训练语言模型来处理复杂的NLP任务。