LOTClass
1.0.0
僅使用標籤名稱的文本分類的源代碼:一種語言模型自我訓練方法,發表在EMNLP 2020中。
運行代碼需要至少一個GPU。
在運行之前,您需要首先通過輸入以下命令來安裝所需的軟件包:
$ pip3 install -r requirements.txt
另外,您需要在NLTK庫中下載stopwords:
import nltk
nltk.download('stopwords')
強烈建議使用Python 3.6或更高;使用較舊的Python版本可能會導致包裝不兼容問題。
我們提供四個get_data.sh腳本,用於下載datasets集下方使用的數據集和四個訓練bash腳本agnews.sh , dbpedia.sh , imdb.sh和amazon.sh ,用於在四個數據集中運行該模型。
注意:我們的模型不使用培訓標籤;我們僅提供完整性和評估的培訓/測試集真相標籤。
訓練BASH腳本假設您有兩個10GB GPU。如果您有不同數量的GPU或不同內存大小的GPU,請參閱下一節,以適當地更改以下命令行參數(同時使其他參數保持不變): train_batch_size , accum_steps , eval_batch_size和gpus 。
命令行參數的含義將在鍵入時顯示
python src/train.py -h
以下參數直接影響模型的性能,需要仔細設置:
train_batch_size , accum_steps , gpus :應將這三個參數設置在一起。您需要確保根據train_batch_size * accum_steps * gpus計算的有效訓練批量大小約為128 。例如,如果您有4個GPU,則可以設置train_batch_size = 32, accum_steps = 1, gpus = 4 ;如果您有1個GPU,則可以設置train_batch_size = 32, accum_steps = 4, gpus = 1 。如果您的GPU具有不同的內存大小,則可能需要在調整accum_steps和gpus同時更改train_batch_size ,同時將有效的培訓批量大小保持在128左右。eval_batch_size :此參數僅影響算法的速度;使用與GPU所容納的大型評估批量大小。max_len :此參數控制饋入模型的文檔的最大長度(將截斷更長的文檔)。理想情況下, max_len應該設置為最長文檔的長度( max_len不能大於BERT架構下的512 ),但是使用較大的max_len還消耗了更多的GPU內存,從而導致較小的批量大小和更長的訓練時間。因此,您可以通過減少max_len來交易模型的準確性,以換取更快的培訓。mcp_epochs , self_train_epochs :他們控制了多少個時期來訓練模型的類別預測任務和自我訓練任務。設置mcp_epochs = 3, self_train_epochs = 1對於大多數數據集而言,將是一個不錯的起點,但是如果數據集很小(少於100,000文檔),則可以增加它們。其他參數可以保存為其默認值。
要在新數據集上執行代碼,您需要
datasets集下創建一個名為your_dataset的目錄。your_dataset下準備一個文本語料train.txt (每行的一個文檔),以訓練分類模型(不需要文檔標籤)。your_dataset下準備標籤名稱文件label_names.txt (每行包含一個類別的標籤名稱;如果將多個單詞用作類別的標籤名稱,請將它們放在同一行中,並用空格字符將其分開)。test_labels.txt提供測試語料庫test.txt (每行的一個文檔)(每行包含一個整數,表示相應文檔的類別索引,索引從0開始,訂單必須與label_names.txt中的類別順序一致)。如果提供了測試語料庫,則一旦培訓完成後your_dataset out.txt寫入分類結果。如果提供了測試語料庫的地面真實標籤,則在自我訓練期間將顯示測試精度,這對於使用小測試組的高參數調整和模型進行櫻桃的模型很有用。final_model.pt your_dataset下方。注意:代碼將在數據集目錄下的.pt文件中緩存中間數據和模型檢查點,以繼續培訓。如果更改培訓語料庫或標籤名稱並重新運行代碼,則需要首先刪除所有.pt文件,以防止代碼加載舊結果。
準備自己的數據集時,您始終可以參考示例數據集。
如果您發現代碼有助於研究,請引用以下論文。
@inproceedings{meng2020text,
title={Text Classification Using Label Names Only: A Language Model Self-Training Approach},
author={Meng, Yu and Zhang, Yunyi and Huang, Jiaxin and Xiong, Chenyan and Ji, Heng and Zhang, Chao and Han, Jiawei},
booktitle={Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing},
year={2020},
}