日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PaddleNLP--UIE(二)--小样本快速提升性能(含doccona标注)

發布時間:2023/12/10 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PaddleNLP--UIE(二)--小样本快速提升性能(含doccona标注) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

相關文章:
1.快遞單中抽取關鍵信息【一】----基于BiGRU+CR+預訓練的詞向量優化
2.快遞單信息抽取【二】基于ERNIE1.0至ErnieGram + CRF預訓練模型
3.快遞單信息抽取【三】–五條標注數據提高準確率,僅需五條標注樣本,快速完成快遞單信息任務
1)PaddleNLP通用信息抽取技術UIE【一】產業應用實例:信息抽取{實體關系抽取、中文分詞、精準實體標。情感分析等}、文本糾錯、問答系統、閑聊機器人、定制訓練
2)PaddleNLP–UIE(二)–小樣本快速提升性能(含doccona標注)
!強烈推薦:數據標注平臺doccano----簡介、安裝、使用、踩坑記錄

本項目鏈接:
https://aistudio.baidu.com/aistudio/projectdetail/4160689?contributionType=1

項目主頁:
https://aistudio.baidu.com/aistudio/usercenter

0.信息抽取定義以及難點

自動從無結構或半結構的文本中抽取出結構化信息的任務, 主要包含的任務包含了實體識別、關系抽取、事件抽取、情感分析、評論抽取等任務; 同時信息抽取涉及的領域非常廣泛,信息抽取的技術需求高,下面具體展現一些示例


  • 需求跨領域跨任務:領域之間知識遷移難度高,如通用領域知識很難遷移到垂類領域,垂類領域之間的知識很難相互遷移;存在實體、關系、事件等不同的信息抽取任務需求。
  • 定制化程度高:針對實體、關系、事件等不同的信息抽取任務,需要開發不同的模型,開發成本和機器資源消耗都很大。
  • 訓練數據無或很少:部分領域數據稀缺,難以獲取,且領域專業性使得數據標注門檻高。

針對以上難題,中科院軟件所和百度共同提出了一個大一統諸多任務的通用信息抽取技術 UIE(Unified Structure Generation for Universal Information Extraction),發表在ACL‘22。UIE在實體、關系、事件和情感等4個信息抽取任務、13個數據集的全監督、低資源和少樣本設置下,UIE均取得了SOTA性能。

PaddleNLP結合文心大模型中的知識增強NLP大模型ERNIE 3.0,發揮了UIE在中文任務上的強大潛力,開源了首個面向通用信息抽取的產業級技術方案,不需要標注數據(或僅需少量標注數據),即可快速完成各類信息抽取任務。

**鏈接指路:https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie )

1.使用PaddleNLP Taskflow工具解決信息抽取難點(中文版本)

1.1安裝PaddleNLP

! pip install --upgrade paddlenlp ! pip show paddlenlp

1.2 使用Taskflow UIE任務看看效果

人力資源入職證明信息抽取

from paddlenlp import Taskflow schema = ['姓名', '畢業院校', '職位', '月收入', '身體狀況'] ie = Taskflow('information_extraction', schema=schema) schema = ['姓名', '畢業院校', '職位', '月收入', '身體狀況'] ie.set_schema(schema) ie('茲證明凌霄為本單位職工,已連續在我單位工作5 年。學歷為嘉利頓大學畢業,目前在我單位擔任總經理助理 職位。近一年內該員工在我單位平均月收入(稅后)為 12000 元。該職工身體狀況良好。本單位僅此承諾上述表述是正確的,真實的。') [{'姓名': [{'text': '凌霄','start': 3,'end': 5,'probability': 0.9042383385504706}],'畢業院校': [{'text': '嘉利頓大學','start': 28,'end': 33,'probability': 0.9927952662605009}],'職位': [{'text': '總經理助理','start': 44,'end': 49,'probability': 0.9922470268350594}],'月收入': [{'text': '12000 元','start': 77,'end': 84,'probability': 0.9788556518998917}],'身體狀況': [{'text': '良好','start': 92,'end': 94,'probability': 0.9939678710475306}]}] # Jupyter Notebook默認做了格式化輸出,如果使用其他代碼編輯器,可以使用Python原生包pprint進行格式化輸出from pprint import pprint pprint(ie('茲證明凌霄為本單位職工,已連續在我單位工作5 年。學歷為嘉利頓大學畢業,目前在我單位擔任總經理助理 職位。近一年內該員工在我單位平均月收入(稅后)為 12000 元。該職工身體狀況良好。本單位僅此承諾上述表述是正確的,真實的。'))

醫療病理分析

schema = ['腫瘤部位', '腫瘤大小'] ie.set_schema(schema) ie('胃印戒細胞癌,腫瘤主要位于胃竇體部,大小6*2cm,癌組織侵及胃壁漿膜層,并侵犯血管和神經。') [{'腫瘤部位': [{'text': '胃竇體部','start': 13,'end': 17,'probability': 0.9601818899487213}],'腫瘤大小': [{'text': '6*2cm','start': 20,'end': 25,'probability': 0.9670914301489972}]}]

1.3使用Taskflow UIE進行實體抽取、關系抽取、事件抽取、情感分類、觀點抽取

# 實體抽取 schema = ['時間', '賽手', '賽事名稱'] ie.set_schema(schema) ie('2月8日上午北京冬奧會自由式滑雪女子大跳臺決賽中中國選手谷愛凌以188.25分獲得金牌!') [{'時間': [{'text': '2月8日上午','start': 0,'end': 6,'probability': 0.9857379716035553}],'賽手': [{'text': '中國選手谷愛凌','start': 24,'end': 31,'probability': 0.7232891682586384}],'賽事名稱': [{'text': '北京冬奧會自由式滑雪女子大跳臺決賽','start': 6,'end': 23,'probability': 0.8503080086948529}]}] # 關系抽取 schema = {'歌曲名稱': ['歌手', '所屬專輯']} ie.set_schema(schema) ie('《告別了》是孫耀威在專輯愛的故事里面的歌曲') [{'歌曲名稱': [{'text': '告別了','start': 1,'end': 4,'probability': 0.629614912348881,'relations': {'歌手': [{'text': '孫耀威','start': 6,'end': 9,'probability': 0.9988381005599081}],'所屬專輯': [{'text': '愛的故事','start': 12,'end': 16,'probability': 0.9968462078543183}]}},{'text': '愛的故事','start': 12,'end': 16,'probability': 0.28168707817316374,'relations': {'歌手': [{'text': '孫耀威','start': 6,'end': 9,'probability': 0.9951415104192272}]}}]}] # 事件抽取 schema = {'地震觸發詞': ['地震強度', '時間', '震中位置', '震源深度']} # 事件需要通過xxx觸發詞來選擇觸發詞 ie.set_schema(schema) ie('中國地震臺網正式測定:5月16日06時08分在云南臨滄市鳳慶縣(北緯24.34度,東經99.98度)發生3.5級地震,震源深度10千米。') [{'地震觸發詞': [{'text': '地震','start': 56,'end': 58,'probability': 0.9977425555988333,'relations': {'地震強度': [{'text': '3.5級','start': 52,'end': 56,'probability': 0.998080217831891}],'時間': [{'text': '5月16日06時08分','start': 11,'end': 22,'probability': 0.9853299772936026}],'震中位置': [{'text': '云南臨滄市鳳慶縣(北緯24.34度,東經99.98度)','start': 23,'end': 50,'probability': 0.7874014521275967}],'震源深度': [{'text': '10千米','start': 63,'end': 67,'probability': 0.9937974422968665}]}}]}] # 情感傾向分類 schema = '情感傾向[正向,負向]' # 分類任務需要[]來設置分類的label ie.set_schema(schema) ie('這個產品用起來真的很流暢,我非常喜歡') [{'情感傾向[正向,負向]': [{'text': '正向', 'probability': 0.9990024058203417}]}] # 評價抽取 schema = {'評價維度': ['觀點詞', '情感傾向[正向,負向]']} # 評價抽取的schema是固定的,后續直接按照這個schema進行觀點抽取 ie.set_schema(schema) # Reset schema ie('地址不錯,服務一般,設施陳舊') [{'評價維度': [{'text': '地址','start': 0,'end': 2,'probability': 0.9888139270606509,'relations': {'觀點詞': [{'text': '不錯','start': 2,'end': 4,'probability': 0.9927845886615216}],'情感傾向[正向,負向]': [{'text': '正向', 'probability': 0.998228967796706}]}},{'text': '設施','start': 10,'end': 12,'probability': 0.9588298547520608,'relations': {'觀點詞': [{'text': '陳舊','start': 12,'end': 14,'probability': 0.928675281256794}],'情感傾向[正向,負向]': [{'text': '負向', 'probability': 0.9949388606013692}]}},{'text': '服務','start': 5,'end': 7,'probability': 0.9592857070501211,'relations': {'觀點詞': [{'text': '一般','start': 7,'end': 9,'probability': 0.9949359182521675}],'情感傾向[正向,負向]': [{'text': '負向', 'probability': 0.9952498258302498}]}}]}] # 跨任務跨領域抽取 schema = ['寺廟', {'丈夫': '妻子'}] # 抽取的任務中包含了實體抽取和關系抽取 ie.set_schema(schema) ie('李治即位后,讓身在感業寺的武則天續起頭發,重新納入后宮。') [{'寺廟': [{'text': '感業寺','start': 9,'end': 12,'probability': 0.9888581774497425}],'丈夫': [{'text': '李治','start': 0,'end': 2,'probability': 0.989690572797457,'relations': {'妻子': [{'text': '武則天','start': 13,'end': 16,'probability': 0.9987625986790256}]}}]}]

1.4使用Taskflow UIE一些技巧

1.4.1. 調整batch_size提升預測效率

from paddlenlp import Taskflow schema = ['費用'] ie.set_schema(schema) ie = Taskflow('information_extraction', schema=schema, batch_size=2) #資源不充裕情況,batch_size設置小點,利用率增加。。 ie(['二十號21點49分打車回家46塊錢', '8月3號往返機場交通費110元', '2019年10月17日22點18分回家打車46元', '三月三0號23點10分加班打車21元']) [{'費用': [{'text': '46塊錢','start': 13,'end': 17,'probability': 0.9781786110574338}]},{'費用': [{'text': '110元','start': 11,'end': 15,'probability': 0.9504088995163151}]},{'費用': [{'text': '46元','start': 21,'end': 24,'probability': 0.9753814247531167}]},{'費用': [{'text': '21元','start': 15,'end': 18,'probability': 0.9761294626311425}]}]

1.4.2. 使用UIE-Tiny模型來加快模型預測速度

from paddlenlp import Taskflow schema = ['費用'] ie.set_schema(schema) ie = Taskflow('information_extraction', schema=schema, batch_size=2, model='uie-tiny') # ie(['二十號21點49分打車回家46塊錢', '8月3號往返機場交通費110元', '2019年10月17日22點18分回家打車46元', '三月三0號23點10分加班打車21元']) [{'費用': [{'text': '46塊錢','start': 13,'end': 17,'probability': 0.8945340489542026}]},{'費用': [{'text': '110元','start': 11,'end': 15,'probability': 0.9757676375014448}]},{'費用': [{'text': '46元','start': 21,'end': 24,'probability': 0.860397941604333}]},{'費用': [{'text': '21元','start': 15,'end': 18,'probability': 0.8595131018474689}]}]

2.小樣本提升UIE效果

Taskflow中的UIE基線版本我們是通過大量的有標簽樣本進行訓練,但是UIE抽取的效果面對部分子領域的效果也不是令人滿意,UIE可以通過小樣本就可以快速提升效果。
為什么UIE可以通過小樣本來提升效果呢?UIE的建模方式主要是通過 Prompt 方式來建模, Prompt 在小樣本上進行微調效果非常有效,下面我們通過一個具體的case
來展示UIE微調的效果。

2.1語音報銷工單信息抽取

1. 背景

在某公司內部可以通過語音輸入來報銷打車費用,通過語音ASR模型可以將語音識別為文字,同時對文字信息進行信息抽取,抽取的信息主要是包括了4個方面,時間、出發地、目的地、費用,通過對文字4個方面的信息進行抽取就可以完成一個報銷工單的填寫。

2. 挑戰

目前Taskflow UIE任務對于這種非常垂類的任務效果沒有完全達到工業使用水平,因此需要一定的微調手段來完成UIE模型的微調來提升模型的效果,下面是一些case的展現

ie.set_schema(['時間', '出發地', '目的地', '費用']) ie('10月16日高鐵從杭州到上海南站車次d5414共48元') # 無法準確抽取出發地、目的地 [{'時間': [{'text': '10月16日','start': 0,'end': 6,'probability': 0.9552445817793149}],'出發地': [{'text': '杭州','start': 9,'end': 11,'probability': 0.5713024802221334}],'費用': [{'text': '48元','start': 24,'end': 27,'probability': 0.8932524634666485}]}]

2.2 標注數據

參考鏈接詳細版本—doccano標注過程
我們推薦使用數據標注平臺doccano 進行數據標注,本案例也打通了從標注到訓練的通道,即doccano導出數據后可通過doccano.py腳本輕松將數據轉換為輸入模型時需要的形式,實現無縫銜接。為達到這個目的,您需要按以下標注規則在doccano平臺上標注數據:

Step 1. 本地安裝doccano(請勿在AI Studio內部運行,本地測試環境python=3.8)

$ pip install doccano

Step 2. 初始化數據庫和賬戶(用戶名和密碼可替換為自定義值)

$ doccano init

$ doccano createuser --username my_admin_name --password my_password

Step 3. 啟動doccano

  • 在一個窗口啟動doccano的WebServer,保持窗口

$ doccano webserver --port 8000

  • 在另一個窗口啟動doccano的任務隊列

$ doccano task

Step 4. 運行doccano來標注實體和關系

  • 打開瀏覽器(推薦Chrome),在地址欄中輸入http://127.0.0.1:8000/后回車即得以下界面。

  • 登陸賬戶。點擊右上角的LOGIN,輸入Step 2中設置的用戶名和密碼登陸。

  • 創建項目。點擊左上角的CREATE,跳轉至以下界面。

    • 勾選序列標注(Sequence Labeling)
    • 填寫項目名稱(Project name)等必要信息
    • 勾選允許實體重疊(Allow overlapping entity)、使用關系標注(Use relation labeling)
    • 創建完成后,項目首頁視頻提供了從數據導入到導出的七個步驟的詳細說明。

  • 設置標簽。在Labels一欄點擊Actions,Create Label手動設置或者Import Labels從文件導入。

    • 最上邊Span表示實體標簽,Relation表示關系標簽,需要分別設置。
  • 導入數據。在Datasets一欄點擊Actions、Import Dataset從文件導入文本數據。

    • 根據文件格式(File format)給出的示例,選擇適合的格式導入自定義數據文件。
    • 導入成功后即跳轉至數據列表。
  • 標注數據。點擊每條數據最右邊的Annotate按鈕開始標記。標記頁面右側的標簽類型(Label Types)開關可在實體標簽和關系標簽之間切換。

    • 實體標注:直接用鼠標選取文本即可標注實體。
    • 關系標注:首先點擊待標注的關系標簽,接著依次點擊相應的頭尾實體可完成關系標注。
  • 導出數據。在Datasets一欄點擊Actions、Export Dataset導出已標注的數據。


將標注數據轉化成UIE訓練所需數據

  • 將doccano平臺的標注數據保存在./data/目錄。對于語音報銷工單信息抽取的場景,可以直接下載標注好的數據。

各個任務標注文檔

https://github.com/PaddlePaddle/PaddleNLP/blob/develop/model_zoo/uie/doccano.md

! wget https://paddlenlp.bj.bcebos.com/datasets/erniekit/speech-cmd-analysis/audio-expense-account.jsonl ! mv audio-expense-account.jsonl ./data/

運行以下代碼將標注數據轉換為UIE訓練所需要的數據
splits 0.2 0.8 0.0 訓練集 測試集 驗證集

可配置參數說明

  • doccano_file: 從doccano導出的數據標注文件。
  • save_dir: 訓練數據的保存目錄,默認存儲在data目錄下。
  • negative_ratio: 最大負例比例,該參數只對抽取類型任務有效,適當構造負例可提升模型效果。負例數量和實際的標簽數量有關,最大負例數量 = negative_ratio * 正例數量。該參數只對訓練集有效,默認為5。為了保證評估指標的準確性,驗證集和測試集默認構造全負例。
  • splits: 劃分數據集時訓練集、驗證集所占的比例。默認為[0.8, 0.1, 0.1]表示按照8:1:1的比例將數據劃分為訓練集、驗證集和測試集。
  • task_type: 選擇任務類型,可選有抽取和分類兩種類型的任務。
  • options: 指定分類任務的類別標簽,該參數只對分類類型任務有效。
  • prompt_prefix: 聲明分類任務的prompt前綴信息,該參數只對分類類型任務有效。
  • is_shuffle: 是否對數據集進行隨機打散,默認為True。
  • seed: 隨機種子,默認為1000.
! python preprocess.py --input_file ./data/audio-expense-account.jsonl --save_dir ./data/ --negative_ratio 5 --splits 0.2 0.8 0.0 --seed 1000

2.3 訓練UIE模型

  • 使用標注數據進行小樣本訓練,模型參數保存在./checkpoint/目錄。

tips: 推薦使用GPU環境,否則可能會內存溢出。CPU環境下,可以修改model為uie-tiny,適當調下batch_size。

增加準確率的話:–num_epochs 設置大點多訓練訓練

可配置參數說明:

  • train_path: 訓練集文件路徑。
  • dev_path: 驗證集文件路徑。
  • save_dir: 模型存儲路徑,默認為./checkpoint。
  • learning_rate: 學習率,默認為1e-5。
  • batch_size: 批處理大小,請結合顯存情況進行調整,若出現顯存不足,請適當調低這一參數,默認為16。
  • max_seq_len: 文本最大切分長度,輸入超過最大長度時會對輸入文本進行自動切分,默認為512。
  • num_epochs: 訓練輪數,默認為100。
  • model: 選擇模型,程序會基于選擇的模型進行模型微調,可選有uie-base和uie-tiny,默認為uie-base。
  • seed: 隨機種子,默認為1000.
  • logging_steps: 日志打印的間隔steps數,默認10。
  • valid_steps: evaluate的間隔steps數,默認100。
  • device: 選用什么設備進行訓練,可選cpu或gpu。
! python finetune.py --train_path ./data/train.txt --dev_path ./data/dev.txt --save_dir ./checkpoint --model uie-tiny --learning_rate 1e-5 --batch_size 2 --max_seq_len 512 --num_epochs 50 --seed 1000 --logging_steps 10 --valid_steps 10 #! python finetune.py --train_path ./data/train.txt --dev_path ./data/dev.txt --save_dir ./checkpoint --model uie-base --learning_rate 1e-5 --batch_size 16 --max_seq_len 512 --num_epochs 50 --seed 1000 --logging_steps 10 --valid_steps 10
  • 使用小樣本訓練后的模型參數再次測試無法正確抽取的case。
from paddlenlp import Taskflowschema = ['時間', '出發地', '目的地', '費用']few_ie = Taskflow('information_extraction', schema=schema, task_path='./checkpoint/model_best')few_ie(['10月16日高鐵從杭州到上海南站車次d5414共48元','10月22日從公司到首都機場38元過路費']) [{'時間': [{'text': '10月16日','start': 0,'end': 6,'probability': 0.9998620769863464}],'出發地': [{'text': '杭州','start': 9,'end': 11,'probability': 0.997861665709749}],'目的地': [{'text': '上海南站','start': 12,'end': 16,'probability': 0.9974161074329579}],'費用': [{'text': '48','start': 24,'end': 26,'probability': 0.950222029031579}]},{'時間': [{'text': '10月22日','start': 0,'end': 6,'probability': 0.9995716364718135}],'目的地': [{'text': '首都機場','start': 10,'end': 14,'probability': 0.9984550308953608}],'費用': [{'text': '38','start': 14,'end': 16,'probability': 0.9465688451171062}]}]

總結

以上是生活随笔為你收集整理的PaddleNLP--UIE(二)--小样本快速提升性能(含doccona标注)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产一区二区三区色淫影院 | 一级a毛片免费观看久久精品 | 亚洲一区二区精品 | 欧美性极品xxxx做受 | 欧美日韩久久久久久 | 国内精品嫩模av私拍在线观看 | 亚洲国产精品天堂 | 丰满熟妇人妻中文字幕 | 色鬼综合 | 一本不卡 | 亚洲色图影院 | 国产一区午夜 | 国产精品99久久 | 污网站在线播放 | 在线色导航 | 午夜黄色大片 | 国产91精 | 日韩18p | 亚洲色图10p| 97精品超碰一区二区三区 | aⅴ在线免费观看 | 国产一区高清 | 波多野结衣国产在线 | 欧美 亚洲 另类 偷偷 自拍 | 182tv福利视频 | 欧美激情视频一区二区三区 | 亚洲一区中文字幕在线观看 | 激情综合av| 嫩草视频一区二区三区 | 欧美在线观看视频 | 成人免费三级 | 一级片久久久久 | 男女啪啪国产 | 91九色高潮 | 久久国语精品 | 久久精品亚洲一区 | 青青草手机在线视频 | 粉嫩aⅴ一区二区三区四区五区 | 狠狠躁日日躁夜夜躁av | 蜜桃av噜噜一区二区三区 | 韩国美女啪啪 | аⅴ资源天堂资源库在线 | 佐佐木明希电影 | 国产靠逼视频 | 伊人蕉久| 亚洲国产精品成人综合色在线婷婷 | 亚洲com | 久久精品国产成人av | 精品国产免费看 | 中字幕视频在线永久在线观看免费 | 色狠狠av老熟女 | 久久久精品 | 夜间福利在线观看 | 制服丝袜手机在线 | 日本一级二级视频 | 同性色老头性xxxx老头 | 久草中文在线 | 欧美精品 日韩 | 精品免费一区二区 | av作品在线 | 窝窝午夜精品一区二区 | 久久久久久国产精品一区 | 一区视频在线 | 国产区视频 | 精品中文视频 | 97成人人妻一区二区三区 | 欧美性猛交ⅹxx | 色偷偷人人澡人人爽人人模 | 一卡二卡三卡在线观看 | 女性向小h片资源在线观看 日本天天操 | 五月婷网站| 青草一区 | 水蜜桃91| 中文在线观看免费网站 | 欧美女人一区二区 | 久久精品视频1 | 亚洲www| 国产老妇伦国产熟女老妇视频 | 天天操天天操天天操天天操 | www.爱操| 日韩精品一区二区在线视频 | 亚洲精品久久久久久 | av网站免费观看 | 免费国产高清 | 四虎影视成人永久免费观看亚洲欧美 | 亚洲第一在线视频 | 免费啪啪网 | 在线一二区 | 秒拍福利视频 | av作品在线| 浴室里强摁做开腿呻吟男男 | 国产精品欧美久久久久天天影视 | 无码精品人妻一区二区 | 麻豆av影视| 性欧美大战久久久久久久免费观看 | 一级的大片 | 日韩一区二区在线看 | 91精品国产91久久久久久黑人 | 能直接看的av网站 |