基于词典的实体识别
ner(命名实体识别)一般是词典和模型方式结合,词典负责已有词识别,模型负责未知词识别。 在不需发现未知词的情况下基于词典的实体识别已足够 基于字典的ner也有两种做法:字符串多模匹配 和 切词(词典加入自定义词库) 字符串多模匹配 多模匹配有两种基本算法:trie树 和 记录长度集合的最长匹配 trie树匹配效率更高,但占用内存更多 而记录长度集合的最长匹配,计算时间效率相比trie稍低(但比切词高很多),内存空间比较省,这里重点介绍一下 记录长度集合的最长匹配方式不依赖分词,会存储以字典中每个词开头两个字的长度集合,并对字典中每个字做hashmap。 举个例子,刘德华的歌曲 ,先查 刘德 开头的词的长度有 5 3 两个长度,然后再取5个长度的“刘德华的歌”,字典里没有,则再取3个长度“刘德华”,字典里有,则命中 采用该种方式相比切词更容易出现错误匹配,比如 “研究生命科学“ ,假如“研究生“在字典里,就会错误识别为“{实体}命科学“,因为该方式不考虑上下文,而切词会考虑 实验:采用该最长匹配方式测试700万数据,实体字典占600M 4000问句平均每个耗时16微秒,而切词方式平均每个耗时300微秒; 最长匹配相比之下效率有20倍提升: 一方面是因为切词规则复杂 一方面是最长匹配实际用到字符串匹配的次数很少,我统计了一下4000问句平均每句只用了2.3次字符串匹配 切词匹配