From 97da31d3bb43c05cc76d977c7b4072426c163302 Mon Sep 17 00:00:00 2001
From: linjieccc <623543001@qq.com>
Date: Mon, 12 Dec 2022 02:13:13 +0000
Subject: [PATCH 1/2] fix input names for uie
---
model_zoo/uie/README.md | 4 ++--
model_zoo/uie/evaluate.py | 4 ++--
model_zoo/uie/utils.py | 6 +++---
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/model_zoo/uie/README.md b/model_zoo/uie/README.md
index 08a46062410c..4f554f6a3685 100644
--- a/model_zoo/uie/README.md
+++ b/model_zoo/uie/README.md
@@ -34,9 +34,9 @@
-#### UIE-X 🧾
+#### News 📢: UIE-X 🧾
-**全新升级UIE-X,新增文档抽取功能**,欢迎体验 👉 [信息抽取应用](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/information_extraction/#readme)
+**全新升级UIE-X,除已有纯文本抽取的全部功能外,新增文档抽取能力**,欢迎体验 👉 [信息抽取应用](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/information_extraction/#readme)
#### UIE的优势
diff --git a/model_zoo/uie/evaluate.py b/model_zoo/uie/evaluate.py
index cf423b69578b..c87cd8c06dda 100644
--- a/model_zoo/uie/evaluate.py
+++ b/model_zoo/uie/evaluate.py
@@ -45,10 +45,10 @@ def evaluate(model, metric, data_loader, multilingual=False):
metric.reset()
for batch in data_loader:
if multilingual:
- start_prob, end_prob = model(batch["input_ids"], batch["pos_ids"])
+ start_prob, end_prob = model(batch["input_ids"], batch["position_ids"])
else:
start_prob, end_prob = model(
- batch["input_ids"], batch["token_type_ids"], batch["pos_ids"], batch["att_mask"]
+ batch["input_ids"], batch["token_type_ids"], batch["position_ids"], batch["attention_mask"]
)
start_ids = paddle.cast(batch["start_positions"], "float32")
diff --git a/model_zoo/uie/utils.py b/model_zoo/uie/utils.py
index 9717ed791928..67d5598f209b 100644
--- a/model_zoo/uie/utils.py
+++ b/model_zoo/uie/utils.py
@@ -619,7 +619,7 @@ def convert_example(example, tokenizer, max_seq_len, multilingual=False):
if multilingual:
tokenized_output = {
"input_ids": encoded_inputs["input_ids"],
- "pos_ids": encoded_inputs["position_ids"],
+ "position_ids": encoded_inputs["position_ids"],
"start_positions": start_ids,
"end_positions": end_ids,
}
@@ -627,8 +627,8 @@ def convert_example(example, tokenizer, max_seq_len, multilingual=False):
tokenized_output = {
"input_ids": encoded_inputs["input_ids"],
"token_type_ids": encoded_inputs["token_type_ids"],
- "pos_ids": encoded_inputs["position_ids"],
- "att_mask": encoded_inputs["attention_mask"],
+ "position_ids": encoded_inputs["position_ids"],
+ "attention_mask": encoded_inputs["attention_mask"],
"start_positions": start_ids,
"end_positions": end_ids,
}
From efbb96e7defc6e454c2ee9ea632522ed6832c353 Mon Sep 17 00:00:00 2001
From: linjieccc <623543001@qq.com>
Date: Mon, 12 Dec 2022 02:56:36 +0000
Subject: [PATCH 2/2] update predictor
---
model_zoo/uie/README.md | 17 ++++++++++-
model_zoo/uie/deploy/python/infer_cpu.py | 3 +-
model_zoo/uie/deploy/python/infer_gpu.py | 2 +-
model_zoo/uie/deploy/python/uie_predictor.py | 32 ++++++++++++--------
4 files changed, 37 insertions(+), 17 deletions(-)
diff --git a/model_zoo/uie/README.md b/model_zoo/uie/README.md
index 4f554f6a3685..56a0364fd2ba 100644
--- a/model_zoo/uie/README.md
+++ b/model_zoo/uie/README.md
@@ -915,19 +915,33 @@ paddlenlp server server:app --host 0.0.0.0 --port 8989
python deploy/python/infer_cpu.py --model_path_prefix ${finetuned_model}/model
```
+ 部署UIE-M模型
+
+ ```shell
+ python deploy/python/infer_cpu.py --model_path_prefix ${finetuned_model}/model --multilingual
+ ```
+
+
可配置参数说明:
- `model_path_prefix`: 用于推理的Paddle模型文件路径,需加上文件前缀名称。例如模型文件路径为`./export/model.pdiparams`,则传入`./export/model`。
- `position_prob`:模型对于span的起始位置/终止位置的结果概率 0~1 之间,返回结果去掉小于这个阈值的结果,默认为 0.5,span 的最终概率输出为起始位置概率和终止位置概率的乘积。
- `max_seq_len`: 文本最大切分长度,输入超过最大长度时会对输入文本进行自动切分,默认为 512。
- `batch_size`: 批处理大小,请结合机器情况进行调整,默认为 4。
+ - `multilingual`:是否是跨语言模型,用 "uie-m-base", "uie-m-large" 等模型进微调得到的模型是多语言模型,需要设置为 True;默认为 False。
- GPU端推理样例
在GPU端,请使用如下命令进行部署
```shell
- python deploy/python/infer_gpu.py --model_path_prefix export/model --use_fp16 --device_id 0
+ python deploy/python/infer_gpu.py --model_path_prefix ${finetuned_model}/model --use_fp16 --device_id 0
+ ```
+
+ 部署UIE-M模型
+
+ ```shell
+ python deploy/python/infer_gpu.py --model_path_prefix ${finetuned_model}/model --use_fp16 --device_id 0 --multilingual
```
可配置参数说明:
@@ -938,6 +952,7 @@ paddlenlp server server:app --host 0.0.0.0 --port 8989
- `max_seq_len`: 文本最大切分长度,输入超过最大长度时会对输入文本进行自动切分,默认为 512。
- `batch_size`: 批处理大小,请结合机器情况进行调整,默认为 4。
- `device_id`: GPU 设备 ID,默认为 0。
+ - `multilingual`:是否是跨语言模型,用 "uie-m-base", "uie-m-large" 等模型进微调得到的模型是多语言模型,需要设置为 True;默认为 False。
diff --git a/model_zoo/uie/deploy/python/infer_cpu.py b/model_zoo/uie/deploy/python/infer_cpu.py
index afab278ba1a1..a8c49fbbdfb3 100755
--- a/model_zoo/uie/deploy/python/infer_cpu.py
+++ b/model_zoo/uie/deploy/python/infer_cpu.py
@@ -13,10 +13,8 @@
# limitations under the License.
import argparse
-import math
from pprint import pprint
-import paddle
from uie_predictor import UIEPredictor
@@ -35,6 +33,7 @@ def parse_args():
type=float,
help="Probability threshold for start/end index probabiliry.",
)
+ parser.add_argument("--multilingual", action="store_true", help="Whether is the multilingual model.")
parser.add_argument(
"--max_seq_len",
default=512,
diff --git a/model_zoo/uie/deploy/python/infer_gpu.py b/model_zoo/uie/deploy/python/infer_gpu.py
index 7866f6464258..1e4464652110 100755
--- a/model_zoo/uie/deploy/python/infer_gpu.py
+++ b/model_zoo/uie/deploy/python/infer_gpu.py
@@ -15,7 +15,6 @@
import argparse
from pprint import pprint
-import paddle
from uie_predictor import UIEPredictor
@@ -39,6 +38,7 @@ def parse_args():
action="store_true",
help="Whether to use fp16 inference, only takes effect when deploying on gpu.",
)
+ parser.add_argument("--multilingual", action="store_true", help="Whether is the multilingual model.")
parser.add_argument(
"--max_seq_len",
default=512,
diff --git a/model_zoo/uie/deploy/python/uie_predictor.py b/model_zoo/uie/deploy/python/uie_predictor.py
index 45b28f2ed43d..702392f57594 100755
--- a/model_zoo/uie/deploy/python/uie_predictor.py
+++ b/model_zoo/uie/deploy/python/uie_predictor.py
@@ -12,14 +12,13 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import six
-import os
import math
-import numpy as np
-import onnxruntime as ort
+import os
+import re
-import paddle
+import onnxruntime as ort
import paddle2onnx
+import six
from paddlenlp.transformers import AutoTokenizer
from paddlenlp.utils.tools import get_bool_ids_greater_than, get_span
@@ -45,8 +44,8 @@ def __init__(self, model_path_prefix, device="cpu", use_fp16=False, device_id=0)
print(">>> [InferBackend] Use GPU to inference ...")
if use_fp16:
print(">>> [InferBackend] Use FP16 to inference ...")
- from onnxconverter_common import float16
import onnx
+ from onnxconverter_common import float16
fp16_model_file = os.path.join(infer_model_dir, "fp16_model.onnx")
onnx_model = onnx.load_model(float_onnx_file)
@@ -62,7 +61,7 @@ def __init__(self, model_path_prefix, device="cpu", use_fp16=False, device_id=0)
self.predictor = ort.InferenceSession(onnx_model, sess_options=sess_options, providers=providers)
if device == "gpu":
assert "CUDAExecutionProvider" in self.predictor.get_providers(), (
- f"The environment for GPU inference is not set properly. "
+ "The environment for GPU inference is not set properly. "
"A possible cause is that you had installed both onnxruntime and onnxruntime-gpu. "
"Please run the following commands to reinstall: \n "
"1) pip uninstall -y onnxruntime onnxruntime-gpu \n 2) pip install onnxruntime-gpu"
@@ -87,6 +86,7 @@ def __init__(self, args):
self._position_prob = args.position_prob
self._max_seq_len = args.max_seq_len
self._batch_size = args.batch_size
+ self._multilingual = args.multilingual
self._schema_tree = None
self.set_schema(args.schema)
if args.device == "cpu":
@@ -167,12 +167,18 @@ def _single_stage_predict(self, inputs):
end_probs = []
for idx in range(0, len(texts), self._batch_size):
l, r = idx, idx + self._batch_size
- input_dict = {
- "input_ids": encoded_inputs["input_ids"][l:r].astype("int64"),
- "token_type_ids": encoded_inputs["token_type_ids"][l:r].astype("int64"),
- "pos_ids": encoded_inputs["position_ids"][l:r].astype("int64"),
- "att_mask": encoded_inputs["attention_mask"][l:r].astype("int64"),
- }
+ if self._multilingual:
+ input_dict = {
+ "input_ids": encoded_inputs["input_ids"][l:r].astype("int64"),
+ "position_ids": encoded_inputs["position_ids"][l:r].astype("int64"),
+ }
+ else:
+ input_dict = {
+ "input_ids": encoded_inputs["input_ids"][l:r].astype("int64"),
+ "token_type_ids": encoded_inputs["token_type_ids"][l:r].astype("int64"),
+ "position_ids": encoded_inputs["position_ids"][l:r].astype("int64"),
+ "attention_mask": encoded_inputs["attention_mask"][l:r].astype("int64"),
+ }
start_prob, end_prob = self._infer(input_dict)
start_prob = start_prob.tolist()
end_prob = end_prob.tolist()