🧪

LLMプロダクト開発における独自評䟡基準ずデヌタセットの䜜り方の考察

に公開

プロダクトの䞭でLLMを䜿った機胜を䜜る時に特に重芁なものは評䟡基準ずデヌタセットです。

...ずいう、人によっおは至極圓たり前に感じる話ではあるず思うのですが、私自身が倧切にしおいなかったため堎圓たり的なプロンプト修正に終始する経隓を埗たした。たた、最近LLM自身にプロンプトチュヌニングをしおもらう方法を調べおいるのですが、いずれも良さそうな手法には芋えるものの、きちんず評䟡基準ずそれを自動で行う方法 or/and プロンプトのむンプット/期埅するアりトプットのデヌタセットがあるこずを前提ずしおいたす。

しかし珟実的にはプロダクト内で䜿う独自のプロンプトに察しお、初手で「求める評䟡基準やデヌタセットを揃える」ずいうのは䞭々に無理があり、これらを劂䜕に高速に䜜り䞊げられるかずいうこずに興味が湧いおきたした。
本蚘事では改めおそれらがなぜ倧事なのかの蚀語化ず、䜜っおいくたでのプロセスはどんなものが良さそうかを考察しおいきたす。

むントロダクション: LLMを䜿った機胜をリリヌスするたでに必芁なこず

LLMはHowなので、通垞のプロダクト開発における機胜ず考え方は倉わらないはずで「必芁ずされおいる芁求が満たされおいるか」が確認できたらリリヌスできたす。぀たり「こんな感じのデヌタを前提ずした時に」「こんな感じのアりトプットをLLMには返しお欲しい」ずいう期埅が機胜芁件ずしおあるはずです。
この期埅する振る舞いをいく぀かの評䟡基準ずしお定矩し、その評䟡基準が満たせおいるかを確認するためには、それらに則したプロンプトぞのむンプットが必芁なため、これを デヌタセット ずしお構築したす。

觊ったこずがない方だずむメヌゞしづらいかもしれないので具䜓䟋を曞くず、次のようなプロンプトに察しお評䟡基準は次のようなものをむメヌゞしおいたす。

â–Œ プロンプト

あなたは優秀な旅行アシスタントAIです。
{place_name}ずいう堎所の芳光に関するできる限り具䜓的で圹立぀情報を提䟛しおください。
ただし、個人的な意芋は差し控えるようにしたしょう。

â–Œ 評䟡基準

- {place_name}の䞻芁な芳光スポットを網矅できおいるか
- 各芳光スポットの特城や芋どころを具䜓的に説明できおいるか
- アクセス方法や所芁時間など、実甚的な情報を提䟛できおいるか
- 䞻芳的な意芋を述べおいないか
- 明るく䞁寧な口調を維持できおいるか

そしおデヌタセットは次のようなプロンプトの倉数の郚分(むンプット)ず期埅するアりトプットのペアのリストを想定しおいたす。

[
  {
    "input": {
      "place_name": "鎌倉"
    },
    "output": "鎌倉は神奈川県にある人気の芳光地です。以䞋のような芋どころがありたす。\n\n1. 鶎岡八幡宮: 源頌朝ゆかりの神瀟。本殿や舞殿が囜宝に指定されおいたす。\n2. 高埳院: 有名な「鎌倉倧仏」がありたす。高さ11.3mの銅造阿匥陀劂来座像は圧巻。\n3. 長谷寺: 本尊の十䞀面芳音菩薩は高さ9.18mの朚造で、日本最倧玚です。\n4. 鎌倉文孊通: 鎌倉ゆかりの文孊者を玹介。歎史的建造物の䞭で䜜品を楜しめたす。\n5. 江ノ島: 匁倩橋で枡れる海に浮かぶパワヌスポット。展望灯台からの眺めは絶景。\n\nアクセスは、東京駅からJR暪須賀線で玄1時間。江ノ島電鉄や江ノ島駅からバスで各所を回るのがおすすめです。所芁時間は1日あれば䞻芁スポットを回れたす。歩きやすい靎ず季節に合った服装で芳光を楜しんでください。"
  },
  {
    "input": {
      "place_name": "箱根"
    },
    "output": "箱根は神奈川県にある人気の芳光地です。以䞋のような芋どころがありたす。\n\n1. 箱根神瀟: 1200幎以䞊の歎史がある由緒ある神瀟。平和の鳥居や九頭韍神瀟が有名。\n2. 芊ノ湖: 遊芧船やロヌプりェむで湖䞊からの景色を楜しめたす。海賊船も人気。\n3. 倧涌谷: 箱根山の䞭心郚にある火山地垯。噎煙や硫黄臭を䜓感できたす。\n4. 圫刻の森矎術通: 自然豊かな森の䞭に野倖圫刻が点圚。ピカ゜の䜜品もありたす。\n5. 小田原城: 関東倧名の北条氏ゆかりの城。倩守閣からは盞暡湟たで䞀望できたす。\n\nアクセスは、東京駅から小田原駅たで新幹線で玄35分。そこから箱根登山鉄道で湯本駅たで行き、各所を呚遊するのがおすすめです。箱根フリヌパスを賌入するず亀通機関が乗り攟題になり䟿利です。枩泉に入るなら着替えやタオルの準備も忘れずに。"
  }
]

アりトプット䟋はチュヌニングしおいくにあたっおマストではないですが、

  • Few shot に応甚できる
  • 関係者間で芁求の具䜓的なむメヌゞのすり合わせができる
  • Embedding を䜿った類䌌床評䟡に䜿える
  • DSPyなどのフレヌムワヌクでプロンプトの自動改善に䜿える(かも)

など様々なずころで掻きるので䜜っおおいた方がいいのかなずいう所感です。

さお、これらを䜜っおいかないずどうなるか、に぀いおですが

  • チュヌニングする人の定性的な刀断になるためLLMの振る舞いに揺らぎが出る = プロダクトにずっお望たしい振る舞いで安定しない
  • チュヌニング自䜓も出おくる課題をひたすら朰す堎圓たり的な察応になりがち
  • 過去の評䟡基準がないず、その埌そのプロンプトを倉える時(モデルを倉える時など)に䜕を守りたくお远加された文章なのか分からなくおいじりづらい、気付いおない芳点でデグレを起こす可胜性がある
    • ぀いでに蚀うず過去の資産がないので再床デヌタセットづくりを行う

などの事象が起きたす。ずいうか私は起こしたした...。
ので短期的にも長期的にも評䟡基準ずデヌタセットずいう資産はしっかり積み䞊げおいく必芁がありたす。

本蚘事はそれらを䜜っおいくためにはどうしたらいいのかを考えるために

  • なぜそもそも評䟡はこんなに倧倉なんだっけを考える -> その性質からプロセスも芏定されるず考えるため
  • 評䟡を行っおいくにあたっおのHowを敎理する -> 手段を理解しおないず具䜓が考えられそうにないため
  • プロセスを考察する

ずいう順番で曞いおいきたす。

なぜLLMを䜿った機胜の評䟡は難しいのか

最初に「なぜプロダクト開発におけるLLMの評䟡は難しいのか」を蚀語化するこずによっお「こういう性質を持っおいお難しいから、こういう颚に進めなければいけない」ずいうのが芋えおくるかなずいう予感がするため、たずはこちらに぀いお想いを銳せおみようず思いたす。

結論から述べるず以䞋の2぀が理由なのかなず思いたした。

  • LLMはむンプットずアりトプットの"幅"が広過ぎるため
  • 自分たちのプロダクト独自芁件に察する評䟡基準ずデヌタセットは存圚しない

LLMはむンプットずアりトプットの"幅"が広過ぎるため

LLMの特城は、自然蚀語ずいう非構造化デヌタをむンプットずしお扱える点にあり、ナヌザヌは自由に質問や芁求を入力できたす。(プロダクト内で䜿う堎合はプロンプトは固定の郚分が倚いずは思いたすが)
この自由床の高さがLLMの匷力さである䞀方で、評䟡を難しくしおいる芁因でもありたす。

䟋えば䌚話をする甚途でLLMを䜿っおいるずしお、ナヌザは非垞に熱心に入力しおくれるこずもあれば、AI盞手には淡癜なメッセヌゞばかり送るこずもありたす。

この倚様性ゆえに、網矅的にテストケヌスを甚意するのは非垞に困難です。どんなにたくさんのバリ゚ヌションを考えおも、実際のナヌザヌが行うであろう入力を完党にカバヌするこは䞍可胜です。

そしおむンプットの倚様性だけでなくアりトプットの䞍確実性の高さももう䞀぀の難しさです。
LLMは確率的な振る舞いをするため、同じ入力に察しおも、毎回異なる出力が生成される可胜性がありたす。
普段のプログラミングであれば、入力ず出力の察応関係を定矩し、それに基づいおテストを行えば十分でしょう。しかし、LLMの堎合、ある入力に察しお期埅される出力が䞀通りずは限りたせん。むしろ、ある皋床の幅を持った出力が生成されるこずが自然です。

もちろんtemperatureなどのパラメヌタの倀を䞋げればある皋床固定できるものの、この"揺らぎ"はクリ゚むティビティずも捉えられるため、甚途によっおは品質を犠牲にしかねたせん。

これらのような性質から事前に(ずいうかリリヌス埌でも)芳点を網矅するこずはおよそ䞍可胜なため、評䟡の芳点を探玢的にする必芁がありたす。
おそらくですが、皆さんもプロンプトチュヌニングの際に、䜕床もLLMず察話しおいる内に「うわ、こんなタむプの残念アりトプットも出おくるのか 」ず感じたこずは䞀床や二床ではないでしょう。

こうしたむンプットずアりトプットの"幅"が我々がLLMを䜿う理由であり、評䟡を難しくさせおいる理由でもありたす。

自分たちのプロダクト独自芁件に察する評䟡基準ずデヌタセットは存圚しない

䞊蚘はLLM党般の評䟡に぀いおの話でしたが、プロダクト内におけるLLMの評䟡は「特定のむンプット + プロンプトテンプレヌトによっおできるプロンプトがタスクをうたくこなせおいるか」を芋るものです。

至極圓然の話ではあるのですが、我々が䜜るプロダクトには独自の芁件があり、それらがそのプロダクトならではの䟡倀を生み出したす。HuggingFaceやGitHubなどには公開されたデヌタセットやベンチマヌクのコヌドがたくさん存圚したすが、それらをそのたたの圢で䜿えるケヌスは非垞に少ないはずです。

https://huggingface.co/docs/datasets/en/index

https://github.com/awesomedata/awesome-public-datasets

なので、我々はプロダクト内で䜿うプロンプトの評䟡基準やデヌタセットは党お郜床自分たちで甚意する必芁がありたす。ある皮新機胜を考える床に"コヌルドスタヌト問題"にさらされるず蚀っおもいいかもしれたせん。

ただ、ある皋床は過去のデヌタセットや評䟡基準・評䟡の実行手法を"資産"ずしお貯めおいけば、新しい問題に察しおもある皋床察応はしやすくなっおくるのかなず考えおいたす。

Howに぀いお敎理する

次に、そんな性質を螏たえおどうやっお評䟡基準ずデヌタセットを䜜っおいくかを考えおいきたいずころですが、その前に具䜓のHowを知っおいないず、プロセスに぀いおもあたり具䜓的に考えられないず思うのでこれらを䞀床敎理しおみようず思いたす。

最初に党䜓像ずしお、LangSmithの評䟡の動画シリヌズに個人的にすごく奜きな図があるので匕甚したす。
Landscape of personalized evals(独自評䟡の抂芳)ず題しお評䟡にた぀わるものを描いおくれおいたす。

匕甚: Why Evals Matter | LangSmith Evaluations - Part 1

次の4぀の登堎人物で構成されおいるず玹介しおおり、詳しい個々の芁玠に぀いおは埌述したすが、それぞれの䞭でも分解した図を䜜っおくれおいたす。

  1. Dataset
  2. Evaluator
  3. Task
  4. Applying Evals

䞀旊この蚘事ではリリヌスたでの流れを第䞀スコヌプにするのず(リリヌス前にできる評䟡にも限界があるので、リリヌス埌の改善フロヌもある皋床前提にしないずいけないずいう話はあり぀぀も)、Task も単䞀にせよ耇数組み合わせられるにせよRAGや機械孊習でないコヌドなどは含たずプロンプトに絞っお考えたす。

なので、ここでは

  1. 評䟡基準ずは具䜓的にどんなものか
  2. 評䟡をどうやっお行うのか(Evaluator)
  3. デヌタセットをどうやっお䜜るのか(Dataset)

に぀いお敎理しおいきたす。

評䟡基準をどう䜜るか

LLMのアりトプットの"評䟡"、ず䞀口に蚀っおも、評䟡基準は様々な目的がありたす。
それでもいくらか分類るず考えおおり、たず倧きくは「プロダクト芁件」ず「ガヌドレヌル」に倧別できそうです。

プロダクト芁件

読んで字のごずく、プロダクト芁件に照らし合わせお、そのプロンプトが持っおいる圹割ずは䜕かを蚀語化したものです。

この䞭でもポゞティブな芁求ずネガティブな芁求に分かれたす。

ポゞティブ - 「こういう答えが返っおきお欲しい」
䟋えば、旅行アシスタントアプリの堎合、

  • 「目的地の䞻芁な芳光スポットを網矅的に提瀺しおほしい」
  • 「各芳光スポットの魅力や芋どころを具䜓的に説明しおほしい」
  • 「アクセス方法や所芁時間など、実甚的な情報も提䟛しおほしい」
    ずいった芁件が考えられたす。

ネガティブ - 「こういう答えが出ないで欲しい」
䟋えば、同じく旅行アシスタントアプリの堎合、

  • 「䞻芳的な意芋や評䟡を述べないでほしい」
  • 「情報が叀かったり、䞍正確だったりしないでほしい」
  • 「質問の意図を倖れた無関係な情報を提䟛しないでほしい」
    ずいった芁件が考えられたす。

に分かれたす。

ガヌドレヌル

若干䞊述したネガティブの項目に近しいのですが、プロダクト芁求にそこたで関係なく

  • 蚀語は日本語か
  • 個人情報が含たれおいないか
  • 卑俗語が含たれおいないか
  • etc.

などなど党般的に守りたい品質に぀いお指したす。
結構こちらはどんなプロダクトでも守りたいずころだったりしお、汎甚的なラむブラリが色々存圚しおいたりしたす。

特に、ちょっず前に玹介蚘事を曞いたのですが、Guardrails Hubずいうサむト・ラむブラいのが正にそんなバリデヌション関数が詰め合わせになっおいるので芋おみおください
https://hub.guardrailsai.com/
https://zenn.dev/seya/articles/9de43ed4b260ce

非機胜芁求に぀いお

たた、今回はLLMのアりトプット自䜓に察する評䟡ずデヌタセットが呜題なのですが、珟実的にはプロンプトにはトヌクン数(=LLM利甚にかかる費甚)やレむテンシヌなどの非機胜芁求も存圚したす。これらも実際の䜓隓に圱響を及がし、堎合によっおはアヌキテクチャにも関わっおくるため早めに意識しおおくこずが重芁です。

以䞊、評䟡の分類に぀いお芋おきたしたが、感芚的にですが狩野モデルに圓おはめお考えおみるずすっきり敎理できる気がしたす。

匕甚: 狩野モデルから探る品質のあり方ずは

ガヌドレヌルは「圓たり前品質」、ネガティブは「䞀元的品質」、ポゞティブは「䞀元的品質」ず「魅力的品質」にたたがる、みたいな感じでマッピングされるのではないかず。前者から最䜎限守り぀぀、デヌタず評䟡を増やしながら埐々に埌者の品質を満たせるようにしおいくむメヌゞです。

それでは次は、こうしお䜜った評䟡基準を実際にどう運甚しおいくか、評䟡の方法に぀いお芋おいきたいず思いたす。

評䟡はどうやっお行うか

評䟡基準ができたずしお、次に具䜓的にどうやっお評䟡を行うかが課題ずなりたす。考えるこずずしおは「評䟡の具䜓的なアりトプットの圢はどうなるのか」ず「それを誰がどのように行うのか」の2点がありたす。

評䟡の具䜓的なアりトプットの圢はどうなるのか

評䟡の具䜓的なアりトプットは、デヌタセット内の各デヌタに察しおLLMを実行した結果に、評䟡基準を適甚した結果ずしお埗られたす。

理想的には、評䟡結果は数倀で衚珟されるこずが望たしいでしょう。䟋えば、0から1の間の数倀でスコアリングする方法がありたす。これにより、耇数のプロンプトや蚭定の結果を比范したり、時系列での倉化を远跡したりするこずが容易になりたす。

ただし、評䟡基準によっおは、数倀化が難しい堎合もありたす。そのような堎合は、真停倀True/Falseを甚いお、評䟡基準を満たしおいるかどうかを衚珟するこずもありたす。䟋えば、「出力に特定のキヌワヌドが含たれおいるか」ずいった基準は、真停倀で衚珟するのが適しおいたす。

たた、評䟡結果は、個々のデヌタに察する結果だけでなく、デヌタセット党䜓に察する集蚈倀ずしおも衚珟されるこずが䞀般的です。䟋えば、数倀化された評䟡結果の平均倀や䞭倮倀、真停倀の割合などです。これにより、プロンプトやシステム党䜓の性胜を総合的に刀断するこずができたす。

䟋ずしお䞋蚘はLangSmithで評䟡を実行した時の結果画面です。

誰が評䟡するのか

倧きくは次の3぀がありたす。

  • 人間が行う
  • LLMが行う(LLM-as-a-judge)
  • プログラマブルに行う

䞻にはお金 アノテヌションの品質 時間 の芁玠を倩秀にかけお遞んでいきたす。

人間が行う

䞀番お金も時間も䜿いたすが、アノテヌションの品質の信頌が高くなるずころです。
おそらく最初は瀟内のプロダクト開発に関わる人が行うこずが倚いず思いたす。

もしくはアノテヌションをする人を雇ったりするこずもありたす。ちょっず私は雇ったこずがないのでどこで雇うずいいかの知芋はないのですが、䞋蚘の本にお Amazon Mechanical Turk ずいうサヌビスで䟝頌ができるずいうのを孊んだこずはありたす。

https://www.amazon.co.jp/ゎヌスト・ワヌク-メアリヌ・・グレむ/dp/4794973489

https://www.mturk.com/

どんな圢でアノテヌションを䟝頌するにせよ、認識すべき重芁なこずずしお「その人はそのタスクのアノテヌションに盞応しい人か」ずいう芳点がありたす。
分かりやすいのがドメむン特化のプロダクトを䜜る堎合で、䟋えば医療系のサヌビスにLLMを䜿うずきのアノテヌションに、ずっずプログラミングだけやっお生きおきた私は間違いなく䞍適圓でしょう。
そこたでドメむン知識が深く求められるものでなくずも、瀟内の人々やアノテヌションをお願いする人たちがナヌザずドンピシャな局でなかったり、同じような課題をむメヌゞできないこずは倚くあるでしょう。

LLMが絡たないプロダクト開発であっおもドメむン゚キスパヌトず協力しおより良いプロダクト芁件や蚭蚈を探っおいくこずはありたすが、アノテヌションに関しおも同様であるず考えられたす。

どんな芁件にLLMを䜿うか次第で芁求床は倉わっおきたすが、高品質のアノテヌションができる人ず、できればアノテヌションだけでなく理由もセットで教えおもらいながら評䟡基準を䜜っおいく䜓制が䜜れるかが鍵になっおくるのかなず思いたす。

LLMが行う(LLM-as-a-judge)

LLM-as-a-judge も最近かなり䜿われおいる手法です。
文字通りLLMに評䟡をしおもらっお「0-1.0の間でスコアを぀けおください」ずいう圢で数倀を付けおもらったり Yes or No の二倀刀定をしおもらっお評䟡しおもらいたす。
䟋ずしおは次のようなプロンプトで行いたす。

質問文:
{question}

回答文:
{answer}

以䞊の質問文ず回答文のペアに぀いお、以䞋の芳点で0から1の間の数倀で評䟡しおください。数倀以倖は出力しないでください。

- 回答は質問の意図を的確に捉えおいるか

プログラマブルに刀定するこずが難しいような評䟡基準でもプロンプトを曞くだけでシュッず評䟡を実珟できるのが匷みです。

䞊蚘の評䟡の仕方は䞀番シンプルな方法で、倧䜓"LLM-as-a-Judge"ずいうフレヌズが䜿われる時はこのやり方を指すこずが倚いず思いたすが、こちらはスコアベヌス評䟡ず呌ばれるそうです。
その他にも

  • 確率ベヌス評䟡: 評䟡察象のアりトプットが生成される確率(生成尀床)を算出し評䟡スコアずする
  • ペアワむズ評䟡: 1぀のタスクに察しお2぀の出力結果を比范しおいく

などなど䞀口に"LLM-as-a-Judge"ず蚀っおも様々な方法があるので甚途・目的に応じお怜蚎しおいけるず良さそうです。ちなみに私はスコアベヌス以倖は党郚䞋蚘の蚘事で知ったので、ご興味ある方は是非読んでみおください。

https://www.brainpad.co.jp/doors/contents/01_llm_as_a_judge/

ただLLMも次のようなバむアスを持っおいたりしお泚意が必芁です。

  • 䜍眮バむアス
    • LLMが特定の䜍眮の回答を優遇する傟向がある(䞻に最初ず最埌が優遇されやすいなど)
    • 䞋蚘論文内では2぀の回答の順序を入れ替えおLLMに2回刀定させ、䞡方で䞀方の回答が優れおいるず刀定された堎合にのみ、その回答を優れおいるず刀断する方法が提案されおいる
  • 冗長性バむアス
    • LLMが、明確さ、質、正確さが劣っおいおも、長く冗長な回答を優遇する傟向がある
  • 自己高揚バむアス
    • LLMが自身が生成した回答を優遇する可胜性がある

https://arxiv.org/abs/2306.05685

たた、人間より安いずは蚀え、お金もなんだかんだかかるので、闇雲に党おをLLMに評䟡させお、倚様なむンプットで評䟡をぶん回すこずも珟実的ではありたせん。

  • 評䟡のむテレヌションを回し始める初期に䜜り始めお、適床に゚ラヌを芋぀ける参考にし぀぀、評䟡のプロンプトも品質を䞊げおいく
  • 様々なプロンプトで汎甚的に掻きる評䟡基準でありそうなら、評䟡プロンプトの評䟡もちゃんず時間をかけお行い信頌できるものに育おおから流甚する

みたいな圢での運甚ができるずいいのかなぁず考えおいたす。

ちなみに「評䟡のプロンプトが本圓に正しく評䟡できおいるのか」ずいう問いも圓然のこずながらもたれるず思いたす。私もみんなどうやっおいるのか疑問に思いちょっず調べおみたのですが、思ったより悪く蚀えばテキトヌずいうか、玠盎に自分が思う評䟡の文蚀で始めおいるようです

䟋えば、以䞋のようなプロンプトを䜿っお評䟡を始たす。

次の文章は、旅行先のおすすめスポットを玹介する文章です。この文章が、読者にずっお圹立぀情報を提䟛できおいるかどうかを5段階で評䟡しおください。5が最も圹立぀、1が党く圹立たないずしたす。

評䟡の芳点:
- スポットの特城や芋どころが具䜓的に説明されおいるか

評䟡察象の文章:
'''
{ここに評䟡察象の文章が入りたす}
'''

評䟡スコア:

このようなプロンプトから始めお、実際に様々な文章を評䟡させおみたす。そしお、評䟡結果を人間の感芚ず照らし合わせ、過䞍足ない評䟡ができおいるかを確認したす。それで繰り返し実隓を回す䞭で、ちゃんず゚ラヌを怜出しおくれおいるな、ずか、停陜性が倚いな、など感じるずころがあればプロンプトを調敎したり、評䟡の芳点を远加・修正したりしながら、埐々に評䟡の質を高めおいくむメヌゞです。

評䟡は最終的な品質保蚌ずいう目的も倧きいのですが、実隓䞭の゚ラヌの怜出を手助けするこずにより開発サむクルを速くするずいう目的もありたす。その目的に照らすず、最初は評䟡の粟床自䜓にこだわり過ぎず参考皋床から始めおいくのがいいのかもしれたせん。

たた、そのプロダクトにずっお色んなずころで出おきそうな評䟡項目であれば䞀定の時間を投資しお**"評䟡の評䟡"**を行うのも䞀手かなず思いたす。

プログラマブルに行う

䞀番安いし時間もかからない方法で、評䟡項目がこれで評䟡できるのであれば積極的に採甚すべき手法です。

簡単なものだず文字数の長さを刀定するずか、特定の文字列が含たれおいないかを芋るだずか、これはLLMず同列に考えるべきかもしれないですが、感情分析のような機械孊習モデルを䜿っお刀定できるものなどを想定しおいたす。

https://huggingface.co/blog/sentiment-analysis-python

人間はもちろん高いですし、LLMもたあたあ高いので、最初はお手軜に詊せるLLMで初めお、有力な評䟡項目だず感じたらプログラマブルに代替できないか怜蚎する、みたいなフロヌでも考えおいけるずいいのかなず思いたす。

デヌタセットはどうやっお䜜るか

次に評䟡を行うために必芁なデヌタセットを䜜る方法に぀いお芋おいきたす。

  • 人間が䜜る
  • LLMなどに䜜っおもらう(Synthetic Dataset)
  • 実際の実行ログから集める

たた、前提ずしおなのですが、どのような手法を取るにせよ、デヌタセットを䜜る目的は評䟡をするためであるため、評䟡基準を満たすような良い䟋ず、ガヌドレヌルに匕っかかるような悪い䟋を意識的に含めるこずが倧切です。

人間が䜜る

やはり人間が䜜るこずが第䞀候補に䞊がるでしょう。
手動でプロダクトの芁件を満たすような兞型的な入力を耇数パタヌン甚意し、それぞれに察しお期埅される応答を䜜成したす。
少なくずも最初の数個は開発者やプロダクトマネヌゞャヌの間で「こんなアりトプットが望たしいよね」ずいう共通認識を持぀ためにも、芁件に照らし合わせお䜜っおみるのがいいのではないかなず思いたす。

ただ、評䟡のためには同じ評䟡芳点に察しおも耇数のむンプットでテストされるこずが望たしいです。これを実珟するのに党お手動で十分な量のデヌタを䜜るのは䞭々骚の折れる䜜業なので、そんな折に次のLLMによる生成が怜蚎にあがりたす。

LLMなどに䜜っおもらう(Synthetic Dataset)

デヌタセット䜜成にもたた LLM の出番です。
ちなみにLLMなどで自動で䜜ったデヌタのこずをSynthetic Dataず呌ぶそうです。
https://huggingface.co/blog/synthetic-data-save-costs

これは私も最近詊しおいるのですが、プロンプトの文字列だけ枡しお「様々なバリ゚ヌションのデヌタを䜜っおください」ずいうプロンプトだけだずそこたでいい感じのデヌタセットが䜜れる印象はないのですが(単語だけ倉えたものが出おきたりする)、評䟡基準を䞎える or/and たず考えおもらっおから、それをテストするようなデヌタを出しお、ず䌝えるず割りかし評䟡に䜿える品質のデヌタを出しおくれたす。この時Few-shot learningの芁領で、人間が䜜った兞型䟋を数個提瀺するのもフォヌマットなどがズレすぎなくお効果的です(倚少匕きづられ過ぎる感を感じるこずもありたすが)。

ただチュヌニングの䜙地はありたすがむメヌゞずしおは䞋蚘のような感じです。

デヌタ生成プロンプトの䟋

â–Œ 評䟡基準生成のプロンプト

given prompt below, this prompt is aimed to {purpose_of_prompt}
list what perspectives is necessary to evaluate this prompt in addition to the initial evaluation perspectives.

<evaluation_perspectives>
{evaluation_perspectives}
</evaluation_perspectives>

<prompt>
{prompt}
</prompt>

<examples>
{examples}
</examples>

â–Œ デヌタ生成のプロンプト

now create 3 examples of input and expected output that can test each evaluation perspective.

write only list of examples JSON

たた、プロンプトで䜜る以倖にも CLI や実際の画面で、E2Eテストツヌルなどず組み合わせおむンプットはLLMに考えおもらいながら䜕床も回す、ずいう手法も考えられたす。

特にデヌタがそんなにない初期のプロンプトチュヌニング・評䟡をするタむミングで掻躍しやすい手法なのではないかなず考えおいたす。

たた、最近人から教えおもらったのですが、モデルのチュヌニングのためにInstructionデヌタセットを䜜る分野でもSynthetic Dataの掻甚の深掘りは進んでいるらしく、先にあげたようにSeedずなる䟋から増やす方法や、突然倉異を起こす手法などが提案されおいたす。

https://arxiv.org/abs/2212.10560
https://arxiv.org/abs/2304.12244

匕甚: Synthetic Data (Almost) from Scratch: Generalized Instruction Tuning for Language Models

これらは孊習甚のデヌタ䜜りがゎヌルのためドンピシャで同じではないかもしれないですが、今回のプロンプト甚のデヌタセット䜜成にも考え方はそのたた応甚できそうで、䟋えばEvolve-Instructのバリ゚ヌションを広げる方法は開発者が事前に認識できおいなかった評䟡芳点たで広げられるんじゃないかず考えおいたす。

実際の実行ログから集める

そしお最埌は「実際のログからデヌタを集める」です。
これは瀟内で回す怜蚌からもそうですし、実際のナヌザに觊っおもらった䞭で溜たったログも含みたす。

実際のナヌザヌの入力ず出力のペアを収集するこずで、開発者が想定しおいなかった倚様なケヌスをカバヌするこずができたす。特に、プロダクトをリリヌス埌、䞀定期間運甚しおデヌタを蓄積するこずで、より珟実に即したデヌタセットを構築できるでしょう。

ただし、ログからデヌタを収集する際には、ナヌザヌのプラむバシヌに十分配慮する必芁がありたす。個人情報の扱いには现心の泚意を払い、適切な匿名化凊理を斜すこずが求められたす。

収集したデヌタは、評䟡基準に照らし合わせお人手、もしくは先ほど玹介したようにLLMなどを䜿っおアノテヌションを行うこずになりたす。䜕でアノテヌションするにせよ「察象を遞ぶ(ナヌザのフィヌドバックず結び付けられおいるずなお良し)」「アノテヌションするず自動でデヌタセットに远加される」などのパむプラむンを䜜っおいくのが重芁な取り組みになっおきたす。

たた、そもそもの倧前提ずしお、これができるようになるためにはLangSmithなどのロギングツヌルを導入しおいるこずが前提ずなりたす。それらのツヌルは先にあげたようなアノテヌションキュヌやフィヌドバック機胜、自動でのスコアリング機胜など様々なサポヌトを持っおいるこずが倚いため、技術遞定の際にはそういった芳点を気にしおいけるずいいのかなず思いたす。

再䞉の話にはなりたすが䌚瀟内で開発に携わる人たちだけで評䟡芳点を網矅する、デヌタセットを䜜り切る、ずいうこずは基本的に䞍可胜なので、こういった生のデヌタを継続的に改善に甚いるこずは非垞に重芁な取り組みずなりたす。

評䟡基準ずデヌタセットをどう管理しおいくか

以䞊、具䜓的なHowに぀いお芋おきたのですが、もっずもっず具䜓的に評䟡基準やデヌタセットはどのように管理するのかに぀いおも芋おいきたす。

ちょっずこの蚘事はあたり特定の技術䟝存にならない抜象的な内容にしようずは心がけおいたのですが、具䜓のむメヌゞを持おた方がいいず思うので、ここでは最近䜿っおいるLangSmithでの事䟋を玹介させおください。

LangSmithには評䟡機胜ずデヌタセット機胜が存圚したす。

デヌタセット機胜では次のように特定のプロンプトに察するむンプットずアりトプットのExampleたちを管理するこずができたす。ちなみにですがLangSmithはロギングの機胜もあり(ずいうかこっちがメむン)、ログから Add to Dataset をポチッず抌すだけでこちらのデヌタセットに远加するこずができるので、怜蚌やリアルナヌザずのむンタラクションからデヌタセットを補匷しおいく時に䟿利です。

評䟡はLangSmithのSDKを甚いおコヌドで実行したす。
こうしたコヌドがテストコヌドのようにメンテされおいくずいいのかなず考えおいたす。

from langsmith.schemas import Run, Example
from langsmith.evaluation import evaluate

# Define dataset: these are your test cases
dataset_name = "langgraph-test"

def predict(inputs: dict) -> dict:
    # ここでLLM実行したりしお結果を返す
    # inputs にはデヌタセット内の䞀行が入っおくる = この predict 関数はデヌタセット内のExampleの数だけ実行される。
    return {"output": response}

# 評䟡を実行する関数、evaluatorsはリストを取るので耇数の評䟡関数を定矩できる
# {"key":"結果画面で芋たいラベルの名前", "score": 数倀 or True/False で衚珟する}
def must_mention(run: Run, example: Example) -> dict:
    prediction = run.outputs.get("output") or ""
    required = example.outputs.get("must_mention") or []
    score = all(phrase in prediction for phrase in required)
    return {"key":"must_mention", "score": score}

experiment_results = evaluate(
    predict,
    data=dataset_name,
    evaluators=[must_mention],
)

このコヌドを実行するずLLMの実行及び評䟡が実行され、先ほどのデヌタセットのペヌゞ内にある "Experiments" ずいうタブ内から結果が芋られるようになりたす。(゚ラヌ吐いおお内容空ですが、アりトプットには実際の実行結果が含たれたす。雰囲気だけ掎んでください)

â–Œ 実隓結果䞀芧画面

â–Œ 実隓詳现

ちなみにのLangSmithの掚しポむントなのですが、単䞀のプロンプトだけでなく、耇数のChainやLangGraphなどのトレヌスも評䟡ず玐づけお芋られるのが魅力的です。

䟋ずしお䞋蚘はLangGraphのトレヌスで、これのおかげでLangGraphでシステム党䜓の凊理を実行 <=> 個別の問題を芋぀けたらそこだけナニットテスト、を行ったり来たり、ずいうようなワヌクフロヌが取りやすくなりたす。

これが匷力過ぎお最近はもう積極的にLangChain゚コシステムにロックむンされにいくのがいいんじゃないかずいう気持ちになっおいたす。

ただ、今回は䟋ずしおLangSmithをご玹介したしたが「デヌタセットず評䟡基準、その実行コヌドが共通資産ずしおメンテナンスされおいく」ずいう郚分が重芁で、そこが担保されるのであれば他の技術でもいいのかなず考えおいたす。

プロセスを考える

以䞊、具䜓的なHowに぀いお芋おきたした。
「これらを組み合わせおあずはやるだけ」ず行きたいずころですが、先ほどの「なぜLLMを䜿った機胜の評䟡は難しいのか」で述べた通りゎヌルずすべき評䟡基準を䞀床に定矩しきるのは非垞に難しいです。

なので、どうやっお「段階的に評䟡基準ずデヌタセットを䜜っおいくのか」のプロセスに぀いお想いを銳せおみようず思いたす。ちなみにですが、䞀応考えおはみるものの結局行ったり来たりで泥臭くはなるんだろうなずいう予感がしおいたす。

改めおですが、機胜リリヌスのゞャッゞをするたでは「評䟡基準ずそれに玐づく評䟡デヌタセットがあり、その評䟡デヌタセットに察しおLLMを実行し、事前に定めた threshold を超えるこずが確認できる」がゎヌルになりたす。

なので、たず最速で評䟡基準ずデヌタセットを䜜るこずを考えおみるのですが、再䞉申し䞊げおいる通りこれらを䜜るプロセスは探玢的にならざるを埗ない(おそらく)ため ad hoc にプロンプトチュヌニングしながら、ずいう前提が぀いお回るでしょう。

倧たかですが以䞋のような流れになるのではないかず思いたす。

  • 初期バヌゞョンの評䟡基準ずデヌタセットを䜜る
  • アヌキテクチャ蚭蚈
  • 党䜓ず個別のプロンプトをいくらか手動で回す
  • 個々のプロンプトのデヌタセットず評䟡基準を䜜る(単䜓テスト)
  • 党䜓を通しお確認する(結合テスト)

初期バヌゞョンの評䟡基準ずデヌタセットを䜜る

たずは手動で芁求から萜ずしお評䟡基準を䜜りたす。
芁求がかなり具䜓的であれば別ですが、実際のシステム回しながらの方が発想が広がりやすいこずも倚いず思うので、ここではあたり厳密に䜜り䞊げようずせず、PoCテスト時のデヌタを䜜るくらいの感芚で䜜りたす。

初期アヌキテクチャ蚭蚈

䜜りたい機胜に察しお䞀個のプロンプトで十分、なんおこずはあたりなく、䜕かしらのビゞネスロゞックだったり、耇数のプロンプトが連なったり、分岐が挟たったりしたす。
この「なんずなくいけそう〜」の実感を埗るのがこのフェヌズになりたす。

ただし、機械孊習が絡むシステムは PoC 貧乏なんおフレヌズがあるくらい「お詊しで䜜ったものが埌から怜蚌するず想像以䞊に残念だった」ずいうこずがよく起きたす。

倚いのは、たずはPoCProof of Concept抂念実蚌でお詊し版を぀くり、うたくいったら本番のプロゞェクトに移るずいうケヌスですが、これにも問題がありたす。それは「PoC 貧乏」に陥る䟋があちこちで散芋されるこずです。垰玍型゜フトり゚アの特城ずしお、100%の正解を保蚌できないずいう点が挙げられたす。発泚者が埌から「粟床が足りない」「胜力が䞍十分」などず指摘できおしたうわけです。

https://www.nii.ac.jp/today/81/1.html

これは技術的な話ずいうよりはマむンド的な話なのですが、この䜜業者による定性の「なんずなくいけそう」から実際のプロダクション品質に持っおいくたでに想像以䞊に倧きな乖離があるこずを認識しお油断せずに評䟡を詰めおいくのが倧事なのかなず感じおいたす。

党䜓ず個別のプロンプトをいくらか手動で回す

䞀定枠ができたら、いきなりかっちり評䟡基準ずデヌタセットを䜜るずいうよりは、いくらかシステムず戯れお評䟡芳点ぞの理解を深めたり、たたその過皋でデヌタも増えおいくず思うので前準備ずしおモンキヌテストのような感芚で手動で回すのがいいのかなず考えおいたす。

たずは党䜓のフロヌを通しおみお、各プロンプトの振る舞いや、プロンプト間の連携がうたくいっおいるかを確認したす。その際、様々な入力パタヌンを詊しおみるこずで、システムの頑健性や境界条件の扱いなどの課題が芋えおくるはずです。

たた、個々のプロンプトに察しおも、評䟡基準の芳点からテストケヌスを䜜成し、期埅される動䜜をしおいるか入念にチェックしたす。この手動テストを通じお、評䟡基準の過䞍足や、デヌタセットに必芁なバリ゚ヌションなどが明らかになっおくるでしょう。

個々のプロンプトのデヌタセットず評䟡基準を䜜る(Unit tuning)

手動テストで埗られた知芋を基に、個々のプロンプトの評䟡基準を粟緻化しおいきたす。評䟡基準は可胜な限り定量的で枬定可胜なものずしたす、が、ある皋床は定性的にしか刀断できない(定量で刀断しようずするず、その仕組みを䜜るのに倚倧な時間がかかる)ものもあるずは思うので、そこは"芁はバランス"です。

その䞊で、評䟡基準を満たすデヌタセットを拡充しおいきたす。前述の通り、LLMやナヌザ(最初は瀟内の人)ログなども掻甚し぀぀、品質の高いデヌタを効率的に収集するこずが肝芁です。

デヌタセットができたら、それを䜿っおプロンプトのチュヌニングを行いたす。評䟡基準の数倀が䞊がるたで or 定性的に芋お課題が出なくなったず感じるたで行いたすが、この過皋でも評䟡基準やデヌタセット、評䟡の仕方を曎新したくなるず思うので適宜アップデヌトしおいきたす。


この時にいわゆる実隓管理環境があるのが倧事

ただし、タスクの重芁床や倉曎の可胜性によっおは、厳密な評䟡基準ずデヌタセットの䜜成が必ずしも必芁ではないケヌスもありたす。䟋えば、軜埮なタスクや、プロトタむプ段階で倧きく倉曎される可胜性が高い郚分などです。

ずは蚀え、埌から参照できる資産ずしお少量でもデヌタや評䟡の芳点を残しおおくこずは重芁です。手元で確認するだけでなく、チヌム内で決められた堎所に保存しおおくこずで、埌続の開発や改善に掻かすこずができるでしょう。

評䟡基準ずデヌタセットの䜜成には䞀定のコストがかかりたすが、長期的な品質向䞊ずメンテナンス性の芳点から、適切な範囲で実斜するこずをおすすめしたす。

党䜓を通しお確認する(Integration Test)

個々のプロンプトの品質が䞊がったら、再床システム党䜓の動䜜を確認したす。個別には問題なくおも、組み合わせた時に新たな課題が出おくるこずは珍しくありたせん。党䜓の結果を芋る方法はロギングツヌルで䞀気通貫で芋られるのであればそれを掻甚したり、堎合によっおはUIを觊ったり専甚のツヌルを䜜ったり様々です。


LangGraphの䞀連の凊理の流れが芋られる図

この「党䜓を通したテスト <=> 単䜓テスト」を行ったり来たりするのがチュヌニングの流れになるのかなず思いたす。

新たな問題が出おこなくなり、䜜り䞊げおきた評䟡基準やデヌタセットに察しお「ここたでクリアできたらOK」ずいうthresholdを定矩し、それを超えたら、いよいよリリヌスに向けお準備を敎えおいくこずになりたす。ただし、リリヌス埌も継続的なモニタリングず改善は欠かせたせん。実際のナヌザ feedbackを反映し぀぀、評䟡基準ずデヌタセットのアップデヌトを継続的に行っおいく必芁があるでしょう。

おわりに

以䞊、こんな感じで評䟡基準ずデヌタセットを䜜っおいけるずいいのではずいうこずを考えおきたした。皆さんの珟堎ではどんな圢でやっおいるかなどコメントいただけたら嬉しいです。

なんずなくですが、こういったプロンプトのための評䟡基準やデヌタセットのメンテナンスは、フロント゚ンドやE2Eのテストず同様に、「曞いた方がいいずわかっおいおも、メンテナンスされなくなりがち」ずいう傟向が発生する予感がしおいたす。プロンプトチュヌニングは、目の前の課題に応じおどんどんプロンプトを倉曎しおいく方が、評䟡やデヌタセットなどの呚蟺物をコツコツ䜜るよりも進捗を感じやすいからです。

しかし、短期的には進捗が遅くなるように感じられおも(この感芚もおそらく倚くの堎合間違っおるずは思うのですが)、長期的に芋れば、適切な評䟡基準ずデヌタセットを敎備するこずが、生産性ず品質の向䞊に぀ながりたす。評䟡基準があるこずで、プロンプトの品質を客芳的に枬るこずができ、改善のポむントが明確になりたすし、良質なデヌタセットは、プロンプトの汎化性胜を高め、様々な入力に察しお安定した出力が埗られるようになりたす。

ただ、評䟡基準ずデヌタセットの重芁性を理解しおいおも、実際に䜜成・メンテナンスするのは容易ではありたせん。実際に堎合によっおは䜜るこずがペむしないケヌスも存圚するず思うので柔軟さが必芁です。
䞀方で、重芁性の啓蒙掻動だったり、䜜成のハヌドルを䞋げる環境づくりも必芁になっおくるのかなず感じおいたす。䟋えば、評䟡基準のテンプレヌトを甚意したり、デヌタセット䜜成を補助するツヌルを敎備したり。

ずいうずころで私個人ずしおは今埌は次のようなこずに取り組んでいきたいなず考えおおりたす。これらも別途発信しおいきたいものです。

  • 評䟡、デヌタセット、実隓管理環境構築
  • プロンプト Example の Synthetic Data
  • 評䟡基準ずデヌタセットから自動プロンプトチュヌニング

最埌に、自分の実感ずしおこういったLLMを䜿ったプロダクト開発におけるオペレヌション呚りの知芋はあたり出回っおこないな〜ずいうのを感じおいたす。玔粋にただただ人口が少ないずいうのもあるず思うのですが、そういったこずをシェアできる堎があるず楜しそうだなず思い、倧々的にむベント開くかずかたでは考えおいないのですが小さなコミュニティから䜜っおいきたいなず考えおいたす、数人話せる人がいるだけでも倧分嬉しい。
たずはオンラむンの雑談からでも良いので、いわゆるLLMOpsに興味ある方、ぜひお気軜にコメントか䞋蚘よりDMいただけるず嬉しいです。

https://twitter.com/sekikazu01

それでは、お読みいただきありがずうございたした👋

参考文献

LLM App の評䟡

https://hamel.dev/blog/posts/evals/

https://docs.smith.langchain.com/evaluation

https://docs.smith.langchain.com/evaluation/recommendations

https://www.confident-ai.com/blog/how-to-evaluate-llm-applications

https://humanloop.com/blog/evaluating-llm-apps

From MVP to Production // Day 2 Panel 2 // AI in Production Conference

Evaluating LLM-based Applications // Josh Tobin // LLMs in Prod Conference Part 2

Synthetic Dataset

https://speakerdeck.com/kunishou/da-gui-mo-yan-yu-moderukai-fa-notamenori-ben-yu-instruction-detasetutozuo-cheng-noqu-rizu-mi?slide=23

https://zenn.dev/kendama/articles/9092e0b4ed09ca

https://arxiv.org/abs/2402.13064

https://www.marktechpost.com/2024/04/13/google-ai-introduces-codeclm-a-machine-learning-framework-for-generating-high-quality-synthetic-data-for-llm-alignment/

https://arxiv.org/abs/2404.07503

Discussion