Pipeline使用与否,造成了分词结果不同,这个是为什么

以下的代码是使用pipeline和不使用pipeline两种方式来对’请问客服系统的价格是多少? 有没有什么优惠呢?'这句话进行分词,但是分词结果却不同。按我理解, pipeline只是流水执行任务,应该获得相同结果的。

tok = hanlp.load(hanlp.pretrained.tok.CTB9_TOK_ELECTRA_SMALL)
print(tok(sentence2))
hanlp_pipeline = hanlp.pipeline().append(hanlp.utils.rules.split_sentence).append(tok)
print(hanlp_pipeline(sentence2))

结果:

[‘请问’, ‘客服’, ‘系统’, ‘的’, ‘价格’, ‘是’, ‘多少’, ‘?’, ‘有没有’, ‘什么’, ‘优惠’, ‘呢’, ‘?’]
[[‘请问’, ‘客服’, ‘系统’, ‘的’, ‘价格’, ‘是’, ‘多少’, ‘?’], [‘有’, ‘没’, ‘有’, ‘什么’, ‘优惠’, ‘呢’, ‘?’]]

1赞
  1. 正常。原理跟Transformer有关,两段代码Transformer的输入并不相同。
  2. tok模型的输入本来就应当是单句。未分句的文本与训练数据不匹配。
  3. “有没有”这个具体的案例,原因也包括CTB9标注数据中存在的不一致。建议使用FINE_ELECTRA_SMALL_ZH
2赞

好的,非常感谢,我主要在研究NER的功能,切词9个模型,NER4个模型,都运行了一下,觉得COARSE_ELECTRA_SMALL_ZH / MSRA_NER_ELECTRA_SMALL_ZH 这个组合的效果是最好的。

2赞