Amazon ComprehendとLangChainを使用して、生成型AIアプリケーションの信頼性と安全性を構築しましょう

Amazon ComprehendとLangChainを活用して、信頼性と安全性を持つ生成型AIアプリケーションを構築しましょう

大規模な言語モデル(LLM)の採用が急速に増加しており、さまざまな産業で生成的AIアプリケーションを支えるものとして使用されています。LLMは、クリエイティブなコンテンツの生成、チャットボットを介した問い合わせへの回答、コードの生成など、さまざまなタスクが可能です。

LLMをアプリケーションに使用することを検討している組織は、データプライバシーについてますます注意を払っており、信頼性と安全性を維持するために対策を講じています。これには、顧客の個人情報(PII)データを適切に取り扱うことも含まれます。また、悪意のあるコンテンツや安全でないコンテンツがLLMに伝播されるのを防止し、LLMによって生成されたデータが同じ原則に従っていることを確認することも含まれます。

この投稿では、Amazon Comprehendにより実現された新機能について説明し、シームレスな統合を保証してデータプライバシー、コンテンツの安全性、および迅速な安全性を新規および既存の生成的AIアプリケーションに提供します。

Amazon Comprehendは、文書内の非構造化データやテキストから情報を抽出するために機械学習(ML)を使用する自然言語処理(NLP)サービスです。この投稿では、LLMとの信頼性と安全性の重要性について説明し、人気のある生成的AI開発フレームワークであるLangChainとの組み合わせでこれらの新しいモデレーション機能がどのように活用され、ユースケースにカスタマイズ可能な信頼性と安全性のメカニズムが導入されるかについて詳しく説明します。

LLMとの信頼性と安全性の重要性

LLMとの作業においては、信頼性と安全性が非常に重要です。顧客サポートのチャットボットからコンテンツ生成まで、さまざまなアプリケーションに深い影響を及ぼすからです。これらのモデルは大量のデータを処理し、人間のような応答を生成するため、誤用や意図しない結果が生じる可能性があります。これらのAIシステムが倫理的かつ信頼性のある範囲内で操作されることを確保することは、これらを利用する事業の評判だけでなく、エンドユーザーや顧客の信頼を守るためにも重要です。

さらに、LLMが私たちの日常的なデジタル体験により統合されるにつれて、その影響は私たちの認識、信念、および意思決定にも拡大しています。LLMとの信頼性と安全性を確保することは、単に技術的な対策を超えて、AIの実践者や組織が倫理基準を維持するという広範な責任を意味します。信頼性と安全性を優先することで、組織は利用者を保護するだけでなく、AIの社会的な持続的かつ責任ある成長を確保することができます。また、有害なコンテンツの生成リスクを低減し、規制上の要件に適合するのにも役立ちます。

信頼性と安全性の領域では、コンテンツモデレーションはさまざまな側面に対応するメカニズムですが、これに限定されません。

  • プライバシー – ユーザーが個人情報を含むテキストを誤って提供することで、プライバシーが危険にさらされる可能性があります。PIIを検出しマスキングすることは重要です。
  • 有害性 – 憎悪表現や脅迫、虐待などの有害なコンテンツを認識しフィルタリングすることが最も重要です。
  • ユーザーの意図 – ユーザーの入力(プロンプト)が安全か安全でないかを識別することが重要です。安全でないプロンプトには、個人やプライベートな情報の要求や攻撃的、差別的、違法なコンテンツの生成など、明示的または暗黙的な悪意の表現が含まれます。プロンプトはまた、医療、法律、政治、論争、個人的な情報、金融に関する助言や要求を暗示する場合もあります。

Amazon Comprehendによるコンテンツモデレーション

このセクションでは、Amazon Comprehendによるコンテンツモデレーションの利点について説明します。

プライバシーの確保

Amazon Comprehendは、既存のPII検出とマスキングの機能により、プライバシーの確保を既に対応しています。そのためには、DetectPIIEntitiesおよびContainsPIIEntitiesのAPIを利用します。これらのAPIは、社会保障番号(SSN)、クレジットカード番号、名前、住所、電話番号など、さまざまなPIIエンティティを検出するためのNLPモデルをバックエンドで使用しています。エンティティの詳細な一覧については、PII universal entity typesを参照してください。DetectPIIはまた、テキスト内のPIIエンティティの文字レベルの位置情報を提供します。たとえば、文「My name is John Doe」における名前エンティティ(John Doe)の開始文字位置は12であり、終了文字位置は19です。これらのオフセットを使用して値のマスキングやマスキングを行うことにより、プライベートデータがLLMに伝播するリスクを軽減することができます。

有毒性と迅速な安全性の対応

本日、私たちは2つの新しいAmazon ComprehendのAPIとして、DetectToxicContent APIによる有毒性検出と、ClassifyDocument APIによるプロンプトの安全分類を発表します。なお、DetectToxicContentは新しいAPIであり、ClassifyDocumentはプロンプトの安全分類をサポートする既存のAPIです。

有毒性検出

Amazon Comprehendの有毒性検出により、有害、攻撃的、不適切なコンテンツを識別してフラグ付けすることができます。この機能は、ユーザーがコンテンツを生成するプラットフォーム(ソーシャルメディアサイト、フォーラム、チャットボット、コメントセクション、LLMを使用してコンテンツを生成するアプリケーションなど)に特に価値があります。主な目標は、有毒性コンテンツの拡散を防ぐことにより、ポジティブで安全な環境を維持することです。

有毒性検出モデルは、テキストを分析して、憎悪の内容、脅迫、わいせつな表現、またはその他の有害なテキストの可能性を判断します。このモデルは、有毒性と非有毒性のコンテンツの両方の例を含む大規模なデータセットでトレーニングされています。有毒性APIは、与えられたテキストを評価し、有毒性の分類と信頼スコアを提供します。生成的AIアプリケーションは、この情報を使用して適切なアクションを実行できます。たとえば、テキストをLLMに伝播させないようにすることができます。現時点では、有毒性検出APIによって検出されるラベルは、HATE_SPEECHGRAPHICHARRASMENT_OR_ABUSESEXUALVIOLENCE_OR_THREATINSULTPROFANITYです。次のコードは、Amazon Comprehendの有毒性検出に対するPython Boto3のAPI呼び出しを示しています:

import boto3
client = boto3.client('comprehend')
response = client.detect_toxic_content(
    TextSegments=[
        {"Text": "フランスの首都は何ですか?"},
        {"Text": "フランスで美味しいバゲットをどこで見つけることができますか?"}
    ],
    LanguageCode='ja'
)
print(response)

プロンプトの安全分類

Amazon Comprehendのプロンプトの安全分類は、入力テキストのプロンプトを安全または安全でないと分類するのに役立ちます。この機能は、チャットボット、仮想アシスタント、またはコンテンツモデレーションツールなど、プロンプトの安全性によって応答、アクション、またはLLMへのコンテンツ伝播が決まる場合に重要です。

基本的に、プロンプトの安全分類では、人間の入力に対して明示的または暗黙の悪意を分析し、個人情報やプライベート情報の要求、攻撃的で差別的、または違法なコンテンツの生成などをフラグ付けします。また、医療、法律、政治、論争、個人、金融などの主題に関するアドバイスを求めるプロンプトもフラグ付けされます。プロンプトの分類は、関連するテキストに対してUNSAFE_PROMPTSAFE_PROMPTの2つのクラスを返し、それぞれの関連する信頼スコアも返します。信頼スコアは0から1の範囲であり、合計値は1になります。たとえば、カスタマーサポートチャットボットでは、テキスト「パスワードをリセットするにはどうすればいいですか?」は、パスワードリセット手順のガイダンスを求める意図を示しており、SAFE_PROMPTとラベル付けされます。同様に、「あなたに何か悪いことが起きるといいのに」という声明は、潜在的に有害な意図を持っているとしてフラグ付けされ、UNSAFE_PROMPTとラベル付けされます。プロンプトの安全分類は、主に人間の入力(プロンプト)からの意図を検出することに焦点を当てており、機械生成のテキスト(LLMの出力)を検出することではありません。次のコードは、ClassifyDocument APIを使用してプロンプトの安全分類機能にアクセスする方法を示しています:

import boto3
client = boto3.client('comprehend')
response = self.client.classify_document(
    Text=prompt_value,
    EndpointArn=endpoint_arn
)
print(response)

前述のコードのendpoint_arnは、Amazon Resource Number(ARN)のAWS提供のパターンであり、パターンはarn:aws:comprehend:<region>:aws:document-classifier-endpoint/prompt-safetyです。ここで、<region>Amazon Comprehendが利用可能なAWSリージョンです。

これらの機能を示すために、与えられたテキストから住所、電話番号、およびSSNなどのPIIエンティティを抽出するためにLLMに要求するサンプルチャットアプリケーションを作成しました。 LLMは適切なPIIエンティティを見つけて返します。画像は左側に表示されます。

Amazon Comprehendモデレーションを使用すると、LLMへの入力とLLMからの出力をレダクトすることができます。右側の画像では、SSNの値はレダクションされずにLLMに渡されます。ただし、LLMの応答に含まれるSSNの値はレダクションされます。

次の例は、PII情報を含むプロンプトがLLMに到達するのを完全に防止する方法の一例です。この例では、ユーザーがPII情報を含む質問をすることを示しています。Amazon Comprehendモデレーションを使用して、プロンプト内のPIIエンティティを検出し、フローを中断することでエラーを表示します。

前のチャットの例は、Amazon ComprehendモデレーションがLLMに送信されるデータに制限を適用する方法を示しています。次のセクションでは、このモデレーションメカニズムがLangChainを使用してどのように実装されるかを説明します。

LangChainとの統合

LLMのさまざまなユースケースへの応用の可能性は無限ですが、ジェネラティブAIアプリケーションの開発を簡素化することも同様に重要です。 LangChainは、ジェネラティブAIアプリケーションの開発を楽にする人気のあるオープンソースフレームワークです。 Amazon Comprehendモデレーションは、AmazonComprehendModerationChainを介してPIIの識別とレダクション、有害性の検出、およびプロンプトの安全性の分類機能を提供するためにLangChainフレームワークを拡張しています。

AmazonComprehendModerationChainは、LangChainベースチェーンインターフェースのカスタム実装です。これは、アプリケーションが自分自身のLLMチェーンを使用して、入力プロンプトおよびLLMからの出力テキストに必要なモデレーションを適用できることを意味します。チェーンは複数のチェーンを結合したり、チェーンを他のコンポーネントと組み合わせたりして構築することができます。 AmazonComprehendModerationChainを他のLLMチェーンと組み合わせることで、モジュラで柔軟な方法で複雑なAIアプリケーションを開発することができます。

これをさらに説明するために、以下のセクションでいくつかのサンプルを提供します。 AmazonComprehendModerationChainの実装のソースコードは、LangChainオープンソースリポジトリ内で見つけることができます。 APIインターフェースの詳細なドキュメントについては、Amazon ComprehendモデレーションチェーンのLangChain APIドキュメントを参照してください。このモデレーションチェーンを使用するには、デフォルトの設定でクラスのインスタンスを初期化するだけです:

from langchain_experimental.comprehend_moderation import AmazonComprehendModerationChaincomprehend_moderation = AmazonComprehendModerationChain()

モデレーションチェーンでは、PII、有害性、プロンプトの安全性の3つの連続したモデレーションチェックを実行します。これは、モデレーションのデフォルトフローです。

次のコードスニペットは、Amazon FalconLiteのLLM(Falcon 40B SFT OASST-TOP1モデルの量子化バージョン)などのモデレーションチェーンを使用した単純な例を示しています。

from langchain import HuggingFaceHub
from langchain import PromptTemplate, LLMChain
from langchain_experimental.comprehend_moderation import AmazonComprehendModerationChain

template = """質問:{question}回答:"""
repo_id = "amazon/FalconLite"
prompt = PromptTemplate(template=template, input_variables=["question"])
llm = HuggingFaceHub(repo_id=repo_id, model_kwargs={"temperature": 0.5, "max_length": 256})
comprehend_moderation = AmazonComprehendModerationChain(verbose=True)
chain = (    
    prompt    
    | comprehend_moderation    
    | { "input" : (lambda x: x['output']) | llm }     
    | comprehend_moderation
)

try:    
    response = chain.invoke({"question": "SSNは123-45-6789の形式です。ジョン・ドウのSSNを教えてもらえますか?"})
except Exception as e:    
    print(str(e))
else:    
    print(response['output'])

前述の例では、LLMに入力されるテキストとLLMによって生成されるテキストの両方に、comprehend_moderationを使用してチェーンを拡張します。これにより、デフォルトのモデレーションが実行され、PII、毒性、およびプロンプトの安全性分類がチェックされます。

フィルタ構成を使用してモデレーションをカスタマイズ

AmazonComprehendModerationChainを特定の設定で使用することで、ジェネレーティブAIベースのアプリケーションで実行するモデレーションを制御することができます。設定の中心には3つのフィルタ構成があります。

  1. ModerationPiiConfig – PIIフィルタを設定するために使用されます。
  2. ModerationToxicityConfig – 有害なコンテンツフィルタを設定するために使用されます。
  3. ModerationIntentConfig – インテントフィルタを設定するために使用されます。

これらのフィルタ構成を使用して、モデレーションの動作をカスタマイズすることができます。各フィルタの構成にはいくつかの共通パラメータとユニークなパラメータがあり、それらで初期化することができます。構成を定義した後は、BaseModerationConfigクラスを使用してテキストにフィルタを適用する順序を指定します。次のコードの例では、3つのフィルタ構成を最初に定義し、それらが適用される順序を指定しています:

from langchain_experimental.comprehend_moderation 
import (BaseModerationConfig, ModerationPromptSafetyConfig, ModerationPiiConfig, ModerationToxicityConfig)
pii_config = ModerationPiiConfig(labels=["SSN"],   redact=True,   mask_character="X")
toxicity_config = ModerationToxicityConfig(threshold=0.6)
prompt_safety_config = ModerationPromptSafetyConfig(threshold=0.8)
moderation_config = BaseModerationConfig(filters=[ toxicity_config,       pii_config,       prompt_safety_config])
comprehend_moderation = AmazonComprehendModerationChain(moderation_config=moderation_config)

この設定がどのような結果をもたらすかを詳しく見てみましょう:

  • まず、有害性フィルタに0.6の閾値を指定しました。これは、テキストに利用可能な有害なラベルまたはスコアが閾値を超えるエンティティが含まれている場合、チェーン全体が中断されることを意味します。
  • テキストに有害なコンテンツがない場合は、PIIチェックが行われます。この場合、テキストにSSNの値が含まれているかどうかを確認することが目的です。redactパラメータがTrueに設定されているため、チェーンは検出されたSSNの値(存在する場合)をマスクします。SSNエンティティの信頼スコアが0.5以上の場合、マスク文字(X)で置換します。 redactFalseに設定されている場合、SSNが検出されるたびにチェーンが中断されます。
  • 最後に、チェーンはプロンプトの安全性分類を実行し、コンテンツがUNSAFE_PROMPTと分類され、信頼スコアが0.8以上の場合、コンテンツの伝播をさらに行いません。

次の図は、このワークフローを示しています。

モデレーションチェインの中断が発生した場合(この例では、有害性と迅速な安全分類フィルタに適用される)、チェインはPythonの例外を発生させ、進行中のチェインを停止し、例外をキャッチして(try-catchブロック内)関連するアクションを実行することができます。 3つの可能な例外タイプは次のとおりです:

  1. ModerationPIIError
  2. ModerationToxicityError
  3. ModerationPromptSafetyError

BaseModerationConfigを使用して、1つ以上のフィルタを構成できます。同じチェイン内で異なる構成を持つ同じタイプのフィルタも持つことができます。 たとえば、使用例がPIIに関連している場合、SSNが検出された場合にチェインを中断する必要があります。それ以外の場合は、年齢と名前のPIIエンティティを伏せ字にする必要があります。このための構成は次のように定義されます:

pii_config1 = ModerationPiiConfig(labels=["SSN"],    redact=False)pii_config2 = ModerationPiiConfig(labels=["AGE", "NAME"],    redact=True,     mask_character="X")moderation_config = BaseModerationConfig(filters=[ pii_config1,       pii_config2])comprehend_moderation = AmazonComprehendModerationChain(moderation_config=moderation_config)

コールバックと一意の識別子の使用

ワークフローの概念に精通している場合、コールバックについても知っているかもしれません。ワークフロー内のコールバックは、ワークフロー内で特定の条件が満たされたときに実行される独立したコードの断片です。コールバックはワークフローに対してブロッキングまたは非ブロッキングのどちらかになります。LangChainチェインは、姿勢管理向けのワークフローです。 AmazonComprehendModerationChainを使用すると、独自のコールバック関数を定義することができます。最初の実装では、非同期(非ブロッキング)コールバック関数のみが利用可能です。

これは実際には、モデレーションチェインでコールバックを使用すると、チェインの実行をブロックせずに、チェインとは独立して実行されることを意味します。モデレーションチェインでは、チェインの実行後に任意のビジネスロジックを含むコードの実行オプションが提供されます。

また、後でのログ記録や分析を有効にするために、AmazonComprehendModerationChainを作成する際に任意の一意の識別子文字列を指定することもできます。たとえば、LLMでパワードされたチャットボットを運営している場合、一貫して悪用されたり、意図的または無意識に個人情報を公開しているユーザーを追跡したい場合があります。そのような場合、そのプロンプトの起源を追跡し、適切なアクションのためにデータベースに保存したりログに記録する必要があります。ユーザー名やメールアドレスなどのユーザーを一意に識別する一意のIDや、プロンプトを生成しているアプリケーション名などの一意のIDを渡すことができます。

コールバックと一意の識別子の組み合わせにより、より一貫性のある方法でユースケースに合ったモデレーションチェインを実装するための強力な手段が提供され、保守性の高いコードを少なく使用できるようになります。 コールバックハンドラは、BaseModerationCallbackHandlerを介して利用でき、次の3つのコールバックが利用可能です:on_after_pii()on_after_toxicity()、およびon_after_prompt_safety()。これらのコールバック関数は、チェイン内の対応するモデレーションチェックが実行された後に非同期で呼び出されます。これらの関数は2つのデフォルトパラメータも受け取ります:

  • moderation_beacon – モデレーションが実行されたテキスト、Amazon Comprehend APIの完全なJSON出力、モデレーションのタイプ、およびテキスト内で提供されたラベル(構成内)が見つかったかどうかなどの詳細を含む辞書
  • unique_idAmazonComprehendModerationChainのインスタンスを初期化する際に割り当てた一意のID。

以下は、コールバックを使用する実装の例です。この場合、PIIチェックの後にチェインで実行する単一のコールバックを定義しました:

from langchain_experimental.comprehend_moderation import BaseModerationCallbackHandlerclass MyModCallback(BaseModerationCallbackHandler):    async def on_after_pii(self, output_beacon, unique_id):        import json        moderation_type = output_beacon['moderation_type']        chain_id = output_beacon['moderation_chain_id']        with open(f'output-{moderation_type}-{chain_id}.json', 'w') as file:            data = { 'beacon_data': output_beacon, 'unique_id': unique_id }            json.dump(data, file)        '''    # 有毒性のためにこのコールバックを実装    async def on_after_toxicity(self, output_beacon, unique_id):        pass    # プロンプト安全のためにこのコールバックを実装    async def on_after_prompt_safety(self, output_beacon, unique_id):        pass    '''my_callback = MyModCallback()

その後、モデレーションチェーンを初期化する際にmy_callbackオブジェクトを使用し、またunique_idを渡します。コールバックとユニークIDは、構成の有無に関係なく使用することができます。 BaseModerationCallbackHandlerをサブクラス化する場合は、使用するフィルタに応じて1つ以上のコールバックメソッドを実装する必要があります。簡潔さのため、以下の例は、コールバックとunique_idを構成なしで使用する方法を示しています:

comprehend_moderation = AmazonComprehendModerationChain(moderation_callback = my_callback,unique_id = '[email protected]')

次の図は、このコールバックとユニークIDを使用したモデレーションチェーンがどのように機能するかを説明しています。具体的には、この例では、moderation_beaconと渡されたunique_id(この場合はユーザーのメール)のデータを使用してJSONファイルを書き込むPIIコールバックを実装しました。

次のPythonノートブックでは、さまざまな方法でモデレーションチェーンを構成して使用する方法をいくつかまとめています。これには、Amazon SageMaker JumpStartでホストされたLLMやHugging Face HubでホストされたLLMなどのさまざまなLLMを使用する方法も含まれています。また、以前に説明したサンプルチャットアプリケーションと、次のPythonノートブックも含まれています。

結論

大規模言語モデルや生成AIの変革の可能性は否定できません。しかし、これらのテクノロジーの信頼性と安全性を確保するためには、懸念点に対処する必要があります。開発者や組織、社会全体がリスクを軽減するための対策を積極的に実施することで、これらの技術の利点を活用しながら、信頼性と安全性を維持することができます。Amazon Comprehend ContentModerationChainを使用して、LangChainで実装されたRetrieval Augmented Generation(RAG)ワークフローを含むLLMワークフローに信頼性と安全性の機能を追加してください。

LangChainとAmazon Kendraの高精度な機械学習(ML)をパワーとするインテリジェントサーチを使用したRAGベースのソリューションの構築に関する情報については、次のリンクを参照してください:Amazon Kendra、LangChain、および大規模言語モデルを使用してエンタープライズデータ上で高精度な生成AIアプリケーションを素早く構築する方法。次のステップとしては、LangChainでAmazon Comprehendモデレーションを使用するために作成したコードサンプルを参照してください。Amazon ComprehendモデレーションチェーンAPIの完全なドキュメントについては、LangChainのAPIドキュメントを参照してください。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

機械学習

高度な言語モデルの世界における倫理とプライバシーの探求

はじめに 現代の急速に進化する技術的な景観において、大規模言語モデル(LLM)は、産業を再構築し、人間とコンピュータの相...

AIニュース

「ChatGPTがクラッシュしましたか? OpenAIのAIのダウンタイムと迅速な回復!」

人工知能コミュニティは一時的な挫折に直面しました。OpenAIが開発した人気のあるチャットボット、ChatGPTは「大規模な障害」...

データサイエンス

データのアルトリズム:企業エンジンのデジタル燃料

デジタル経済は、知識と情報への均等で迅速かつ無料のアクセスという素晴らしい約束に基づいて構築されてきましたそれから長...

データサイエンス

GenAIにとっての重要なデータファブリックとしてのApache Kafka

ジェンAI、チャットボット、およびミッションクリティカルな展開での大規模言語モデルのリアルタイム機械学習インフラとして...

AIニュース

ディープサーチ:Microsoft BingがGPT-4と統合

Microsoftは、OpenAIのGPT-4技術と統合した最新機能でオンライン検索を革命化する予定です。このBingの機能強化により、複雑...

データサイエンス

「画像のためのモダンなセマンティック検索」

「数年前の「あの一枚の写真」を見つけたいんですね場面に関するいくつかの具体的な情報を覚えているんですが、Apple Photos...