# 通用信息抽取 UIE(Universal Information Extraction) PyTorch版
**迁移[PaddleNLP](https://github.com/PaddlePaddle/PaddleNLP)中的UIE模型到PyTorch上**
* 2022-10-3: 新增对UIE-M系列模型的支持,增加了ErnieM的Tokenizer。ErnieMTokenizer使用C++实现的高性能分词算子FasterTokenizer进行文本预处理加速。需要通过`pip install faster_tokenizer`安装FasterTokenizer库后方可使用。
PyTorch版功能介绍
- `convert.py`: 自动下载并转换模型,详见[开箱即用](#开箱即用)。
- `doccano.py`: 转换标注数据,详见[数据标注](#数据标注)。
- `evaluate.py`: 评估模型,详见[模型评估](#模型评估)。
- `export_model.py`: 导出ONNX推理模型,详见[模型部署](#模型部署)。
- `finetune.py`: 微调训练,详见[模型微调](#模型微调)。
- `model.py`: 模型定义。
- `uie_predictor.py`: 推理类。
**目录**
- [1. 模型简介](#模型简介)
- [2. 应用示例](#应用示例)
- [3. 开箱即用](#开箱即用)
- [3.1 实体抽取](#实体抽取)
- [3.2 关系抽取](#关系抽取)
- [3.3 事件抽取](#事件抽取)
- [3.4 评论观点抽取](#评论观点抽取)
- [3.5 情感分类](#情感分类)
- [3.6 跨任务抽取](#跨任务抽取)
- [3.7 模型选择](#模型选择)
- [3.8 更多配置](#更多配置)
- [4. 训练定制](#训练定制)
- [4.1 代码结构](#代码结构)
- [4.2 数据标注](#数据标注)
- [4.3 模型微调](#模型微调)
- [4.4 模型评估](#模型评估)
- [4.5 定制模型一键预测](#定制模型一键预测)
- [4.6 实验指标](#实验指标)
- [4.7 模型部署](#模型部署)
<a name="模型简介"></a>
## 1. 模型简介
[UIE(Universal Information Extraction)](https://arxiv.org/pdf/2203.12277.pdf):Yaojie Lu等人在ACL-2022中提出了通用信息抽取统一框架UIE。该框架实现了实体抽取、关系抽取、事件抽取、情感分析等任务的统一建模,并使得不同任务间具备良好的迁移和泛化能力。为了方便大家使用UIE的强大能力,PaddleNLP借鉴该论文的方法,基于ERNIE 3.0知识增强预训练模型,训练并开源了首个中文通用信息抽取模型UIE。该模型可以支持不限定行业领域和抽取目标的关键信息抽取,实现零样本快速冷启动,并具备优秀的小样本微调能力,快速适配特定的抽取目标。
<div align="center">
<img src=https://user-images.githubusercontent.com/40840292/167236006-66ed845d-21b8-4647-908b-e1c6e7613eb1.png height=400 hspace='10'/>
</div>
#### UIE的优势
- **使用简单**:用户可以使用自然语言自定义抽取目标,无需训练即可统一抽取输入文本中的对应信息。**实现开箱即用,并满足各类信息抽取需求**。
- **降本增效**:以往的信息抽取技术需要大量标注数据才能保证信息抽取的效果,为了提高开发过程中的开发效率,减少不必要的重复工作时间,开放域信息抽取可以实现零样本(zero-shot)或者少样本(few-shot)抽取,**大幅度降低标注数据依赖,在降低成本的同时,还提升了效果**。
- **效果领先**:开放域信息抽取在多种场景,多种任务上,均有不俗的表现。
<a name="应用示例"></a>
## 2. 应用示例
UIE不限定行业领域和抽取目标,以下是一些零样本行业示例:
- 医疗场景-专病结构化
![image](https://user-images.githubusercontent.com/40840292/169017581-93c8ee44-856d-4d17-970c-b6138d10f8bc.png)
- 法律场景-判决书抽取
![image](https://user-images.githubusercontent.com/40840292/169017863-442c50f1-bfd4-47d0-8d95-8b1d53cfba3c.png)
- 金融场景-收入证明、招股书抽取
![image](https://user-images.githubusercontent.com/40840292/169017982-e521ddf6-d233-41f3-974e-6f40f8f2edbc.png)
- 公安场景-事故报告抽取
![image](https://user-images.githubusercontent.com/40840292/169018340-31efc1bf-f54d-43f7-b62a-8f7ce9bf0536.png)
- 旅游场景-宣传册、手册抽取
![image](https://user-images.githubusercontent.com/40840292/169018113-c937eb0b-9fd7-4ecc-8615-bcdde2dac81d.png)
<a name="开箱即用"></a>
## 3. 开箱即用
```uie_predictor```提供通用信息抽取、评价观点抽取等能力,可抽取多种类型的信息,包括但不限于命名实体识别(如人名、地名、机构名等)、关系(如电影的导演、歌曲的发行时间等)、事件(如某路口发生车祸、某地发生地震等)、以及评价维度、观点词、情感倾向等信息。用户可以使用自然语言自定义抽取目标,无需训练即可统一抽取输入文本中的对应信息。**实现开箱即用,并满足各类信息抽取需求**
```uie_predictor```现在可以自动下载模型了,**无需手动convert**,如果想手动转换模型,可以参照以下方法。
**下载并转换模型**,将下载Paddle版的`uie-base`模型到当前目录中,并生成PyTorch版模型`uie_base_pytorch`。
```shell
python convert.py
```
如果没有安装paddlenlp,则使用以下命令。这将不会导入paddlenlp,以及不会验证转换结果正确性。
```shell
python convert.py --no_validate_output
```
可配置参数说明:
- `input_model`: 输入的模型所在的文件夹,例如存在模型`./model_path/model_state.pdparams`,则传入`./model_path`。如果传入`uie-base`或`uie-tiny`等在模型列表中的模型,且当前目录不存在此文件夹时,将自动下载模型。默认值为`uie-base`。
支持自动下载的模型
- `uie-base`
- `uie-medium`
- `uie-mini`
- `uie-micro`
- `uie-nano`
- `uie-medical-base`
- `uie-tiny` (弃用,已改为`uie-medium`)
- `uie-base-en`
- `uie-m-base`
- `uie-m-large`
- `ernie-3.0-base-zh`*
- `output_model`: 输出的模型的文件夹,默认为`uie_base_pytorch`。
- `no_validate_output`:是否关闭对输出模型的验证,默认打开。
\* : 使用`ernie-3.0-base-zh`时不会验证模型,需要微调后才能用于预测
<a name="实体抽取"></a>
#### 3.1 实体抽取
命名实体识别(Named Entity Recognition,简称NER),是指识别文本中具有特定意义的实体。在开放域信息抽取中,抽取的类别没有限制,用户可以自己定义。
- 例如抽取的目标实体类型是"时间"、"选手"和"赛事名称", schema构造如下:
```text
['时间', '选手', '赛事名称']
```
调用示例:
```python
>>> from uie_predictor import UIEPredictor
>>> from pprint import pprint
>>> schema = ['时间', '选手', '赛事名称'] # Define the schema for entity extraction
>>> ie = UIEPredictor(model='uie-base', schema=schema)
>>> pprint(ie("2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!")) # Better print results using pprint
[{'时间': [{'end': 6,
'probability': 0.9857378532924486,
'start': 0,
'text': '2月8日上午'}],
'赛事名称': [{'end': 23,
'probability': 0.8503089953268272,
'start': 6,
'text': '北京冬奥会自由式滑雪女子大跳台决赛'}],
'选手': [{'end': 31,
'probability': 0.8981548639781138,
'start': 28,
'text': '谷爱凌'}]}]
```
- 例如抽取的目标实体类型是"肿瘤的大小"、"肿瘤的个数"、"肝癌级别"和"脉管内癌栓分级", schema构造如下:
```text
['肿瘤的大小', '肿瘤的个数', '肝癌级别', '脉管内癌栓分级']
```
在上例中我们已经实例化了一个`UIEPredictor`对象,这里可以通过`set_schema`方法重置抽取目标。
调用示例:
```python
>>> schema = ['肿瘤的大小', '肿瘤的个数', '肝癌级别', '脉管内癌栓分级']
>>> ie.set_schema(schema)
>>> pprint(ie("(右肝肿瘤)肝细胞性肝癌(II-III级,梁�
白如意i
- 粉丝: 1w+
- 资源: 3209
最新资源
- 毕设-java web-ssm-javaweb物流配货项目源码25.zip
- 毕设-java web-ssm-Javaweb仓库管理系统项目源码23.zip
- 毕设-java web-ssm-javaWeb传智播客网上书城项目源码(设计以及实现论文)24.zip
- 毕设-java web-ssm-JAVAWEB校园订餐系统项目源码27.zip
- 毕设-java web-ssm-javaWeb物资管理系统项目源码26.zip
- 毕设-java web-ssm-java源码 仿360buy京东商城源码 京东JavaWeb项目源代码1.zip
- 毕设-java web-ssm-大学生求职就业网3.zip
- 毕设-java web-ssm-都市供求信息网4.zip
- 毕设-java web-ssm-编程爱好者博客地带2.zip
- 毕设-java web-ssm-华奥汽车销售集团网源码6.zip
- 毕设-java web-ssm-进销存管理系统7.zip
- 毕设-java web-ssm-高校学生选课系统项目源码5.zip
- 毕设-java web-ssm-科研成果申报管理系统源码9.zip
- 毕设-java web-ssm-企业办公自动化系统11.zip
- 毕设-java web-ssm-科帮网javaWeb计算机配件报价系统项目源码8.zip
- 毕设-java web-ssm-图书馆管理系统项目源码14.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈