3.6 时间信息抽取
时间信息抽取是时间信息处理、知识图谱构建和自然语言处理的重要研究内容。本节描述从非结构化中文文本中抽取时间表达式(Temporal Expression)或识别时间表达式的方法。这些时间表达式基于公历计时系统和中国计时系统中的时间实体。其中,时间表达式可以看作文本组块,可能为时间点、时间段或时间间隔。本节介绍一种基于转换的错误驱动的时间表达式识别方法。该方法中使用的时间表达标注器是基于中国时间本体开发的[36]。
不同于英文文本,在非结构化中文文本中,词语之间没有显式的分隔标记。另外,汉语没有格(Case)、数量、时态、词性的形态变化和变化标记。因此,时间表达式识别问题的难点需要在没有任何拼写界限和形态变化的中文文本中识别时间表达式或时间实体。
现有研究工作主要是从非结构化文本中识别基于公历计时系统的时间表达式[37,38]。但是,在中国社会,人们同时使用公历历法和农历历法,通常采用公历计时系统和农历计时系统来表示时间。识别时间表达式主要有两种方法:基于规则的方法和基于机器学习的方法。前者依赖于人工构建规则和字典,而后者依赖于带标注的语料库。基于规则的方法相对准确率较高,但是该方法需要大量的知识资源,依赖时间信息表示的语言和语法等方面的特征或规律。Wu等[37]设计一种基于时间语法规则和人工构建的约束规则的时间解析器来识别中文时间实体。
时间表达式的分类结构,如图3.7(a)和(b)所示。时间实体概念包括时间点、时间段和时间间隔,时间实体包括在时间轴上的时间点或时间段。时间间隔是两个不同时间点之间的距离,可以通过开始时间点和结束时间点来计算时间间隔长度。图3.7(a)将时间表达式划分为精准且绝对的时间表达式、精准且相对的时间表达式、模糊且绝对的时间表达式,以及模糊且相对的时间表达式。图3.7(b)中,单一时间点表达式划分为基于事件的时间表达式、基于日历的时间表达式以及基于文化的时间表达式。基于日历的时间表达式可进一步划分为基于格里历的时间表达式、基于农历的时间表达式,以及基于格里历和农历的时间表达式。
图3.7 时间表达式的分类结构
基于转换的错误驱动型学习是一种基于语料库的符号机器学习方法,已广泛应用于自然语言处理领域的许多任务[39]。基于转换的错误驱动型学习的基本思想是以一种迭代方式,不断从自动标注语料和人工标注语料中学习转换规则,通过转换规则来提高时间表达式的识别性能。
基于转换的错误驱动学习的时间表达式识别过程如图3.8所示。首先,使用时间表达式识别器识别训练语料库中的时间表达式。在第一次迭代过程中,从错误标注的时间表达式中生成转换规则,用于更新可执行的声明性语言EDL(Executable Declarative Language),进而识别时间表达式,不断提高时间表达式的识别性能。EDL是识别时间表达式的程序。重复迭代过程,直到不能从训练语料库中错误的时间表达中学习到新的转换规则。因此,能够不断学习时间表达式新的构成部分以及构成方法来更新可执行的声明性语言EDL。时间标注器用于编译可执行的声明性语言EDL,并且执行声明性语言EDL来识别时间表达式。
图3.8 基于转换的错误驱动学习的时间表达式识别过程
对于基于转换的错误驱动的时间表达式识别方法,以非结构化文本语料库和测试非结构化文本语料库为输入,以标注时间表达式的文本为输出。
(1)人工标注训练语料中的时间表达式作为参照语料。
(2)将训练语料输入到时间表达式标注器中,时间表达式标注器根据可执行的声明性语言识别时间表达式。
(3)学习器对自动标注的语料和人工标注的参照语料进行比较。学习器将转换规则模式应用于标注语料,使得自动标注语料和人工标注语料尽量一致,其中转化规则模式定义触发环境和执行操作。
(4)根据目标函数,检索得分最高的转换规则。进一步,执行这些转换规则的操作来更新可执行的声明性语言EDL。
(5)不断迭代第三步和第四步,直至找不到能够提高标注语料性能的转换规则。
(6)根据学习的可执行声明性语言EDL,使用时间表达式标注器识别测试语料中的时间表达式。
可执行声明性语言EDL程序由智能体构成,智能体包括语境和操作。语境包括基本语境和约束语境。若语境满足基本语境和约束语境,则激活智能体。基本语境的内容是一个正则文法系统。该系统基于时间表达式的分类体系,并且给出每种时间表达式的构成方法。约束语境的内容包括用于约束时间表达式的谓词和语境特征。如果智能体的语境满足,则智能体执行其操作。
例如,对于智能体“agent Instant TE”,基本语境定义在“defcalss Syntax〈Syntax_Instant_TE>”。字符串“大约三年多光景”为时间点表达式,满足基本语境“〈时间表达式>::=〈前置修饰词!>〈数词!>〈时间单位!>〈中置修饰词!>〈后置修饰词!>”。在这里,“大约”是前置修饰词,“三”是数词,“年”是时间单位,“多”是中置修饰词,“光景”是后置修饰词。
其中,“〈前置修饰词!>”表示语义类前置修饰词,由具有相同的语法功能,位于数词前面的修饰词构成,即〈前置修饰词!>={大约,约,大体,大概,大致,大抵,大致上,将近,近于,近乎}。另外,〈中置修饰词!>={多,余,弱,把,强,来},〈后置修饰词!>={左右,上下,前后,内外,开外,出头,有零,有余,挂零,光景,模样,前,后,左,有,里,中,外,内,间,头里,当中,中间,之上,之下,之前,之后,之里,之外,之内,之中,之间,以上,以下,以前,以后,以里,以外,以内}。约束语境是时间表达式中不包含标点符号。操作包括在时间表达式的前面和后面插入标签“〈Instant_TE>”和“〈/Instant_TE>”。
转换规则模板由触发环境和操作构成。一组规则模板定义了一个可能的转换规则空间。下面给出了转换规则模板,即若满足任一触发环境,则执行六个操作之一。
触发环境:
(a)IF TempExp(X,Ct)∧NonTempExp(X,Cr)
(b)IF NonTempExp(X,Ct)∧TempExp(X,Cr)
(c)IF TempExp(X,Ct)∧TempExp(Y,Cr)∧Contain(Y,X)
(d)IF TempExp(X,Ct)∧TempExp(Y,Cr)∧Contain(X,Y)
(e)IF TempExp(X,Ct)∧TempExp(Y,Cr)∧∃Z(Contain(X,Z)∧Contain(Y,Z)∧NonEqual(X,Z)∧NonEqual(Y,Z))
必选操作:SegmentingWord(X)∧SegmentingWord(Y)
可选操作:
(a)AddSemanticCalssElement(X,Y,E)
(b)AddSemanticClassRule(X,Y,R)
(c)AddRule(X,Y,R)
(d)AddRule(X,Y,R)∧AddSemanticCalssElement(X,Y,E)
(e)AddRule(X,Y,R)∧AddSemanticClassRule(X,Y,R)
(f)AddConstraintPredicate(X,Y,P)
其中,
X和Y是字符串,Ct是自动标注的语料库,Cr是参照语料库。
TemExp(X,Ct)和NonTemExp(X,Cr)表示Ct中的X是否被识别为时间表达式TE。Contain(X,Y)表示Y是X的子串。Equal(X,Z)和Non-Equal(X,Z)表示X是否等于Z。
SegmentingWord(X)的操作是对X进行分词。
AddRule(X,Y,R)表示:添加一个由X和Y生成的产生式规则R。
AddSemanticClasseRule(X,Y,R)表示:添加一个由X和Y生成的产生式规则R与所有语义类的元素。
AddSemanticCalssElement(X,Y,E)表示:添加一个由X和Y生成的语义类的元素E,添加到可执行声明性语言EDL。
AddConstraintPredicate(X,Y,Pe)将约束谓词Pe添加到可执行声明性语言EDL。
评估候选转换规则目的在于对应用转换规则到训练语料所产生的正面和负面变化进行量化。候选规则R的目标函数O(R)是C(R)-E(R),其中C(R)和E(R)表示产生正面和负面变化的识别时间表达式的数量。
采用准确率Precision(P)、召回率recall(R)和F-measure(F)指标来评估时间表达式识别算法的性能。
其中N是测试非结构化文本语料库中时间表达式的总数,N1是识别出的时间表达式的总数,N2是正确识别的时间表达式总数。
时间表达式识别的数据集包括新闻、历史和考古三个领域和四个语料库。语料库包括约720篇文章和500个网页。随机选择70篇文章和50个网页作为训练语料库。初始的时间文法由大约200个产生式规则所组成。同时,构建了大约160个转换规则来更新可执行声明性语言EDL。所有语料库的性能为准确率86.8%、召回率88.3%和F-度量87.5%。
通过实验结果表明了基于转换的错误驱动的时间表达式识别方法的有效性[36]。该方法的特点如下:
(a)中文时间表达式的文法系统的构建基础是:时间表达式的类别分类层次结构。通过挖掘各类时间表达式的表达规律和特点,构建时间表达式表示方法和转换规则。
(b)通过错误驱动的学习方法,可执行声明性语言EDL通过添加新的产生式规则、终止符、约束谓词,不断更新可执行声明性语言。通过从错误的时间表达式中学习时间文法规则,更新约束语境和产生式规则,提高时间表达式识别性能。
产生时间表达式错误识别的主要原因是分词错误和词义歧义问题。在时间表达式学习中,时间语法和转换规则模板独立于语言。因此,本节的方法可以应用于提取其他语言的时间表达。