识别释义文本在许多用例中具有商业价值。 例如,通过识别句子释义,文本摘要系统可以删除冗余信息。 另一个应用是识别抄袭的文件。 在这篇文章中,我们微调了一个 拥抱脸 变压器开启 亚马逊SageMaker 通过几个步骤识别释义的句子对。
真正健壮的模型可以在使用的语言可能完全不同时识别释义文本,并且在使用的语言具有高度词汇重叠时也可以识别差异。 在这篇文章中,我们专注于后一个方面。 具体来说,我们看看我们是否可以训练一个模型来识别两个具有高度词汇重叠和非常不同或相反含义的句子之间的差异。 例如,以下句子具有完全相同的单词但含义相反:
- 我从纽约坐飞机到巴黎
- 我从巴黎坐飞机去纽约
解决方案概述
我们将引导您完成以下高级步骤:
- 设置环境。
- 准备数据。
- 标记数据集。
- 微调模型。
- 部署模型并执行推理。
- 评估模型性能。
如果您想跳过设置环境,可以使用以下笔记本 GitHub上 并在 SageMaker 中运行代码。
Hugging Face 和 AWS 在 2022 年初宣布建立合作伙伴关系,这使得在 SageMaker 上训练 Hugging Face 模型变得更加容易。 此功能可通过 Hugging Face 的开发获得 AWS 深度学习容器 (DLC). 这些容器包括 Hugging Face Transformers、Tokenizers 和 Datasets 库,它允许我们将这些资源用于训练和推理工作。 有关可用 DLC 图像的列表,请参阅 可用的深度学习容器镜像. 它们得到维护并定期更新安全补丁。 您可以找到许多关于如何使用这些 DLC 和 拥抱脸 Python SDK 在下面的 GitHub回购.
PAWS 数据集
意识到缺乏高效的句子对数据集,这些数据集表现出高度的词汇重叠而不是释义,原始 PAWS 2019 年发布的数据集旨在为自然语言处理 (NLP) 社区提供用于训练和评估释义检测模型的新资源。 PAWS 句子对分两步生成,使用 维基百科上的数据 和 Quora问题对 (QQP) 数据集。 语言模型首先将句子对中的单词与相同的词袋 (BOW) 交换以生成句子对。 然后,反向翻译步骤生成具有高 BOW 重叠但使用不同词序的释义。 最终的 PAWS 数据集总共包含 108,000 个人工标记和 656,000 个噪声标记对。
在这篇文章中,我们使用 PAWS-Wiki 标记(最终) 拥抱脸的数据集。 Hugging Face 已经为我们执行了数据拆分,这导致训练数据集中有 49,000 个句子对,验证和测试数据集中各有 8,000 个句子对。 以下示例显示了来自训练数据集的两个句子对示例。 标签为 1 表示这两个句子是彼此的释义。
句子1 | 句子2 | 标签 |
虽然可以互换,但两辆车上的车身部件并不相似。 | 虽然相似,但车身部件在 2 辆车上不可互换。 | 0 |
卡茨 1947 年出生于瑞典,1 岁时移居纽约市。 | 卡茨 1947 年出生于瑞典,一岁时移居纽约。 | 1 |
先决条件
您需要完成以下先决条件:
- 如果您没有 AWS 账户,请注册一个。 有关详细信息,请参阅 设置 Amazon SageMaker 先决条件.
- 开始使用 SageMaker笔记本实例.
- 设置权利 AWS身份和访问管理 (IAM) 权限。 有关详细信息,请参阅 SageMaker 角色.
搭建环境
在我们开始检查和准备数据以进行模型微调之前,我们需要设置我们的环境。 让我们从启动 SageMaker 笔记本实例开始。 在您的 AWS 账户中选择一个 AWS 区域并按照说明操作 创建 SageMaker 笔记本实例. 笔记本实例可能需要几分钟才能启动。
当笔记本实例运行时,选择 conda_pytorch_p38
作为您的内核类型。 要使用 Hugging Face 数据集,我们首先需要安装和导入 Hugging Face 库:
接下来,让我们建立一个 SageMaker 会话。 我们使用默认 亚马逊简单存储服务 (Amazon S3) 与 SageMaker 会话关联的存储桶,用于存储 PAWS 数据集和模型工件:
准备数据
我们可以使用它的 PAWS 数据集加载 Hugging Face 版本 load_dataset()
命令。 此调用从 Hugging Face GitHub 存储库下载并导入 PAWS Python 处理脚本,然后从存储在脚本中的原始 URL 下载 PAWS 数据集,并将数据缓存为驱动器上的箭头表。 请参阅以下代码:
在我们开始微调我们预训练的 BERT 模型之前,让我们看看我们的目标类分布。 对于我们的用例,PAWS 数据集具有二进制标签(0 表示句子对不是释义,1 表示它是)。 让我们创建一个柱形图来查看类分布,如下代码所示。 我们看到我们的训练集中存在轻微的类不平衡问题(56% 的负样本与 44% 的正样本)。 但是,不平衡足够小,可以避免使用类不平衡缓解技术。
标记数据集
在开始微调之前,我们需要对数据集进行标记。 作为一个起点,假设我们要微调和评估 roberta-base
变压器。 我们选择了 roberta-base
因为它是一个通用的转换器,在大量的英语数据上进行了预训练,并且经常在各种 NLP 任务上表现出高性能。 该模型最初是在论文中介绍的 RoBERTa:鲁棒优化的BERT预训练方法.
我们使用 a 对句子执行标记化 roberta-base
来自 Hugging Face 的标记器,它使用字节级字节对编码将文档拆分为标记。 有关 RoBERTa 标记器的更多详细信息,请参阅 罗伯塔分词器. 因为我们的输入是句子对,所以我们需要同时标记两个句子。 因为大多数 BERT 模型要求输入具有固定的标记化输入长度,所以我们设置以下参数: max_len=128
和 truncation=True
。 请参见以下代码:
微调 BERT 模型的最后一个预处理步骤是将标记化的训练和验证数据集转换为 PyTorch 张量并将它们上传到我们的 S3 存储桶:
微调模型
现在我们已经完成了数据准备,我们准备微调我们的预训练 roberta-base
释义识别任务的模型。 我们可以使用 SageMaker Hugging Face Estimator 类分两步启动微调过程。 第一步是指定训练超参数和度量定义。 度量定义变量告诉 Hugging Face Estimator 从模型的训练日志中提取什么类型的度量。 在这里,我们主要感兴趣的是在每个训练时期提取验证集指标。
第二步是实例化 Hugging Face Estimator 并使用 .fit()
方法:
使用指定的超参数进行微调过程大约需要 30 分钟。
部署模型并执行推理
SageMaker 根据您的使用案例提供多种部署选项。 对于一次做出一项预测的持久性实时端点,我们建议使用 SageMaker 实时托管服务. 如果您的工作负载在流量激增之间具有空闲期并且可以容忍冷启动,我们建议使用 无服务器推理. 无服务器端点会根据流量自动启动计算资源并对其进行扩展和扩展,从而无需选择实例类型或管理扩展策略。 我们演示了如何将经过微调的 Hugging Face 模型部署到实时推理端点和无服务器推理端点。
部署到实时推理端点
您可以使用 SageMaker 将训练对象部署到实时推理托管 .deploy()
方法。 有关接受参数的完整列表,请参阅 拥抱脸模型. 首先,让我们通过传入以下参数将模型部署到一个实例: initial_instance_count
, instance_type
及 endpoint_name
。 请参见以下代码:
该模型需要几分钟的时间来部署。 部署模型后,我们可以将看不见的测试数据集中的样本记录提交到端点进行推理。
部署到无服务器推理端点
要将我们的训练对象部署到无服务器端点上,我们需要首先指定一个无服务器配置文件 memory_size_in_mb
和 max_concurrency
参数:
memory_size_in_mb
定义无服务器端点的总 RAM 大小; 最小 RAM 大小为 1024 MB (1 GB),它可以扩展到 6144 MB (6 GB)。 通常,您的目标应该是选择至少与模型大小一样大的内存大小。 max_concurrency
定义单个端点可以同时处理多少并发调用(最多 50 个并发调用)的配额。
我们还需要提供 Hugging Face 推理图像 URI,您可以使用以下代码检索该 URI:
现在我们有了无服务器配置文件,我们可以使用与实时推理端点相同的方式创建一个无服务器端点,使用 .deploy()
方法:
应在几分钟内创建端点。
执行模型推理
为了进行预测,我们需要通过添加 [CLS]
和 [SEP]
特殊令牌,然后将输入提交到模型端点。 实时推理和无服务器推理的语法相同:
在以下示例中,我们可以看到该模型能够正确分类输入句子对是否包含释义句子。
下面是一个实时推理的例子。
以下是无服务器推理示例。
评估模型性能
为了评估模型,让我们扩展前面的代码并将所有 8,000 条不可见的测试记录提交到实时端点:
接下来,我们可以使用提取的预测创建分类报告:
我们得到以下测试成绩。
我们可以观察到 roberta-base
综合宏观平均 F1 得分为 92%,在检测释义句子方面表现稍好。 这 roberta-base
模型性能良好,但最好使用至少一个其他模型来计算模型性能。
下表比较 roberta-base
同一测试集上的性能结果与另一个名为 paraphrase-mpnet-base-v2
,一个专门为释义识别任务预训练的句子转换器。 两个模型都在 ml.p3.8xlarge 实例上进行了训练。
结果表明 roberta-base
使用 SageMaker 上的实时推理托管,F1 得分高出 1%,训练和推理时间非常相似。 然而,模型之间的性能差异相对较小, roberta-base
最终是赢家,因为它的性能指标稍好一些,训练和推理时间几乎相同。
平台精度 | 记得 | F1分数 | 培训时间(计费) | 推理时间(完整测试集) | |
罗伯塔基地 | 0.92 | 0.93 | 0.92 | 18分钟 | 2分钟 |
释义-mpnet- 基础-v2 |
0.92 | 0.91 | 0.91 | 17分钟 | 2分钟 |
清理
使用完模型端点后,您可以删除它们以避免产生未来费用:
结论
在这篇文章中,我们讨论了如何在 SageMaker 上使用 Hugging Face 转换器快速构建释义识别模型。 我们微调了两个预训练的转换器, roberta-base
和 paraphrase-mpnet-base-v2
,使用 PAWS 数据集(其中包含具有高词汇重叠的句子对)。 我们展示并讨论了实时推理与无服务器推理部署的优势,后者是针对尖峰工作负载的新功能,无需管理扩展策略。 在一个包含 8,000 条记录的不可见测试集上,我们证明了这两个模型的 F1 分数都高于 90%。
要扩展此解决方案,请考虑以下事项:
- 尝试使用您自己的自定义数据集进行微调。 如果您没有足够的训练标签,您可以评估微调模型的性能,例如本文在自定义测试数据集上演示的模型。
- 将此微调模型集成到下游应用程序中,该应用程序需要有关两个句子(或文本块)是否是彼此的释义的信息。
建设愉快!
作者简介
巴拉克里希纳莫蒂 是 AWS 专业服务的数据科学家,他喜欢应用机器学习来解决客户的业务问题。 他专注于自然语言处理用例,曾与软件、金融和医疗保健等行业的客户合作。 在空闲时间,他喜欢尝试新食物、观看喜剧和纪录片、在 Orange Theory 锻炼以及在水上(划桨、浮潜和希望很快潜水)。
伊万·崔 是 AWS 专业服务的数据科学家,他帮助客户使用 AWS 上的机器学习构建和部署解决方案。 他曾与不同行业的客户合作,包括软件、金融、制药和医疗保健。 在空闲时间,他喜欢阅读、与家人共度时光以及最大化他的股票投资组合。
- '
- "
- 000
- 10
- 100
- 2019
- 2022
- 84
- 关于
- ACCESS
- 账号管理
- 实现
- 横过
- 所有类型
- 已经
- Amazon
- 公布
- 另一个
- 应用领域
- 应用
- 约
- 参数
- 可使用
- AWS
- 作为
- 好处
- 身体
- 边界
- 建立
- 商业
- 呼叫
- 能力
- 汽车
- 例
- 收费
- 城市
- 程
- 分类
- 码
- 柱
- 结合
- 社体的一部分
- 完全
- 计算
- 信心
- 集装箱
- 包含
- 可以
- 创建信息图
- 创建
- 习俗
- 顾客
- 合作伙伴
- data
- 数据科学家
- 演示
- 证明
- 根据
- 部署
- 部署
- 部署
- 详情
- 检测
- 研发支持
- 不同
- 分配
- 纪录片
- 文件
- 下载
- 驾驶
- 高效
- 端点
- 英语
- 环境
- 建立
- 评估
- 例子
- 展览
- 扩大
- 面部彩妆
- 家庭
- 专栏
- 金融
- 姓氏:
- 飞行
- 专注焦点
- 遵循
- 以下
- 食品
- Free
- ,
- 功能
- 功能
- 未来
- 一般用途
- 通常
- 生成
- GitHub上
- 非常好
- 更大的
- 医疗保健
- 高度
- 帮助
- 此处
- 高
- 更高
- 托管
- 创新中心
- How To
- HTTPS
- 鉴定
- 鉴定
- 确定
- 身分
- 图片
- 包括
- 包含
- 行业
- 信息
- 输入
- 安装
- 有兴趣
- 问题
- IT
- 工作机会
- 标签
- 语言
- 大
- 发射
- 学习
- 自学资料库
- 清单
- 加载
- 机
- 机器学习
- 制作
- 管理
- 内存
- 指标
- ML
- 模型
- 模型
- 更多
- 最先进的
- 多
- 自然
- 负
- 纽约
- 纽约市
- 笔记本
- 优惠精选
- 优化
- 附加选项
- 秩序
- 其他名称
- 己
- 纸类
- 巴黎
- 合作伙伴
- 通过
- 补丁
- 性能
- 期
- 制药
- 点
- 政策
- 个人档案
- 积极
- 在练习上
- 预测
- 预测
- 问题
- 过程
- 处理
- 所以专业
- 提供
- 题
- Quora的
- 内存
- 兰特
- 阅读
- 实时的
- 建议
- 记录
- 发布
- 报告
- 知识库
- 要求
- 资源
- 资源
- 成果
- 回报
- 运行
- 运行
- 鳞片
- 缩放
- 科学家
- 保安
- 选
- 无服务器
- 特色服务
- 集
- 设置
- 类似
- 简易
- 尺寸
- 小
- 软件
- 固体
- 方案,
- 解决方案
- 解决
- 特别
- 专业
- 特别是
- 花费
- 纺
- 分裂
- 开始
- 开始
- 启动
- 库存
- 存储
- 商店
- 后来
- 供应
- 瑞典
- 系统
- 目标
- 任务
- 技术
- 告诉
- test
- 通过
- 次
- 符号化
- 符号化
- 令牌
- 最佳
- 火炬
- 交通
- 产品培训
- 翻译
- us
- 使用
- 验证
- 折扣值
- 各种
- 查看
- 水
- 什么是
- 是否
- 维基百科上的数据
- 中
- 也完全不需要
- 话
- 工作
- 加工
- 锻炼