paddlenlp 任务清单 中文分词、中文纠错、文本相似度、情感分析、词性标注等一键
PaddleNLP Taskflow https://github.com/PaddlePaddle/PaddleNLP/blob/develop/docs/model_zoo/taskflow.md#paddlenlp-taskflow
PaddleNLP Taskflow
- PaddleNLP Taskflow
- 介紹
- 任務清單
- 用法
- 查看使用示例
- 中文分詞
- 詞性標注
- 命名實體識別
- 文本糾錯
- 句法分析
- 情感分析
- 文本相似度
- 『解語』-詞類知識標注
- 『解語』-名詞短語標注
- 生成式問答
- 智能寫詩
- 開放域對話
- 自定義任務
- FAQ
- 介紹
介紹
paddlenlp.Taskflow提供開箱即用的NLP預置任務,覆蓋自然語言理解與自然語言生成兩大核心應用,在中文場景上提供產業級的效果與極致的預測性能。
任務清單
| 中文分詞 | 生成式問答 |
| 詞性標注 | 智能寫詩 |
| 命名實體識別 | 開放域對話 |
| 文本糾錯 | 文本翻譯(TODO) |
| 句法分析 | 自動對聯(TODO) |
| 情感分析 | |
| 文本相似度 | |
| 『解語』-詞類知識標注 | |
| 『解語』-名詞短語標注 |
隨著版本迭代會持續開放更多的應用場景。
安裝
環境依賴
- python >= 3.6
- paddlepaddle >= 2.2.0
- paddlenlp >= 2.2.0
用法
查看使用示例
from paddlenlp import Taskflowseg = Taskflow("word_segmentation") seg.help() >>> Examples:from paddlenlp import Taskflowseg = Taskflow("word_segmentation")seg("第十四屆全運會在西安舉辦")'''['第十四屆', '全運會', '在', '西安', '舉辦']'''seg(["第十四屆全運會在西安舉辦", "三亞是一個美麗的城市"])'''[['第十四屆', '全運會', '在', '西安', '舉辦'], ['三亞', '是', '一個', '美麗', '的', '城市']]'''中文分詞
-
支持三種模式分詞
- Base模式(默認)
- 快速模式
利用『結巴』中文分詞工具,實現文本快速切分。
from paddlenlp import Taskflowseg = Taskflow("word_segmentation", mode="fast") seg("第十四屆全運會在西安舉辦") >>> ['第十四屆', '全運會', '在', '西安', '舉辦']- 精確模式
試圖將句子中的實體詞完整切分,分詞精確度高。
seg = Taskflow("word_segmentation", mode="accurate") seg("李偉拿出具有科學性、可操作性的《陜西省高校管理體制改革實施方案》") >>> ['李偉', '拿出', '具有', '科學性', '、', '可操作性', '的', '《', '陜西省高校管理體制改革實施方案', '》'] -
自定義詞典
-
快速模式詞典載入方式:
用戶可以在詞典文件每一行有兩個部分:詞語、詞頻(可省略),用空格隔開。詞頻省略則自動計算能保證分出該詞的詞頻。
詞典文件user_dict.txt示例:
新冠肺炎 8 國家衛健委"國家衛健委修訂完成了新冠肺炎診療方案"原本的輸出結果為:
['國家', '衛健委', '修訂', '完成', '了', '新冠', '肺炎', '診療', '方案']裝載自定義詞典及輸出結果示例:
from paddlenlp import Taskflowmy_seg = Taskflow("word_segmentation", mode="fast", user_dict="user_dict.txt") my_seg("國家衛健委修訂完成了新冠肺炎診療方案") >>> ['國家衛健委', '修訂', '完成', '了', '新冠肺炎', '診療', '方案'] -
Base、精確模式詞典載入方式:
詞典文件每一行表示一個自定義item。
詞典文件user_dict.txt示例:
平原上的火焰 年 末以默認模型為例,"平原上的火焰計劃于年末上映"原本的輸出結果為:
['平原', '上', '的', '火焰', '計劃', '于', '年末', '上映']裝載自定義詞典及輸出結果示例:
from paddlenlp import Taskflowmy_seg = Taskflow("word_segmentation", user_dict="user_dict.txt") my_seg("平原上的火焰計劃于年末上映") >>> ['平原上的火焰', '計劃', '于', '年', '末', '上映']
-
可配置參數說明
- batch_size:批處理大小,請結合機器情況進行調整,默認為1。
- user_dict:用戶自定義詞典文件,默認為None。
- task_path:自定義任務路徑,默認為None。
詞性標注
from paddlenlp import Taskflowtag = Taskflow("pos_tagging") tag("第十四屆全運會在西安舉辦") >>>[('第十四屆', 'm'), ('全運會', 'nz'), ('在', 'p'), ('西安', 'LOC'), ('舉辦', 'v')]tag(["第十四屆全運會在西安舉辦", "三亞是一個美麗的城市"]) >>> [[('第十四屆', 'm'), ('全運會', 'nz'), ('在', 'p'), ('西安', 'LOC'), ('舉辦', 'v')], [('三亞', 'LOC'), ('是', 'v'), ('一個', 'm'), ('美麗', 'a'), ('的', 'u'), ('城市', 'n')]]- 標簽集合:
| n | 普通名詞 | f | 方位名詞 | s | 處所名詞 | t | 時間 |
| nr | 人名 | ns | 地名 | nt | 機構名 | nw | 作品名 |
| nz | 其他專名 | v | 普通動詞 | vd | 動副詞 | vn | 名動詞 |
| a | 形容詞 | ad | 副形詞 | an | 名形詞 | d | 副詞 |
| m | 數量詞 | q | 量詞 | r | 代詞 | p | 介詞 |
| c | 連詞 | u | 助詞 | xc | 其他虛詞 | w | 標點符號 |
| PER | 人名 | LOC | 地名 | ORG | 機構名 | TIME | 時間 |
-
自定義詞典
用戶可以通過裝載自定義詞典來定制化分詞和詞性標注結果。詞典文件每一行表示一個自定義item,可以由一個單詞或者多個單詞組成,單詞后面可以添加自定義標簽,格式為item/tag,如果不添加自定義標簽,則使用模型默認標簽。
詞典文件user_dict.txt示例:
賽里木湖/LAKE 高/a 山/n 海拔最高 湖 泊以"賽里木湖是新疆海拔最高的高山湖泊"為例,原本的輸出結果為:
[('賽里木湖', 'LOC'), ('是', 'v'), ('新疆', 'LOC'), ('海拔', 'n'), ('最高', 'a'), ('的', 'u'), ('高山', 'n'), ('湖泊', 'n')]裝載自定義詞典及輸出結果示例:
from paddlenlp import Taskflowmy_tag = Taskflow("pos_tagging", user_dict="user_dict.txt") my_tag("賽里木湖是新疆海拔最高的高山湖泊") >>> [('賽里木湖', 'LAKE'), ('是', 'v'), ('新疆', 'LOC'), ('海拔最高', 'n'), ('的', 'u'), ('高', 'a'), ('山', 'n'), ('湖', 'n'), ('泊', 'n')]
可配置參數說明
- batch_size:批處理大小,請結合機器情況進行調整,默認為1。
- user_dict:用戶自定義詞典文件,默認為None。
- task_path:自定義任務路徑,默認為None。
命名實體識別
-
支持兩種模式
- 快速模式
- 精確模式(默認)
-
只返回實體/概念詞:
-
自定義詞典
用戶可以通過裝載自定義詞典來定制化分詞和詞性標注結果。詞典文件每一行表示一個自定義item,可以由一個單詞或者多個單詞組成,單詞后面可以添加自定義標簽,格式為item/tag,如果不添加自定義標簽,則使用模型默認標簽。
詞典文件user_dict.txt示例:
長津湖/電影類_實體 收/詞匯用語 尾/術語類 最 大 海外票倉以"《長津湖》收尾,北美是最大海外票倉"為例,原本的輸出結果為:
[('《', 'w'), ('長津湖', '作品類_實體'), ('》', 'w'), ('收尾', '場景事件'), (',', 'w'), ('北美', '世界地區類'), ('是', '肯定詞'), ('最大', '修飾詞'), ('海外', '場所類'), ('票倉', '詞匯用語')]裝載自定義詞典及輸出結果示例:
from paddlenlp import Taskflowmy_ner = Taskflow("ner", user_dict="user_dict.txt") my_ner("《長津湖》收尾,北美是最大海外票倉") >>> [('《', 'w'), ('長津湖', '電影類_實體'), ('》', 'w'), ('收', '詞匯用語'), ('尾', '術語類'), (',', 'w'), ('北美', '世界地區類'), ('是', '肯定詞'), ('最', '修飾詞'), ('大', '修飾詞'), ('海外票倉', '場所類')]
可配置參數說明
- batch_size:批處理大小,請結合機器情況進行調整,默認為1。
- user_dict:用戶自定義詞典文件,默認為None。
- task_path:自定義任務路徑,默認為None。
- entity_only:是否返回所有詞性標簽;若設置為True,則只返回實體/概念詞;默認為False。
文本糾錯
from paddlenlp import Taskflowcorrector = Taskflow("text_correction") corrector('遇到逆竟時,我們必須勇于面對,而且要愈挫愈勇,這樣我們才能朝著成功之路前進。') >>> [{'source': '遇到逆竟時,我們必須勇于面對,而且要愈挫愈勇,這樣我們才能朝著成功之路前進。', 'target': '遇到逆境時,我們必須勇于面對,而且要愈挫愈勇,這樣我們才能朝著成功之路前進。', 'errors': [{'position': 3, 'correction': {'竟': '境'}}]}]corrector(['遇到逆竟時,我們必須勇于面對,而且要愈挫愈勇,這樣我們才能朝著成功之路前進。','人生就是如此,經過磨練才能讓自己更加拙壯,才能使自己更加樂觀。']) >>> [{'source': '遇到逆竟時,我們必須勇于面對,而且要愈挫愈勇,這樣我們才能朝著成功之路前進。', 'target': '遇到逆境時,我們必須勇于面對,而且要愈挫愈勇,這樣我們才能朝著成功之路前進。', 'errors': [{'position': 3, 'correction': {'竟': '境'}}]}, {'source': '人生就是如此,經過磨練才能讓自己更加拙壯,才能使自己更加樂觀。', 'target': '人生就是如此,經過磨練才能讓自己更加茁壯,才能使自己更加樂觀。', 'errors': [{'position': 18, 'correction': {'拙': '茁'}}]}]可配置參數說明
- batch_size:批處理大小,請結合機器情況進行調整,默認為1。
- task_path:自定義任務路徑,默認為None。
句法分析
from paddlenlp import Taskflowddp = Taskflow("dependency_parsing") ddp("9月9日上午納達爾在亞瑟·阿什球場擊敗俄羅斯球員梅德韋杰夫") >>> [{'word': ['9月9日', '上午', '納達爾', '在', '亞瑟·阿什球場', '擊敗', '俄羅斯', '球員', '梅德韋杰夫'], 'head': [2, 6, 6, 5, 6, 0, 8, 9, 6], 'deprel': ['ATT', 'ADV', 'SBV', 'MT', 'ADV', 'HED', 'ATT', 'ATT', 'VOB']}]ddp(["9月9日上午納達爾在亞瑟·阿什球場擊敗俄羅斯球員梅德韋杰夫", "他送了一本書"]) >>> [{'word': ['9月9日', '上午', '納達爾', '在', '亞瑟·阿什球場', '擊敗', '俄羅斯', '球員', '梅德韋杰夫'], 'head': [2, 6, 6, 5, 6, 0, 8, 9, 6], 'deprel': ['ATT', 'ADV', 'SBV', 'MT', 'ADV', 'HED', 'ATT', 'ATT', 'VOB']}, {'word': ['他', '送', '了', '一本', '書'], 'head': [2, 0, 2, 5, 2], 'deprel': ['SBV', 'HED', 'MT', 'ATT', 'VOB']}]輸出概率值和詞性標簽:
ddp = Taskflow("dependency_parsing", prob=True, use_pos=True) ddp("9月9日上午納達爾在亞瑟·阿什球場擊敗俄羅斯球員梅德韋杰夫") >>> [{'word': ['9月9日', '上午', '納達爾', '在', '亞瑟·阿什', '球場', '擊敗', '俄羅斯', '球員', '梅德韋杰夫'], 'head': [2, 7, 7, 6, 6, 7, 0, 9, 10, 7], 'deprel': ['ATT', 'ADV', 'SBV', 'MT', 'ATT', 'ADV', 'HED', 'ATT', 'ATT', 'VOB'], 'postag': ['TIME', 'TIME', 'PER', 'p', 'PER', 'n', 'v', 'LOC', 'n', 'PER'], 'prob': [0.79, 0.98, 1.0, 0.49, 0.97, 0.86, 1.0, 0.85, 0.97, 0.99]}]使用ddparser-ernie-1.0進行預測:
ddp = Taskflow("dependency_parsing", model="ddparser-ernie-1.0") ddp("9月9日上午納達爾在亞瑟·阿什球場擊敗俄羅斯球員梅德韋杰夫") >>> [{'word': ['9月9日', '上午', '納達爾', '在', '亞瑟·阿什球場', '擊敗', '俄羅斯', '球員', '梅德韋杰夫'], 'head': [2, 6, 6, 5, 6, 0, 8, 9, 6], 'deprel': ['ATT', 'ADV', 'SBV', 'MT', 'ADV', 'HED', 'ATT', 'ATT', 'VOB']}]使用分詞結果來輸入:
ddp = Taskflow("dependency_parsing") ddp.from_segments([['9月9日', '上午', '納達爾', '在', '亞瑟·阿什球場', '擊敗', '俄羅斯', '球員', '梅德韋杰夫']]) >>> [{'word': ['9月9日', '上午', '納達爾', '在', '亞瑟·阿什球場', '擊敗', '俄羅斯', '球員', '梅德韋杰夫'], 'head': [2, 6, 6, 5, 6, 0, 8, 9, 6], 'deprel': ['ATT', 'ADV', 'SBV', 'MT', 'ADV', 'HED', 'ATT', 'ATT', 'VOB']}]依存關系可視化:
from paddlenlp import Taskflowddp = Taskflow("dependency_parsing", return_visual=True) result = ddp("9月9日上午納達爾在亞瑟·阿什球場擊敗俄羅斯球員梅德韋杰夫")[0]['visual'] import cv2 cv2.imwrite('test.png', result)- 標注關系說明:
| SBV | 主謂關系 | 主語與謂詞間的關系 | 他送了一本書(他<–送) |
| VOB | 動賓關系 | 賓語與謂詞間的關系 | 他送了一本書(送–>書) |
| POB | 介賓關系 | 介詞與賓語間的關系 | 我把書賣了(把–>書) |
| ADV | 狀中關系 | 狀語與中心詞間的關系 | 我昨天買書了(昨天<–買) |
| CMP | 動補關系 | 補語與中心詞間的關系 | 我都吃完了(吃–>完) |
| ATT | 定中關系 | 定語與中心詞間的關系 | 他送了一本書(一本<–書) |
| F | 方位關系 | 方位詞與中心詞的關系 | 在公園里玩耍(公園–>里) |
| COO | 并列關系 | 同類型詞語間關系 | 叔叔阿姨(叔叔–>阿姨) |
| DBL | 兼語結構 | 主謂短語做賓語的結構 | 他請我吃飯(請–>我,請–>吃飯) |
| DOB | 雙賓語結構 | 謂語后出現兩個賓語 | 他送我一本書(送–>我,送–>書) |
| VV | 連謂結構 | 同主語的多個謂詞間關系 | 他外出吃飯(外出–>吃飯) |
| IC | 子句結構 | 兩個結構獨立或關聯的單句 | 你好,書店怎么走?(你好<–走) |
| MT | 虛詞成分 | 虛詞與中心詞間的關系 | 他送了一本書(送–>了) |
| HED | 核心關系 | 指整個句子的核心 |
可配置參數說明
- batch_size:批處理大小,請結合機器情況進行調整,默認為1。
- model:選擇任務使用的模型,可選有ddparser,ddparser-ernie-1.0和ddparser-ernie-gram-zh。
- tree:確保輸出結果是正確的依存句法樹,默認為True。
- prob:是否輸出每個弧對應的概率值,默認為False。
- use_pos:是否返回詞性標簽,默認為False。
- use_cuda:是否使用GPU進行切詞,默認為False。
- return_visual:是否返回句法樹的可視化結果,默認為False。
- task_path:自定義任務路徑,默認為None。
情感分析
使用BiLSTM模型:
from paddlenlp import Taskflowsenta = Taskflow("sentiment_analysis") senta("這個產品用起來真的很流暢,我非常喜歡") >>> [{'text': '這個產品用起來真的很流暢,我非常喜歡', 'label': 'positive', 'score': 0.9938690066337585}]senta(["這個產品用起來真的很流暢,我非常喜歡", "作為老的四星酒店,房間依然很整潔,相當不錯。機場接機服務很好,可以在車上辦理入住手續,節省時間"]) >>> [{'text': '這個產品用起來真的很流暢,我非常喜歡', 'label': 'positive', 'score': 0.9938690066337585}, {'text': '作為老的四星酒店,房間依然很整潔,相當不錯。機場接機服務很好,可以在車上辦理入住手續,節省時間', 'label': 'positive', 'score': 0.985750675201416}]使用SKEP情感分析預訓練模型進行預測:
senta = Taskflow("sentiment_analysis", model="skep_ernie_1.0_large_ch") senta("作為老的四星酒店,房間依然很整潔,相當不錯。機場接機服務很好,可以在車上辦理入住手續,節省時間。") >>> [{'text': '作為老的四星酒店,房間依然很整潔,相當不錯。機場接機服務很好,可以在車上辦理入住手續,節省時間。', 'label': 'positive', 'score': 0.984320878982544}]可配置參數說明
- batch_size:批處理大小,請結合機器情況進行調整,默認為1。
- model:選擇任務使用的模型,可選有bilstm和skep_ernie_1.0_large_ch。
- task_path:自定義任務路徑,默認為None。
文本相似度
from paddlenlp import Taskflowsimilarity = Taskflow("text_similarity") similarity([["世界上什么東西最小", "世界上什么東西最小?"]]) >>> [{'text1': '世界上什么東西最小', 'text2': '世界上什么東西最小?', 'similarity': 0.992725}]similarity([["光眼睛大就好看嗎", "眼睛好看嗎?"], ["小蝌蚪找媽媽怎么樣", "小蝌蚪找媽媽是誰畫的"]]) >>> [{'text1': '光眼睛大就好看嗎', 'text2': '眼睛好看嗎?', 'similarity': 0.74502707}, {'text1': '小蝌蚪找媽媽怎么樣', 'text2': '小蝌蚪找媽媽是誰畫的', 'similarity': 0.8192149}]可配置參數說明
- batch_size:批處理大小,請結合機器情況進行調整,默認為1。
- max_seq_len:最大序列長度,默認為128。
- task_path:自定義任務路徑,默認為None。
知識挖掘-詞類知識標注
from paddlenlp import Taskflowwordtag = Taskflow("knowledge_mining") wordtag("《孤女》是2010年九州出版社出版的小說,作者是余兼羽") >>> [{'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}]}]wordtag(["熱梅茶是一道以梅子為主要原料制作的茶飲","《孤女》是2010年九州出版社出版的小說,作者是余兼羽"]) >>> [{'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}]}]- 標簽集合:
知識挖掘-詞類知識標注任務共包含66種詞性及專名類別標簽,標簽集合如下表
-
自定義詞典
用戶可以通過裝載自定義詞典來定制化分詞和詞性標注結果。詞典文件每一行表示一個自定義item,可以由一個單詞或者多個單詞組成,單詞后面可以添加自定義標簽,格式為item/tag,如果不添加自定義標簽,則使用模型默認標簽。
詞典文件user_dict.txt示例:
長津湖/電影類_實體 收/詞匯用語 尾/術語類 最 大 海外票倉以"《長津湖》收尾,北美是最大海外票倉"為例,原本的輸出結果為:
[{'text': '《長津湖》收尾,北美是最大海外票倉', 'items': [{'item': '《', 'offset': 0, 'wordtag_label': 'w', 'length': 1}, {'item': '長津湖', 'offset': 1, 'wordtag_label': '作品類_實體', 'length': 3, 'termid': '影視作品_eb_長津湖'}, {'item': '》', 'offset': 4, 'wordtag_label': 'w', 'length': 1}, {'item': '收尾', 'offset': 5, 'wordtag_label': '場景事件', 'length': 2, 'termid': '場景事件_cb_收尾'}, {'item': ',', 'offset': 7, 'wordtag_label': 'w', 'length': 1}, {'item': '北美', 'offset': 8, 'wordtag_label': '世界地區類', 'length': 2, 'termid': '世界地區_cb_北美'}, {'item': '是', 'offset': 10, 'wordtag_label': '肯定詞', 'length': 1, 'termid': '肯定否定詞_cb_是'}, {'item': '最大', 'offset': 11, 'wordtag_label': '修飾詞', 'length': 2, 'termid': '修飾詞_cb_最大'}, {'item': '海外', 'offset': 13, 'wordtag_label': '場所類', 'length': 2, 'termid': '區域場所_cb_海外'}, {'item': '票倉', 'offset': 15, 'wordtag_label': '詞匯用語', 'length': 2}]}]裝載自定義詞典及輸出結果示例:
from paddlenlp import Taskflowmy_wordtag = Taskflow("knowledge_mining", user_dict="user_dict.txt") my_wordtag("《長津湖》收尾,北美是最大海外票倉") >>> [{'text': '《長津湖》收尾,北美是最大海外票倉', 'items': [{'item': '《', 'offset': 0, 'wordtag_label': 'w', 'length': 1}, {'item': '長津湖', 'offset': 1, 'wordtag_label': '電影類_實體', 'length': 3}, {'item': '》', 'offset': 4, 'wordtag_label': 'w', 'length': 1}, {'item': '收', 'offset': 5, 'wordtag_label': '詞匯用語', 'length': 1}, {'item': '尾', 'offset': 6, 'wordtag_label': '術語類', 'length': 1, 'termid': '動物體構造_cb_動物尾巴'}, {'item': ',', 'offset': 7, 'wordtag_label': 'w', 'length': 1}, {'item': '北美', 'offset': 8, 'wordtag_label': '世界地區類', 'length': 2, 'termid': '世界地區_cb_北美'}, {'item': '是', 'offset': 10, 'wordtag_label': '肯定詞', 'length': 1, 'termid': '肯定否定詞_cb_是'}, {'item': '最', 'offset': 11, 'wordtag_label': '修飾詞', 'length': 1}, {'item': '大', 'offset': 12, 'wordtag_label': '修飾詞', 'length': 1, 'termid': '修飾詞_cb_大'}, {'item': '海外票倉', 'offset': 13, 'wordtag_label': '場所類', 'length': 4}]}]
可配置參數說明
- batch_size:批處理大小,請結合機器情況進行調整,默認為1。
- linking:實現基于詞類的linking,默認為True。
- task_path:自定義任務路徑,默認為None。
- user_dict:用戶自定義詞典文件,默認為None。
知識挖掘-名詞短語標注
from paddlenlp import Taskflownptag = Taskflow("knowledge_mining", model="nptag") nptag("糖醋排骨") >>> [{'text': '糖醋排骨', 'label': '菜品'}]nptag(["糖醋排骨", "紅曲霉菌"]) >>> [{'text': '糖醋排骨', 'label': '菜品'}, {'text': '紅曲霉菌', 'label': '微生物'}]# 使用`linking`輸出粗粒度類別標簽`category`,即WordTag的詞匯標簽。 nptag = Taskflow("knowledge_mining", model="nptag", linking=True) nptag(["糖醋排骨", "紅曲霉菌"]) >>> [{'text': '糖醋排骨', 'label': '菜品', 'category': '飲食類_菜品'}, {'text': '紅曲霉菌', 'label': '微生物', 'category': '生物類_微生物'}]可配置參數說明
- batch_size:批處理大小,請結合機器情況進行調整,默認為1。
- max_seq_len:最大序列長度,默認為64。
- linking:實現與WordTag類別標簽的linking,默認為False。
- task_path:自定義任務路徑,默認為None。
生成式問答
from paddlenlp import Taskflowqa = Taskflow("question_answering") qa("中國的國土面積有多大?") >>> [{'text': '中國的國土面積有多大?', 'answer': '960萬平方公里。'}]qa(["中國國土面積有多大?", "中國的首都在哪里?"]) >>> [{'text': '中國國土面積有多大?', 'answer': '960萬平方公里。'}, {'text': '中國的首都在哪里?', 'answer': '北京。'}]可配置參數說明
- batch_size:批處理大小,請結合機器情況進行調整,默認為1。
智能寫詩
from paddlenlp import Taskflowpoetry = Taskflow("poetry_generation") poetry("林密不見人") >>> [{'text': '林密不見人', 'answer': ',但聞人語響。'}]poetry(["林密不見人", "舉頭邀明月"]) >>> [{'text': '林密不見人', 'answer': ',但聞人語響。'}, {'text': '舉頭邀明月', 'answer': ',低頭思故鄉。'}]可配置參數說明
- batch_size:批處理大小,請結合機器情況進行調整,默認為1。
開放域對話
-
支持兩種模式
- 非交互模式:
- 交互模式:
交互模式下,Taskflow具備多輪對話記憶功能。
from paddlenlp import Taskflowdialogue = Taskflow("dialogue") # 輸入`exit`可退出交互模式 dialogue.interactive_mode(max_turn=3)''' [Human]:你好 [Bot]:你好,很高興認識你,我想問你一下,你喜歡運動嗎? [Human]:喜歡 [Bot]:那你喜歡什么運動啊? [Human]:籃球,你喜歡籃球嗎 [Bot]:當然了,我很喜歡打籃球的 '''
可配置參數說明
- batch_size:批處理大小,請結合機器情況進行調整,默認為1。
- max_seq_len:最大序列長度,默認為512。
- max_turn:僅在交互模式有效,表示任務能記憶的對話輪數;當max_turn為1時,模型只能記住當前對話,無法獲知之前的對話內容。
自定義任務
Taskflow提供了定制接口來使用自己的數據對模型進行微調/訓練,適配任務如下:
| Taskflow("word_segmentation", mode="base") | $HOME/.paddlenlp/taskflow/word_segmentation/lac | 示例 |
| Taskflow("word_segmentation", mode="accurate") | $HOME/.paddlenlp/taskflow/word_segmentation/wordtag | 示例 |
| Taskflow("ner", mode="fast") | $HOME/.paddlenlp/taskflow/ner/lac | 示例 |
| Taskflow("ner", mode="accurate") | $HOME/.paddlenlp/taskflow/ner/wordtag | 示例 |
| Taskflow("text_correction", model="csc-ernie-1.0") | $HOME/.paddlenlp/taskflow/text_correction/csc-ernie-1.0 | 示例 |
| Taskflow("dependency_parsing", model="ddparser") | $HOME/.paddlenlp/taskflow/dependency_parsing/ddparser | 示例 |
| Taskflow("dependency_parsing", model="ddparser-ernie-1.0") | $HOME/.paddlenlp/taskflow/dependency_parsing/ddparser-ernie-1.0 | 示例 |
| Taskflow("dependency_parsing", model="ddparser-ernie-gram-zh") | $HOME/.paddlenlp/taskflow/dependency_parsing/ddparser-ernie-gram-zh | 示例 |
| Taskflow("sentiment_analysis", model="bilstm") | $HOME/.paddlenlp/taskflow/sentiment_analysis/bilstm | 暫無 |
| Taskflow("sentiment_analysis", model="skep_ernie_1.0_large_ch") | $HOME/.paddlenlp/taskflow/sentiment_analysis/skep_ernie_1.0_large_ch | 示例 |
| Taskflow("knowledge_mining", model="wordtag") | $HOME/.paddlenlp/taskflow/knowledge_mining/wordtag | 示例 |
| Taskflow("knowledge_mining", model="nptag") | $HOME/.paddlenlp/taskflow/knowledge_mining/nptag | 示例 |
定制任務示例
這里我們以命名實體識別Taskflow("ner", mode="accurate")為例,展示如何定制自己的模型。
任務的默認路徑為$HOME/.paddlenlp/taskflow/ner/wordtag/,該默認路徑包含以下文件:
$HOME/.paddlenlp/taskflow/ner/wordtag/ ├── model_state.pdparams # 默認模型參數文件 ├── model_config.json # 默認模型配置文件 └── tags.txt # 默認標簽文件-
參考表中對應示例準備數據集和標簽文件tags.txt,執行相應訓練腳本得到自己的model_state.pdparams和model_config.json。
-
通過task_path指定用戶自定義路徑,自定義路徑下的文件需要和默認路徑的文件一致:
- 使用Taskflow加載自定義模型進行一鍵預測:
FAQ
Q1 Taskflow如何修改任務保存路徑?
A: Taskflow默認會將任務相關模型等文件保存到$HOME/.paddlenlp下,可以在任務初始化的時候通過home_path自定義修改保存路徑。
示例:
from paddlenlp import Taskflowner = Taskflow("ner", home_path="/workspace")通過以上方式即可將ner任務相關文件保存至/workspace路徑下。
參考資料
總結
以上是生活随笔為你收集整理的paddlenlp 任务清单 中文分词、中文纠错、文本相似度、情感分析、词性标注等一键的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于 CNN 的中文对话情感分析
- 下一篇: 机器学习常用的算法整理:线性回归、逻辑回