watsonxユースケース！ 簡単 個人情報保護対策  ソースコード付き

# 組み込みAI セルフサービス型デジタル共創体験(DSCE)とは

[組み込みAI セルフサービス型デジタル共創体験](https://qiita.com/trtrbohz/items/356a5a4b66624b2c94a2)に記載しております。
現在は STT(speech-to-text)、TTS(test-to-speech)、NLU(natural-language-understanding)等のAIをサーバーに接続しなくても組み込んで利用することが可能となりました。
その情報がこちらの[サイト](https://dsce.ibm.com/)、DSCE([Digital Self-Serve Co-Create Experience](https://dsce.ibm.com/);"組み込みAI セルフサービス型デジタル共創体験"？)にて紹介されております。さらに IBM の新たなAIエンジンである watsonx もユースケースを交えて紹介しております。
ここではそのDSCEの中からwatsonxを使ったアプリの構築方法を説明します。
※個人的な利用は無償ですが、商用利用は有償となります。

# 今回は 「簡単 個人情報保護対策」
https://github.com/IBM/dsce-sample-apps/tree/main/pii-extraction
とあるユーザーがeメールにて苦情を送りました。
この苦情は適切な担当者へ転送されなければならないのですが、個人情報は取り除かれる必要があります。あるいは、履歴分析のログとして保存することがあるのですが、そこでもやはり個人情報は取り除かれる必要があります。
そんな時、本アプリで「Extract PII」をクリックするとwatsonx.aiが事前構成されたプロンプトに従って個人情報を抽出してくれます。
しかも、この watsonx では、モデルのトレーニングやチューニングするための追加学習は不要です。


# アプリ構築
## 1. 前提
* ターミナル環境
mac : ターミナルを使います。[ココ](https://support.apple.com/ja-jp/guide/terminal/apd5265185d-f365-44cb-8b09-71a064a42125/mac) を見てターミナルを起動できるようにしてください。
windows : powershellを使います。[ココ](https://learn.microsoft.com/ja-jp/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.3) を見てpowershellを起動できるようにしてください。
* リソース取得
下のURLにアクセスしリソースを取得します。
https://github.com/IBM/dsce-sample-apps/tree/main
※コード改変＆プルリクをするのであれば「git clone」コマンドを使うのですが、今回はソースコードの入手が目的ですので以下の様に Zip 形式でリソースを入手します。
![スクリーンショット 2023-08-12 22.28.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/e97bd8bc-0767-b52e-9914-d11c0af69259.png)
リソース取得後、zipファイルを展開すると以下のようなフォルダ構成になっていると思います。今回はその中で[pii-extraction]配下にあるリソースを使用します。

## 2. 手順
### 2.1. [pii-extraction]フォルダに移動
zipファイルを解凍した場所を起点として[pii-extraction]フォルダに以下のようにして移動します。

      cd dsce-sample-apps-main/pii-extraction

### 2.2. 必須ライブラリのインストール

      pip3 install -r requirements.txt

### 2.3. APIキー生成or取得と設定
#### 2.3.1. APIキー生成or取得
以下の図を参照してAPIキーを生成or取得してください。※一度生成していれば再作成は不要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/c7bd56ce-21ea-4073-e72f-7087ac6d493d.png)

①IBM Cloudにログイン
②上メニューにある「管理」ー「アクセス(IAM)」をクリック。左バーにある「APIキー」をクリックし、右側にある「作成＋」をクリック
③APIキーに適当な名前を付与
④生成されたAPIキーをメモ帳等で大切に保管 
<font color="MediumVioletRed">※このAPIキーを他人と共有しないようにしてください。</font>

#### 2.3.2. APIキー設定

brief-builderフォルダの中で<font color="MediumVioletRed">".env"ファイルを作成します。</font>
.envファイルの中で以下のパラメータを作成し、APIキーを紐つけてください。

    WATSONX_API_KEY=<your IBM Cloud API key>


### 2.4. プロジェクトID生成or取得と設定
#### 2.4.1. プロジェクトID生成or取得
以下の図を参照してプロジェクトIDを生成or取得してください。※一度生成していれば再作成は不要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/03d3b434-5eb4-38cf-d65d-90f652ed00d6.png)

①watsonx.ai にログイン。プロジェクトがない、または新しくプロジェクトを作成する場合には「新規プロジェクトの作成」として「＋」ボタンをクリック。既存のプロジェクトがある場合は、そのプロジェクトをクリック。→③へ
②プロジェクト名を記載したのち「作成」ボタンをクリック
③画面上部のメニューから「管理」タブを選択
④作成したプロジェクトのプロジェクトIDをメモ帳等で大切に保管

#### 2.4.2. プロジェクトID設定
brief-builder/payload フォルダの中に存在する全jsonファイルにプロジェクトIDを記載していきます。

    "project_id": "<your watsonx instance project_id>"

### 2.5. アプリ実行

      pip3 template.py

その後、http://localhost:8050 にアクセス。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/d19c3f5e-78fb-912e-e650-97088bdbbeb4.png)

左下の[Sample text]ボタンをクリックして左枠の「Document」に例文を入力した後、[Extract PII]ボタンをクリックすると画面右側にLLMの回答結果が表示されます。
ここでは、会話の内容要約やネクストアクション、関心事項、キーワード等が表示されています。

## appendix.&nbsp;&nbsp;watsonx.ai の実行パラメータ

[2.4.2. プロジェクトID設定]のところで触れた <font color="MediumVioletRed">brief-builder/payload フォルダの中に存在するjsonファイルそのものがwatsonx.aiに送信するプロンプトになります。</font>
このファイルに以下のパラメータを設定することで watsonx.ai の大規模言語モデル(LLM)のパラメータを調整することができます。 

| # | パラメータ名 | 説明 |
|---|---|---|
| #1 |model_id| 大規模言語モデルのモデル|
| #2 |decoding_method| 出力テキストの生成時にトークンを選出する方法を表します。選択肢はgreedyとsample。greedyの場合、連続する各トークンは既に生成されているテキストの中で最も確率の高いトークンに対応します。一方sampleの場合、既に生成されているテキスト、または次のトークンの確率分布に基づいて後続のトークンを選出し、テキストを生成します。|
| #3 |max_new_tokens| 生成されるトークン数の最大値 (デフォルト 20)|
| #4 |min_new_tokens| 停止シーケンスが指定された場合、最小トークンは生成されるまで無視されます。 (デフォルト 0)|
| #5 |stop_sequences| テキスト生成を停止させるストリング|
| #6 |repetition_penalty| 重複ペナルティ（1以上であれば重複しないようにモデルを調整し、１以下の場合は重複した結果が出てくる。) デフォルトは1.0:ペナルティなし|