命名实体识别,某一类词无法识别出词性

何老师:
您好,拜读完了您的《自然语言处理入门》,在使用过程中出现的一个小问题,还望抽空指教。
我根据规则整理了一份自己的语料库,大概内容如下:

发现/v 颈部/boy 肿物/sym [1月/t 余/nr]/date
发现/v [左/f 腹部/n]/boy 肿物/sym [1月/t 余/nr]/date
这样的语料大概有3千条(实际上几万条,但是为了识别“肿物”,抽取了只有“肿物”的样本)。

根据这些语料,我进行了词性模型训练和命名实体识别模型训练,最后,对句子:“反复发热10余天,发现颈部肿物10天” 进行预测。发热,颈部和10天都能正确的预测出自定义词性,唯独“肿物”不行。我不太清楚为什么出现这种情况。

具体代码如下:
train_pos.py

    POSTrainer = JClass('com.hankcs.hanlp.model.perceptron.POSTrainer')

    corpus_path = os.path.join(ner_dir, 'train_corpus_3.txt')
    pos_model = os.path.join(ner_dir, 'train.pos.bin')

    trainer = POSTrainer()
    model = trainer.train(corpus_path, pos_model)  # 训练

train_ner.py

    # 命名实体识别器
    NERTrainer = JClass('com.hankcs.hanlp.model.perceptron.NERTrainer')
   
    trainer = NERTrainer()
    trainer.tagSet.nerLabels.clear()  # 不识别nr、ns、nt
    
    # 目标是识别 sym 
    trainer.tagSet.nerLabels.add("sym") 
    trainer.tagSet.nerLabels.add("boy")
    trainer.tagSet.nerLabels.add("date")

    corpus_path = os.path.join(ner_dir, 'train_corpus_3.txt')
    corpus_model = os.path.join(ner_dir, 'train.ner.bin')

    model = trainer.train(corpus_path, corpus_model).getModel()

然后,使用包装类进行包装,执行预测:
perdict.py

    # 预测-分析
    model_path = root_path + '/dictionary/ner/train.ner.bin'
    recognizer = PerceptronNERecognizer(model_path)

    pos_model = root_path + '/dictionary/ner/train.pos.bin'
    pos_tagger = PerceptronPOSTagger(pos_model)  # 加载

    analyzer = PerceptronLexicalAnalyzer(PerceptronSegmenter(), pos_tagger, recognizer)

还望,何老师指点下。万分感谢~~

建议统计一下sym词性占比多少,如果太少的话就很难学到它。另外,这些统计模型也不能保证一定能正确标注某个特定样本。最后,检查一下是否自定义词典中有“肿物”造成干扰。

题外话,也可以试试2.x的新模型:

感谢老师的指导,我会认真研究下