飛漿(paddle)實現機器學習

huaweichenai發表於2023-03-13

一:飛漿(paddle)介紹

飛槳是國內唯一功能完備的端到端開源深度學習平臺,集深度學習訓練和預測框架、模型庫、工具元件和服務平臺為一體,擁有兼顧靈活性和高效能的開發機制、工業級應用效果的模型、超大規模並行深度學習能力、推理引擎一體化設計以及系統化服務支援的五大優勢,致力於讓深度學習技術的創新與應用更簡單。

飛槳提供的70+ 官方模型,全部經過真實應用場景的有效驗證。不僅包含 更懂中文 的NLP 模型,同時開源多個視覺領域國際競賽冠軍演算法。

支援python、C ++

PaddleNLP是一款簡單易用且功能強大的自然語言處理開發庫。聚合業界優質預訓練模型並提供開箱即用的開發體驗,覆蓋NLP多場景的模型庫搭配產業實踐範例可滿足開發者靈活定製的需求。

GPU 測試工具 https://aistudio.baidu.com/ 領取免費算力

二:飛漿(paddle)相關地址

官網:https://www.paddlepaddle.org.cn/paddle/paddlenlp
github:https://github.com/PaddlePaddle/PaddleNLP
文件:https://paddlenlp.readthedocs.io/zh/latest/

三:PaddleNLP安裝

環境依賴python >= 3.7
paddlepaddle >= 2.3

pip install --upgrade paddlenlp
安裝成功後使用時提示錯誤

image.png

解決方法:

pip install --upgrade paddlepaddle

如果無法安裝可以透過更換國內源的方法來解決

pip install --upgrade paddlepaddle -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

常用的國內映象源地址:

四:PaddleNLP特性

  • 開箱即用的NLP工具集
  • 豐富完備的中文模型庫
  • 產業級端到端系統範例
  • 高效能分散式訓練與推理

五:PaddleNLP使用

1:中文分詞

  • PaddleNLP提供了多種分詞模式,滿足快速切分和實體粒度精準切分,訓練資料來源 百度自建資料集,包含近2200萬句子,覆蓋多種場景
>>> from paddlenlp import Taskflow

# 預設模式————實體粒度分詞,在精度和速度上的權衡,基於百度LAC
>>> seg = Taskflow("word_segmentation")
>>> seg("近日國家衛健委釋出第九版新型冠狀病毒肺炎診療方案")
['近日', '國家衛健委', '釋出', '第九版', '新型', '冠狀病毒肺炎', '診療', '方案']

# 快速模式————最快:實現文字快速切分,基於jieba中文分詞工具
>>> seg_fast = Taskflow("word_segmentation", mode="fast")
>>> seg_fast("近日國家衛健委釋出第九版新型冠狀病毒肺炎診療方案")
['近日', '國家', '衛健委', '釋出', '第九版', '新型', '冠狀病毒', '肺炎', '診療', '方案']

# 精確模式————最準:實體粒度切分準確度最高,基於百度解語
# 精確模式基於預訓練模型,更適合實體粒度分詞需求,適用於知識圖譜構建、企業搜尋Query分析等場景中
>>> seg_accurate = Taskflow("word_segmentation", mode="accurate")
>>> seg_accurate("近日國家衛健委釋出第九版新型冠狀病毒肺炎診療方案")
['近日', '國家衛健委', '釋出', '第九版', '新型冠狀病毒肺炎', '診療', '方案']
  • 批次樣本輸入,平均速度更快
>>> from paddlenlp import Taskflow
>>> seg = Taskflow("word_segmentation")
>>> seg(["第十四屆全運會在西安舉辦", "三亞是一個美麗的城市"])
[['第十四屆', '全運會', '在', '西安', '舉辦'], ['三亞', '是', '一個', '美麗', '的', '城市']]
  • 自定義分詞

建立一個user_dict.txt檔案,內容如下

平原上的火焰
上 映
>>> from paddlenlp import Taskflow
>>> seg = Taskflow("word_segmentation")
>>> seg("平原上的火焰宣佈延期上映")
['平原', '上', '的', '火焰', '宣佈', '延期', '上映']
>>> seg = Taskflow("word_segmentation", user_dict="user_dict.txt")
>>> seg("平原上的火焰宣佈延期上映")
['平原上的火焰', '宣佈', '延期', '上', '映']

2:文字糾錯

>>> from paddlenlp import Taskflow
>>> corrector = Taskflow("text_correction")
# 單條輸入
>>> corrector('遇到逆竟時,我們必須勇於面對,而且要愈挫愈勇。')
[{'source': '遇到逆竟時,我們必須勇於面對,而且要愈挫愈勇。', 'target': '遇到逆境時,我們必須勇於面對,而且要愈挫愈勇。', 'errors': [{'position': 3, 'correction': {'竟': '境'}}]}]
# 批次預測
>>> corrector(['遇到逆竟時,我們必須勇於面對,而且要愈挫愈勇。', '人生就是如此,經過磨練才能讓自己更加拙壯,才能使自己更加樂觀。'])
[{'source': '遇到逆竟時,我們必須勇於面對,而且要愈挫愈勇。', 'target': '遇到逆境時,我們必須勇於面對,而且要愈挫愈勇。', 'errors': [{'position': 3, 'correction': {'竟': '境'}}]}, {'source': '人生就是如此,經過磨練才能讓自己更加拙壯,才能使自己更加樂觀。', 'target': '人生就是如此,經過磨練才能讓自己更加茁壯,才能使自己更加樂觀。', 'errors': [{'position': 18, 'correction': {'拙': '茁'}}]}]

3:文字相似度

基於百萬量級Dureader Retrieval資料集訓練RocketQA並達到前沿文字相似效果
資料集來源 收集百度知道2200萬對相似句組
有多模型選擇,預設選擇詞庫最大的模型,其他模型對精度、速度做出平衡,無自定義訓練

>>> from paddlenlp import Taskflow
>>> similarity = Taskflow("text_similarity")
>>> arr =[["烏克蘭回應“澤連斯基替身被拍到”:是保鏢?", "烏克蘭方面對澤連斯基使用替身事件做出回應,系第三方保鏢?"]]
>>> res = similarity(arr)
[{'text1': '烏克蘭回應“澤連斯基替身被拍到”:是保鏢?', 'text2': '烏克蘭方面對澤連斯基使用替身事件做出回應,系第三方保鏢?', 'similarity': 0.8714959621429443}]
>>> similarity = Taskflow("text_similarity", model='rocketqa-base-cross-encoder')
>>> res = similarity(arr)
[{'text1': '烏克蘭回應“澤連斯基替身被拍到”:是保鏢?', 'text2': '烏克蘭方面對澤連斯基使用替身事件做出回應,系第三方保鏢?', 'similarity': 0.5669652819633484}]

4:情感分析

整合BiLSTM、SKEP、UIE等模型,支援評論維度、觀點抽取、情感極性分類等情感分析任務訓練資料來源 百度自建資料集

>>> from paddlenlp import Taskflow
>>> similarity = Taskflow("text_similarity")
>>> schema = ['情感傾向[正向,負向]']
>>> senta = Taskflow("sentiment_analysis", model="uie-senta-base", schema=schema)
senta("這家店服務熱情,價格也便宜")
[{'情感傾向[正向,負向]': [{'text': '正向', 'probability': 0.9953493324753282}]}]
>>> senta("這家店感覺不太乾淨")
[{'情感傾向[正向,負向]': [{'text': '負向', 'probability': 0.9996670165660646}]}]

5:生成式問答

使用最大中文開源CPM模型完成問答,包 9.6G

>>> from paddlenlp import Taskflow
>>> qa = Taskflow("question_answering")
# 單條輸入
>>> qa("中國的國土面積有多大?")
[{'text': '中國的國土面積有多大?', 'answer': '960萬平方公里。'}]
# 多條輸入
>>> qa(["中國國土面積有多大?", "中國的首都在哪裡?"])
[{'text': '中國國土面積有多大?', 'answer': '960萬平方公里。'}, {'text': '中國的首都在哪裡?', 'answer': '北京。'}]

6:文字摘要

>>> from paddlenlp import Taskflow
>>> summarizer = Taskflow("text_summarization")
# 單條輸入
>>> summarizer('2022年,中國房地產進入轉型陣痛期,傳統“高槓杆、快週轉”的模式難以為繼,萬科甚至直接喊話,中國房地產進入“黑鐵時代”')
# 輸出:['萬科喊話中國房地產進入“黑鐵時代”']
summarizer("26日下午,日本沖繩縣市民團體組織大規模集會,反對日本政府去年12月透過的新版《國家安全保障戰略》等三份安保政策檔案,反對增加防衛費、在沖繩島嶼部署導彈、擴充自衛隊,批評美軍駐沖繩基地給當地民眾造成的各種困擾,呼籲日本政府走和平道路。當天下午,來自日本各地的約1600多名民眾聚集在沖繩縣民廣場,打出“反對安保三檔案”“反對軍事利用沖繩機場港灣”“反對部署導彈”“不需要美軍基地”等標語,反對日本政府企圖重走戰爭道路。")
# 輸出:['日本民眾集會反對安倍部署導彈']

7:文件智慧

以多語言跨模態佈局增強文件預訓練模型ERNIE-Layout為核心底座
同時依賴飛槳OCR功能
例如識別發票中的資訊

>>> from paddlenlp import Taskflow
>>> docprompt = Taskflow("document_intelligence")
>>> pprint(docprompt([{"doc": "invoice.jpg", "prompt": ["發票號碼是多少?", "校驗碼是多少?","開票日期是什麼時候?","合計是多少?","開票人是誰?"]}]))
#輸出
[{'prompt': '發票號碼是多少?',
  'result': [{'end': 16, 'prob': 1.0, 'start': 16, 'value': 'No05152193'},
             {'end': 23, 'prob': 0.79, 'start': 23, 'value': '05152193'}]},
 {'prompt': '校驗碼是多少?',
  'result': [{'end': 253,
              'prob': 1.0,
              'start': 249,
              'value': '10534 7935109182 86662'}]},
 {'prompt': '開票日期是什麼時候?',
  'result': [{'end': 35, 'prob': 1.0, 'start': 30, 'value': '2023年02月19日'}]},
 {'prompt': '合計是多少?',
  'result': [{'end': 170, 'prob': 0.62, 'start': 168, 'value': '339.62'}]},
 {'prompt': '開票人是誰?',
  'result': [{'end': 285, 'prob': 1.0, 'start': 283, 'value': '凌欽劍'}]}]

相關文章