英文

模型描述

该模型是在 190k Medium Articles 数据集上进行微调的,用于使用文章文本内容作为输入预测文章标签。通常被定义为多标签分类问题,但该模型将标签生成视为文本生成任务(受到 text2tags 的启发)。

如何使用该模型

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
import nltk
nltk.download('punkt')

tokenizer = AutoTokenizer.from_pretrained("fabiochiu/t5-base-tag-generation")
model = AutoModelForSeq2SeqLM.from_pretrained("fabiochiu/t5-base-tag-generation")

text = """
Python is a high-level, interpreted, general-purpose programming language. Its
design philosophy emphasizes code readability with the use of significant
indentation. Python is dynamically-typed and garbage-collected.
"""

inputs = tokenizer([text], max_length=512, truncation=True, return_tensors="pt")
output = model.generate(**inputs, num_beams=8, do_sample=True, min_length=10,
                        max_length=64)
decoded_output = tokenizer.batch_decode(output, skip_special_tokens=True)[0]
tags = list(set(decoded_output.strip().split(", ")))

print(tags)
# ['Programming', 'Code', 'Software Development', 'Programming Languages',
#  'Software', 'Developer', 'Python', 'Software Engineering', 'Science',
#  'Engineering', 'Technology', 'Computer Science', 'Coding', 'Digital', 'Tech',
#  'Python Programming']

数据清洗

该数据集由Medium文章及其标签组成。然而,每篇Medium文章最多只能有五个标签,因此作者需要选择他/她认为最合适的标签(主要是为了与搜索引擎优化相关)。这意味着一个带有“Python”标签的文章可能没有“编程语言”标签,即使前者暗示了后者。

为了解决这个问题,使用了一个手工制作的大约1000个标签的分类体系。利用这个分类体系,对每篇文章的标签进行了扩充处理(例如,带有“Python”标签的文章也将有“编程语言”标签,因为分类体系表明“Python”属于“编程语言”)。分类体系不是公开的,如果您有兴趣,请发送电子邮件至chiusanofabio94@gmail.com。

训练和评估数据

该模型在大约50000篇文章上进行了单个时期的训练,并在训练过程中未使用的1000篇随机文章上进行了评估。

评估结果

  • eval_loss: 0.8474
  • eval_rouge1: 38.6033
  • eval_rouge2: 20.5952
  • eval_rougeL: 36.4458
  • eval_rougeLsum: 36.3202
  • eval_gen_len: 15.257 # 平均生成的标记数

训练超参数

训练过程中使用了以下超参数:

  • learning_rate: 4e-05
  • train_batch_size: 8
  • eval_batch_size: 8
  • seed: 42
  • optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08
  • lr_scheduler_type: linear
  • num_epochs: 1
  • mixed_precision_training: Native AMP

框架版本

  • Transformers 4.19.2
  • Pytorch 1.11.0+cu113
  • Datasets 2.2.2
  • Tokenizers 0.12.1