这篇文章是与ETH Zürich的AWS学生Hackathon团队的Daniele Chiappalupi共同撰写的。
每个人都可以通过使用Amazon SageMaker JumpStart轻松入门机器学习(ML)。在本文中,我们展示了一支大学Hackathon团队如何使用SageMaker JumpStart快速构建一个帮助用户识别和消除偏见的应用程序。
“Amazon SageMaker在我们的项目中起到了关键作用。它使部署和管理预训练的Flan实例变得简单,为我们的应用程序提供了坚实的基础。其自动扩展功能在高流量期间至关重要,确保我们的应用程序保持响应,并确保用户获得稳定和快速的偏见分析。此外,通过将对Flan模型的查询任务转移到托管服务上,我们能够保持应用程序的轻量和快速,改善在各种设备上的用户体验。SageMaker的功能赋予了我们在Hackathon上最大化利用时间的能力,使我们能够专注于优化提示和应用程序,而不是管理模型的性能和基础设施。”
– Daniele Chiappalupi,ETH Zürich的AWS学生Hackathon团队参与者。
解决方案概述
Hackathon的主题是利用人工智能技术为联合国可持续发展目标做出贡献。如下图所示,Hackathon中构建的应用程序通过帮助用户识别和消除文本中的偏见,从而促进公平和包容的语言,为三项可持续发展目标(优质教育、消除性别歧视和减少不平等)做出了贡献。
如下屏幕截图所示,您提供文本后,该应用程序将生成一个没有种族、民族和性别偏见的新版本。此外,它还突出显示与每个偏见类别相关的输入文本的特定部分。
在下图中所示的架构中,用户在基于React的Web应用程序中输入文本,触发Amazon API Gateway,进而根据用户文本中的偏见调用AWS Lambda函数。Lambda函数调用SageMaker JumpStart中的Flan模型端点,通过相同的路径将无偏见的文本结果返回到前端应用程序。
应用程序开发过程
开发此应用程序的过程是迭代的,重点是用户界面和ML模型集成。
由于其灵活性、可扩展性和创建交互式用户界面的强大工具,我们选择React进行前端开发。鉴于我们应用程序的性质-处理用户输入并呈现精炼结果-React的组件化架构非常理想。借助React,我们可以高效地构建一个单页应用程序,允许用户提交文本并在不需要经常刷新页面的情况下查看去偏见的结果。
用户输入的文本需要由强大的语言模型进行处理以进行偏见审查。我们选择Flan模型,因为它具有强大、高效和可扩展的特性。为了利用Flan,我们使用了SageMaker JumpStart,如下图所示。Amazon SageMaker使部署和管理预训练的Flan实例变得简单,使我们能够专注于优化提示和查询,而不是管理模型的性能和基础设施。
将Flan模型连接到我们的前端应用程序需要进行强大而安全的集成,这是通过Lambda和API Gateway实现的。使用Lambda,我们创建了一个无服务器函数,直接与我们的SageMaker模型进行通信。然后,我们使用API Gateway创建了一个安全、可扩展且易于访问的端点,供我们的React应用程序调用Lambda函数。当用户提交文本时,应用程序触发一系列API调用到网关-首先是识别是否存在任何偏见,然后,在必要时,进行额外的查询以识别、定位和消除偏见。所有这些请求都通过Lambda函数路由,然后发送到我们的SageMaker模型。
在开发过程中,我们的最后一个任务是选择查询语言模型的提示。在这方面,CrowS-Pairs数据集起到了重要的作用,因为它为我们提供了真实的偏见文本示例,我们利用这些示例来优化我们的请求。我们通过迭代过程选择了这些提示,目标是在该数据集中最大化偏见检测的准确性。
结束了这个过程后,我们观察到成品应用中的操作流程非常流畅。该过程始于用户提交要分析的文本,然后通过POST请求发送到我们的安全API Gateway端点。这会触发Lambda函数,Lambda函数会与SageMaker端点进行通信。因此,Flan模型会接收到一系列查询。首先,它会检查文本中是否存在任何偏见。如果检测到偏见,将会部署额外的查询来定位、识别和消除这些有偏见的元素。然后,结果会通过相同的路径返回给用户,先是返回给Lambda函数,然后通过API Gateway,最终返回给用户。如果原始文本中存在任何偏见,用户将收到一份详细的分析报告,指示检测到的偏见类型,包括种族、民族或性别。文本中发现这些偏见的具体部分将被突出显示,以便用户清楚地看到所做的更改。除了这份分析报告,用户还会得到他们的文本的新版本,这个版本经过去偏见处理,有效地将潜在有偏见的输入转化为更具包容性的叙述。
在接下来的几个部分中,我们将详细介绍实施这种解决方案的步骤。
设置React环境
我们首先为React设置了开发环境。为了使用最少的配置创建一个新的React应用程序,我们使用了create-react-app工具:
npx create-react-app my-app
构建用户界面
使用React,我们设计了一个简单的用户界面,用于输入文本,包括提交按钮、重置按钮以及在处理结果可用时显示的叠加显示。
在SageMaker上启动Flan模型
我们使用SageMaker创建了一个预训练的Flan语言模型实例,并为其设置了一个用于实时推理的端点。该模型可以用于处理任何类似以下JSON结构的有效载荷:
payload = {
text_inputs: "text_inputs",
max_length: <max_length>,
num_return_sequences: <num_return_sequences>,
top_k: <top_k>,
top_p: <top_p>,
do_sample: <do_sample>,
num_beams: <num_beams>,
seed: <seed>,
};
创建Lambda函数
我们开发了一个Lambda函数,直接与SageMaker端点进行交互。该函数设计用于接收用户文本的请求,并将其转发给SageMaker端点,然后返回处理后的结果,如下所示(ENDPOINT_NAME
被设置为SageMaker实例的端点):
import os
import io
import boto3
import json
import csv
# 获取环境变量
ENDPOINT_NAME = os.environ['ENDPOINT_NAME']
runtime= boto3.client('runtime.sagemaker')
def lambda_handler(event, context):
data = json.loads(json.dumps(event))
payload = json.dumps(data['data']).encode('utf-8')
query_response = runtime.invoke_endpoint(
EndpointName=ENDPOINT_NAME,
ContentType='application/json',
Body=payload)
response_dict = json.loads(query_response['Body'].read())
return response_dict['generated_texts']
设置API Gateway
我们在API Gateway中配置了一个新的REST API,并将其与我们的Lambda函数关联起来。这样的连接允许我们的React应用程序向API Gateway发起HTTP请求,从而触发Lambda函数。
将React应用程序与API集成
我们更新了React应用程序,以便在点击提交按钮时向API Gateway发起POST请求,请求的正文是用户的文本。我们使用以下JavaScript代码执行API调用(REACT_APP_AWS_ENDPOINT
对应绑定到Lambda调用的API Gateway端点):
const makeAWSApiCall = (
textInputs,
maxLength,
numReturnSequences,
topK,
topP,
doSample,
numBeams
) => {
const axiosRequestUrl =
`${process.env.REACT_APP_AWS_ENDPOINT}`;
const requestData = {
text_inputs: textInputs,
max_length: maxLength,
num_return_sequences: numReturnSequences,
top_k: topK,
top_p: topP,
do_sample: doSample,
num_beams: numBeams,
seed: 8,
};
return axios.post(axiosRequestUrl, { data: requestData });
};
优化提示选择
为了提高偏见检测的准确度,我们对CrowS-Pairs数据集测试了不同的提示。通过这个迭代过程,我们选择了给我们带来最高准确度的提示。
在Vercel上部署和测试React应用
构建完应用程序后,我们将其部署到Vercel上,以便公开访问。我们进行了广泛的测试,以确保应用程序的功能符合预期,包括用户界面和语言模型的响应。
这些步骤为创建我们的文本分析和去偏见应用程序奠定了基础。尽管这个过程本身复杂,但使用像SageMaker、Lambda和API Gateway这样的工具简化了开发流程,使我们能够专注于项目的核心目标——识别和消除文本中的偏见。
结论
SageMaker JumpStart提供了一种便捷的方式来探索SageMaker的特性和能力。它提供了经过策划的一步解决方案、示例笔记本和可部署的预训练模型。这些资源使您能够快速学习和了解SageMaker。此外,您还可以根据自己的特定需求对模型进行微调和部署。通过Amazon SageMaker Studio或使用SageMaker API,您可以访问JumpStart。
通过本文,您了解了一个学生黑客马拉松团队如何在短时间内使用SageMaker JumpStart开发解决方案,这展示了AWS和SageMaker JumpStart在实现快速开发和部署复杂AI解决方案方面的潜力,即使是由小团队或个人实现。
要了解更多关于使用SageMaker JumpStart的信息,请参阅Amazon SageMaker Jumpstart中的Instruction fine-tuning for FLAN T5 XL和Zero-shot prompting for the Flan-T5 foundation model。
ETH Analytics Club主办了“ETH Datathon”,这是一个吸引了来自苏黎世联邦理工学院、苏黎世大学和洛桑联邦理工学院的150多名参与者的AI/ML黑客马拉松。活动包括由行业领导者主持的研讨会、24小时编码挑战以及与其他学生和行业专业人士进行有价值的网络交流的机会。特别感谢ETH Hackathon团队的Daniele Chiappalupi、Athina Nisioti和Francesco Ignazio Re,以及AWS组织团队的其余成员:Alice Morano、Demir Catovic、Iana Peix、Jan Oliver Seidenfuss、Lars Nettemann和Markus Winterholer。
本文的内容和观点属于第三方作者,AWS对本文的内容或准确性不负责任。