PaddlePaddle / PaddleNLP

👑 Easy-to-use and powerful NLP and LLM library with 🤗 Awesome model zoo, supporting wide-range of NLP tasks from research to industrial applications, including 🗂Text Classification, 🔍 Neural Search, ❓ Question Answering, ℹ️ Information Extraction, 📄 Document Intelligence, 💌 Sentiment Analysis etc.
https://paddlenlp.readthedocs.io
Apache License 2.0
12.09k stars 2.93k forks source link

[Question]: UIE 蒸馏过程中的几个问题,麻烦大大解答 #5743

Closed yout0703 closed 1 year ago

yout0703 commented 1 year ago

请提出你的问题

Hello,首先必须要感谢 PaddlePaddle 团队提供的如此好用的 UIE。 我这边参照这个教程进行微调后的 uie 模型蒸馏,目的是加快速度,提供 CPU 部署的可能性。 期间遇到几个问题,希望得到解答:

期待得到答复,非常感谢。

yout0703 commented 1 year ago

关键问题在于 task_type 中,entity_extraction 与 relation_extraction 的区别,如果既要识别实体又要识别关系,是不是可以使用 relation_extraction ?

linjieccc commented 1 year ago

@yout0703 你好,感谢对UIE的关注

1.蒸馏过程中需要将 sample_index.json 放到 ./data 目录下,这个文档没有提到,这个 sample_index.json 是否就是老师模型训练时的训练数据分布?可以完善下文档 A: 是的,封闭域模型训练和验证集会通过sample_index.json来对齐老师模型的训练数据分布

2.「老师模型」的 scheme 是有实体也有关系的那种比如:schema = [ "年龄", "性别","人名","学校", {"所在学校": ["人名", "学校"]}],这种情况下蒸馏时应该使用什么 task_type (task_type 的取值含义没有在官方文档找到)? A:task_type选relation_extraction即可

3.是否选择了 entity_extraction , schema 中就不能有关系类型的项? A:同问题二,后续版本我们会去除这个参数,提供更简化易用的使用流程

4.是否蒸馏只能将实体抽取和关系抽取分开进行,能否达到类似老师模型的效果,既能输出实体也能输出关系? A:可以联合抽取,Taskflow输出数据格式同老师模型是一致的

5.看有 issue 表示蒸馏后速度也是比较慢,在官方的试验中,蒸馏以后的模型能否达到 CPU 部署的要求,响应时间在 20ms 之内 A:同样模型尺寸下前向的推理速度基本一致,区别主要在于老师模型需要跑多次前向推理,因此推理速度主要由schema的复杂度决定,学生模型则不受schema复杂度的影响;同时学生模型可以选择uie-micro、uie-nano这些层数较少的模型来进一步提升速度,uie-nano + fp16在GPU侧QPS可以达到100+

yout0703 commented 1 year ago

@linjieccc 非常感谢,解释下关于 task_type 的疑问来自我使用 relation_extraction 蒸馏模型时,对老师模型进行评估三个值都是 0,以为不能用,那我再去试试 relation_extraction 的蒸馏。

另:ernie-3.0-mini-zh + entity_extraction + 18个实体类型的 schema 蒸馏后,在 4核 CPU(阿里云)的机器上能达到 50ms 左右的 RT(待抽取文本在100字以内),效果还是可以的,供大家参考。

yout0703 commented 1 year ago

@linjieccc 换成 relation_extraction 以后无法训练学生模型,帮看下是什么问题。 image

github-actions[bot] commented 1 year ago

This issue is stale because it has been open for 60 days with no activity. 当前issue 60天内无活动,被标记为stale。

github-actions[bot] commented 1 year ago

This issue was closed because it has been inactive for 14 days since being marked as stale. 当前issue 被标记为stale已有14天,即将关闭。