「Amazon SageMaker JumpStart上で、生成型AIベースのコンテンツモデレーションソリューションを構築する」
Build a generative AI-based content moderation solution on Amazon SageMaker JumpStart.
コンテンツのモデレーションは、オンラインの安全性を維持し、ウェブサイトやソーシャルメディアプラットフォームの価値と基準を維持する上で重要な役割を果たしています。その重要性は、不適切なコンテンツにさらされることからユーザーを保護し、デジタル空間での福祉を守るという点で強調されます。例えば、広告業界では、コンテンツのモデレーションは不利な関連性からブランドを守り、ブランドの向上と収益成長に貢献します。広告主は、適切なコンテンツとのブランドの一致を重視し、評判を維持し、ネガティブな広報を回避します。コンテンツのモデレーションは、金融や医療の分野でも重要な役割を果たしています。それは、機密情報や健康情報を特定し保護するために重要な役割を果たします。内部基準と外部規制に準拠することで、コンテンツのモデレーションはユーザーのデジタルセキュリティを向上させます。これにより、機密データの誤って公開されることを防ぎ、ユーザーのプライバシーとデータのセキュリティを保護します。
この投稿では、マルチモーダルな事前学習と大規模な言語モデル(LLM)を使用して画像データのコンテンツモデレーションを行う新しい方法を紹介します。マルチモーダルな事前学習では、興味のある一連の質問に基づいて画像のコンテンツを直接クエリでき、モデルはこれらの質問に答えることができます。これにより、ユーザーは画像とチャットすることで、組織のポリシーに違反する不適切なコンテンツが含まれているかどうかを確認できます。私たちはLLMの強力な生成能力を利用して、安全/不安全なラベルやカテゴリーを含む最終的な決定を生成します。さらに、プロンプトを設計することで、LLMに定義された出力形式(JSON形式など)を生成させることができます。設計されたプロンプトテンプレートにより、LLMは画像がモデレーションポリシーに違反しているかどうかを判断し、違反のカテゴリーを特定し、なぜ違反しているのかを説明し、構造化されたJSON形式で出力します。
私たちはマルチモーダル事前学習手法としてBLIP-2を使用しています。BLIP-2は、視覚的な質問応答、画像キャプション、画像テキスト検索の多くの既存手法よりも優れたマルチモーダル事前学習モデルの1つです。私たちのLLMには、次世代のオープンソースLLMであるLlama 2を使用しています。Llama 2は、推論、コーディング、能力、知識テストなどの多くのベンチマークで既存のオープンソース言語モデルよりも優れた性能を発揮します。以下の図は、ソリューションのコンポーネントを示しています。
コンテンツモデレーションの課題
伝統的なコンテンツモデレーション方法(人間によるモデレーションなど)では、ユーザー生成コンテンツ(UGC)の増加に追いつくことができません。UGCのボリュームが増えると、人間のモデレーターは圧倒され、効果的なコンテンツモデレーションに苦労することがあります。これにより、ユーザーエクスペリエンスが低下し、モデレーションのコストが上昇し、ブランドリスクが生じます。人間によるモデレーションは誤りも生じやすく、一貫性のないモデレーションやバイアスのある意思決定につながることがあります。これらの課題に対処するために、機械学習(ML)によるコンテンツモデレーションが解決策として登場しました。MLアルゴリズムは大量のUGCを分析し、組織のポリシーに違反するコンテンツを特定することができます。MLモデルはパターンを認識し、ヘイトスピーチ、スパム、不適切な素材などの問題のあるコンテンツを特定するために訓練することができます。AIによるコンテンツモデレーションにより、Protect your users, brand, and budget with AI-powered content moderationという研究によると、組織は手動でコンテンツをモデレートするためにチームが費やす時間の約95%を回復することができます。これにより、組織はコミュニティの構築やコンテンツ作成などの戦略的なタスクにリソースを集中させることができます。AIによるコンテンツモデレーションは、人間によるモデレーションよりも効率的であるため、モデレーションのコストを削減することも可能です。
AIによるコンテンツモデレーションの利点にもかかわらず、さらなる改善の余地があります。MLアルゴリズムの効果は、それらが訓練されるデータの品質に大きく依存しています。バイアスのあるまたは不完全なデータを使用してモデルを訓練すると、不正確なモデレーションの意思決定が行われ、組織はブランドリスクや法的責任にさらされる可能性があります。コンテンツモデレーションのためのMLベースのアプローチの採用には、慎重な考慮が必要ないくつかの課題が存在します。これらの課題には以下が含まれます:
- ラベル付きデータの取得 – これは、トレーニングラベラーを必要とする複雑なコンテンツモデレーションタスクにとって、費用のかかるプロセスです。このコストは、容易に教師付きMLモデルを訓練するために十分な大きさのデータセットを収集することを困難にすることがあります。また、モデルの精度は訓練データの品質に大きく依存しており、バイアスのあるまたは不完全なデータは不正確なモデレーションの意思決定につながり、ブランドリスクや法的責任を引き起こす可能性があります。
- モデルの一般化 – これはMLベースのアプローチの採用において重要です。1つのデータセットで訓練されたモデルは、特にデータセットの分布が異なる場合には別のデータセットにうまく一般化されない場合があります。したがって、モデルが新しいデータにうまく一般化するためには、多様で代表的なデータセットでモデルを訓練することが重要です。
- 運用効率 – これは、コンテンツモデレーションにおいて従来のMLベースのアプローチを使用する際の別の課題です。新しいクラスが追加されるたびに新しいラベルを追加し、モデルを再訓練することは時間とコストがかかる場合があります。また、モデルがモデレーション対象のコンテンツの変化に追従できるように定期的に更新することも重要です。
<
BLIP-2によるマルチモーダル推論
マルチモーダルの機械学習モデルは、画像、テキスト、音声、動画など、複数のソースやモダリティからのデータを処理し統合することができるモデルを指します。BLIP-2などの視覚言語モデルは、コンピュータビジョンと自然言語処理(NLP)を組み合わせて視覚情報とテキスト情報の両方を理解し生成することができます。これらのモデルは、コンピュータが画像とテキストの意味を人間の理解に近い形で解釈することができます。視覚言語モデルは、画像キャプション生成、画像テキスト検索、視覚的な質問応答など、さまざまなタスクに対応することができます。例えば、画像キャプションモデルは画像の自然言語の説明を生成し、画像テキスト検索モデルはテキストクエリに基づいて画像を検索することができます。視覚的な質問応答モデルは、画像に関する自然言語の質問に応答することができ、マルチモーダルチャットボットは視覚的な入力とテキスト入力を使用して応答を生成することができます。コンテンツモデレーションの観点からは、この機能を使用して質問リストに対してクエリを行うことができます。
BLIP-2には3つのパーツがあります。最初のコンポーネントはCLIPのViT-L/14という凍結された画像エンコーダで、画像データを入力とします。2つ目のコンポーネントはFlanT5という凍結されたLLMで、テキストを出力します。3つ目のコンポーネントはQ-Formerと呼ばれるトレーニング可能なモジュールで、凍結された画像エンコーダと凍結されたLLMを接続する軽量のトランスフォーマーです。Q-Formerは学習可能なクエリベクトルを使用して凍結された画像エンコーダから視覚的な特徴を抽出し、最も有用な視覚的特徴をLLMにフィードして希望するテキストを出力します。
事前学習プロセスは2つのステージで行われます。最初のステージでは、ビジョン言語表現学習が行われ、Q-Formerに最適な視覚表現を学習させます。2番目のステージでは、ビジョンから言語への生成学習が行われ、Q-Formerの出力を凍結されたLLMに接続し、LLMが解釈できる視覚表現を出力するようにQ-Formerをトレーニングします。
BLIP-2は、既存の手法と比べて学習可能なパラメータが大幅に少ないにも関わらず、さまざまなビジョン言語タスクで最先端のパフォーマンスを発揮します。また、自然言語の指示に従って画像からテキストを生成するゼロショットの能力も示しています。以下のイラストは、元の研究論文を元に変更されています。
ソリューションの概要
以下の図は、ソリューションのアーキテクチャを示しています。
次のセクションでは、BLIP-2をAmazon SageMakerエンドポイントにデプロイし、BLIP-2とLLMを使用してコンテンツモデレーションを行う方法をデモンストレーションします。
前提条件
このソリューションの一部として作成されるリソースを管理するためのアクセス許可を持つAWSアカウントとAWS Identity and Access Management (IAM) ロールが必要です。詳細については、「スタンドアロンのAWSアカウントの作成」を参照してください。
これが初めてAmazon SageMaker Studioを使用する場合、まずSageMakerドメインを作成する必要があります。また、対応するSageMakerホスティングインスタンスのサービスクオータを増やす必要がある場合もあります。BLIP-2モデルでは、ml.g5.2xlargeのSageMakerホスティングインスタンスを使用します。Llama 2 13Bモデルでは、ml.g5.12xlargeのSageMakerホスティングインスタンスを使用します。
BLIP-2をSageMakerエンドポイントにデプロイする
LLMをSageMakerにホストするには、DJLServingを使用して大規模モデルをホストするために最適化されたLarge Model Inference(LMI)コンテナを使用できます。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
)
エンドポイントのステータスがサービス中になったら、イメージキャプションおよび指示されたゼロショットビジョンto言語生成タスクのエンドポイントを呼び出すことができます。イメージキャプションのタスクでは、エンドポイントに画像を渡すだけで十分です。
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)
指示されたゼロショットビジョンto言語生成タスクでは、入力画像に加えて、質問をプロンプトとして定義する必要があります。
base64_string = encode_image(test_image)
inputs = {"prompt": "Question: この写真で何が起こったのか? Answer:", "image": base64_string}
run_inference(endpoint_name, inputs)
BLIP-2とLLMを使用したコンテンツモデレーションの実行
このステージでは、指定された画像に対してクエリを作成し、隠れた情報を取得することができます。LLMを使用して、クエリを整理し、JSON形式の結果を生成するための情報を取得します。このタスクを次の2つのサブタスクに大まかに分割することができます:
- 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を使用して最終結果と説明を生成する
Llama 2などの大規模な言語モデル(LLM)は、適切なプロンプトテンプレートを使用して高品質の結果を生成することができます。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": "user", "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]
生成された出力の一部は以下のようになります:
> Assistant: {
"flag": "unsafe",
"category": "Suggestive",
"reason": "写真にはトップレスの人物が含まれており、これは示唆的なコンテンツと見なされます。"
}
説明:
写真にはトップレスの人物が含まれており、モデレーションポリシーのルール2に違反しています。このルールでは、示唆的なコンテンツには「女性の水着または下着、男性の水着または下着、部分的なヌード、裸の男性、露出した服、性的な状況」が含まれます。したがって、写真は安全ではなく、示唆的なカテゴリに属します。
Llama 2は、アシスタントからの回答に加えて、追加の説明を添付することがあります。パースコードを使用して、元の生成結果からJSONデータを抽出することができます:
answer = result['generation']['content'].split('}')[0]+'}'
json.loads(answer)
生成的アプローチの利点
前のセクションでは、モデル推論のコア部分の実装方法を説明しました。このセクションでは、従来のアプローチとの比較や展望を含め、生成的アプローチのさまざまな側面について説明します。
以下の表は、各アプローチを比較しています。
. | 生成的アプローチ | 分類アプローチ |
ラベル付けされたデータの取得 | 大量の画像で事前学習されたモデル、ゼロショット推論 | すべてのカテゴリのデータが必要 |
モデルの汎化 | さまざまなタイプの画像を使用した事前学習モデル | コンテンツモデレーションに関連するデータの大量化が必要なモデルの汎化を改善するためのデータ |
操作効率 | ゼロショット可能性 | 異なるパターンの認識モデルのトレーニングと、ラベルが追加された場合の再トレーニングが必要 |
説明可能性 | テキスト出力としての推論、ユーザー体験が向上 | 推論の理解が難しく、説明や解釈が困難 |
敵対的な性質 | 頑健 | 頻繁な再トレーニングが必要 |
コンテンツモデレーション以外のマルチモーダル推論の潜在的な利用事例
BLIP-2モデルは、ファインチューニングの有無に関わらず、以下のような目的に適用できます:
- 画像キャプショニング – この目的では、モデルに対して画像の視覚的な内容に対するテキストの説明を生成するように求めます。以下の例の画像(左)では、「男性がサーフボードを持ってビーチに立っている」という画像の説明が生成されます。
- 視覚的な質問応答 – 以下の例の画像(中央)のように、「商業関連のコンテンツですか?」と尋ね、「はい」という回答が得られます。さらに、BLIP-2はマルチラウンドの会話をサポートし、以下の質問を出力します。「なぜそう思うのですか?」視覚的な手がかりとLLMの能力に基づいて、BLIP-2は「それはAmazonの看板です」と出力します。
- 画像テキスト検索 – 「画像のテキスト」という質問が与えられた場合、以下の画像で示されるように、画像のテキスト「it’s monday but keep smiling」を抽出することができます。
以下の画像は、視覚的な知識推論のゼロショット画像からテキストへの能力を示す例を示しています。
上記のさまざまな例からわかるように、マルチモーダリティモデルは、従来のシングルモーダリティモデルでは対処が困難な複雑な問題を解決するための新たな可能性を開くものです。
クリーンアップ
将来の料金発生を回避するために、このポストの一部として作成されたリソースを削除してください。これは、ノートブックのクリーンアップセクションの手順に従うか、SageMakerコンソールで作成したエンドポイントを削除し、S3バケットに格納されたリソースを削除することで行うことができます。
結論
このポストでは、デジタルワールドにおけるコンテンツモデレーションの重要性とその課題について議論しました。画像データを使用してコンテンツモデレーションを改善し、画像に対して質問応答を行い有用な情報を自動的に抽出するための新しい手法を提案しました。また、従来の分類ベースのアプローチと比較して、生成型AIベースのアプローチの利点についてもさらに議論しました。最後に、コンテンツモデレーション以外の視覚言語モデルの潜在的な利用事例を示しました。
このポストで提供されたマルチモーダリティソリューションと、ビジネスに関連するデータセットを使用して、SageMakerを探索しソリューションを構築することをお勧めします。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles