引自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]+
原文地址:https://www.cnblogs.com/mengzizhao/p/8378696.html