ELECTRA實現文本多分類

相關論文:

 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歡迎大家進羣交流~或者文章下面留言,看到後會回覆。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章