驯服Transformer:实现百万级类别的文本分类
文本分类是自然语言理解领域最基础的任务。例如,某智能助手的用户请求需要按领域分类(天气、音乐、智能家居等),许多自然语言处理应用依赖对单词进行词性分类的解析器。
对于类别数量较少的任务,性能最佳的文本分类系统通常使用预训练的Transformer模型(如BERT、XLNet和RoBERTa)。但Transformer模型的复杂度随输入序列长度呈平方增长,随类别数量呈线性增长。当类别数量达到数十万甚至百万级时,模型会变得不切实际地庞大。
在本文中,我们提出了一种将Transformer模型应用于大规模类别文本分类(即“极端多标签分类”)的新方法。该模型在类别数量增加时仍能保持合理的扩展性,实验表明在四个不同数据集上,其在选择输入相关类别的任务中均优于现有最优系统。
分类器规模爆炸问题
通常,Transformer模型会在大型通用文本语料库上进行预训练,学习单词的嵌入表示(即向量表示),使相关单词在向量空间中聚集。这些嵌入随后作为新分类器的输入,用于特定任务的训练。
无论任务如何,Transformer模型本身的大小是固定的(通常约为3.5亿参数)。以通用语言理解评估基准中的多类型自然语言推理语料库为例,包含三种逻辑关系的分类器仅增加约2000个参数,差异可忽略不计。
然而,在某电商平台商品关键词推荐系统中,涉及约百万个商品类别。训练将商品名称分类到这些类别的分类器会使模型增加超过10亿个参数,几乎使模型规模翻两倍,极大降低训练和运行效率。
聚类分类解决方案
为解决此问题,我们训练Transformer模型将每个输入分配到类别簇而非单个类别,然后使用简单的线性分类器从簇中选择一个类别。这种方法在保持分类精度的同时大幅减小了Transformer模型的规模。
我们实验了两种不同的类别聚类方法:
- 使用预训练XLNet模型生成的嵌入,对向量空间中相近的类别名称进行聚类
- 嵌入每个类别的样本输入,而不仅仅是类别名称
实验表明,结合这两种方法进行类别聚类的效果优于单独使用任一方法。
负样本构建策略
学习分区需要正负训练样本。我们采用两种方法构建负样本:
- 从同一簇中的其他类别抽取负样本,确保负样本具有挑战性
- 利用Transformer聚类模型识别具有高预测概率的错误簇作为额外负样本
实验成果
在四个数据集上与九个基准系统比较显示,本系统在单标签分类任务上准确率全面领先。虽然与第二名AttentionXML系统的优势幅度较小(约1%),但两种技术具有互补性,结合使用可能进一步提升性能。
图表说明:通过Transformer模型将输入分配到标签簇,再由线性分类器选择具体标签,有效平衡模型复杂度与分类精度