メールを含む顧客からの問い合わせに対応することは、多くのビジネスを運営するうえで必要な作業ですが、すぐに圧倒される可能性があります。Gemma などの AI モデルを使用すると、この作業を簡単に行うことができます。
メールなどの問い合わせへの対応は企業によって少しずつ異なるため、 生成 AI のようなテクノロジーを、消費者のニーズに合わせて 説明します。このプロジェクトでは、ベーカリーに送信されたメールから注文情報を抽出して構造化データに変換し、注文処理システムに迅速に追加するという特定の問題に取り組んでいます。10 ~ 20 件の問い合わせの例と Gemma モデルをチューニングして、 迅速な対応を支援し、既存のビジネス・システムと統合することができます。 このプロジェクトは、拡張して適応させ、Gemma モデルからビジネスに価値をもたらすことができる AI アプリケーション パターンとして構築されています。
プロジェクトの概要と拡張方法(分析情報を含む)の動画 をご覧ください。 ビジネス用メール AI アシスタント Google AI で構築する動画。このプロジェクトのコードは、 Gemma クックブック コード リポジトリ。 それ以外の場合は、次のコマンドを使用してプロジェクトの拡張を開始できます。 できます。
概要
このチュートリアルでは、Gemma、Python、Flask で構築されたビジネス メール アシスタント アプリケーションの設定、実行、拡張について説明します。プロジェクト には、ニーズに合わせて変更できる基本的なウェブ ユーザー インターフェースが用意されています。「 お客様のメールからデータを抽出して 1 つの構造に 作りたいとします。このアプリケーション パターンは、テキスト入力とテキスト出力を使用するビジネスタスクに使用できます。
図 1. ベーカリーのメール問い合わせを処理するためのプロジェクトのユーザー インターフェース
ハードウェア要件
このチューニング プロセスは、グラフィック プロセッシング ユニット(GPU)または Tensor Processing Unit(TPU)を搭載し、既存のモデルとチューニング データを保持するのに十分な GPU または TPU メモリがあるコンピュータで実行します。このプロジェクトでチューニング構成を実行するには、約 16 GB の GPU メモリ、約同じ量の通常の RAM、最小 50 GB のディスク容量が必要です。
このチュートリアルの Gemma モデルのチューニング部分は、T4 GPU ランタイムで Colab 環境を使用して実行できます。このプロジェクトが Google Google Cloud VM インスタンス 次の要件に従ってインスタンスを構成します。
- GPU ハードウェア: このプロジェクトを実行するには NVIDIA T4 が必要です(NVIDIA L4 以降を推奨)。
- オペレーティング システム: [Deep Learning on Linux] オプション(特に、GPU ソフトウェア ドライバがプリインストールされた [Deep Learning VM with CUDA 12.3 M124])を選択します。
- ブートディスク サイズ: アプリケーション用に 50 GB 以上のディスク容量をプロビジョニングします。 データ、モデル、およびサポート ソフトウェアです。
プロジェクトの設定
ここでは、このプロジェクトを開発用に準備する手順について説明します。 テストです。一般的な設定手順には、前提条件となるソフトウェアのインストール、コード リポジトリからプロジェクトのクローンを作成する、いくつかの環境変数を設定する、Python ライブラリをインストールする、ウェブ アプリケーションをテストするなどがあります。
Velostrata ソリューションの
このプロジェクトでは、Python 3 と仮想環境(venv
)を使用してパッケージを管理します
アプリケーションを実行します。次のインストール手順は Linux の場合です。
接続します
必要なソフトウェアをインストールするには:
Python 3 と Python 用の
venv
仮想環境パッケージをインストールします。sudo apt update sudo apt install git pip python3-venv
プロジェクトのクローンを作成する
プロジェクト コードを開発コンピュータにダウンロードします。プロジェクトのソースコードを取得するには、git ソース管理ソフトウェアが必要です。
プロジェクト コードをダウンロードするには:
次のコマンドを使用して Git リポジトリのクローンを作成します。
git clone https://github.com/google-gemini/gemma-cookbook.git
必要に応じて、スパース チェックアウトを使用するようにローカル Git リポジトリを構成して、プロジェクトのファイルのみを取得します。
cd gemma-cookbook/ git sparse-checkout set Demos/business-email-assistant/ git sparse-checkout init --cone
Python ライブラリをインストールする
Python パッケージと依存関係を管理するために、venv
Python 仮想環境を有効にして Python ライブラリをインストールします。pip
インストーラを使用して Python ライブラリをインストールする前に、Python 仮想環境を有効にしてください。Python 仮想環境の使用について詳しくは、
Python venv のドキュメント。
Python ライブラリをインストールするには:
ターミナル ウィンドウで、
business-email-assistant
ディレクトリに移動します。cd Demos/business-email-assistant/
このプロジェクトの Python 仮想環境(venv)を構成して有効にします。
python3 -m venv venv source venv/bin/activate
setup_python
スクリプトを使用して、このプロジェクトに必要な Python ライブラリをインストールします。./setup_python.sh
環境変数を設定する
このプロジェクトを実行するには、Kaggle ユーザー名や Kaggle API トークンなど、いくつかの環境変数が必要です。Kaggle が必要です
Gemma モデルをダウンロードできるようにアクセス権をリクエストします。対象
このプロジェクトで、Kaggle ユーザー名と Kaggle API トークンを 2 つの .env
に追加します。
ファイルはウェブ アプリケーションとチューニング プログラムによって読み取られますが、
できます。
環境変数を設定するには:
- 手順に沿って Kaggle のユーザー名とトークンキーを取得します Kaggle のドキュメントをご覧ください。
- Gemma の設定ページの Gemma にアクセスするの手順に沿って、Gemma モデルにアクセスします。
- プロジェクトの環境変数ファイルを作成します。プロジェクトのクローンの次の場所に
.env
テキスト ファイルを作成します。email-processing-webapp/.env model-tuning/.env
.env
テキスト ファイルを作成したら、両方のファイルに次の設定を追加します。KAGGLE_USERNAME=<YOUR_KAGGLE_USERNAME_HERE> KAGGLE_KEY=<YOUR_KAGGLE_KEY_HERE>
アプリケーションを実行してテストする
プロジェクトのインストールと構成が完了したら、次のコマンドを実行します。 ウェブ アプリケーションが正しく構成されていることを確認します。すべきこと 自分で使用するためにプロジェクトを編集する前に、ベースライン チェックとしてこの作業を行います。
プロジェクトを実行してテストするには:
ターミナル ウィンドウで
email-processing-webapp
ディレクトリに移動します。cd business-email-assistant/email-processing-webapp/
run_app
スクリプトを使用してアプリケーションを実行します。./run_app.sh
ウェブ アプリケーションが起動すると、プログラム コードは URL を表示します。 閲覧してテストできます通常、この住所は次のとおりです。
http://127.0.0.1:5000/
ウェブ インターフェースで、最初の入力フィールドの下にある [データを取得] ボタンを押して、モデルからレスポンスを生成します。
アプリケーション実行後のモデルからの最初のレスポンスに時間がかかる これは、第 1 世代の実行で初期化ステップを完了する必要があるためです。 後続のプロンプト リクエストと、すでに実行中のウェブ アプリケーションでの生成 より短い時間で完了できます
アプリケーションを拡張する
アプリケーションを実行したら、ユーザー インターフェースとビジネス ロジックを変更して、ユーザーまたはビジネスに関連するタスクで動作するように拡張できます。Gemma モデルの動作は、 プロンプトのコンポーネントを変更して、アプリケーション コードを 説明します。
アプリケーションは、ユーザーからの入力データとともに、モデルの完全なプロンプトとしてモデルに指示を提供します。この手順は必要に応じて変更できます パラメータ名の指定など、モデルの動作を変更する 生成する JSON の構造を指定します。モデルの動作を変更する簡単な方法は、生成された返信に Markdown のフォーマットを含めないように指定するなど、モデルのレスポンスに追加の指示やガイダンスを提供することです。
メッセージの指示を変更するには:
- 開発プロジェクトで、
business-email-assistant/email-processing-webapp/app.py
コードファイルを開きます。 app.py
コードで、次の内容にget_prompt():
関数:def get_prompt(): return """ Extract the relevant details of this request and return them in JSON code, with no additional markdown formatting:\n"""
この例では、「追加のマークダウン書式なし」というフレーズが追加されています。宛先: できます。
追加のプロンプト インストラクションを指定すると、生成される出力に大きな影響を与え、実装にかかる労力を大幅に軽減できます。ぜひお試しください メソッドを使用して、希望する動作をモデルから取得できるかどうかを確認します。 ただし、プロンプト インストラクションを使用して Gemma モデルの動作を変更する場合は、制限があります。特に、モデルの全体的な入力トークンの上限、つまり Gemma 2 の 8,192 個のトークン。詳細なプロンプトの指示のバランスを取る必要があります。 上限を超えないように、新しいデータのサイズに合わせて調整する必要があります。
モデルのチューニング
Gemma モデルをファインチューニングすることは、 より確実に応答できるようになります。特に、モデルで特定の構造(名前付きパラメータなど)の JSON を生成する場合、その動作に合わせてモデルをチューニングすることを検討してください。モデルに実行させたいタスクに応じて、10~20 個のサンプルで基本的な機能を実現できます。このセクションでは、特定のタスク用に Gemma モデルのファインチューニングを設定して実行する方法について説明します。
次の手順では、VM 環境でファインチューニング オペレーションを行う方法について説明します。このチューニング オペレーションは、このプロジェクトに関連付けられた Colab ノートブックを使用して行うこともできます。
ハードウェア要件
ファインチューニングのコンピューティング要件は、 ハードウェア要件を満たす必要があります。Google Chat では Colab 環境で T4 GPU ランタイムを使用してチューニング オペレーションを実行する(次の場合) 入力トークンを 256 に制限し、バッチサイズを 1 に制限します。
データの準備
Gemma モデルのチューニングを開始する前に、チューニング用のデータを準備する必要があります。日時 特定のタスク用にモデルをチューニングする場合は、一連のリクエストと 例を示します。これらの例ではリクエスト テキストが表示されており、 手順、想定されるレスポンス テキストが含まれます。まずはじめに データセットを作成します。これらの例は、トレーニング データに含まれる 理想的な対応方法を検討する必要があります。リクエストとエントリが 反復的ではないということです。反復的ではないと、モデルのレスポンスが リクエストの変動に適切に対応していないもし 構造化データ形式を生成するためにモデルをチューニングする場合、 必要なデータ出力形式に厳密に従う必要があります。次の テーブルに、このコードサンプルのデータセットのサンプル レコードをいくつか示します。
リクエスト | レスポンス |
---|---|
India Bakery Central さん、\n ペンダは 10 台ありますよね? 30 のブンディ ラドゥーがありますか?バニラフロストや チョコレートフレーバーのケーキです6 インチのサイズを探しています | { "type": "inquiry", "items": [ { "name": "pendas", "quantity": 10 }, { "name": "bundi ladoos", "quantity": 30 }, { "name": "cake", "filling": null, "frosting": "vanilla", "flavor": "chocolate", "size": "6 in" } ] } |
Google マップでお客様のビジネスを見つけました。ジェラビとグラブを販売してる? ジャムン? | { "type": "inquiry", "items": [ { "name": "jellabi", "quantity": null }, { "name": "gulab jamun", "quantity": null } ] } |
表 1. ベーカリーのメールデータ用チューニング データセットの一部リスト 使用します。
データ形式と読み込み
チューニング データは、
テキスト ファイル、データベース レコード、JSON ファイル、CSV ファイル、書式なしテキスト ファイルなど、
Python コードでレコードを取得しますこのプロジェクトは、data
ディレクトリから JSON ファイルを読み取り、辞書オブジェクトの配列に変換します。この回転プログラムの例では、prepare_tuning_dataset()
関数を使用してチューニング データセットが model-tuning/main.py
モジュールに読み込まれます。
def prepare_tuning_dataset():
# collect data from JSON files
prompt_data = read_json_files_to_dicts("./data")
...
前述したように、データセットは、1 対 1 または 2 の 関連付けられたキーを使ってリクエストを取得できれば、 チューニング レコードとして使用されるテキスト文字列にまとめます。
チューニング レコードをアセンブルする
実際のチューニング プロセスでは、プログラムは各リクエストとレスポンスを、プロンプトの指示とレスポンスの内容を含む 1 つの文字列に組み立てます。チューニング プログラムは、モデルが使用できるように文字列をトークン化します。チューニング レコードを作成するコードは、
次のように、model-tuning/main.py
モジュールの prepare_tuning_dataset()
関数を使用します。
def prepare_tuning_dataset():
...
# prepare data for tuning
tuning_dataset = []
template = "{instruction}\n{response}"
for prompt in prompt_data:
tuning_dataset.append(template.format(instruction=prompt["prompt"],
response=prompt["response"]))
return tuning_dataset
この関数はデータを入力として受け取り、指示とレスポンスの間に改行を追加してフォーマットします。
モデルの重みを生成する
チューニング データが配置され、読み込まれたら、チューニング プログラムを実行できます。このサンプル アプリケーションのチューニング プロセスでは、Keras NLP ライブラリを使用して、低ランク適応(LoRA)手法でモデルをチューニングし、新しいモデル重みを生成します。LoRA はモデル重みに対する変更を近似するため、完全な精度チューニングと比較してメモリ効率が大幅に向上します。これらの近似重みを既存のモデル重みに重ねて、モデルの動作を変更できます。
チューニング実行を行い、新しい重みを計算するには:
ターミナル ウィンドウで、
model-tuning/
ディレクトリに移動します。cd business-email-assistant/model-tuning/
tune_model
スクリプトを使用してチューニング プロセスを実行します。./tune_model.sh
チューニング プロセスには、利用可能なコンピューティングに応じて数分かかります
説明します。正常に完了すると、チューニング プログラムは、次の形式で新しい *.h5
重みファイルを model-tuning/weights
ディレクトリに書き込みます。
gemma2-2b_inquiry_tuned_4_epoch##.lora.h5
トラブルシューティング
チューニングが正常に完了しない場合は、次の 2 つの原因が考えられます。
- メモリ不足またはリソースの枯渇: これらのエラーは、チューニング プロセスが使用可能な GPU メモリまたは CPU メモリを超えるメモリをリクエストした場合に発生します。チューニング中にウェブ アプリケーションを実行していないことを確認してください
表示されます。16GB の GPU メモリを搭載したデバイスで
チューニングする場合は
token_limit
が 256 に設定され、batch_size
が 1 に設定します。 - GPU ドライバがインストールされていないか、JAX と互換性がない: 回転プロセス コンピューティング デバイスにハードウェア ドライバがインストールされていることが必要です。 バージョンに対応する JAX ライブラリ。 詳細については、JAX のインストールのドキュメントをご覧ください。
チューニング済みモデルをデプロイする
チューニング プロセスでは、チューニング データとモデルに基づいて複数の重みを生成します。 チューニング アプリケーションで設定されたエポックの総数。デフォルトでは、チューニング プログラムはチューニング エポックごとに 1 つずつ、3 つのモデル重みファイルを生成します。各 段階的な調整のエポックでは、モデルのパフォーマンスを 結果を返します。各エポックの精度率は、チューニング プロセスのターミナル出力で確認できます。
...
8/8 ━━━━━━━━━━━━━━━━━━━━ 121s 195ms/step - loss: 0.5432 - sparse_categorical_accuracy: 0.5982
Epoch 2/3
8/8 ━━━━━━━━━━━━━━━━━━━━ 2s 194ms/step - loss: 0.3320 - sparse_categorical_accuracy: 0.6966
Epoch 3/3
8/8 ━━━━━━━━━━━━━━━━━━━━ 2s 192ms/step - loss: 0.2135 - sparse_categorical_accuracy: 0.7848
精度を 0.80 前後に比較的高めたいのですが、 レートを高すぎたり 1.00 に近付けすぎたり 過学習に近づいていますその場合、 モデルのパフォーマンスは、2025 年までに チューニング例をご覧ください。デフォルトでは、デプロイ スクリプトはエポック 3 精度は通常約 0.80 です。
生成された重みをウェブ アプリケーションにデプロイするには:
ターミナル ウィンドウで、
model-tuning
ディレクトリに移動します。cd business-email-assistant/model-tuning/
deploy_weights
スクリプトを使用してチューニング プロセスを実行します。./deploy_weights.sh
このスクリプトを実行すると、新しい *.h5
ファイルが
email-processing-webapp/weights/
ディレクトリ。
新しいモデルをテストする
新しい重みをアプリケーションにデプロイしたら、次は 新しいチューニングされたモデルです。これを行うには、ウェブ アプリケーションを再実行してレスポンスを生成します。
プロジェクトを実行してテストするには:
ターミナル ウィンドウで
email-processing-webapp
ディレクトリに移動します。cd business-email-assistant/email-processing-webapp/
run_app
スクリプトを使用してアプリケーションを実行します。./run_app.sh
ウェブ アプリケーションを起動すると、プログラム コードによって URL がリストされ、 閲覧してテストできます。通常、このアドレスは次のようになります。
http://127.0.0.1:5000/
ウェブ インターフェースで、最初の入力フィールドの下にある [データを取得] ボタンを押して、モデルからレスポンスを生成します。
これで、Gemma モデルをチューニングしてアプリケーションにデプロイできました。アプリケーションをテストして、タスクに対するチューニング済みモデルの生成能力の限界を判断します。モデルのパフォーマンスが低下するシナリオを見つけた場合は、リクエストを追加して理想的なレスポンスを提供することで、チューニング用のサンプルデータのリストにこれらのリクエストの一部を追加することを検討してください。次に、チューニング プロセスを再実行し、新しい重みを再デプロイして、出力をテストします。
参考情報
このプロジェクトの詳細については、Gemma Cookbook コード リポジトリをご覧ください。アプリケーションの構築にサポートが必要な場合や、Google Cloud と 詳細については、このモジュールのコースリソースに Google Developers コミュニティの Discord あります。その他の Build with Google AI プロジェクトについては、 動画再生リスト