HanLP中分词器词性标注失效?

问题描述
hanlp分词器把所有词词性分为名词,如图。为什么会出现这种现象?

问题还原
我曾经用PKU2005的语料库训练感知机和CRF分词器,但因为PKU2005语料库只有分词没有词性,于是我就给全部分词加了 \n 的名词词性来训练。如:

# 训练样本示例
迈向/n 充满/n 希望/n 的/n 新/n 世纪/n ——/n 一九九八年/n 新年/n 讲话/n (/n 附/n 图片/n 1/n 张/n )/n 

我怀疑是不是这个原因导致,我现在用基于词典或基于模型的分词器分词结果都是名词词性。

所以这是hanlp中的什么机制导致的呢?模型训练的语料库影响全局的词性统计?怎么修正这种现象呢?

问题解决

  1. 把Java工程中词典缓存的 .bin 文件删除,修复Java项目的词性标注结果
  2. 把python site-package中词典缓存的 .bin 文件删除,修复命令行的词性标注结果

但还是想知道原理,望解答。

1赞

模型train的时候是要通过train_text来进行学习的,如果train_text中词性都为n,那么模型学习到的也是n。
举个例子: train_text是作业 ,作业的内容及质量完全影响了模型的水平。 作业都是名词,那么模型知识面也是名词。

1赞

关于自定义模型可参考 https://bbs.hankcs.com/t/topic/709/5

1赞

影响训练模型的词性我能理解,但目前是所有分词器都受影响了。这是为什么呢?

使用 CRFLexicalAnalyzer analyzer = new CRFLexicalAnalyzer();
System.out.println(analyzer.analyze(text));
尝试下是否词性标注仍是你定义的n

byteArray加载了 文件bin 存储了size个用户词性。 Nature.create后生成词性集如图中列出了bg 、mg、nx 、nz、 v等。
从你的词典缓存的 .bin中生成的可能都是n 故在对词性进行预测时输出结果都指向了n
你本地环境具体细节还需从com/hankcs/hanlp/dictionary/CustomDictionary.java中debug进行跟踪。

感谢解答。