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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

超详细中文预训练模型ERNIE使用指南-源码

發布時間:2023/11/28 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 超详细中文预训练模型ERNIE使用指南-源码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者 | 高開遠,上海交通大學,自然語言處理研究方向


最近在工作上處理的都是中文語料,也嘗試了一些最近放出來的預訓練模型(ERNIE,BERT-CHINESE,WWM-BERT-CHINESE),比對之后還是覺得百度的ERNIE效果會比較好,而且使用十分方便,所以今天就詳細地記錄一下。希望大家也都能在自己的項目上取得進展~


1、A Glance at ERNIE




<img src="https://pic4.zhimg.com/v2-53538a26740b16b01f5d114740b602ff_b.jpg" data-caption="" data-size="normal" data-rawwidth="1080" data-rawheight="399" class="origin_image zh-lightbox-thumb" width="1080" data-original="https://pic4.zhimg.com/v2-53538a26740b16b01f5d114740b602ff_r.jpg"/>



關于ERNIE模型本身的話這篇不會做過多介紹,網上的介紹文檔也很多了,相信從事NLP的同學們肯定都非常熟悉啦。

2、ERNIE源碼淺嘗


Okay,當我們了解了ERNIE模型的大體框架及原理之后,接下來就可以深入理解一下具體的實現啦。ERNIE是基于百度自己的深度學習框架飛槳(PaddlePaddle)搭建的,(百度推這個飛槳的力度還是蠻大的,還開放了免費算力),大家平時煉丹用的更多的可能是TensorFlow和Pytorch,這里關于運行ERNIE的飛槳環境安裝可以參考快速安裝指南:

paddlepaddle.org.cn/#


2.1 關于輸入


模型預訓練的輸入是基于百科類、資訊類、論壇對話類數據構造具有上下文關系的句子對數據,利用百度內部詞法分析工具對句對數據進行字、詞、實體等不同粒度的切分,然后基于 tokenization.py 中的 CharTokenizer 對切分后的數據進行 token 化處理,得到明文的 token 序列及切分邊界,然后將明文數據根據詞典config/vocab.txt 映射為 id 數據,在訓練過程中,根據切分邊界對連續的 token 進行隨機 mask 操作。經過上述預處理之后的輸入樣例為:

11048 492 1333 1361 1051 326 2508 5 1803 1827 98 164 133 2777 2696 983 121 4 199 634 551 844 85 14 2476 1895 33 13 983 121 23 7 1093 24 46 660 12043 2 1263 6328 33 121 126 398 276 315 5 63 44 35 25 12043 2;0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11;0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2829 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 5455;-1 0 0 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 1 0 0 0 0 1 0 0 00 -1 0 0 0 1 0 0 1 0 1 0 0 1 0 1 0 -1;0

一共有五個部分組成,每個部分之間用分號;隔開:

  • token_ids:輸入句子對的表示;
  • sentence_type_ids:0或者1表示token屬于哪一個句子;
  • position_ids:絕對位置編碼
  • seg_labels:表示分詞邊界信息,0表示詞首、1表示非詞首、-1為占位符
  • next_sentence_label:表示該句子對是否存在上下句的關系(0為無1為有)

reader.pretraining.py中的parse_line函數.


<img src="https://pic1.zhimg.com/v2-c4575d79bf4905f6834905f97e0c4bf4_b.jpg" data-caption="" data-size="normal" data-rawwidth="1080" data-rawheight="374" class="origin_image zh-lightbox-thumb" width="1080" data-original="https://pic1.zhimg.com/v2-c4575d79bf4905f6834905f97e0c4bf4_r.jpg"/>



2.2 關于mask策略 batching.py


我們知道,相較于BERT,ERNIE最大的改進就是中文 + 短語/實體掩碼(這個短語掩碼的操作后來也被BERT采用訓練出了WWM-BERT),所以我們首先來看看ERNIE的掩碼機制是怎么樣實現的。


<img src="https://pic4.zhimg.com/v2-da527d6d6f513f2e383eef91932c3977_b.jpg" data-caption="" data-size="normal" data-rawwidth="1080" data-rawheight="647" class="origin_image zh-lightbox-thumb" width="1080" data-original="https://pic4.zhimg.com/v2-da527d6d6f513f2e383eef91932c3977_r.jpg"/>


<img src="https://pic4.zhimg.com/v2-196d0f5a18a05f4fab3975834bb3e8a3_b.jpg" data-caption="" data-size="normal" data-rawwidth="1080" data-rawheight="669" class="origin_image zh-lightbox-thumb" width="1080" data-original="https://pic4.zhimg.com/v2-196d0f5a18a05f4fab3975834bb3e8a3_r.jpg"/>


<img src="https://pic2.zhimg.com/v2-32edfdb991ffe58427c0f6b2b0da1f69_b.jpg" data-caption="" data-size="normal" data-rawwidth="1080" data-rawheight="705" class="origin_image zh-lightbox-thumb" width="1080" data-original="https://pic2.zhimg.com/v2-32edfdb991ffe58427c0f6b2b0da1f69_r.jpg"/>



<img src="https://pic4.zhimg.com/v2-a64214738f0589d68c797dbbc98ae8f7_b.jpg" data-caption="" data-size="normal" data-rawwidth="1080" data-rawheight="258" class="origin_image zh-lightbox-thumb" width="1080" data-original="https://pic4.zhimg.com/v2-a64214738f0589d68c797dbbc98ae8f7_r.jpg"/>



2.3 關于infer過程代碼改寫



ERNIE代碼很方便使用,但是有一個不足的地方就是目前官方還沒有給出infer.py文件,也就是模型訓練之后給出快速推理結果的文件。Github上簡直萬人血書求接口呀。

所以我們的目的就是需要改寫源碼,完成這樣一個接口:輸入為我們需要預測的文件predict.tsv,調用接口后輸出為相應任務的結果pred_result。下面我們以分類任務為例,改寫一個infer接口。


Step 1. finetune下的classifier.py

在文件中完成predict函數


<img src="https://pic2.zhimg.com/v2-47661e47b422c7d15df3547b3a0faa39_b.jpg" data-caption="" data-size="normal" data-rawwidth="1080" data-rawheight="667" class="origin_image zh-lightbox-thumb" width="1080" data-original="https://pic2.zhimg.com/v2-47661e47b422c7d15df3547b3a0faa39_r.jpg"/>



Step 2. run_classifier.py

修改predict_only=True時的邏輯



<img src="https://pic3.zhimg.com/v2-f606660a67d2f1ab5da7ffae406e11fe_b.jpg" data-caption="" data-size="normal" data-rawwidth="1080" data-rawheight="352" class="origin_image zh-lightbox-thumb" width="1080" data-original="https://pic3.zhimg.com/v2-f606660a67d2f1ab5da7ffae406e11fe_r.jpg"/>



Step 3. finetune_args.py

在該文件中添加一個參數do_predict


<img src="https://pic4.zhimg.com/v2-e0afc5a64d1c7dc58f3be47e4fe1c28f_b.png" data-caption="" data-size="normal" data-rawwidth="1080" data-rawheight="34" class="origin_image zh-lightbox-thumb" width="1080" data-original="https://pic4.zhimg.com/v2-e0afc5a64d1c7dc58f3be47e4fe1c28f_r.jpg"/>



OK, 篇幅有限后面還要介紹具體ERNIE實戰,源碼閱讀部分就先這樣,其實剩下的很多都跟BERT代碼比較相似,感興趣的同學也可以參考之前的 BERT源碼分析系:blog.csdn.net/Kaiyuan_s


3、ERNIE實戰指南


上面扯的都是務虛的,接下來我們務實地來看看ERNIE這個預訓練模型的具體應用。和BERT相比,ERNIE的使用更加簡單,在之前介紹過的BERT模型實戰之多文本分類(blog.csdn.net/Kaiyuan_s)中,我們需要手動改寫一個適應自己任務的Processor,而對于ERNIE來說,簡單到只需要三步:


  • 把數據準備成要求的格式(源碼中使用tsv格式,不過在bert中我們也說過了,可以修改成各種格式的)
  • 寫一下訓練腳本 run_script.sh
  • 跑腳本得到結果 bashrun_script.sh


3.1 準備工作


對于最近大火的預訓練模型來說,絕大多數我們是不太可能自己從頭開始訓練的,最多使用的是官方開源的模型進行特定任務的Finetune。所以第一步就是下載模型代碼(github.com/PaddlePaddle

)以及相應的參數(baidu-nlp.bj.bcebos.com)。


接下去就是準備我們任務的數據,使其符合ERNIE模型輸入要求。一般來說字段之間都是label和text_a用制表符分割,對于句對任務還需要額外的text_b字段。在后面我們會具體介紹每種任務的示例輸入。


ok,前面我們一直強調ERNIE是超友好上手超快的模型,下面我們結合實際任務來看一看到底有多簡單~


3.2 情感分類


情感分類是屬于非常典型的NLP基礎任務之一,因為之前BERT寫過文本分類,所以這里我們就稍微換一換口味~這里我們只考慮最簡單情況的情感分類任務,即給定一個輸入句子,要求模型給出一個情感標簽,可以是只有正負的二分類,也可以是包括中性情感的三分類。ok,我們來看看數據,網上隨便找了一個財經新聞數據集,數據來源于雪球網上萬得資訊發布的正負面新聞標題,數據集中包含17149條新聞數據,包括日期、公司、代碼、正/負面、標題、正文6個字段,其中正面新聞12514條,負面新聞4635條。大概長這樣:


<img src="https://pic2.zhimg.com/v2-192efdc011a7c9cd823d945bdd631d19_b.jpg" data-caption="" data-size="normal" data-rawwidth="1080" data-rawheight="321" class="origin_image zh-lightbox-thumb" width="1080" data-original="https://pic2.zhimg.com/v2-192efdc011a7c9cd823d945bdd631d19_r.jpg"/>



處理成ERNIE分類任務所需要的輸入,大概長這樣:

<img src="https://pic2.zhimg.com/v2-08658200fd4773892aa3833113bd3225_b.jpg" data-caption="" data-size="normal" data-rawwidth="1080" data-rawheight="266" class="origin_image zh-lightbox-thumb" width="1080" data-original="https://pic2.zhimg.com/v2-08658200fd4773892aa3833113bd3225_r.jpg"/>



將處理完成的數據和前面下載好的預訓練模型參數放置到合適的位置,就可以開始寫我們跑模型的腳本文件了:


<img src="https://pic4.zhimg.com/v2-c46cc3256d41be3d403518821a6803d3_b.jpg" data-caption="" data-size="normal" data-rawwidth="1080" data-rawheight="749" class="origin_image zh-lightbox-thumb" width="1080" data-original="https://pic4.zhimg.com/v2-c46cc3256d41be3d403518821a6803d3_r.jpg"/>



嗯,這樣一個任務就結束了…運行腳本后等待輸出結果即可,是不是很簡單~

當然如果你還想玩點花樣的話,就可以多看看論文。比如復旦之前有一篇文章是在BERT的基礎上,將ABSA情感分類的單句分類任務轉變成了句子對的相似度匹配任務。簡單來說就是通過構建輔助句子,把輸入這家餐館的鍋包肉超好吃變成了這家餐館的鍋包肉超好吃 + 菜品口感的情感是正的,論文表明這一trick是會比單句分類的效果更好。更具體的細節可以參考論文:《UtilizingBERT for Aspect-Based Sentiment Analysis via Constructing Auxiliary Sentence》(aclweb.org/anthology/N1)。


3.3 命名實體識別


命名實體識別也是NLP的一個基礎任務,之前在博客中也有過介紹:【論文筆記】命名實體識別論文(blog.csdn.net/Kaiyuan_s)關于NER的處理思路也是跟上面情感分類的大同小異,只不過NER是屬于序列標注任務,在運行腳本的時候注意使用源碼中的run_senquence_labeling.py。

<img src="https://pic4.zhimg.com/v2-f38786f01bbb8acd389c22b294f2742f_b.jpg" data-caption="" data-size="normal" data-rawwidth="1080" data-rawheight="830" class="origin_image zh-lightbox-thumb" width="1080" data-original="https://pic4.zhimg.com/v2-f38786f01bbb8acd389c22b294f2742f_r.jpg"/>



4、有趣的ISSUE


Github上比源碼更有價值的是對應的issue,一個好的開源項目會吸引很多人的關注,issue區里會有很多有趣的思考,所以大家千萬不要錯過噢~下面就列幾個我覺得比較有意思的issue供大家參考。


4.1 關于batch_size


github.com/PaddlePaddle


剛打開ERNIE腳本打算跑的同學可能會發現,它的batch_size竟然是8192,我的天哪(小岳岳臉),這不得炸!于是乎你非常機智地把batch_size改為了32,美滋滋地輸入bash script/pretrain.py,然后自信地敲下Enter鍵。嗯???報錯???


報的什么錯大家感興趣的自己去復現吧~


對,在pretrain的時候這里的batch_size指的是所有輸入token的總數,所以才會那么大~


4.2 關于Mask機制的邏輯


github.com/PaddlePaddle


正如我開篇說的,ERNIE的最大創新就是它的mask機制,這一點的代碼實現也在issue區被熱烈討論


4.3 關于獲取輸入的中間向量表示


github.com/PaddlePaddle


有時候我們會需要獲取句子Embedding 和 tokenEmbeddings,可參照下面的方案。


<img src="https://pic1.zhimg.com/v2-f4078b7679bcb2aef8dc9c0e1bc364e4_b.jpg" data-caption="" data-size="normal" data-rawwidth="1080" data-rawheight="541" class="origin_image zh-lightbox-thumb" width="1080" data-original="https://pic1.zhimg.com/v2-f4078b7679bcb2aef8dc9c0e1bc364e4_r.jpg"/>


4.4 預測被masked的詞


github.com/PaddlePaddle


將一個句子的某個詞語mask后,然后使用模型去預測這個詞語,得到候選詞和詞語的概率


4.5. ERNIE模型部署


飛槳(PaddlePaddle)模型的部署可以在官方說明文檔中找到


paddlepaddle.org.cn/doc

5、Some Tips


最后一部分打算說一下關于使用預訓練模型的一些小tips:


  • 學習率是第一種重要的參數,當你開始著手調參時優先從學習率開始。
  • 根據你的任務來選擇預訓練模型。每個模型的訓練大規模語料是不一樣的,這就說明了有些模型天生就是更加適用于某個領域。
  • 所有的預訓練模型為了在盡可能多的下游任務上取得較好的效果,所使用的訓練語料的覆蓋范圍都是非常大的,但這也帶來了一個問題----過于general。也就是說如果你的任務所屬domain與訓練語料的相差較大,比如關于醫學材料學之類的領域,反而不容易取得好的效果。所以我們可以在特定領域下嘗試post-train預訓練模型。
  • 目前來說,對于中文領域的NLP任務,可以優先選擇ERNIE。聽小道消息說,ERNIE 2.0快出來了,據說效果很猛。
  • 不要過分迷信預訓練模型!!!


關于ERNIE的更多信息,可點擊文末閱讀原文或查看以下鏈接:

github.com/PaddlePaddle


Reference:

  • 《Enhanced Representation through kNowledge IntEgration》:
    arxiv.org/abs/1904.0922
  • 《如何評價百度新發布的NLP預訓練模型ERNIE?》:
    zhihu.com/question/3161
  • 《中文任務全面超越 BERT:百度正式發布NLP預訓練模型ERNIE》
    jiqizhixin.com/articles
  • 官方源碼:
    jiqizhixin.com/articles

總結

以上是生活随笔為你收集整理的超详细中文预训练模型ERNIE使用指南-源码的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久草视频免费看 | 99re免费视频精品全部 | 久久国产精品久久 | 永久免费在线视频 | 法国空姐在线观看免费 | 成人羞羞国产免费游戏 | 哪里看毛片| 狠狠操狠狠操 | 国产一区亚洲二区三区 | 绿帽视频 | 国产男女裸体做爰爽爽 | 日韩久久成人 | 五月涩 | 天天艹天天| 日本免费一区二区三区最新 | 人人爽久久涩噜噜噜网站 | 国产小视频免费观看 | 催眠美妇肉奴系统 | 国产精品免费无遮挡无码永久视频 | 雷电将军和丘丘人繁衍后代视频 | 日本网站在线免费观看 | 亚洲欧美日韩国产一区二区三区 | 婷婷综合久久 | 日产mv免费观看 | 肉大捧一进一出免费视频 | 国产真实乱 | 狠狠躁天天躁综合网 | 日韩一级二级三级 | 99热亚洲精品 | 国产精品无码免费专区午夜 | 岛国片在线免费观看 | 午夜视频欧美 | 樱花视频在线免费观看 | 97se在线视频| 亚洲欧美日韩在线 | 在线观看日韩视频 | 成年丰满熟妇午夜免费视频 | 中国一区二区三区 | 久久久xxx | 97中文字幕在线观看 | 亚洲在线免费视频 | 99精品福利 | 免费成人在线观看视频 | 黄色在线播放视频 | 8x8x成人| 五月激情在线观看 | 欧美午夜理伦三级在线观看 | 爱情岛论坛永久入址在线 | 中文在线一区二区三区 | 国产在线区 | 中文字幕亚洲一区 | 欧美午夜性 | 人妻一区在线 | 亚洲成人av电影在线 | 一级特黄录像免费看 | 仙踪林久久久久久久999 | 精品乱子一区二区三区 | 午夜一区 | 91久久综合亚洲鲁鲁五月天 | 中文字幕av在线免费观看 | 强行侵犯视频在线观看 | 亚洲色图网站 | 91成人免费在线观看视频 | 久久久久久久久97 | 久久久久久国产免费a片 | 日本一二区视频 | 国产91清纯白嫩初高中在线观看 | 麻豆视频传媒入口 | 久久躁日日躁aaaaxxxx | 国产a一级| 秋霞99 | 国产日本一区二区 | 天堂视频在线免费观看 | 婷婷6月天 | 欧美操操操 | 日本少妇xxxxx | 美女被草网站 | 一区二区高清在线 | 日本免费黄色片 | 精品国精品国产 | 老司机成人在线 | 一本加勒比波多野结衣 | 久久久久久亚洲中文字幕无码 | 黄色av日韩 | 欧美老女人性生活视频 | 最近日本中文字幕 | 初高中福利视频网站 | 色激情五月 | 一级视频毛片 | juliaann第一次和老师 | 亚洲综合第一 | 欧洲一区在线 | 久久久香蕉视频 | 国产中文字幕精品 | 国产a级黄色 | 久久黄色网络 | 欧美视频直播网站 | 一区二区亚洲精品 | 久久高潮视频 |