奋战聊天机器人(五)从一句话中提取更多信息

xiaoxiao2021-02-28  58

一句话,可以由任何词构成,可长可短,是一个非结构化的信息。那么为了要计算机理解一句话,我们视图将句子转化为结构化的形式

比如说:

“我下午要和小明在公司讨论一个技术问题” 1)小明是一个实体 2)参与者有两个:我和小明 3)地点设定是:公司 4)要做的事情是:讨论 5)讨论的内容是:问题 6)这个问题是一个技术问题 7)公司是一个地点 8)讨论是一种行为 9)我和小明有某种关系 10)下午是一个时间

1. 分块

分块就是根据句子中的词性和词,按照某种规则组合在一起形成了一个个分块,每个分块代表一个实体。常见的实体包括:组织、人员、地点、日期、时间等

以上面的例子为例,首先我们做名词短语分块,比如:技术问题。名词短语分块通过词性标记和一些规则就可以识别出来,也可以通过机器学习的方法识别

除了名词短语分块还有很多其他分块:介词短语,动词短语、句子

2.分块如何标记和存储呢?

可以采用IOB标记,I(inside,内部)、O(outside,外部)、B(begin, 开始),一个块的开始标记为B,块内的标识符序列标注为I,所有其他标识符标注为O

也可以用树结构来存储分块,用树结构可以解决IOB无法标注的另一类分块,那就是多级分块。多级分块就是一句话可以有多重分块方法,比如:我以我的最高权利惩罚你。这里面“最高权利”、“我的最高权利”、“以我的最高权利”是不同类型分块形成一种多级分块,这是无法通过IOB标记的,但是用树结构可以。这也叫做级联分块。具体树结构举个例子:

(S (NP 小明) (VP (V 追赶) (NP (Det 一只) (N 兔子))))

这是不是让你想到了语法树?

3.关系抽取

通过上面的分块可以很容易识别出实体,那么关系抽取实际就是找出实体和实体之间的关系,这是自然语言处理一个质的跨越,实体识别让机器认知了一种事物,关系识别让机器掌握了一个真相。

关系抽取的第一个方法就是找到(X, a, Y)这种三元组,其中X和Y都是实体,a是表达关系的字符串,这完全可以通过正则来识别,因为不同语言有这不同的语法规则,所以方法都是不同的,比如中文里的“爱”可以作为这里的a,但是“和”、“因为”等就不能作为这里的a

编程实现

from nltk.corpus import conll2000 print coll2000.chunked_sents('train.txt')[99]

参考资料来源:http://www.shareditor.com/

转载请注明原文地址: https://www.6miu.com/read-76664.html

最新回复(0)