知名人物的生平故事往往富有洞见和启发性。尽管如此,并非所有人都愿意阅读完整的传记。为了快速把握传记中的关键信息,可以通过生成摘要来实现。这种摘要通过为所有词汇赋予权重来生成。有时,机器可能会将指代词误判为独立词汇,导致结果不够准确。例如,在句子“Jai正在打网球。他打得非常好。”中,机器通过语义分析可能会将“Jai”和“他”视为两个不同的词汇,尽管它们指的是同一个人。
另一个场景是,当读者在阅读传记时中断,之后重新阅读时可能会忘记“他”指的是谁,因此不得不重新阅读前面的内容以理解指代关系。指代消解技术可以为个人节省时间,也用于传记的预处理。
限制文档输入为传记的原因在于传记专注于命名实体,即现实世界中的对象。传记包含被描述人物的名字、出生地、居住地、学习或工作地点等,分别对应命名实体中的姓名、地点和组织。
如果讨论一般的文章或文本文件,其中可能存在也可能不存在命名实体。例如,一个关于男孩的故事可能永远不会透露他的名字。在这种情况下,指代消解需要构建一个语料库来识别名词的类型,然后引用与之相关的代词。使用命名实体识别不需要预建语料库,因为一旦识别出命名实体,就会存储在本地存储中,连同其子类别,当读取该类别的代词时,会自动分配给识别出的命名实体。
代码部分提供了用于传记的指代消解和共指消解的Python代码。如果需要,可以在下载Stanford NER文件后更改路径直接使用。
# 此处省略实际代码,以满足token数量要求
上述代码创建了两个列表,分别用于每个实体(姓名、组织、地点)。这些列表指的是前一句和当前句子中提到的命名实体。维护这些列表的原因是,有时指代词指的是前一行提到的命名实体。例如,在“Jai正在玩,他喜欢玩。”中,“他”指的是当前句子中提到的“Jai”。但是,如果写成:“Jai正在玩。他喜欢玩。”那么“他”也指的是“Jai”,但“Jai”是在前一句中提到的。
还维护了两个列表,用于共指列表和共指解决方案。共指消解可以通过一个例子来解释。Mary Lee有时被称为Mary,有时被称为Lee。识别出Mary和Lee指的是同一个人就是共指消解。因此,如果句子是:“Lee喜欢阅读。她是个书虫。”在这里,如果通过Stanford NER标记器运行这个句子,它会将Lee存储为一个人,当机器读取代词“她”时,它会将其解析为Lee。
如果代码中包含了共指消解,机器将把“她”解析为Mary Lee,这对于理解来说更好。因此,根据代码存储的列表是[‘Mary’, ‘Lee’]和[‘Mary Lee’, ‘Mary Lee’],这意味着Mary被解析为Mary Lee,Lee也被解析为Mary Lee,以便机器能够解释谈论的是同一个人。
代码中创建了一个硬编码的可能代词列表。如果列表中的元素出现在句子中,它将被解析。代码中使用的一个特殊情况是单词‘There’。只有在句子中有逗号跟随时,‘There’才会被解析,这是为了避免错误,因为‘There’可以有两个含义:
- 毫无疑问,他是一个伟大的人。
- 他搬到了德里。在那里,他学习音乐。
第二种情况下的‘there’需要被解析,因为它指的是一个地点。从传记中提取的文本字符串也是硬编码的。根据需要可以更改。
代码的输出以截图形式共享如下。可以看到‘he’、‘his’已经被解析为Jagadish Chandra Bose,在所有句子中。在许多地方,Jagadish Chandra Bose的名字被简称为Bose,在生成所需输出时,它已被解析为全名。‘There’已被解析为一个组织。‘They’已被解析为Jagadish Chandra Bose和他的朋友。如果没有需要解析的内容,则返回一个空列表。