Press "Enter" to skip to content

AWS对一家大型游戏公司的大型语言模型(LLM)进行微调,以对有害言论进行分类

视频游戏行业全球用户估计超过30亿1。它由大量玩家每天虚拟互动组成。不幸的是,与现实世界一样,并非所有玩家都以适当和尊重的方式沟通。为了创建和维护一个社会责任感强的游戏环境,AWS专业服务部门被要求构建一种能够检测在线游戏玩家互动中的不当语言(有害言论)的机制。整体业务目标是通过自动化现有的手动过程来改进组织的运营,并通过提高检测玩家之间不当互动的速度和质量来改善用户体验,最终促进更清洁和健康的游戏环境。

客户的要求是创建一个英语语言检测器,将语音和文本片段分类到自定义的有害语言类别中。他们希望首先确定给定的语言片段是否有害,然后将片段分类到特定的客户定义的有害类别中,例如亵渎或辱骂性语言。

AWS ProServe通过AWS GAIIC(生成式AI创新中心)和ProServe ML交付团队(MLDT)之间的联合努力解决了这个用例。AWS GAIIC是AWS ProServe内的一个团队,将客户与专家配对,开发用于各种业务用例的生成式AI解决方案,并使用概念验证(PoC)构建。然后,AWS ProServe MLDT通过扩展、加固和集成解决方案,将PoC推向生产环境,以满足客户需求。

这个客户使用案例将在两个单独的帖子中展示。本帖子(第1部分)将深入探讨科学方法论。它将解释解决方案背后的思考过程和实验,包括模型训练和开发过程。第2部分将深入介绍产品化解决方案,解释设计决策、数据流程,并说明模型训练和部署架构的示意图。

本文涵盖以下主题:

  • AWS ProServe在这个用例中需要解决的挑战
  • 关于大型语言模型(LLMs)的历史背景,以及为什么这项技术非常适合这个用例
  • AWS GAIIC和AWS ProServe MLDT从数据科学和机器学习(ML)的角度解决方案

数据挑战

AWS ProServe在训练有害语言分类器时面临的主要挑战是从客户那里获得足够的标记数据,以从头开始训练准确的模型。AWS从客户那里收到了大约100个标记数据样本,这比数据科学界推荐的用于微调LLM的1000个样本要少得多。

作为一个固有的附加挑战,自然语言处理(NLP)分类器的训练成本通常很高,需要一个大型词汇库(称为语料库)来生成准确的预测。如果提供足够的标记数据,一种严格有效的NLP解决方案是使用客户的标记数据训练一个自定义语言模型。该模型将仅使用玩家的游戏词汇进行训练,以使其适应游戏中观察到的语言。客户有成本和时间的限制,使得这种解决方案不可行。AWS ProServe被迫寻找一种解决方案,使用相对较小的标记数据集来训练准确的语言有害性分类器。解决方案在于所谓的迁移学习。

迁移学习的思想是利用预训练模型的知识,并将其应用于一个不同但相对相似的问题上。例如,如果训练了一个图像分类器来预测图像是否包含猫,你可以使用模型在训练过程中获得的知识来识别其他动物,如老虎。对于这个语言用例,AWS ProServe需要找到一个之前训练过的语言分类器,该分类器经过训练可以检测有害语言,并使用客户的标记数据进行微调。

解决方案是找到并微调一个LLM来分类有害语言。LLM是使用大量参数进行训练的神经网络,通常达到数十亿个,使用未标记的数据。在进入AWS解决方案之前,下一节将概述LLM的历史以及它们的历史用例。

充分利用LLMs的威力

自从ChatGPT成为历史上增长最快的消费者应用程序之一2,并在发布后的2个月内达到1亿活跃用户,LLMs近来成为寻求ML新应用的企业的焦点。然而,LLMs并不是ML领域的新技术。它们已被广泛用于执行NLP任务,如分析情感、摘要语料库、提取关键词、语音翻译和文本分类。

由于文本的顺序性,循环神经网络(RNN)一直是自然语言处理建模的最前沿技术。具体来说,编码-解码网络架构的提出是因为它创建了一个能够接受任意长度输入并生成任意长度输出的RNN结构。这对于翻译等NLP任务非常理想,其中一个语言的输出短语可以根据另一个语言的输入短语进行预测,通常输入和输出之间的单词数量是不同的。Transformer架构(Vaswani, 2017)是对编码-解码的突破性改进;它引入了自注意力机制的概念,使模型能够专注于输入和输出短语中的不同单词。在传统的编码-解码模型中,模型以相同的方式解释每个单词。当模型按顺序处理输入短语中的每个单词时,开始时的语义信息可能在短语的结束时丢失。自注意力机制通过在编码器和解码器块中添加一个注意力层来改变这一情况,使得在生成输出短语的某个单词时,模型可以对输入短语中的某些单词赋予不同的权重。因此,Transformer模型的基础就此诞生。

Transformer架构是如今最著名和流行的两个LLM(语言模型)的基础,分别是双向编码器表示来自Transformer的转换(BERT)(Radford, 2018)和生成预训练Transformer(GPT)(Devlin 2018)。GPT模型的后续版本,即GPT3和GPT4,是ChatGPT应用程序的引擎。使LLM如此强大的最后一部分是通过一种称为ULMFiT的过程,能够从大规模文本语料库中提取信息,而无需进行大量标记或预处理。该方法具有预训练阶段,其中可以收集一般文本,并让模型在根据先前的单词预测下一个单词的任务上进行训练;这里的好处是任何用于训练的输入文本根据文本的顺序本质上自带标签。LLM真正能够从互联网规模的数据中学习。例如,最初的BERT模型是在BookCorpus和整个英文维基百科文本数据集上进行预训练的。

这种新的建模范式催生了两个新概念:基础模型(FMs)和生成式人工智能。与通常用于经典监督学习的从头开始训练特定任务的模型不同,LLM是预训练的,可以从广泛的文本数据集中提取通用知识,然后再使用一个较小的数据集(通常数量级为几百个样本)进行特定任务或领域的调整。新的机器学习工作流现在从一个被称为基础模型的预训练模型开始。构建在正确的基础上非常重要,而且有越来越多的选择,例如即将发布的亚马逊Titan FMs,这是亚马逊Bedrock的一部分。这些新模型也被认为是生成式的,因为它们的输出与输入数据具有相同的数据类型,并且可以由人类进行解释。过去的机器学习模型是描述性的,例如对猫和狗的图像进行分类,而LLM是生成式的,因为它们的输出是基于输入单词的下一组单词。这使得它们可以为ChatGPT等交互式应用程序提供表达丰富的内容。

Hugging Face与AWS合作,以使基础模型易于访问和构建。Hugging Face创建了一个Transformers API,它将50多种不同的Transformer架构统一在不同的机器学习框架上,包括在其Model Hub中访问预训练模型权重,截至撰写本文时,该Model Hub已经增长到超过200,000个模型。在接下来的章节中,我们将探讨概念验证、解决方案以及被测试并选择为解决客户有毒言论分类问题的基础的FMs。

AWS GAIIC概念验证

AWS GAIIC选择使用BERT架构的LLM基础模型来对有毒语言进行微调分类。一共测试了来自Hugging Face模型库的三个模型:

  • vinai/bertweet-base
  • cardiffnlp/bertweet-base-offensive
  • cardiffnlp/bertweet-base-hate

这三个模型架构都是基于BERTweet架构的。BERTweet是基于RoBERTa预训练过程进行训练的。RoBERTa预训练过程是BERT预训练的一个复制研究的结果,它评估了超参数调整和训练集大小对改进BERT模型训练配方的影响(Liu 2019)。该实验旨在找到一种改进BERT性能结果而不改变底层架构的预训练方法。研究的结论发现,以下预训练修改显著改善了BERT的性能:

  • 使用更大的批次和更多的数据来训练模型
  • 移除下一个句子预测的目标
  • 在更长的序列上进行训练
  • 动态改变应用于训练数据的掩码模式

bertweet-base模型使用RoBERTa研究中的先前预训练过程,使用了8.5亿条英文推文对原始BERT架构进行预训练。它是首个公开的针对英文推文进行大规模预训练的语言模型。

使用推文进行预训练的FM被认为适合两个主要理论原因的使用场景:

  • 推文的长度与在线游戏聊天中发现的不适当或有毒短语的长度非常相似
  • 推文来自具有大量不同用户的人群,类似于游戏平台中的人群

AWS决定首先使用客户标记的数据对BERTweet进行微调,以获得基准。然后选择对bertweet-base-offensive和bertweet-base-hate中的另外两个FM进行微调,这两个FM进一步在更相关的有毒推文上进行了预训练,以实现可能更高的准确性。bertweet-base-offensive模型使用基础BertTweet FM,并在被认为具有冒犯性的14,100条注释推文上进行了进一步的预训练7(Zampieri 2019)。bertweet-base-hate模型也使用了基础的BertTweet FM,但在被认为是仇恨言论的19,600条推文上进行了进一步的预训练8(Basile 2019)。

为了进一步提高PoC模型的性能,AWS GAIIC做出了两个设计决策:

  • 创建了一个两阶段的预测流程,第一个模型充当二分类器,用于分类一段文本是否有毒。第二个模型是一个细粒度模型,根据客户定义的有毒类型对文本进行分类。只有当第一个模型将文本预测为有毒时,才会传递给第二个模型。
  • 扩充了训练数据,并添加了来自公共Kaggle竞赛(Jigsaw Toxicity)的第三方标记的有毒文本子集到最初从客户那里收到的100个样本中。他们将Jigsaw标签映射到相关的客户定义的有毒标签,并将其作为80%的训练数据和20%的测试数据进行拆分以验证模型。

AWS对一家大型游戏公司的大型语言模型(LLM)进行微调,以对有害言论进行分类 四海 第1张

AWS GAIIC使用Amazon SageMaker笔记本运行他们的微调实验,并发现bertweet-base-offensive模型在验证集上取得了最佳得分。以下表格总结了观察到的指标得分。

模型 精确率 召回率 F1 AUC
二分类 .92 .90 .91 .92
细粒度 .81 .80 .81 .89

从这一点开始,GAIIC将PoC交给了AWS ProServe ML交付团队以将其投入生产。

AWS ProServe ML交付团队的解决方案

为了将模型架构投入生产,AWS ProServe ML交付团队(MLDT)受客户要求创建了一个可扩展且易于维护的解决方案。两阶段模型方法存在一些维护挑战:

  • 模型将需要两倍的模型监控量,使得重新训练的时间不一致。可能有时候一个模型需要重新训练的频率比另一个模型更高。
  • 运行两个模型相比于一个模型会增加成本。
  • 推理速度变慢,因为推理需要经过两个模型。

为了解决这些挑战,AWS ProServe MLDT 需要找出如何将两阶段模型架构转化为单一模型架构,同时仍能保持两阶段架构的准确性。

解决方案是首先向客户请求更多的训练数据,然后对 bertweet-base-offensive 模型进行微调,包括所有标签,包括非有害样本,合并为一个模型。这个想法是使用更多数据微调一个模型会得到与使用较少数据微调两阶段模型架构相似的结果。为了微调两阶段模型架构,AWS ProServe MLDT 更新了预训练模型的多标签分类头,添加一个额外的节点来表示非有害类别。

以下是使用 Hugging Face 模型库和其 transformers 平台微调预训练模型的代码示例。AWS ProServe MLDT 使用这个蓝图作为微调的基础。假设您已经准备好了训练数据和验证数据,并且其格式正确。

首先,导入 Python 模块以及来自 Hugging Face 模型库的预训练模型:

# 导入模块。
from transformers import (
    AutoModelForSequenceClassification,
    AutoTokenizer,
    DataCollatorWithPadding,
    PreTrainedTokenizer,
    Trainer,
    TrainingArguments,
)

# 从模型库加载预训练模型到一个 tokenizer。
model_checkpoint = "cardiffnlp/bertweet-base-offensive"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)

然后,加载预训练模型并准备进行微调。在这一步中,定义了有毒类别的数量和所有模型参数:

# 将预训练模型加载到一个用于微调的序列分类器,并在 num_labels 参数中定义要分类的类别数量。

model = AutoModelForSequenceClassification.from_pretrained(
            model_checkpoint,
            num_labels=[类别数量]
        )

# 设置训练参数。下面是 AWS ProServe MLDT 调整的一些关键参数:
training_args = TrainingArguments(
        num_train_epochs=[输入],
        per_device_train_batch_size=[输入],
        per_device_eval_batch_size=[输入],
        evaluation_strategy="epoch",
        logging_strategy="epoch",
        save_strategy="epoch",
        learning_rate=[输入]
        load_best_model_at_end=True,
        metric_for_best_model=[输入]
        optim=[输入],
    )

模型微调从输入训练和验证数据集的路径开始:

# 从 model_checkpoint、tokenizer 和 training_args 定义中微调模型,假设训练和验证数据集已经正确预处理。
trainer = Trainer(
        model=model,
        args=training_args,
        train_dataset=[输入],
        eval_dataset=[输入],
        tokenizer=tokenizer,
        data_collator=data_collator,
    )

# 进行模型微调。
trainer.train()

AWS ProServe MLDT 收到了大约 5,000 个额外的已标记数据样本,其中 3,000 个是非有害的,2,000 个是有害的,并且对所有三个 bertweet-base 模型进行了微调,将所有标签合并为一个模型。他们使用这些数据以及 PoC 中的 5,000 个样本,使用相同的 80% 训练集、20% 测试集的方法,微调了新的单一模型。下表显示了性能得分与两阶段模型相当。

模型 精确率 召回率 F1 AUC
bertweet-base (1-Stage) 0.76 0.72 0.74 0.83
bertweet-base-hate (1-Stage) 0.85 0.82 0.84 0.87
bertweet-base-offensive (1-Stage) 0.88 0.83 0.86 0.89
bertweet-base-offensive (2-Stage) 0.91 0.90 0.90 0.92

一阶段模型方法在仅降低3%精度的情况下,实现了成本和维护的改进。在权衡利弊后,客户选择了AWS ProServe MLDT来将一阶段模型投入生产。

通过使用更多标记数据对一个模型进行微调,AWS ProServe MLDT能够提供一个满足客户对模型准确性的要求,并满足他们对维护简便性的需求,同时降低成本并提高鲁棒性的解决方案。

结论

一家大型游戏客户正在寻找一种检测其通信渠道中的有害语言的方法,以促进社会负责任的游戏环境。AWS GAIIC通过对LLM进行微调来创建了一个有害语言检测器的PoC。然后,AWS ProServe MLDT将模型训练流程从两阶段方法更新为一阶段方法,并将LLM投入生产,供客户大规模使用。

在本文中,AWS展示了通过对LLM进行微调来解决客户实际问题的有效性和实用性,分享了基础模型和LLM的历史背景,并介绍了AWS生成AI创新中心与AWS ProServe ML交付团队之间的工作流程。在本系列的下一篇文章中,我们将更深入地介绍AWS ProServe MLDT如何使用SageMaker将结果为一阶段模型投入生产。

如果您有兴趣与AWS合作构建生成AI解决方案,请联系GAIIC。他们将评估您的用例,构建基于生成AI的概念验证,并有选项与AWS延伸合作,将结果概念验证实施到生产中。

参考资料

  1. 游戏玩家统计数据:关于全球最受欢迎的爱好的事实和统计数据
  2. ChatGPT创下最快增长用户群的纪录-分析师笔记
  3. Vaswani等,“Attention is All You Need”
  4. Radford等,“Improving Language Understanding by Generative Pre-Training”
  5. Devlin等,“BERT: Pre-Training of Deep Bidirectional Transformers for Language Understanding”
  6. 刘银含等,“RoBERTa: A Robustly Optimized BERT Pretraining Approach”
  7. Marcos Zampieri等,“SemEval-2019 Task 6: Identifying and Categorizing Offensive Language in Social Media (OffensEval)”
  8. Valerio Basile等,“SemEval-2019 Task 5: Multilingual Detection of Hate Speech Against Immigrants and Women in Twitter”
Leave a Reply

Your email address will not be published. Required fields are marked *