-
Notifications
You must be signed in to change notification settings - Fork 7
关于分词器的效果测评
冬日新雨 edited this page Jan 23, 2022
·
1 revision
- 一般来说,我们常用 F1 值,token 准确率等指标来评价分词的效果。然而这其中有一些注意事项需要了解,盲目针对不同的数据集和模型,使用 F1 值来评价分词效果是不科学的。
- 分词是包含多种粒度的:例如:
“中华人民共和国的政体是人民代表大会制度。”
。这里,究竟是应该把“中华人民共和国”
当作一个词汇来看待处理,还是应该将其分解成“中华”、“人民”、“共和国”
?如果不考虑其它因素,仅仅从分词这个任务来看,这两种分解方式都是可以接受的。也就是,分词具有粗粒度和细粒度,这种情况是极为普遍的。 - 现假设两份语料,一份语料 A 粒度较粗,另一份语料 B 粒度较细,分别使用它们训练两个模型 A* 和 B* ,假设训练都拟合非常好,达到了 99% 的 F1 值。则用 A* 模型来计算 B 语料的 F1 值一定低于 B* 模型计算 B 语料的 F1 值;反之针对 A 语料同理。由此我们可以得出结论:单纯利用 F1 值和 token 准确率等指标来评价一个模型的泛化能力是非常局限的。根据我的个人经验,这种跨语料和模型的误差可达到约10%左右,换句话说,即便一个模型在一个非训练的语料上 F1 值低于90%,依然不能说这个模型是糟糕的,因为很可能是分词粒度导致了指标值较低。
- 分词是有粒度的,但是字和字之间的界限有深有浅。例如:
“中华人民共和国的政体是人民代表大会制度。”
。我们认为,“中华”、“人民”、“共和国”
这三个词之前的分词界限是不明显的,也即分与不分,具有模糊性。而,“共和国”、“的”、“政体”
之前的界限是非常明显的,也即,如果一个分词模型,将“共和国”和“的”
绑定在一起成了一个词,那么说明这个分词模型是糟糕的。即,在评价分词模型时,我们考虑分词粒度的情况,忽略模糊的边界,只考虑清晰的边界的分词效果。 - 实体识别、语义信息抽取等标注数据集有非常丰富的实体标记信息。例如:
“中华人民共和国的政体是人民代表大会制度。”
。在该句中,“中华人民共和国”
被标记为国家名,此时我们可以根据这个实体找到一个清晰的分词边界,即“国|的”
。只要分词器能够清晰地将“国|的”
区分开来,我们就认为,这个分词效果是优的。 - 本工具 jiojio 在与其它分词器效果做对比时,也采用此种方法进行比较。
- 有必要针对不同的文本领域(如医学、政治、法律、计算机等)进行区分模型训练吗?个人认为,针对 CRF 模型,完全没必要,区分训练的意义几乎没有。
- 第一,我们已经根据 CRF 模型的特点了解到,这种模型是一种非常抗过拟合的模型,例如,在医学领域,词汇
“艾丝矬敏片”
是一个药物名,而在计算机领域,“英伟达”
是一个显卡品牌名。这两个词在对方的领域中是完全不存在的,也即,两个词汇对应的特征权重互相完全不交叠。也就是,在同一个模型中,针对医学领域的特征权重和针对计算机词汇的特征权重几乎是两套权重,你是否将这些权重分成两个模型,几乎毫无意义。 - 特例就是,假如针对某个两个词汇,如:
“中国画”、“中国画家”
,这种情况,存在了针对两个词的不同切分方式,但是,这种情况,依然可以通过增加前后组合特征来规避。 - 按领域分类的唯一好处仅在于可以节约内存。当然针对分词任务,一般分词模型所占内存仅在百兆,内存还不足以成为一个非突破不可的瓶颈。
- 这几年,神经网络模型很多,花样翻新层出不穷,训练的任务越来越偏向高层的语义理解。模型一般直接采用 字 token作为输入, 此时还有没有必要使用词 token来作为模型输入?
- 答案是毫无必要,在模型的输入处,分词本身就带有一定的错误率,且消耗一定的时间,而且导致 embedding 层的爆炸和一大堆的 unknown 词汇,且不同分词器的分词效果不同,如果吃定某个分词器,则整个训练过程都将严重依赖该分词器,胡乱替换效果直线下降。可以说将 词token 作为输入,增加一个分词器作为前缀是吃力不讨好。
- 如果利用神经网络和预训练模型来处理 NLP 任务,则不需要分词器参与。
- 分词器的应用场景应当着眼于分析式任务,如关键短语抽取、特定文本解析等任务中。此类任务对于分词器依然有非常强的需求,且神经网络的处理有泛化效果不好,依赖数据,难以调试等问题。
- 因此,分词工具不应当单独作为一个纯分词工具使用,而应当兼顾其所应用的目的来进行调整和优化。jiojio 分词器针对分词任务做了语料、预测推断等多方面的优化,适应非神经网络类的 NLP 任务的处理。