关于第八章的demo_plane.py

第八章没法识别出新型号

构建完毕
耗时 3016 ms 保存完毕
语料: 4k…
0.10 compressed model - P:99.99 R:99.98 F:99.98
米高扬/nrf 设计/v [米格/nr -/w 17/m PF/nx]/np :/w [米格/nr -/w 17/m]/np PF/n 型/k 战斗机/n 比/p [米格/nr -/w 17/m P/nx]/np 性能/n 更好/l 。/w
米格/nr -/w 阿帕奇/nrf -/w 666/m S/q 横空出世/l 。/w

于是我用 learn 想学习一下, 结果

米高扬/nrf 设计/vn [米格/nr -/w 17/m PF/nx]/np :/w [米格/nr -/w 17/m PF/nx]/np 型/k 战斗机/n 比/p [米格/nr -/w 17/m P/nx]/np 性能/n 更好/d 。/w
[米格/nr -/w 阿帕奇/nrf -/w 666/m S/nx]/np 横空出世/i 。/w
Traceback (most recent call last):
File “Untitled.py”, line 53, in
analyzer.learn(sentence)
jpype._jclass.IllegalArgumentException: 在线学习不可能学习新的标签: 阿帕奇/nrf ;请标注语料库后重新全量训练。

大概情况就是, 识别出来的"阿帕奇" 是 nrf , 可是又不能学习新标签, 之后我自己直接把 CWSTrainer | NERTrainer | POSTrainer 都用这个飞机语料给训练一遍. 情况不太好.

tagSet.nerLabels.clear() # 不识别nr、ns、nt
为什么不做一个最长的匹配呢? 比如识别出 np 里面可能有 nr \ ns \ nt 等成分, 但因为 np 识别出来最长, 所以选 np?

  1. 感知机shuffle了sample,是一个随机算法。
  2. 在模型随机的条件下,一个例子是否正确是随机事件。
米高扬/nrf 设计/v [米格/nr -/w 17/m PF/nx]/np :/w [米格/nr -/w 17/m]/np PF/n 型/k 战斗机/n 比/p [米格/nr -/w 17/m P/nx]/np 性能/n 更好/l 。/w
[米格/nr -/w 阿帕奇/nrf -/w 666/m S/q]/np 横空出世/l 。/w
MD5 (train.txt) = 44118741183eff9c53a326854751dfaf

你似乎没有读NER IOBES序列标注的原理。

感谢博士耐心解答, 的确因为项目比较需要命名实体识别, 我是跳着读的, 如果是这样的原理的话,
trainer.tagSet.nerLabels.clear() # 不识别nr、ns、nt
trainer.tagSet.nerLabels.add(“np”) # 目标是识别np
就是说这个训练器会有 nr \ ns \ nt 作为默认训练目标对吗?
如果我不 clear() ,选择把 nr\ns\nt\np 都作为训练目标, 这个时候发现识别出了 nr \ ns \ nt 没有识别出 np, 其实原因是因为语料库缺少 [\nr \v…]\np 这样的样本对吗?

对,我知道企业对NER的需求很大,相应地也需要标注足够量的语料库才行。

1 Like

明白了! 非常感谢!