LoginSignup
7
1

More than 1 year has passed since last update.

以前こちらの記事を翻訳したのですが、その際に触れていたLLM比較のインタフェースであるアーティファクトビューを試してみました。思った以上に便利。

MLflowのマニュアルはこちら。

MLflow 2.4.0のmlflow.evaluate()では、テキスト要約、テキスト分類、質疑応答、テキスト生成を含むLLMの様々なタスクに対するビルトインのサポートがあります。

試してみます。なお、Databricks機械学習ランタイム13.2であれば最初からMLflow 2.4.0が入っています。

環境設定、ライブラリのインポート

OpenAI APIを使うので、シークレットに保存してあるAPIキーを環境変数に設定します。

import os
os.environ["OPENAI_API_KEY"] = dbutils.secrets.get("demo-token-takaaki.yayoi", "openai_api_key")
import pandas as pd

import mlflow
import openai

プロンプトとモデルの記録

プロンプトの試行錯誤を想定しているので、モデルの呼び出しと評価のロジックを関数にします。

# OpenAIを用いたプロンプトエンジニアリングによる質疑応答モデルの作成
# MLflowトラッキングにプロンプトとモデルを記録
def evaluate_gpt(system_prompt):

  mlflow.log_param("system_prompt", system_prompt)
  logged_model = mlflow.openai.log_model(
    model="gpt-3.5-turbo",
    task=openai.ChatCompletion,
    artifact_path="model",
    messages=[
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": "{question}"},
    ],
  )

  # 同じサンプル質問でモデルを評価
  questions = pd.DataFrame(
    {
        "question": [
            "MLflowでランをどのように作成しますか?",
            "MLflowでどのようにモデルを記録しますか?",
            "フランスの首都はどこですか?",
        ]
    }
  )
  mlflow.evaluate(
    model=logged_model.model_uri,
    model_type="question-answering",
    data=questions,
  )

プロンプトを微妙に変えながら、モデルの評価を行います。

with mlflow.start_run():
  system_prompt = (
    "あなたの仕事はMLflowに関する質問に回答することです。MLflowについて質問された際には、"
    " それに反応してください。コードサンプルを含めるようにしてください。質問がMLflowに関係がない場合には、"
    " 質問が無関係ですと言って、質問を拒否してください。"
  )
  evaluate_gpt(system_prompt)

with mlflow.start_run():
  system_prompt = (
    "あなたの仕事はMLflowに関する質問に回答することです。MLflowについて質問された際には、"
    " それに反応してください。コードサンプルを含めないでください。質問がMLflowに関係がない場合には、"
    " 質問が無関係ですと言って、質問を拒否してください。"
  )
  evaluate_gpt(system_prompt)

with mlflow.start_run():
  system_prompt = (
    "あなたの仕事はMLflowに関する質問に回答することです。MLflowについて質問された際には、"
    " それに反応してください。コードサンプルを含めないでください。質問がMLflowに関係がない場合でも、"
    " 嫌がりながらも質問に回答してください。"
  )
  evaluate_gpt(system_prompt)

これでモデルとパラメーター、評価結果が記録されます。
Screenshot 2023-06-29 at 17.21.16.png

モデルの評価

評価結果のデータにアクセスすることができます。

# 評価結果をロードして調査
results: pd.DataFrame = mlflow.load_table(
    "eval_results_table.json", extra_columns=["run_id", "params.system_prompt"]
)
results_grouped_by_question = results.sort_values(by="question")
display(results_grouped_by_question[
        ["run_id", "params.system_prompt", "question", "outputs"]
    ])

Screenshot 2023-06-29 at 17.31.44.png

より詳細に比較するために、MLflowランの右にあるScreenshot 2023-06-29 at 17.21.57.pngをクリックします。

このように一覧が表示されますが、これで終わりではありません。Evaluationをクリックします。
Screenshot 2023-06-29 at 17.32.03.png

このようにテーブル形式でモデルごとの質問に対する回答を確認することができます。
Screenshot 2023-06-29 at 17.32.44.png

定量的な評価が難しいLLMですが、少なくともこの機能を活用することで人間の目でのチェックが楽になるかと思います。

Databricksクイックスタートガイド

Databricksクイックスタートガイド

Databricks無料トライアル

Databricks無料トライアル

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1