悪口フィルターサービスの作成¶
書店オーナーとして、お客様が新しいネガティブなレビューコメントを送信するたびに、Slackチャンネルにインスタント通知を受け取ることを目指しています。Knative Functionを活用することで、テキストに憎悪/侮辱的な表現が含まれているかどうかを判断する簡単な悪口フィルターサービスを含むサーバーレス関数を設定できます。
行き詰まった場合は、こちらで解決策を確認してください。
解決策 - MLワークフローのデプロイに移動:悪口フィルター
Knativeのどのような機能について学習しますか?¶
- Knative Functionを使用してサービスを簡単にデプロイし、Knative Servingによって管理させることで、サービスをゼロに自動スケールし、需要に応じてスケールアップできるようになります。
最終的な成果物はどのようなものですか?¶
新しいレビューコメントをCloudEventとして受信し、入力テキストに不適切な言語が含まれているかどうかを示す結果を返すPythonアプリケーションを含む、実行中のサーバーレスKnative Functionです。結果はCloudEventとして返されます。
情報
テキスト内の悪口を検出するために、profanity_check
ライブラリを使用しています。これはオープンソースライブラリです。免責事項はこちらをご覧ください。結果は100%正確とは限りません。
関数の出力は次のようになります。
- good
- bad
実装¶
プロセスは簡単です。
- まず、
func create
コマンドを使用してコードテンプレートを生成します。 - 次に、このテンプレートに独自のコードを組み込みます。
- 最後に、
func deploy
を実行して、アプリケーションをKubernetesクラスタにシームレスにデプロイします。
このワークフローにより、Knative Functionsエコシステム内での開発からデプロイへのスムーズな移行が保証されます。
ステップ1:Knative Functionテンプレートの作成¶
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:生成されたコードを悪口フィルターロジックに置き換える¶
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:依存関係の設定¶
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:関数をクラスタにデプロイする¶
注記
次のコマンドを実行する際には、/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
検証¶
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"
}
レスポンスが表示された場合、関数は正常に実行されています。
次のステップ¶
このチュートリアルでは、Knativeを使用して、テキスト内の不適切な言語を検出できる簡単なサービスのサーバーレス関数を作成する方法を学習しました。
次に、Knative Sequenceを使用して2つのMLワークフローを接続し、目的の順序で実行されるようにする方法を学習します。