自定义领域命名实体识别感知机泛化示例代码没有预测出未知情况

书268页飞机型号训练之后的泛化代码示例有两个问题:
1.示例的System.out.println(analyzer.analyze(“米格-阿帕奇-666S横空出世。”)); 已经在训练语料中出现过了,所以识别肯定会成功
语料中内容:开发/v 的/u [米格/nr -/w 阿帕奇/nr -/w 666S/u]/np 战斗机/n ,/w 也/d 有/v 短距/n 起降/v 及/c 可变/v 后/f 掠/v 翼/ng 两种/m 原型/n 。/w
2.尝试识别一个简单的变化,System.out.println(analyzer.analyze(“米格-阿米奇-666S横空出世。”)); 失败
得到的输出是这个:
米格/nr -/w 阿米奇/nr -/w 666S/u 横空出世/l 。/w

想请教下何老师,谢谢!

请教不敢。失败的主要原因归结到特征的频次不够,感知机的特征模板是±2窗口内的词语与词性。但语料库中没有nr-w-nr-w-u词性形式的战斗机,也没有阿米奇形式的战斗机片段。要知道,传统机器学习的特征模板是非常死板的。虽然你觉得变换很简单,但在特征模板看来阿帕奇和阿米奇的相似度为0.

这份语料应该是用远程监督方法制作的,质量和数量其实都很低。假设数量级足够大,有许多战斗机的词性模式都是nr-w-nr-w-u,则你的例子就可以识别了。

这个样本不应该出现在语料库中,我更新了一下这份语料,删除了它。但模拟远程监督的原理增加了如下样本[米格/nr -/w 威廉/nr -/w 666/m S/q]/np 毫无疑问/l 是/v 远程/a 监督/n 伪造/v 的/u 语料/n,使得感知机学习nr-w-nr-w-m-q的词性模式,以演示它的泛化能力。你可以重新下载一下试试。

cat train.txt | grep '阿帕奇'
md5 train.txt                
MD5 (train.txt) = 44118741183eff9c53a326854751dfaf
1 Like