コンテンツへスキップ

悪口フィルターサービスの作成

Image 4

書店オーナーとして、お客様が新しいネガティブなレビューコメントを送信するたびに、Slackチャンネルにインスタント通知を受け取ることを目指しています。Knative Functionを活用することで、テキストに憎悪/侮辱的な表現が含まれているかどうかを判断する簡単な悪口フィルターサービスを含むサーバーレス関数を設定できます。

行き詰まった場合は、こちらで解決策を確認してください。

解決策 - MLワークフローのデプロイに移動:悪口フィルター

Knativeのどのような機能について学習しますか?

  • Knative Functionを使用してサービスを簡単にデプロイし、Knative Servingによって管理させることで、サービスをゼロに自動スケールし、需要に応じてスケールアップできるようになります。

最終的な成果物はどのようなものですか?

Image 2

新しいレビューコメントをCloudEventとして受信し、入力テキストに不適切な言語が含まれているかどうかを示す結果を返すPythonアプリケーションを含む、実行中のサーバーレスKnative Functionです。結果はCloudEventとして返されます。

情報

テキスト内の悪口を検出するために、profanity_checkライブラリを使用しています。これはオープンソースライブラリです。免責事項はこちらをご覧ください。結果は100%正確とは限りません。

関数の出力は次のようになります。

  • good
  • bad

実装

Image 10

プロセスは簡単です。

  1. まず、func createコマンドを使用してコードテンプレートを生成します。
  2. 次に、このテンプレートに独自のコードを組み込みます。
  3. 最後に、func deployを実行して、アプリケーションをKubernetesクラスタにシームレスにデプロイします。

このワークフローにより、Knative Functionsエコシステム内での開発からデプロイへのスムーズな移行が保証されます。


ステップ1:Knative Functionテンプレートの作成

Image 6

func deploy -b=s2i -v

検証

ファイルツリーは次のようになります。

/start/bad-word-filter
├── func.yaml
├── .funcignore
├── .gitignore
├── requirements.txt
├── app.sh
├── test_func.py
├── README.md
└── Procfile
└── func.py

ステップ2:生成されたコードを悪口フィルターロジックに置き換える

Image 5

bad-word-filter/func.pyは、関数のコードを含むファイルです。生成されたコードを悪口フィルターロジックに置き換えることができます。次のコードを起点として使用できます。

bad-word-filter/func.py
from parliament import Context
from profanity_check import predict
from cloudevents.http import CloudEvent

# The function to convert the bad word filter result into a CloudEvent
def create_cloud_event(inputText, data):
    attributes = {
        "type": "new-review-comment",
        "source": "book-review-broker",
        "datacontenttype": "application/json",
        "badwordfilter": data,
    }

    # Put the bad word filter result into a dictionary
    data = {"reviewText": inputText, "badWordResult": data}

    # Create a CloudEvent object
    event = CloudEvent(attributes, data)
    return event

def inappropriate_language_filter(text):
    profanity_result = predict([text["reviewText"]])
    result = "good"
    if profanity_result[0] == 1:
        result = "bad"

    profanity_event = create_cloud_event(text["reviewText"], result)
    return profanity_event

def main(context: Context):
    """
    Function template
    The context parameter contains the Flask request object and any
    CloudEvent received with the request.
    """
    print("Received CloudEvent: ", context.cloud_event)

    # Add your business logic here
    return inappropriate_language_filter(context.cloud_event.data)

ステップ3:依存関係の設定

Image 8 bad-word-filter/requirements.txtの内容

bad-word-filter/requirements.txt
parliament-functions==0.1.0
alt-profanity-check==1.4.1.post1
cloudevents==1.10.1

ステップ4:関数をクラスタにデプロイする

Image 1

注記

次のコマンドを実行する際には、/bad-word-filterと入力してください。

func deploy -b=s2i -v
検証

次のメッセージが表示されるはずです。

Function deployed in namespace "default" and exposed at URL:
http://bad-word-filter.default.svc.cluster.local

検証

Image 7

func invoke -f=cloudevent --data='{"reviewText":"I love Knative so much"}' -v
検証

CloudEventレスポンスの受信を期待します。

Context Attributes,
specversion: 1.0
type: new-review-comment
source: book-review-broker
id: ebbcd761-3a78-4c44-92e3-de575d1f2d38
time: 2024-05-27T04:44:07.549303Z
datacontenttype: application/json
Extensions,
badwordfilter: good
Data,
{
"reviewText": "I love Knative so much",
"badWordResult": "good"
}

レスポンスが表示された場合、関数は正常に実行されています。

次のステップ

Image 9

このチュートリアルでは、Knativeを使用して、テキスト内の不適切な言語を検出できる簡単なサービスのサーバーレス関数を作成する方法を学習しました。

次に、Knative Sequenceを使用して2つのMLワークフローを接続し、目的の順序で実行されるようにする方法を学習します。

Knative Sequenceの作成へ移動

サイトトラフィックを理解するために、分析とCookieを使用しています。サイトの使用に関する情報は、その目的でGoogleと共有されます。詳細はこちら。