Skip to content

Commit 081e285

Browse files
wawltorZeyuChen
andauthored
Add the word segmentation task in the Taskflow (PaddlePaddle#1123)
* Add the word segmentation task in the Taskflow * format the example in the taskflow * remove the limit for seq length for the segment * Add the poetry_generation and question answering tasks * change the text2knowledge to ner task * update some code for the taskflow * add the pos tagging for the taskflow * Update the doc for the taskflow tasks * update the pos tagging doc Co-authored-by: Zeyu Chen <[email protected]>
1 parent dc68121 commit 081e285

File tree

11 files changed

+464
-58
lines changed

11 files changed

+464
-58
lines changed

examples/language_model/gpt/README.md

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -233,22 +233,29 @@ python deploy/python/inference.py --model_type gpt \
233233
from paddlenlp import Taskflow
234234

235235
# 默认是知识问答任务
236-
question = Taskflow("text_generation")
237-
question("中国的国土面积有多大?")
236+
qa = Taskflow("question_answering")
237+
qa("中国的国土面积有多大?")
238238
'''
239239
[{'text': '中国的国土面积有多大?', 'answer': '960万平方公里。'}]
240240
'''
241241

242-
# 使用写诗任务进行写诗
243-
poetry = Taskflow("text_generation", generation_task="poetry")
244-
poetry("林密不见人")
245-
'''
246-
[{'text': '林密不见人', 'answer': ',但闻人语响。'}]
242+
qa(["中国国土面积有多大?", "中国的首都在哪里?"])
247243
'''
248-
poetry(["林密不见人", "举头邀明月"])
249-
'''
250-
[{'text': '林密不见人', 'answer': ',但闻人语响。'}, {'text': '举头邀明月', 'answer': ',低头思故乡。'}]
244+
[{'text': '中国国土面积有多大?', 'answer': '960万平方公里。'}, {'text': '中国的首都在哪里?', 'answer': '北京。'}]
251245
'''
246+
247+
# 使用写诗任务进行写诗
248+
249+
poetry = Taskflow("poetry_generation")
250+
poetry("林密不见人")
251+
'''
252+
[{'text': '林密不见人', 'answer': ',但闻人语响。'}]
253+
'''
254+
255+
poetry(["林密不见人", "举头邀明月"])
256+
'''
257+
[{'text': '林密不见人', 'answer': ',但闻人语响。'}, {'text': '举头邀明月', 'answer': ',低头思故乡。'}]
258+
'''
252259
```
253260

254261
## 其他

examples/text_to_knowledge/wordtag/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,11 @@ Term-Linking示例程序可以对无标签数据可以启动模型预测, 例如
5656

5757
```python
5858
from paddlenlp import Taskflow
59-
task = Taskflow("text2knowledge", model="wordtag")
60-
task(["热梅茶是一道以梅子为主要原料制作的茶饮",
59+
ner = Taskflow("ner", model="wordtag", linking=True)
60+
ner(["热梅茶是一道以梅子为主要原料制作的茶饮",
6161
"《孤女》是2010年九州出版社出版的小说,作者是余兼羽"])
6262
# Support the input text directly
63-
task("热梅茶是一道以梅子为主要原料制作的茶饮")
63+
ner("热梅茶是一道以梅子为主要原料制作的茶饮")
6464

6565
```
6666
下面是运行WordTag工具后的知识链接的预测结果

examples/text_to_knowledge/wordtag/predict.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,11 @@ def parse_args():
3535
def do_predict(args):
3636
paddle.set_device(args.device)
3737
wordtag = Taskflow(
38-
"text2knowledge",
38+
"ner",
3939
model="wordtag",
4040
batch_size=args.batch_size,
41-
max_seq_length=args.max_seq_len)
41+
max_seq_length=args.max_seq_len,
42+
linking=True)
4243
txts = ["《孤女》是2010年九州出版社出版的小说,作者是余兼羽。", "热梅茶是一道以梅子为主要原料制作的茶饮"]
4344
res = wordtag(txts)
4445
print(res)

paddlenlp/taskflow/lexical_analysis.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,6 @@ def _preprocess(self, inputs, padding=True, add_special_tokens=True):
157157
'batch_size'] if 'batch_size' in self.kwargs else 1
158158
num_workers = self.kwargs[
159159
'num_workers'] if 'num_workers' in self.kwargs else 0
160-
max_seq_len = self.kwargs[
161-
'max_seq_len'] if 'max_seq_len' in self.kwargs else 64
162160
infer_data = []
163161
oov_token_id = self._word_vocab.get("OOV")
164162

@@ -170,7 +168,6 @@ def read(inputs):
170168
len(input_tokens.strip()) > 0):
171169
continue
172170
filter_inputs.append(input_tokens)
173-
input_tokens = input_tokens[:max_seq_len]
174171
ids = []
175172
for token in input_tokens:
176173
token = self._q2b_vocab.get(token, token)

paddlenlp/taskflow/text2knowledge.py renamed to paddlenlp/taskflow/named_entity_recognition.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -113,19 +113,19 @@
113113
usage = r"""
114114
from paddlenlp import Taskflow
115115
116-
task = Taskflow("text2knowledge")
117-
task("《孤女》是2010年九州出版社出版的小说,作者是余兼羽")
116+
ner = Taskflow("ner")
117+
ner("《孤女》是2010年九州出版社出版的小说,作者是余兼羽")
118118
'''
119-
[{'text': '《孤女》是2010年九州出版社出版的小说,作者是余兼羽', 'items': [{'item': '《', 'offset': 0, 'wordtag_label': 'w', 'length': 1}, {'item': '孤女', 'offset': 1, 'wordtag_label': '作品类_实体', 'length': 2}, {'item': '》', 'offset': 3, 'wordtag_label': 'w', 'length': 1}, {'item': '是', 'offset': 4, 'wordtag_label': '肯定词', 'length': 1, 'termid': '肯定否定词_cb_是'}, {'item': '2010年', 'offset': 5, 'wordtag_label': '时间类', 'length': 5, 'termid': '时间阶段_cb_2010年'}, {'item': '九州出版社', 'offset': 10, 'wordtag_label': '组织机构类', 'length': 5, 'termid': '组织机构_eb_九州出版社'}, {'item': '出版', 'offset': 15, 'wordtag_label': '场景事件', 'length': 2, 'termid': '场景事件_cb_出版'}, {'item': '的', 'offset': 17, 'wordtag_label': '助词', 'length': 1, 'termid': '助词_cb_的'}, {'item': '小说', 'offset': 18, 'wordtag_label': '作品类_概念', 'length': 2, 'termid': '小说_cb_小说'}, {'item': ',', 'offset': 20, 'wordtag_label': 'w', 'length': 1}, {'item': '作者', 'offset': 21, 'wordtag_label': '人物类_概念', 'length': 2, 'termid': '人物_cb_作者'}, {'item': '是', 'offset': 23, 'wordtag_label': '肯定词', 'length': 1, 'termid': '肯定否定词_cb_是'}, {'item': '余兼羽', 'offset': 24, 'wordtag_label': '人物类_实体', 'length': 3}]}]
119+
[{'text': '《孤女》是2010年九州出版社出版的小说,作者是余兼羽', 'items': [{'item': '《', 'offset': 0, 'wordtag_label': 'w', 'length': 1}, {'item': '孤女', 'offset': 1, 'wordtag_label': '作品类_实体', 'length': 2}, {'item': '》', 'offset': 3, 'wordtag_label': 'w', 'length': 1}, {'item': '是', 'offset': 4, 'wordtag_label': '肯定词', 'length': 1}, {'item': '2010年', 'offset': 5, 'wordtag_label': '时间类', 'length': 5}, {'item': '九州出版社', 'offset': 10, 'wordtag_label': '组织机构类', 'length': 5}, {'item': '出版', 'offset': 15, 'wordtag_label': '场景事件', 'length': 2}, {'item': '的', 'offset': 17, 'wordtag_label': '助词', 'length': 1}, {'item': '小说', 'offset': 18, 'wordtag_label': '作品类_概念', 'length': 2}, {'item': ',', 'offset': 20, 'wordtag_label': 'w', 'length': 1}, {'item': '作者', 'offset': 21, 'wordtag_label': '人物类_概念', 'length': 2}, {'item': '是', 'offset': 23, 'wordtag_label': '肯定词', 'length': 1}, {'item': '余兼羽', 'offset': 24, 'wordtag_label': '人物类_实体', 'length': 3}]}]
120120
'''
121121
122-
task = Taskflow("text2knowledge", batch_size=2)
123-
task(["热梅茶是一道以梅子为主要原料制作的茶饮",
122+
ner = Taskflow("ner", batch_size=2)
123+
ner(["热梅茶是一道以梅子为主要原料制作的茶饮",
124124
"《孤女》是2010年九州出版社出版的小说,作者是余兼羽",
125125
"中山中环广场,位于广东省中山市东区,地址是东区兴政路1号",
126126
"宫之王是一款打发休闲时光的迷宫游戏"])
127127
'''
128-
[{'text': '热梅茶是一道以梅子为主要原料制作的茶饮', 'items': [{'item': '热梅茶', 'offset': 0, 'wordtag_label': '饮食类_饮品', 'length': 3}, {'item': '是', 'offset': 3, 'wordtag_label': '肯定词', 'length': 1, 'termid': '肯定否定词_cb_是'}, {'item': '一道', 'offset': 4, 'wordtag_label': '数量词', 'length': 2}, {'item': '以', 'offset': 6, 'wordtag_label': '介词', 'length': 1, 'termid': '介词_cb_以'}, {'item': '梅子', 'offset': 7, 'wordtag_label': '饮食类', 'length': 2, 'termid': '饮食_cb_梅'}, {'item': '为', 'offset': 9, 'wordtag_label': '肯定词', 'length': 1, 'termid': '肯定否定词_cb_为'}, {'item': '主要原料', 'offset': 10, 'wordtag_label': '物体类', 'length': 4, 'termid': '物品_cb_主要原料'}, {'item': '制作', 'offset': 14, 'wordtag_label': '场景事件', 'length': 2, 'termid': '场景事件_cb_制作'}, {'item': '的', 'offset': 16, 'wordtag_label': '助词', 'length': 1, 'termid': '助词_cb_的'}, {'item': '茶饮', 'offset': 17, 'wordtag_label': '饮食类_饮品', 'length': 2, 'termid': '饮品_cb_茶饮'}]}, {'text': '《孤女》是2010年九州出版社出版的小说,作者是余兼羽', 'items': [{'item': '《', 'offset': 0, 'wordtag_label': 'w', 'length': 1}, {'item': '孤女', 'offset': 1, 'wordtag_label': '作品类_实体', 'length': 2}, {'item': '》', 'offset': 3, 'wordtag_label': 'w', 'length': 1}, {'item': '是', 'offset': 4, 'wordtag_label': '肯定词', 'length': 1, 'termid': '肯定否定词_cb_是'}, {'item': '2010年', 'offset': 5, 'wordtag_label': '时间类', 'length': 5, 'termid': '时间阶段_cb_2010年'}, {'item': '九州出版社', 'offset': 10, 'wordtag_label': '组织机构类', 'length': 5, 'termid': '组织机构_eb_九州出版社'}, {'item': '出版', 'offset': 15, 'wordtag_label': '场景事件', 'length': 2, 'termid': '场景事件_cb_出版'}, {'item': '的', 'offset': 17, 'wordtag_label': '助词', 'length': 1, 'termid': '助词_cb_的'}, {'item': '小说', 'offset': 18, 'wordtag_label': '作品类_概念', 'length': 2, 'termid': '小说_cb_小说'}, {'item': ',', 'offset': 20, 'wordtag_label': 'w', 'length': 1}, {'item': '作者', 'offset': 21, 'wordtag_label': '人物类_概念', 'length': 2, 'termid': '人物_cb_作者'}, {'item': '是', 'offset': 23, 'wordtag_label': '肯定词', 'length': 1, 'termid': '肯定否定词_cb_是'}, {'item': '余兼羽', 'offset': 24, 'wordtag_label': '人物类_实体', 'length': 3}]}, {'text': '中山中环广场,位于广东省中山市东区,地址是东区兴政路1号', 'items': [{'item': '中山中环广场', 'offset': 0, 'wordtag_label': '场所类', 'length': 6}, {'item': ',', 'offset': 6, 'wordtag_label': 'w', 'length': 1}, {'item': '位于', 'offset': 7, 'wordtag_label': '场景事件', 'length': 2, 'termid': '场景事件_cb_位于'}, {'item': '广东省', 'offset': 9, 'wordtag_label': '世界地区类', 'length': 3, 'termid': '中国地区_cb_广东省'}, {'item': '中山市东', 'offset': 12, 'wordtag_label': '世界地区类', 'length': 4}, {'item': '区', 'offset': 16, 'wordtag_label': '词汇用语', 'length': 1}, {'item': ',', 'offset': 17, 'wordtag_label': 'w', 'length': 1}, {'item': '地址', 'offset': 18, 'wordtag_label': '场所类', 'length': 2, 'termid': '区域场所_cb_地址'}, {'item': '是', 'offset': 20, 'wordtag_label': '肯定词', 'length': 1, 'termid': '肯定否定词_cb_是'}, {'item': '东区', 'offset': 21, 'wordtag_label': '位置方位', 'length': 2, 'termid': '位置方位_cb_东区'}, {'item': '兴政路1号', 'offset': 23, 'wordtag_label': '世界地区类', 'length': 5}]}, {'text': '宫之王是一款打发休闲时光的迷宫游戏', 'items': [{'item': '宫之王', 'offset': 0, 'wordtag_label': '人物类_实体', 'length': 3}, {'item': '是', 'offset': 3, 'wordtag_label': '肯定词', 'length': 1, 'termid': '肯定否定词_cb_是'}, {'item': '一款', 'offset': 4, 'wordtag_label': '数量词', 'length': 2}, {'item': '打发', 'offset': 6, 'wordtag_label': '场景事件', 'length': 2, 'termid': '场景事件_cb_打发'}, {'item': '休闲', 'offset': 8, 'wordtag_label': '场景事件', 'length': 2, 'termid': '场景事件_cb_休闲'}, {'item': '时光', 'offset': 10, 'wordtag_label': '时间类', 'length': 2, 'termid': '时间阶段_cb_时光'}, {'item': '的', 'offset': 12, 'wordtag_label': '助词', 'length': 1, 'termid': '助词_cb_的'}, {'item': '迷宫游戏', 'offset': 13, 'wordtag_label': '作品类_概念', 'length': 4}]}]
128+
[{'text': '热梅茶是一道以梅子为主要原料制作的茶饮', 'items': [{'item': '热梅茶', 'offset': 0, 'wordtag_label': '饮食类_饮品', 'length': 3}, {'item': '是', 'offset': 3, 'wordtag_label': '肯定词', 'length': 1}, {'item': '一道', 'offset': 4, 'wordtag_label': '数量词', 'length': 2}, {'item': '以', 'offset': 6, 'wordtag_label': '介词', 'length': 1}, {'item': '梅子', 'offset': 7, 'wordtag_label': '饮食类', 'length': 2}, {'item': '为', 'offset': 9, 'wordtag_label': '肯定词', 'length': 1}, {'item': '主要原料', 'offset': 10, 'wordtag_label': '物体类', 'length': 4}, {'item': '制作', 'offset': 14, 'wordtag_label': '场景事件', 'length': 2}, {'item': '的', 'offset': 16, 'wordtag_label': '助词', 'length': 1}, {'item': '茶饮', 'offset': 17, 'wordtag_label': '饮食类_饮品', 'length': 2}]}, {'text': '《孤女》是2010年九州出版社出版的小说,作者是余兼羽', 'items': [{'item': '《', 'offset': 0, 'wordtag_label': 'w', 'length': 1}, {'item': '孤女', 'offset': 1, 'wordtag_label': '作品类_实体', 'length': 2}, {'item': '》', 'offset': 3, 'wordtag_label': 'w', 'length': 1}, {'item': '是', 'offset': 4, 'wordtag_label': '肯定词', 'length': 1}, {'item': '2010年', 'offset': 5, 'wordtag_label': '时间类', 'length': 5}, {'item': '九州出版社', 'offset': 10, 'wordtag_label': '组织机构类', 'length': 5}, {'item': '出版', 'offset': 15, 'wordtag_label': '场景事件', 'length': 2}, {'item': '的', 'offset': 17, 'wordtag_label': '助词', 'length': 1}, {'item': '小说', 'offset': 18, 'wordtag_label': '作品类_概念', 'length': 2}, {'item': ',', 'offset': 20, 'wordtag_label': 'w', 'length': 1}, {'item': '作者', 'offset': 21, 'wordtag_label': '人物类_概念', 'length': 2}, {'item': '是', 'offset': 23, 'wordtag_label': '肯定词', 'length': 1}, {'item': '余兼羽', 'offset': 24, 'wordtag_label': '人物类_实体', 'length': 3}]}, {'text': '中山中环广场,位于广东省中山市东区,地址是东区兴政路1号', 'items': [{'item': '中山中环广场', 'offset': 0, 'wordtag_label': '场所类', 'length': 6}, {'item': ',', 'offset': 6, 'wordtag_label': 'w', 'length': 1}, {'item': '位于', 'offset': 7, 'wordtag_label': '场景事件', 'length': 2}, {'item': '广东省', 'offset': 9, 'wordtag_label': '世界地区类', 'length': 3}, {'item': '中山市东', 'offset': 12, 'wordtag_label': '世界地区类', 'length': 4}, {'item': '区', 'offset': 16, 'wordtag_label': '词汇用语', 'length': 1}, {'item': ',', 'offset': 17, 'wordtag_label': 'w', 'length': 1}, {'item': '地址', 'offset': 18, 'wordtag_label': '场所类', 'length': 2}, {'item': '是', 'offset': 20, 'wordtag_label': '肯定词', 'length': 1}, {'item': '东区', 'offset': 21, 'wordtag_label': '位置方位', 'length': 2}, {'item': '兴政路1号', 'offset': 23, 'wordtag_label': '世界地区类', 'length': 5}]}, {'text': '宫之王是一款打发休闲时光的迷宫游戏', 'items': [{'item': '宫之王', 'offset': 0, 'wordtag_label': '人物类_实体', 'length': 3}, {'item': '是', 'offset': 3, 'wordtag_label': '肯定词', 'length': 1}, {'item': '一款', 'offset': 4, 'wordtag_label': '数量词', 'length': 2}, {'item': '打发', 'offset': 6, 'wordtag_label': '场景事件', 'length': 2}, {'item': '休闲', 'offset': 8, 'wordtag_label': '场景事件', 'length': 2}, {'item': '时光', 'offset': 10, 'wordtag_label': '时间类', 'length': 2}, {'item': '的', 'offset': 12, 'wordtag_label': '助词', 'length': 1}, {'item': '迷宫游戏', 'offset': 13, 'wordtag_label': '作品类_概念', 'length': 4}]}]
129129
'''
130130
"""
131131

@@ -157,7 +157,8 @@ def __init__(self, model, task, **kwargs):
157157
self._tags_to_index, self._index_to_tags = self._load_labels(tag_path)
158158

159159
self._termtree = TermTree.from_dir(term_schema_path, term_data_path)
160-
self._linking = True
160+
self._linking = self.kwargs[
161+
'linking'] if 'linking' in self.kwargs else False
161162
self._construct_tokenizer(model)
162163
self._usage = usage
163164
self._summary_num = 2
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# coding:utf-8
2+
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
3+
#
4+
# Licensed under the Apache License, Version 2.0 (the "License"
5+
# you may not use this file except in compliance with the License.
6+
# You may obtain a copy of the License at
7+
#
8+
# http://www.apache.org/licenses/LICENSE-2.0
9+
#
10+
# Unless required by applicable law or agreed to in writing, software
11+
# distributed under the License is distributed on an "AS IS" BASIS,
12+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
# See the License for the specific language governing permissions and
14+
# limitations under the License.
15+
16+
import glob
17+
import json
18+
import math
19+
import os
20+
import copy
21+
import itertools
22+
23+
import numpy as np
24+
from .utils import download_file
25+
from .text_generation import TextGenerationTask
26+
from .task import Task
27+
28+
usage = r"""
29+
from paddlenlp import Taskflow
30+
31+
poetry = Taskflow("poetry_generation")
32+
poetry("林密不见人")
33+
'''
34+
[{'text': '林密不见人', 'answer': ',但闻人语响。'}]
35+
'''
36+
37+
poetry(["林密不见人", "举头邀明月"])
38+
'''
39+
[{'text': '林密不见人', 'answer': ',但闻人语响。'}, {'text': '举头邀明月', 'answer': ',低头思故乡。'}]
40+
'''
41+
"""
42+
43+
URLS = {
44+
"gpt-cpm-large-cn": [
45+
"https://paddlenlp.bj.bcebos.com/taskflow/text_generation/gpt-cpm/gpt-cpm-large-cn_params.tar",
46+
"5aad6f81053cfdbba4797f044fcf66d1"
47+
],
48+
}
49+
50+
51+
class PoetryGenerationTask(TextGenerationTask):
52+
"""
53+
The text generation model to predict the question or chinese poetry.
54+
Args:
55+
task(string): The name of task.
56+
model(string): The model name in the task.
57+
kwargs (dict, optional): Additional keyword arguments passed along to the specific task.
58+
"""
59+
60+
def __init__(self, task, model, **kwargs):
61+
super().__init__(task=task, model=model, **kwargs)
62+
if self._static_mode:
63+
download_file(
64+
self._task_path, "static" + os.path.sep + "inference.pdiparams",
65+
URLS[self.model][0], URLS[self.model][1], "poetry_generation")
66+
self._get_inference_model()
67+
else:
68+
self._construct_model(model)
69+
self._construct_tokenizer(model)
70+
self.kwargs['generation_task'] = 'poetry_generation'

0 commit comments

Comments
 (0)