Transformers解决文本分类任务、超参搜索
微调预训练模型进行文本分类
9个句子级别的分类任务:
- CoLA (Corpus of Linguistic Acceptability) 鉴别一个句子是否语法正确.
- MNLI (Multi-Genre Natural Language Inference) 给定一个假设,判断另一个句子与该假设的关系:entails, contradicts 或者 unrelated。
- MRPC (Microsoft Research Paraphrase Corpus) 判断两个句子是否互为paraphrases.
- QNLI (Question-answering Natural Language Inference) 判断第2句是否包含第1句问题的答案。
- QQP (Quora Question Pairs2) 判断两个问句是否语义相同。
- RTE (Recognizing Textual Entailment)判断一个句子是否与假设成entail关系。
- SST-2 (Stanford Sentiment Treebank) 判断一个句子的情感正负向.
- STS-B (Semantic Textual Similarity Benchmark) 判断两个句子的相似性(分数为1-5分)。
- WNLI (Winograd Natural Language Inference) Determine if a sentence with an anonymous pronoun and a sentence with this pronoun replaced are entailed or not.
加载数据
我们将会使用Datasets库来加载数据和对应的评测方式。数据加载和评测方式加载只需要简单使用load_dataset和load_metric即可。
from datasets import load_dataset, load_metric
数据预处理
在将数据喂入模型之前,我们需要对数据进行预处理。预处理的工具叫Tokenizer。Tokenizer首先对输入进行tokenize,然后将tokens转化为预模型中需要对应的token ID,再转化为模型需要的输入格式。
微调预训练模型
既然数据已经准备好了,现在我们需要下载并加载我们的预训练模型,然后微调预训练模型。既然我们是做seq2seq任务,那么我们需要一个能解决这个任务的模型类。我们使用AutoModelForSequenceClassification 这个类。和tokenizer相似,from_pretrained方法同样可以帮助我们下载并加载模型,同时也会对模型进行缓存,就不会重复下载模型啦。
选定数据集和评价方法后,可以传给Trainer:
trainer = Trainer(
model,
args,
train_dataset=encoded_dataset["train"],
eval_dataset=encoded_dataset[validation_key],
tokenizer=tokenizer,
compute_metrics=compute_metrics
)
超参搜索
Trainer同样支持超参搜索
Reference
https://github.com/datawhalechina/Learn-NLP-with-Transformers