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},
}