作者介紹
高開遠,漫威鐵粉/吸貓重症患者,本科就讀於哈爾濱工業大學,現為上海交通大學2017級碩士研究生,研究方向:知識圖譜/chatbot,大魚ai特約作者。
01
transformer模型
bert模型就是以transformer基礎上訓練出來的,所以在開始之前我們首先複習一下目前nlp領域可以說是最高效的『變形金剛』transformer。由於網上transformer介紹解讀文章滿天飛了都,這裡就不浪費太多時間了。
4.add(類似於resnet裡的殘差操作)
5.norm(加快收斂)
6.softmax
7.fine-tuning
02
前期準備
google提供了多種預訓練好的bert模型,有針對不同語言的和不同模型大小的。uncased引數指的是將資料全都轉成小寫的(大多數任務使用uncased模型效果會比較好,當然對於一些大小寫影響嚴重的任務比如ner等就可以選擇cased)
bert_model.ckpt:有三個,包含預訓練的引數
vocab.txt:詞表
bert_config.json:儲存模型超引數的檔案
3. 資料集準備
03
start working
bert非常友好的一點就是對於nlp任務,我們只需要對最後一層進行微調便可以用於我們的專案需求。我們只需要將我們的資料輸入處理成標準的結構進行輸入就可以了。
1.dataprocessor基類
首先在run_classifier.py檔案中有乙個基類dataprocessor類:
2.編寫mytaskprocessor
mytaskprocessor繼承dataprocessor,用於定義我們自己的任務
3.編寫main以及訓練
至此我們就完成了對我們的資料加工成bert所需要的格式,就可以進行模型訓練了。
data_dir是你的要訓練的文字的資料所在的資料夾,bert_base_dir是你的bert預訓練模型存放的位址。task_name要求和你的dataprocessor類中的名稱一致。下面的幾個引數,do_train代表是否進行fine tune,do_eval代表是否進行evaluation,還有未出現的引數do_predict代表是否進行**。如果不需要進行fine tune,或者顯示卡配置太低的話,可以將do_trian去掉。max_seq_length代表了句子的最長長度,當視訊記憶體不足時,可以適當降低max_seq_length。
上面一節主要就是介紹了怎麼去根據我們實際的任務(多文字分類)去fine-tune bert模型,那麼訓練好適用於我們特定的任務的模型後,接下來就是使用這個模型去做相應地**任務。**階段唯一需要做的就是修改 –do_predict=true。你需要將測試樣本命名為test.csv,輸出會儲存在輸出資料夾的test_result.csv,其中每一行代表乙個測試樣本對應的**輸出,每一列代表對應於不同類別的概率。
有趣的優化
1.指定訓練時輸出loss
bert自帶**中是這樣的,在run_classifier.py檔案中,訓練模型,驗證模型都是用的tensorflow中的estimator介面,因此我們無法實現在訓練迭代100步就用驗證集驗證一次,在run_classifier.py檔案中提供的方法是先執行完所有的epochs之後,再載入模型進行驗證。訓練模型時的**:
2.增加驗證集輸出的指標值
原生bert**中驗證集的輸出指標值只有loss和accuracy,
教程 使用Bert預訓練模型文字分類
bert模型是google在2018年10月發布的語言表示模型,bert在nlp領域橫掃了11項任務的最優結果,可以說是現今最近nlp中最重要的突破。bert模型的全稱是bidirectional encoder representations from transformers,是通過訓練mask...
bert 分類模型
大神的帖子 github 記錄本人訓練情況 1.資料 train.tsv,test.tsv dev.tsv 2.改原始碼 修改run classifier.py檔案中get labels等方法 3.儲存label2id的字典 4.使用命令訓練模型 5.6.後面使用的模型服務端,使用的是.pb格式的模...
文字分類 08 BERT
大綱概述 資料集合 資料處理 預訓練word2vec模型 word2vec預訓練詞向量 textcnn 模型 charcnn 模型 bi lstm 模型 bi lstm attention 模型 transformer 模型 elmo 預訓練模型 bert 預訓練模型 資料集為imdb 電影影評,總...