相關論文:
ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators.
一、環境搭建(以下爲我建立的環境):
- Tensorflow==1.15.0
- Python 3
- NumPy1.17
- scikit-learn 0.21.3
- SciPy1.3.1
- 使用GPU訓練
- 服務器:1080Ti 32G
二、下載模型:
下載electra:https://github.com/google-research/electra
下載electra預訓練模型:ELECTRA-Small(有三種模型,這裏以small爲例),新建models目錄放入模型。
三、數據準備:
將你的語料分成3個文件,分別爲train.tsv,test.tsv,dev.tsv三個(我使用的是tsv文件,它與csv區別就是分隔符號的不同,我直接將csv的分隔符‘,’轉成‘\t’),路徑爲electra-master/finetuning_data/{task_name}/*.tsv。
具體操作:
首先使用pandas對數據集進行預處理,最終處理成“label+content”的格式。如圖所示:
將語料分割成三個文件,分割代碼在bert那一篇有。
最終文件結構如圖:
四、修改代碼:
1.在task_builder.py添加新任務。
2.在classification_tasks.py定義新任務,我的是分類任務,其他任務還有qa、tagging之類的,直到到對應的文件就可以。
class New_task(ClassificationTask):
"""New_task."""
def __init__(self, config: configure_finetuning.FinetuningConfig, tokenizer):
super(New_task, self).__init__(config, "new_task", tokenizer,
["0", "1"])
def get_examples(self, split):
return self._create_examples(read_tsv(
os.path.join(self.config.raw_data_dir(self.name), split + ".tsv"),
max_lines=100 if self.config.debug else None), split)
def _create_examples(self, lines, split):
return self._load_glue(lines, split, 1, None, 0, skip_first_line=True)
3.配置參數在configure_finetuning.py文件裏,可修改學習率、batch_size等。
五、訓練模型:
python run_finetuning.py --data-dir $DATA_DIR --model-name electra_small --hparams '{"model_size": "samll", "task_names": ["new_task"]}'
其中--data-dir是項目路徑;--model-name是你使用的模型名;--hparams 兩個參數必填,一個是模型大小,一個是任務名稱。
六、查看結果:
確保自己的項目路徑着正確,會在models/result下生成訓練模型.pkl文件以及.txt文件顯示訓練結果。
遇到問題及解決方案:
1.tensorflow要求1.15,但是之前的一些項目使用的1.12,更換版本不太方便,所以新建了docker容器來解決。
2.超出內存錯誤,修改batch_size,默認是32,可以改小一點。
3.關於中文:哈工大出了中文模型https://github.com/ymcui/Chinese-ELECTRA。
有問題可進qq交流羣:1067428223歡迎大家進羣交流~或者文章下面留言,看到後會回覆。