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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

小数据福音!BERT在极小数据下带来显著提升的开源实现

發布時間:2024/10/8 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小数据福音!BERT在极小数据下带来显著提升的开源实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


作者丨金立達

單位丨笨鳥社交 AI Lab

學校丨英國帝國理工學院

研究方向丨自然語言處理、知識圖譜


標注數據,可以說是 AI 模型訓練里最艱巨的一項工作了。自然語言處理的數據標注更是需要投入大量人力。相對計算機視覺的圖像標注,文本的標注通常沒有準確的標準答案,對句子理解也是因人而異,讓這項工作更是難上加難。?


但是,谷歌最近發布的 BERT [1]?大大地解決了這個問題!根據我們的實驗,BERT 在文本多分類的任務中,能在極小的數據下帶來顯著的分類準確率提升。并且,實驗主要對比的是僅僅 5 個月前發布的 State-of-the-Art 語言模型遷移學習模型 – ULMFiT [2],結果有著明顯的提升。我們先看結果:


?圖1.?實驗結果對比,BERT在極少的數據集上表現非常出色


從上圖我們可以看出,在不同的數據集中,BERT 都有非常出色的表現。我們用的實驗數據分為 1000、 6700 和 12000 條,并且各自包含了測試數據,訓練測試分割為 80%-20%。數據集從多個網頁來源獲得,并經過了一系列的分類映射。但 Noisy 數據集帶有較為顯著的噪音,抽樣統計顯示噪音比例在 20% 左右。


實驗對比了幾個模型,從最基礎的卷積網絡作為 Baseline,到卷積網絡加上傳統的詞向量 Glove embedding, 然后是 ULMFiTBERT。為了防止過擬合,CNN 與 CNN+Glove 模型訓練時加入了 Early stopping。


值得注意的是,這里用的 BERT 模型均為基礎版本,“BERT-Base, Uncased”,12 層,110M?參數,對比的是 ULMFiT 調整過的最優化參數??梢?BERT 在此任務中的強大。?


然而,在 12000 條樣本的數據集上,BERT 的結果相對 6700 條并沒有顯著的提升。數據分類不平衡可能是導致此結果的一大因素。



BERT 開源的多個版本的模型:


?圖2.?開源的多個版本的BERT模型


接下來,我們直奔主題 – 如何在自己的機器上實現 BERT 的文本 25 分類任務。教程分為以下幾部分:


  • 運行環境

  • 硬件配置

  • 下載模型

  • 輸入數據準備

  • 實現細節




運行環境


TensorFlow 版本為 Windows 1.10.0 GPU,具體安裝教程可以參考此鏈接:


https://www.tensorflow.org/install/pip?lang=python3


Anaconda 版本為 1.9.2。


硬件配置


實驗用的機器顯卡為 NVIDIA GeoForce GTX 1080 Ti,BERT base 模型占用顯存約為 9.5G。


下載模型


所有的運行環境設置好后,在這里可以下載到我們實驗用的 BERT base:


https://storage.googleapis.com/bert_models/2018_10_18/uncased_L-12_H-768_A-12.zip


下載完后,放在 BERT_BASE_DIR 中。


輸入數據準備


我們需要將文本數據分為三部分:


  • Train: train.tsv

  • Evaluate: dev.tsv

  • Test: test.tsv


下面可以看到每個文件的格式,非常簡單,一列為需要做分類的文本數據,另一列則是對應的 Label。


?圖3. 輸入文本格式樣板


并將這三個文件放入 DATA_DIR 中。


實現細節


首先我們 Clone 官方的 BERT Github repo:


https://github.com/google-research/bert


由于我們要做的是文本多分類任務,可以在 run_classifier.py 基礎上面做調整。


這里簡單介紹一下這個腳本本來的任務,也就是 BERT 示范的其中一個任務。這個例子是在 Microsoft Research Paraphrase Corpus (MRPC) corpus 數據集上面做微調,數據集僅包含 3600 個樣本,在 GPU 上面幾分鐘就可完成微調。


此數據集可以用以下腳本下載:


https://gist.github.com/W4ngatang/60c2bdb54d156a41194446737ce03e2e


注意運行的時候要用 --tasks all 參數來下載。


?圖4.?運行腳本下載MRPC數據集


可以打開看一下輸入數據的結構,都是以 tsv 的形式保存:


?圖5.?MRPC數據集輸入數據樣本


?圖6.?MRPC數據集結構樣本


這里 MRPC 的任務是 Paraphrase Identification,輸入為兩個句子,然后判斷二者是否表示相同的意思,輸出為二分類:是和不是。我們的分類任務只需要一個輸入,而不是一對句子,這個在讀取的過程中可以自動識別,并調整相應的 Sentence Embedding 如下圖所示:


?圖7.?BERT Sentence Embedding自動調整過程


run_classifier.py 的腳本中,由于輸入格式和之前有少許不同,我們需要更改 _create_examples 函數里面的讀取順序,原本的讀取位置為:


?圖8.?MRPC數據集輸入文本讀取方式


我們需要讓 text_a 讀取被分類的文本,而 label 讀取我們的標注:


?圖9.?在文本多分類的任務中,讀取輸入的方式


同時由于沒有 text_b,我們需要在后面制作 example 的時候將他賦值為 None:


?圖10.?由于沒有Sentence Pair輸入,在這里需要將text_b定義為None


接下來,相對于原本的二分類,我們需要針對多分類做出一些調整。代碼中原本將標簽列表手動設置為 0 和 1:


?圖11.?原本直接將標注列表定義為0和1


這里我們加入一個新的輸入,然后將輸出調整如下:


?圖12.?調整get_labels的輸入和輸出


這里 labels 輸入為新添加的所有訓練樣本的 Label,然后通過 set() 返回所有 25 個標簽的列表。調整之后,代碼可以自動根據分類數量定義標簽列表,可以適配多種多分類任務。?


同時,在 _create_examples 中,我們增加兩個返回值,labels 和 labels_test:


?圖13.?_create_examples函數增加兩個返回值,labels和label_test


labels 返回的是所有訓練樣本的 label,用來輸入到之前提到的 get_labels()。Labels 的定義如下圖所示:


?圖14.?新添加的變量labels


接下來我們需要調整 main() function 里面的一些順序,因為現在的 get_labels() 需要額外的輸入(讀取的完整 label list),我們需要把讀取訓練集的步驟放到前面。原來的順序:


1. 獲取 label_list;


?圖15.?第一步


2. 如果在訓練模式,再讀取訓練集。


?圖16.?第二步


現在需要調整為:?


1. 無論什么模式都讀取訓練集,因為需要用到訓練標簽,注意新添加的輸出變量 train_labels;


?圖17.?第一步


2. 然后再獲取 label_list,用前面的 train_labels。


?圖18.?第二步


最后,我們在開頭設置好參數,可以直接輸入默認值來運行。下面拿 DATA_DIR 來舉例:


?圖19.?原始參數


調整后的輸入參數:


?圖20.?調整后的參數


1000 條樣本數據 10 分類,BERT 運行結果如下:


?圖21.?1000條樣本數據10分類BERT結果


總結


本文介紹了如何實現 BERT 的文本多分類任務,并對比了 Baseline 以及不久前的?State-of-the-Art?模型 ULMFiT。實驗結果可以看出 BERT 在此任務中,可以輕松打敗先前的 SOTA。


這里附上本教程的開源代碼:


https://github.com/Socialbird-AILab/BERT-Classification-Tutorial


我們依然會在 BERT 的基礎上不斷嘗試,繼續努力研究,也歡迎大家積極交流。


參考文獻


[1] Devlin, Jacob and Chang, Ming-Wei and Lee, Kenton and Toutanova, Kristina.?BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.?arXiv preprint arXiv:1810.04805.

[2]?Jeremy Howard and Sebastian Ruder. 2018. Universal language model fine-tuning for text classification. In ACL. Association for Computational Linguistics.




點擊以下標題查看作者其他文章:?


  • 自動機器學習(AutoML)最新綜述

  • 自然語言處理中的語言模型預訓練方法

  • 從傅里葉分析角度解讀深度學習的泛化能力

  • 深度解讀DeepMind新作:史上最強GAN圖像生成器

  • 兩行代碼玩轉Google BERT句向量詞向量

  • 這16篇最新論文,幫你輕松積攢知識點

  • TensorSpace:超酷炫3D神經網絡可視化框架


關于PaperWeekly


PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。


▽ 點擊 |?閱讀原文?| 獲取最新論文推薦

總結

以上是生活随笔為你收集整理的小数据福音!BERT在极小数据下带来显著提升的开源实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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