Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add UIE english model #2855

Merged
merged 6 commits into from
Jul 26, 2022
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
159 changes: 129 additions & 30 deletions docs/model_zoo/taskflow.md
Original file line number Diff line number Diff line change
Expand Up @@ -511,9 +511,7 @@ from paddlenlp import Taskflow

开放域信息抽取是信息抽取的一种全新范式,主要思想是减少人工参与,利用单一模型支持多种类型的开放抽取任务,用户可以使用自然语言自定义抽取目标,在实体、关系类别等未定义的情况下抽取输入文本中的信息片段。

#### 支持多场景信息抽取任务

- 命名实体识别
#### 实体抽取

命名实体识别(Named Entity Recognition,简称NER),是指识别文本中具有特定意义的实体。在开放域信息抽取中,抽取的类别没有限制,用户可以自己定义。

Expand All @@ -523,7 +521,7 @@ from paddlenlp import Taskflow
['时间', '选手', '赛事名称']
```

预测
调用示例

```python
>>> from pprint import pprint
Expand Down Expand Up @@ -554,7 +552,7 @@ from paddlenlp import Taskflow

在上例中我们已经实例化了一个`Taskflow`对象,这里可以通过`set_schema`方法重置抽取目标。

预测
调用示例

```python
>>> schema = ['肿瘤的大小', '肿瘤的个数', '肝癌级别', '脉管内癌栓分级']
Expand All @@ -578,7 +576,31 @@ from paddlenlp import Taskflow
'text': 'M0级'}]}]
```

- 关系抽取
例如抽取的目标实体类型是"person"和"organization",schema构造如下:

```text
['person', 'organization']
```

英文模型调用示例:

```python
>>> from pprint import pprint
>>> from paddlenlp import Taskflow
>>> schema = ['Person', 'Organization']
>>> ie_en = Taskflow('information_extraction', schema=schema, model='uie-base-en')
>>> pprint(ie_en('In 1997, Steve was excited to become the CEO of Apple.'))
[{'Organization': [{'end': 53,
'probability': 0.9985840259877357,
'start': 48,
'text': 'Apple'}],
'Person': [{'end': 14,
'probability': 0.999631971804547,
'start': 9,
'text': 'Steve'}]}]
```

#### 关系抽取

关系抽取(Relation Extraction,简称RE),是指从文本中识别实体并抽取实体之间的语义关系,进而获取三元组信息,即<主体,谓语,客体>。

Expand All @@ -594,7 +616,7 @@ from paddlenlp import Taskflow
}
```

预测
调用示例

```python
>>> schema = {'竞赛名称': ['主办方', '承办方', '已举办次数']} # Define the schema for relation extraction
Expand Down Expand Up @@ -630,7 +652,38 @@ from paddlenlp import Taskflow
'text': '2022语言与智能技术竞赛'}]}]
```

- 事件抽取
例如以"person"作为抽取主体,抽取关系类型为"Company"和"Position", schema构造如下:

```text
{
'Person': [
'Company',
'Position'
]
}
```

英文模型调用示例:

```python
>>> schema = [{'Person': ['Company', 'Position']}]
>>> ie_en.set_schema(schema)
>>> ie_en('In 1997, Steve was excited to become the CEO of Apple.')
[{'Person': [{'end': 14,
'probability': 0.999631971804547,
'relations': {'Company': [{'end': 53,
'probability': 0.9960158209451642,
'start': 48,
'text': 'Apple'}],
'Position': [{'end': 44,
'probability': 0.8871063806420736,
'start': 41,
'text': 'CEO'}]},
'start': 9,
'text': 'Steve'}]}]
```

#### 事件抽取

事件抽取 (Event Extraction, 简称EE),是指从自然语言文本中抽取预定义的事件触发词(Trigger)和事件论元(Argument),组合为相应的事件结构化信息。

Expand All @@ -647,9 +700,9 @@ from paddlenlp import Taskflow
}
```

触发词的格式统一为`触发词`或`XX触发词`,`XX`表示具体事件类型,上例中的事件类型是`地震`,则对应触发词为`地震触发词`。
触发词的格式统一为`触发词`或``XX触发词`,`XX`表示具体事件类型,上例中的事件类型是`地震`,则对应触发词为`地震触发词`。

预测
调用示例

```python
>>> schema = {'地震触发词': ['地震强度', '时间', '震中位置', '震源深度']} # Define the schema for event extraction
Expand All @@ -658,7 +711,9 @@ from paddlenlp import Taskflow
[{'地震触发词': [{'text': '地震', 'start': 56, 'end': 58, 'probability': 0.9987181623528585, 'relations': {'地震强度': [{'text': '3.5级', 'start': 52, 'end': 56, 'probability': 0.9962985320905915}], '时间': [{'text': '5月16日06时08分', 'start': 11, 'end': 22, 'probability': 0.9882578028575182}], '震中位置': [{'text': '云南临沧市凤庆县(北纬24.34度,东经99.98度)', 'start': 23, 'end': 50, 'probability': 0.8551415716584501}], '震源深度': [{'text': '10千米', 'start': 63, 'end': 67, 'probability': 0.999158304648045}]}}]}]
```

- 评论观点抽取
**英文模型暂不支持事件抽取**

#### 评论观点抽取

评论观点抽取,是指抽取文本中包含的评价维度、观点词。

Expand All @@ -673,7 +728,7 @@ from paddlenlp import Taskflow
}
```

预测
调用示例

```python
>>> schema = {'评价维度': ['观点词', '情感倾向[正向,负向]']} # Define the schema for opinion extraction
Expand Down Expand Up @@ -701,15 +756,44 @@ from paddlenlp import Taskflow
'text': '店面'}]}]
```

- 情感倾向分类
英文模型schema构造如下:

```text
{
'Aspect': [
'Opinion',
'Sentiment classification [negative, positive]'
]
}
```

英文模型调用示例:

```python
>>> schema = [{'Comment object': ['Opinion', 'Sentiment classification [negative, positive]']}]
>>> ie_en.set_schema(schema)
>>> ie_en("overall i 'm happy with my toy.")
[{'Comment object': [{'end': 30,
'probability': 0.9774399346859042,
'relations': {'Opinion': [{'end': 18,
'probability': 0.6168918705033555,
'start': 13,
'text': 'happy'}],
'Sentiment classification [negative, positive]': [{'probability': 0.9999556545777182,
'text': 'positive'}]},
'start': 24,
'text': 'my toy'}]}]
```

#### 情感分类

句子级情感倾向分类,即判断句子的情感倾向是“正向”还是“负向”,schema构造如下:

```text
'情感倾向[正向,负向]'
```

预测
调用示例

```python
>>> schema = '情感倾向[正向,负向]' # Define the schema for sentence-level sentiment classification
Expand All @@ -718,7 +802,22 @@ from paddlenlp import Taskflow
[{'情感倾向[正向,负向]': [{'text': '正向', 'probability': 0.9988661643929895}]}]
```

- 跨任务抽取
英文模型schema构造如下:

```text
'情感倾向[正向,负向]'
```

英文模型调用示例:

```python
>>> schema = [{'Person': ['Company', 'Position']}]
>>> ie_en.set_schema(schema)
>>> ie_en('I am sorry but this is the worst film I have ever seen in my life.')
[{'Sentiment classification [negative, positive]': [{'text': 'negative', 'probability': 0.9998415771287057}]}]
```

#### 跨任务抽取

例如在法律场景同时对文本进行实体抽取和关系抽取,schema可按照如下方式进行构造:

Expand All @@ -734,7 +833,7 @@ from paddlenlp import Taskflow
]
```

预测
调用示例

```python
>>> schema = ['法院', {'原告': '委托代理人'}, {'被告': '委托代理人'}]
Expand Down Expand Up @@ -762,21 +861,21 @@ from paddlenlp import Taskflow
'text': 'B公司'}]}]
```

#### 模型选择

#### 多模型选择,满足精度、速度要求

- 模型选择
- 多模型选择,满足精度、速度要求

| 模型 | 结构 |
| :---: | :--------: |
| `uie-base` (默认)| 12-layers, 768-hidden, 12-heads |
| `uie-medical-base` | 12-layers, 768-hidden, 12-heads |
| `uie-medium`| 6-layers, 768-hidden, 12-heads |
| `uie-mini`| 6-layers, 384-hidden, 12-heads |
| `uie-micro`| 4-layers, 384-hidden, 12-heads |
| `uie-nano`| 4-layers, 312-hidden, 12-heads |
| 模型 | 结构 | 语言 |
| :---: | :--------: | :--------: |
| `uie-base` (默认)| 12-layers, 768-hidden, 12-heads | 中文 |
| `uie-base-en` | 12-layers, 768-hidden, 12-heads | 英文 |
| `uie-medical-base` | 12-layers, 768-hidden, 12-heads | 中文 |
| `uie-medium`| 6-layers, 768-hidden, 12-heads | 中文 |
| `uie-mini`| 6-layers, 384-hidden, 12-heads | 中文 |
| `uie-micro`| 4-layers, 384-hidden, 12-heads | 中文 |
| `uie-nano`| 4-layers, 312-hidden, 12-heads | 中文 |

- 使用`UIE-Nano`进行预测
- `uie-nano`调用示例

```python
>>> from paddlenlp import Taskflow
Expand Down Expand Up @@ -807,8 +906,8 @@ from paddlenlp import Taskflow

#### 可配置参数说明
* `batch_size`:批处理大小,请结合机器情况进行调整,默认为1。
* `model`:选择任务使用的模型,默认为`uie-base`,可选有`uie-base`, `uie-medium`, `uie-mini`, `uie-micro`, `uie-nano``uie-medical-base`。
* `schema`:定义任务抽取目标,可参考示例中对于不同信息抽取任务的schema配置自定义抽取目标
* `model`:选择任务使用的模型,默认为`uie-base`,可选有`uie-base`, `uie-medium`, `uie-mini`, `uie-micro`, `uie-nano`, `uie-medical-base`, `uie-base-en`。
* `schema`:定义任务抽取目标,可参考开箱即用中不同任务的调用示例进行配置
* `position_prob`:模型对于span的起始位置/终止位置的结果概率0~1之间,返回结果去掉小于这个阈值的结果,默认为0.5,span的最终概率输出为起始位置概率和终止位置概率的乘积。
* `precision`:选择模型精度,默认为`fp32`,可选有`fp16`和`fp32`。`fp16`推理速度更快。如果选择`fp16`,请先确保机器正确安装NVIDIA相关驱动和基础软件,**确保CUDA>=11.2,cuDNN>=8.1.1**,初次使用需按照提示安装相关依赖(主要是**确保安装onnxruntime-gpu**)。其次,需要确保GPU设备的CUDA计算能力(CUDA Compute Capability)大于7.0,典型的设备包括V100、T4、A10、A100、GTX 20系列和30系列显卡等。更多关于CUDA Compute Capability和精度支持情况请参考NVIDIA文档:[GPU硬件与支持精度对照表](https://docs.nvidia.com/deeplearning/tensorrt/archives/tensorrt-840-ea/support-matrix/index.html#hardware-precision-matrix)。
</div></details>
Expand Down
Loading