最近の投稿では、Amazon Interactive Video Service (Amazon IVS) ライブ ストリームにチャットを追加する方法について説明しました。チャット ルームは、インタラクティブなライブ ストリーミング エクスペリエンスを作成する上で大きな役割を果たしますが、残念ながら、一部のユーザーが無神経または不快なメッセージを投稿する可能性は避けられません。この投稿では、Amazon IVS チャット ルームをモデレートして楽しくフレンドリーに保つための非常にシンプルで効果的な方法を紹介します。
チャットのモデレートに対処するには、手動と自動の 2 つの方法があります。今後の投稿で説明する手動の方法では、モデレーター (ブロードキャスターまたは別の指定されたユーザー) が、Amazon IVS チャット SDK ドキュメントのいずれかを介して削除するチャット メッセージに「フラグを立てる」必要があります。メッセージにフラグを立てると、接続されているすべての WebSocket クライアントにイベントが送信され、問題のメッセージを更新または削除するために使用できます。この投稿で説明する自動化された方法では、AWS Lambda 関数を利用して、アプリケーションのビジネス ニーズに基づいてチャット メッセージの置換を実行したり、配信を拒否したりできます。
手動モデレーションと自動モデレーションのどちらにも、長所と短所の両方があります。手動モデレーションの「長所」の 1 つは、人間の介入が必要なため、自動モデレーションで発生する可能性のある「誤検知」が発生する可能性が低いことです。手作業による介入のもう 1 つの利点は、モデレートすべきメッセージの識別において、一般的に人間の方が機械よりも優れていることです。ただし、手動モデレートの「短所」は、メッセージがチャット ルームに投稿された後にのみ削除できることです。ことわざにもあるように、「歯磨き粉はチューブに戻せません」。つまり、不快な可能性のあるメッセージは、ユーザーによって既に表示されています。ユーザーが既に表示した可能性のあるメッセージを「非表示」にすることはできません。
一方、自動モデレーションでは、有害なメッセージがチャット ルームに投稿される前に拒否 (または検閲) することができます。しかし、前述のように、チャット メッセージを機械で正確に適切にモデレートすることは非常に困難です。チャット ルームに参加したり、純粋に無害なブログ投稿にコメントを投稿したりして、不適切に拒否または検閲されたことがありますか? 「この人は私たちのチームにとって真の資産になるだろう」というメッセージを送信したチャット ユーザーにとって、チャット ルームに投稿された「この人は私たちのチームにとって真の ***et になるだろう」というメッセージだけが表示されるのは、非常にイライラする可能性があります (または単に拒否されました)!
そうは言っても、チャットのモデレーションの最善のアプローチは、対象となる対象者とビジネス ニーズに基づいてアプリケーションを個別に決定することです。モデレートを必要とする多くのアプリケーションは、最終的に手動と自動のモデレーションを組み合わせて使用することになると思います。
考えられる両方のアプローチについて説明したので、AWS Lambda 関数を使用して、Amazon IVS チャット ルームの自動モデレーションを実行する方法を詳しく見ていきましょう。
Amazon IVS コンソール、AWS CLI、または Amazon IVS SDK のいずれかを使用して Amazon IVS チャット ルームを作成 (または更新) する場合、メッセージ レビュー ハンドラーとして機能する AWS Lambda 関数を指定できます。この投稿では、Amazon IVS コンソールの使用に焦点を当てますが、別の方法を使用したい場合は、適切なドキュメントを参照できます。ハンドラーを追加するには、Amazon IVS チャット ルームの作成または編集中に * メッセージ レビュー ハンドラー* セクションまでスクロールします。デフォルトでは、「無効」オプションが選択されています。
これを変更するには、 [Handle with AWS Lambda]を選択します。
これにより、さらにいくつかのオプションが提示されます。最初のオプションであるFallback resultでは、ハンドラー関数からの無効な応答、エラー、およびタイムアウトをどのように処理するかを選択できます。繰り返しますが、これはビジネス ニーズによって異なります。この場合にメッセージを拒否する場合は、[拒否]を選択します。 [許可]を選択すると、潜在的に有害なメッセージがチャット ルームに投稿される可能性があります。これは、何らかの理由でハンドラーが見逃したメッセージをモデレーターが引き続き削除できるように、組み合わせアプローチが「バックアップ計画」を提供できる場所です。このデモでは、 Allowを選択します。次に、ハンドラーとして機能する AWS Lambda 関数を指定する必要があります。このデモのコンソールを介して新しい関数を作成するので、 Create Lambda functionをクリックしましょう。
このボタンをクリックすると、現在の関数のリストが表示されます。このページで、[関数の作成] をクリックします。
次のページで、ivs-chat-moderation-function という名前を入力し、残りのオプションはデフォルトのままにして、[関数の作成] をクリックします。
それでは、関数のコードを更新しましょう。ドキュメントには、関数が次の形式でイベント オブジェクトを受け取ることが示されています。
{ "Content": "string", "MessageId": "string", "RoomArn": "string", "Attributes": {"string": "string"}, "Sender": { "Attributes": { "string": "string" }, "UserId": "string", "Ip": "string" } }
Node を使用して関数から値を返すには、非同期関数を使用する必要があります (詳細については、 AWS Lambda のドキュメントを参照してください)。返されるオブジェクトは、次の形式を使用する必要があります。
{ "Content": "string", "ReviewResult": "string", "Attributes": {"string": "string"}, }
ReviewResult に設定する値は、 ALLOW
またはDENY
である必要があり、メッセージがチャット ルームに配信されるかどうかを決定します。必要に応じてメッセージのコンテンツを変更できます。つまり、潜在的に攻撃的または無神経なコンテンツを削除または置換し、メッセージの投稿をALLOW
できます。追加の属性はAttributes
で渡すことができます。 DENY
のReviewResult
を送信することを選択した場合、 Reason
として指定された値を含む406 Not Acceptable
応答をクライアントに返すために使用されるReason
属性を渡すことができます。
を参照してください。
チャット メッセージ レビュー ハンドラーのドキュメント 長さの制約や有効な値などの詳細については、
これで、関数のコードを変更して、受信コンテンツの「不適切な単語」をアスタリスクに置き換えることができます。
exports.handler = async (event) => { return { ReviewResult: 'ALLOW', Content: event.Content.replace(/bad word/ig, '*** ****'), Attributes: { username: event.Attributes.username } }; };
チャット ルームに戻り、関数のリストを更新し、新しい関数を選択して [変更を保存] をクリックします。
これで、チャット ルームにメッセージを投稿して、何が起こるかを確認できます。
優れた!チャット メッセージ ハンドラーが適切に呼び出され、「悪い言葉」がチャット ルームに投稿される前に削除されました。
実際には、有害なテキストを置き換えるには、上で使用している単純な正規表現よりもはるかに洗練されたソリューションを使用することをお勧めします。 @2toad/profanityライブラリをテストしたところ、着信メッセージ内の冒とく的な単語を検閲して識別するのに優れていることがわかりました。どんなソリューションでも自由に使用できますが、関数は 200 ミリ秒以内に応答を返さなければタイムアウトするため、サードパーティの API 呼び出しは問題外になる可能性があることに注意してください。
@2toad/profanity
ライブラリを使用して有害な単語を検閲するハンドラーの例を次に示します。
exports.censorChat = async (event) => { console.log('censorChat:', JSON.stringify(event, null, 2)); return { ReviewResult: 'ALLOW', Content: profanity.censor(event.Content), Attributes: { username: event.Attributes.username } }; };
そして、検閲ではなくメッセージを拒否する例。
exports.rejectInappropriateChat = async (event) => { console.log('rejectInappropriateChat:', JSON.stringify(event, null, 2)); const profane = profanity.exists(event.Content); return { ReviewResult: profane ? 'DENY' : 'ALLOW', Content: profane ? '' : event.Content, Attributes: { username: event.Attributes.username } }; };
この投稿では、チャット メッセージを管理するための 2 つの異なるアプローチ、手動と自動について学びました。次に、AWS Lambda 関数を作成し、それを Amazon IVS チャット ルームに関連付けて、自動チャット モデレーションを実行しました。今後の投稿では、Amazon IVS Chat SDK を使用してチャット メッセージを手動でモデレートする方法について説明します。ご不明な点がございましたら、コメントを残すか、 Twitterでお問い合わせください。