在Amazon SageMaker JumpStart上构建基于生成式人工智能的内容审核解决方案
使用Amazon SageMaker JumpStart构建生成式AI内容审核解决方案
内容审核在维护在线安全和维护网站和社交媒体平台的价值观和标准方面起着重要作用。它的重要性在于保护用户免受不当内容的影响,确保他们在数字空间中的福祉。例如,在广告行业中,内容审核有助于保护品牌免受不利关联的影响,从而促进品牌提升和收入增长。广告商将品牌与适当的内容保持一致,以维护其声誉并避免负面宣传。内容审核在金融和医疗保健领域也具有重要意义,它在这些领域发挥多重作用。它在识别和保护敏感的个人可识别和健康信息(PII,PHI)方面起着重要作用。通过遵守内部标准和规范以及遵守外部法规,内容审核可以增强用户的数字安全。这样,它可以防止在公共平台上无意中共享机密数据,确保用户隐私和数据安全的保护。
在本文中,我们介绍了一种使用多模态预训练和大型语言模型(LLM)对图像数据进行内容审核的新方法。通过多模态预训练,我们可以根据一组感兴趣的问题直接查询图像内容,模型将能够回答这些问题。这使用户能够与图像交流,确认其是否包含违反组织政策的不适当内容。我们利用LLM的强大生成能力生成最终决策,包括安全/不安全标签和类别类型。此外,通过设计提示,我们可以让LLM生成定义的输出格式,例如JSON格式。设计的提示模板允许LLM确定图像是否违反审核政策,识别违规类别,解释原因,并以结构化JSON格式提供输出。
我们使用BLIP-2作为多模态预训练方法。BLIP-2是多模态预训练中最先进的模型之一,优于大多数现有方法在视觉问答、图像字幕和图像文本检索方面的表现。对于我们的LLM,我们使用Llama 2,下一代开源LLM,在许多基准测试中优于现有的开源语言模型,包括推理、编码、熟练度和知识测试。下图说明了解决方案组件。
挑战内容审核:
传统的内容审核方法,如基于人力的审核,无法跟上用户生成内容(UGC)的不断增长。随着UGC的增加,人工审核员可能会感到不堪重负,难以有效地审核内容。这导致用户体验差、审核成本高和品牌风险。基于人力的审核也容易出错,可能导致不一致的审核和带有偏见的决策。为了解决这些挑战,以机器学习(ML)为动力的内容审核已经成为一种解决方案。ML算法可以分析大量的UGC,并识别违反组织政策的内容。ML模型可以被训练来识别模式和识别问题性内容,如仇恨言论、垃圾邮件和不适当材料。根据研究《用AI提供内容审核以保护用户、品牌和预算》,ML动力的内容审核可以帮助组织节省多达95%的时间,用于手动审核内容。这使组织能够将资源集中在更具战略意义的任务上,如社区建设和内容创作。与基于人力的审核相比,ML动力的内容审核也可以减少审核成本,因为它比基于人力的审核更高效。
尽管ML动力的内容审核具有优势,但仍有进一步的改进空间。ML算法的有效性严重依赖于它们所训练的数据的质量。当模型使用有偏见或不完整的数据进行训练时,它们可能会做出错误的审核决策,使组织面临品牌风险和潜在的法律责任。采用基于ML的内容审核方法带来了一些需要仔细考虑的挑战。这些挑战包括:
获取带标签的数据 – 这可能是一个昂贵的过程,特别是对于需要训练标注者的复杂内容审核任务来说。这种成本使得收集足够大的数据集以便轻松训练监督式ML模型变得困难。此外,模型的准确性严重依赖于训练数据的质量,有偏见或不完整的数据可能导致不准确的审核决策,从而带来品牌风险和法律责任。
模型泛化 – 这对采用基于ML的方法至关重要。在一个数据集上训练的模型可能无法很好地泛化到另一个数据集,特别是如果这些数据集具有不同的分布。因此,确保模型在多样且具代表性的数据集上进行训练,以确保它能够很好地推广到新数据,非常重要。
运营效率 – 在使用传统的基于ML的方法进行内容审核时,这是另一个挑战。当添加新标签并在添加新类别时重新训练模型时,这可能是耗时和昂贵的。此外,必须确保定期更新模型,以跟上正在审核的内容的变化。
可解释性 – 如果内容被标记或删除而没有理由解释,最终用户可能会认为该平台存在偏见或不公正,从而导致用户体验差。同样,缺乏明确的解释会使内容审核过程对审核员来说效率低下、耗时和昂贵。
对抗性 – 基于图像的内容审核的对抗性特性对传统的基于ML的方法提出了独特的挑战。不良行为者可以试图通过各种方式更改内容,例如使用图像的同义词或将其实际内容嵌入较大的非违规内容体中,以逃避内容审核机制。这需要对模型进行持续监控和更新,以检测和应对此类对抗性策略。
使用BLIP-2进行多模态推理
多模态机器学习模型是指能够处理和整合来自多个来源或模态的数据的模型,例如图像、文本、音频、视频和其他形式的结构化或非结构化数据。其中一种流行的多模态模型是视觉语言模型,如BLIP-2,它结合了计算机视觉和自然语言处理(NLP)来理解和生成视觉和文本信息。这些模型使计算机能够以类似于人类理解的方式解释图像和文本的含义。视觉语言模型可以处理各种任务,包括图像描述、图像文本检索、视觉问答等。例如,图像描述模型可以生成图像的自然语言描述,图像文本检索模型可以根据文本查询搜索图像。视觉问答模型可以回答关于图像的自然语言问题,而多模态聊天机器人可以使用视觉和文本输入生成回复。在内容审核方面,您可以使用此功能针对一组问题进行查询。
BLIP-2包含三个部分。第一个组件是来自CLIP的冻结图像编码器ViT-L/14,它以图像数据作为输入。第二个组件是一个冻结的LLM,名为FlanT5,它输出文本。第三个组件是一个可训练的模块,称为Q-Former,它是一个轻量级的变压器,将冻结的图像编码器与冻结的LLM连接起来。Q-Former使用可学习的查询向量从冻结的图像编码器中提取视觉特征,并将最有用的视觉特征传递给LLM以输出所需的文本。
预训练过程包括两个阶段。在第一阶段,进行视觉语言表示学习,教导Q-Former学习与文本最相关的视觉表示。在第二阶段,通过将Q-Former的输出连接到一个冻结的LLM,并训练Q-Former输出可以由LLM解释的视觉表示,进行视觉到语言的生成学习。
尽管具有比现有方法更少的可训练参数,BLIP-2在各种视觉语言任务上实现了最先进的性能。该模型还展示了零-shot图像到文本生成的新兴能力,可以遵循自然语言指令。下图修改自原始研究论文。
解决方案概述
下图说明了解决方案架构。
在接下来的几节中,我们将演示如何将BLIP-2部署到Amazon SageMaker终端节点,并使用BLIP-2和LLM进行内容审核。
先决条件
您需要拥有一个带有AWS身份和访问管理(IAM)角色的AWS账户,该角色具有管理解决方案创建的资源的权限。有关详细信息,请参阅创建独立的AWS账户。
如果您是第一次使用Amazon SageMaker Studio,请首先创建一个SageMaker域。此外,您可能需要为相应的SageMaker托管实例请求服务配额增加。对于BLIP-2模型,我们使用一个ml.g5.2xlarge
的SageMaker托管实例。对于Llama 2 13B模型,我们使用一个ml.g5.12xlarge
的SageMaker托管实例。
将BLIP-2部署到SageMaker终端节点
您可以使用针对使用DJLServing托管大型模型进行优化的Large Model Inference(LMI)容器,在SageMaker上托管一个LLM。DJLServing是由Deep Java Library(DJL)提供支持的高性能通用模型服务解决方案,它与编程语言无关。要了解有关DJL和DJLServing的更多信息,请参阅使用DJLServing和DeepSpeed模型并行推理在Amazon SageMaker上部署大型模型。借助SageMaker LMI容器的帮助,BLIP-2模型可以很容易地使用Hugging Face库实现,并在SageMaker上托管。您可以运行blip2-sagemaker.ipynb
来执行此步骤。
为了准备Docker镜像和模型文件,您需要获取DJLServing的Docker镜像,将推理脚本和配置文件打包成model.tar.gz
文件,并将其上传到Amazon Simple Storage Service(Amazon S3)存储桶中。您可以参考推理脚本和配置文件获取更多详细信息。
inference_image_uri = image_uris.retrieve(
framework="djl-deepspeed", region=sess.boto_session.region_name, version="0.22.1"
)
! tar czvf model.tar.gz blip2/
s3_code_artifact = sess.upload_data("model.tar.gz", bucket, s3_code_prefix)
当Docker镜像和推理相关文件准备好后,您可以创建模型、端点的配置和端点:
from sagemaker.utils import name_from_base
blip_model_version = "blip2-flan-t5-xl"
model_name = name_from_base(blip_model_version)
model = Model(
image_uri=inference_image_uri,
model_data=s3_code_artifact,
role=role,
name=model_name,
)
model.deploy(
initial_instance_count=1,
instance_type="ml.g5.2xlarge",
endpoint_name=model_name
)
当端点状态变为服务中时,您可以调用端点进行图像标题生成和指导的零样本视觉语言生成任务。对于图像标题生成任务,您只需将图像传递给端点:
import base64
import json
from PIL import Image
smr_client = boto3.client("sagemaker-runtime")
def encode_image(img_file):
with open(img_file, "rb") as image_file:
img_str = base64.b64encode(image_file.read())
base64_string = img_str.decode("latin1")
return base64_string
def run_inference(endpoint_name, inputs):
response = smr_client.invoke_endpoint(
EndpointName=endpoint_name, Body=json.dumps(inputs)
)
print(response["Body"].read())
test_image = "carcrash-ai.jpeg"
base64_string = encode_image(test_image)
inputs = {"image": base64_string}
run_inference(endpoint_name, inputs)
对于指导的零样本视觉语言生成任务,除了输入图像,您还需要将问题定义为提示:
base64_string = encode_image(test_image)
inputs = {"prompt": "Question: what happened in this photo? Answer:", "image": base64_string}
run_inference(endpoint_name, inputs)
使用BLIP-2和LLM进行内容管理
在此阶段,您可以对给定的图像进行查询并检索隐藏信息。使用LLM,您可以组织查询并检索信息以生成JSON格式的结果。您可以将此任务大致分为以下两个子任务:
- 使用BLIP-2模型从图像中提取信息。
- 使用LLM生成最终结果和解释。
使用BLIP-2模型从图像中提取信息
为了从给定的图像中检索足够有用的隐藏信息,您需要定义查询。因为每个查询将调用一次端点,所以多个查询会导致更长的处理时间。因此,我们建议查询具有高质量且覆盖所有策略,但不重复。在我们的示例代码中,我们定义查询如下:
check_list = [
"此照片是否包含完全裸露的人?",
"此照片是否包含露胸的人?",
"此照片是否包含武器?",
"此照片是否包含联系信息?",
"此照片是否包含吸烟者?",
"此照片是否包含血液?",
"此照片是否有人在打架?",
"此照片是否包含骚扰性言论?"
]
使用上述查询,调用BLIP-2的端点以检索信息的代码如下:
test_image = "./surf_swimwear.png"
raw_image = Image.open(test_image).convert('RGB')
base64_string = encode_image(test_image)
conversations = """"""
for question in check_list:
inputs = {"prompt": f"Question: {question}? Answer:", "image": base64_string}
response = run_inference(endpoint_name, inputs)
conversations += f"""
Question: {question}
Answer: {response}.
"""
除了通过查询检索到的信息外,您还可以通过在有效负载中不包含prompt
字段来调用端点以获取图像字幕任务的信息:
inputs = {"image": base64_string}
response = smr_client.invoke_endpoint(
EndpointName=endpoint_name, Body=json.dumps(inputs)
)
image_caption = response["Body"].read().decode('utf-8')
您可以将查询和答案的内容与图像字幕相结合,并将此检索到的信息用于下游任务,下一节将对此进行描述。
使用LLM生成最终结果和解释
大型语言模型(LLM)例如Llama 2可以使用正确的提示模板生成高质量的结果。使用Amazon SageMaker JumpStart,ML从业者可以从广泛的公开可用的基础模型中进行选择。在SageMaker Studio中,您只需点击几下即可发现并部署Llama 2。
最终结果依赖于具有特定提示模板的LLM。此类提示由以下内容组成:基于不适当或冒犯性内容的审查政策;从BLIP-2中提取的图像信息;向LLM提出的问题模板,询问照片是否包含不安全内容,并要求提供其类别和原因(如果不安全);以及将结果以JSON格式输出的指令。设计的提示模板使LLM能够确定图像是否违反了审查政策,识别违规的类别,解释原因,并以结构化的JSON格式提供输出。
核心源代码如下:
prompt_template = f"""
以下是我们公司的内容审查政策,根据审查政策,我们从用户上传的图像中收集图像信息。请以json格式回答问题。
###### 审查政策 ######
{moderation_policy}
###### 图像信息 ######
{conversations}
###### 问题 ######
基于以下审查政策和QA,请告诉我照片是否包含不安全内容,如果不安全,请给出其类别和原因。请使用以下格式回答问题,并仅将解释放入原因字段中:
"""
prompt_template += """
{
"flag": "xxx",
"category": "xxx",
"reason": "原因是..."
}
"""
dialog = [
{"role": "用户", "content": prompt_template}
]
您可以根据自己的用例自定义提示。有关更多详细信息,请参阅笔记本。当提示准备好后,您可以调用LLM端点生成结果:
endpoint_name = "jumpstart-dft-meta-textgeneration-llama-2-70b-f"
def query_endpoint(payload):
client = boto3.client("sagemaker-runtime")
response = client.invoke_endpoint(
EndpointName=endpoint_name,
ContentType="application/json",
Body=json.dumps(payload),
CustomAttributes="accept_eula=true",
)
response = response["Body"].read().decode("utf8")
response = json.loads(response)
return response
payload = {
"inputs": [dialog],
"parameters": {"max_new_tokens": 256, "top_p": 0.9, "temperature": 0.5}
}
result = query_endpoint(payload)[0]
生成的输出的一部分如下:
> 助手: {
"flag": "unsafe",
"category": "Suggestive",
"reason": "该照片包含半裸人体,属于具有挑逗性的内容。"
}
解释:
该照片包含半裸人体,违反了审查政策的规则2,该规则包括“女性泳装或内衣、男性泳装或内衣、部分裸露、男性无上装、暴露的服装和性情境”。因此,该照片被视为不安全,并属于挑逗性类别。
偶尔,Llama 2除了助手的答案外,还会附加其他解释。您可以使用解析代码从原始生成的结果中提取JSON数据:
answer = result['generation']['content'].split('}')[0]+'}'
json.loads(answer)
生成方法的优势
前面的章节展示了如何实现模型推断的核心部分。在本节中,我们涵盖了生成方法的各个方面,包括与传统方法的比较和观点。
下表比较了每种方法。
. | 生成方法 | 分类方法 |
获取标记数据 | 基于大量图像的预训练模型,零-shot推理 | 需要来自所有类型类别的数据 |
模型泛化 | 预训练模型具有各种类型的图像 | 需要大量内容审查相关数据以提高模型泛化能力 |
操作效率 | 零-shot能力 | 需要训练模型以识别不同的模式,并在添加标签时重新训练 |
可解释性 | 作为文本输出的推理,良好的用户体验 | 难以实现推理,难以解释和解释 |
对抗性特点 | 强大 | 高频率重新训练 |
多模态推理在内容审核之外的潜在应用案例
BLIP-2模型可以应用于多种目的,无论是否进行微调,包括以下几种:
- 图像描述 – 这要求模型为图像的视觉内容生成文本描述。如下面的示例图像(左侧)所示,我们可以将“一个人站在海滩上,手持冲浪板”作为图像描述。
- 视觉问答 – 如中间的示例图像所示,我们可以问“这是商业相关内容吗”,并得到“是”作为答案。此外,BLIP-2支持多轮对话,并输出以下问题:“你为什么这么认为?”基于视觉线索和LLM能力,BLIP-2输出“这是亚马逊的标志牌。”
- 图像文本检索 – 给定问题为“图像上的文本”,我们可以提取图像上的文本“今天是星期一,但要保持微笑”,如右侧的图像所示。
下面的图片示例展示了视觉知识推理的零样本从图像到文本的能力。
从上面的各个示例中可以看出,多模式模型为解决传统单模式模型难以解决的复杂问题开辟了新的机会。
清理
为避免产生未来的费用,请删除此帖子创建的资源。您可以按照笔记本清理部分的说明进行操作,或通过SageMaker控制台删除创建的端点和存储在S3存储桶中的资源。
结论
在本文中,我们讨论了内容审核在数字世界中的重要性,并强调了其中的挑战。我们提出了一种新的方法,利用图像数据来改进内容审核,并对图像进行问题回答以自动提取有用的信息。我们还对使用生成型基于AI的方法与传统的基于分类的方法进行了进一步讨论。最后,我们说明了视觉语言模型在内容审核之外的潜在应用案例。
我们鼓励您通过探索SageMaker并使用本文提供的多模态解决方案和与您业务相关的数据集来进一步了解。