<知识库的构建> 2-1 有名字的实体的识别 Named Entity Recognition

引自Fabian Suchanek的讲义。

 

总结:NER是为了从语料库中找到实体的名字,即要识别语料库中哪写单词使我们想读出来的。NER的实现主要有两种方法,一种是字典法,另一种是正则表达式法。传统字典法就是把entity放入字典中去找是否有对应的名字,很慢,所以后期有了新字典法,即Trie。正则部分强调了如何根据language的形态写出对应的正则。所以重点是要知道实现NER的两种方法及其优缺点及如何用正则描述language。

 

被命名的实体Named entity:带名字的entity

被命名实体的识别NER:在语料库中找到实体的名字

 

字典Dictionary(传统):一组实体名称

       若该实体在字典中有,则能查找到其名称

       缺点:慢

 

所以有了新版的Dictionary,即Trie

单词查找树Trie:一颗树状图,节点为boolean,正确或错误,边为要读的字母

       我们说一个单词可以被Trie找到即:此单词中所有的字母都被Trie的根读,直至遇到一个节点,并且此节点标注True

添加字符串,那么Trie上如何添加叶子和枝:

-      若要添加的单词是KB中单词的前缀:则把新单词的末端之后的节点改为True

-      其他单词:在根处,根据新单词的字母,添加叶和枝

在实际应用中:用Trie读单词,度的过程中遇到T即可返回match

关于Tries的小tips:取消大小写,使Trie尽可能符合要读的单词,……

Trie的优缺点:

-      优点:快快快

-      缺点:

n   必须预先就有一个Trie

n   不能处理单词的变体,例如过去式,etc

n   必须进行维护以读新单词

n   不能处理无限的单词,例如名字

小练习:在一个Trie上添加单词

正则表达式 Regex

字母Alphabet:符号的集

单词 Word:一系列的符号

语言Language:单词形成的集合

小练习

L1 ={Arthur Dent, Ford Prefect, ...}                                [A-Z][a-z]+ [A-Z][a-z]+

L2 ={1900, 1901, 1982, 2013, 2017, ...}                         [0-9] [0-9] [0-9] [0-9]

L3 ={0, 1, 2, 3, 4, 5, 6, 7, 8, 9}                                           [0-9]

L4 ={a, ab, abb, bbba, aaabbab, ababa, ...}                  (a|b)+

L5 ={a, b, aa, bb, aaa, bbb, ...}                                        (a+|b+)

L6 ={a, aa, aaa, ...}                                                            (a+)

L7 ={, ab, abab, ababab, ...}                                            (ab)*

L8 ={c, ca, caa, caaa, ...}                                                   c(a)*

L9 ={, a, aa, aaa, ...}                                                          a*

补充:

L(.) = {.}       任意标志

L(a[2,4]) 要a组成所有长度2到长度为4的序列

 

正则的作用:定义数字,电话,HTML的标签,etc

给正则起名named regexes:最好用类似于digits,separator,pattern等的名字

 

正则表达式组Regex group:一系列用正则表达的式子

       例如:the answer to [a-z]+, the [a-z]+ and [a-z]+

              这里面包含4个正则组,3个[a-z]+,和 [a-z]+ and [a-z]+

 

posted @ 2018-01-29 18:03  赵梦子  阅读(205)  评论(0编辑  收藏  举报