データアノテーションに詳しい方なら、このプロセスがプロジェクトを遅らせる苦痛な作業になり得ることをご存知でしょう。多くの研究者や実務者が、機械学習(ML)モデルをアノテーションエージェントとして利用することで、データアノテーションプロセスを自動化しようとしてきました。少量のデータにアノテーションを付与し、シンプルなMLモデルをトレーニングし、そのモデルを使ってラベリングを行うという方法です。このアプローチは時間を節約できますが、タスクが変わった場合(例:トピック分類→感情分析)やデータセットが変わった場合(例:ニュース記事→SNS投稿)、新しいMLモデルをトレーニングする必要があります。
そこで登場するのが、大規模言語モデル(LLM)です。LLMは、さまざまなテキストベースのタスクに対応できる「万能選手」です。すでに事前学習されているため、トレーニングは不要です。明確な指示を与えれば(もちろんいくつかの注意点はありますが)、そのままでデータをラベリングできます(Wang et al. 2021、Ding et al. 2023)。
魅力的に聞こえませんか?この2部構成の記事では、LLMを使ったデータアノテーションについて、潜在的な課題、それを克服するためのツール、人間とLLMの協調アノテーションの可能性を探ります。本記事では、LLMをデータアノテーションエージェントとして活用する方法と、実際に直面する可能性のある課題について説明します。第2部では、これらの課題をMEGAnno+というツールを用いてどのように解決するかについて詳しく述べます。
LLMをデータアノテーションに活用する方法
プロジェクト(例:感情分析)のデータアノテーションを始める前に、ラベリングタスクとラベリングスキーマを定義する必要があります。ラベリングタスクは通常、プロジェクト全体の目的に基づいて決定されます。ラベリングスキーマは、ラベルの選択肢と各データサンプルにラベルを割り当てるための対応ルールのセットです。たとえば、ラベリングタスクが感情分類の場合、対応するラベリングスキーマは「ポジティブ」、「ニュートラル」、「ネガティブ」といったものであり、それぞれのラベルが与えられたサンプルの感情を表します。
図1: 人間によるアノテーションとLLMによるアノテーションの各ステップの入力と出力。LLMアノテーションでは、追加の前処理と後処理のステップが必要です。
ラベリングタスクの定義とラベリングスキーマが人間のアノテーター向けに準備できたら、次のステップはシンプルです。人間のアノテーターがデータサンプルを確認し、ラベルを割り当てます(図1a: 人間によるアノテーション)。さらに、アノテーターには、タスクの全体的な目的や具体的なラベリング指示を含むアノテーションガイドラインが提供され、ラベリングタスクにおける文脈と指針を与えます。
一方、LLMをアノテーションエージェントとして使用する場合のプロセスは、図1b: LLMによるアノテーションに示されているように、そう簡単ではありません。どのLLMモデルを使用するかを決定し、データを前処理し、選択したLLMを呼び出してアノテーションを行い、最後にLLMの応答を後処理してクリーンなラベルを得る必要があります。この手順を順を追って説明します。
モデルの選択と設定
LLMをアノテーションに使用する際は、まずLLMモデルを選択し、その設定を指定する必要があります。選択肢には、ChatGPTのような商用モデルや、LlamaやVicunaのようなオープンソースモデルがあります。一部のモデルには異なるパラメータが含まれている場合があります。一般的なハイパーパラメータの1つが温度(temperature)で、応答がよりランダム/クリエイティブ(高い温度)、予測可能(低い温度)、または決定論的(ゼロ温度)になるかを制御します。
前処理: プロンプトの準備
次に、プロンプトを作成する必要があります。プロンプトとは、LLMへのテキスト入力のことです。プロンプトを与えると、LLMは応答テキストを生成します。そのため、LLMに何をすべきかをプロンプト内で指示する必要があります。これは、人間のアノテーターにラベル付けの方法を教えるのと同じです。指示には、タスクの説明(例:感情分析)、有効なラベルオプション(例:「ポジティブ」、「ニュートラル」、「ネガティブ」)、およびアノテーションを行うデータサンプルを含めることができます。任意で、いくつかのラベル付き例を含めることもできます(これをフューショットラーニングと呼びます)。これにより、LLMが指定されたラベリングタスクをより適切に実行できるようになります。また、特定のフォーマット(例:JSON形式)が必要な場合、プロンプトにフォーマット指示を含めることも可能です。
図2は、感情分析タスクにおけるプロンプトの例を示しています。
図2: 指示、ラベル付きデモ例、入力、LLM出力を含む感情分析タスクのためのプロンプト
LLM APIの呼び出し
プロンプトの準備ができたら、それを選択したLLMに送信できます。テストのためにいくつかの例を実行する場合は、OpenAI Playgroundのようなオンラインインターフェースを使用するだけで十分かもしれません。しかし、大規模なアノテーションを行う場合は、LLM APIを使用することをお勧めします。
注意点: 各LLMにはコンテキスト制限があります。これは、入力と出力を含む処理可能なトークン数(単語数ではありません)を意味します。そのため、生成されたプロンプトが長い場合は、選択したLLMのトークン制限内に収まるようにし、出力の予想される長さも考慮する必要があります。商用LLMを使用する場合、有効な認証キーを持っていることと、特に大規模なデータセットにアノテーションを付ける前にコスト構造を理解しておくことが重要です。また、APIプロバイダーやアカウントの利用プランに応じて、APIを呼び出す回数や頻度に制限がある場合があります。
後処理
LLMから応答が返ってきたら、そのテキスト(例: 図2の「Label: positive」)を解析し、ラベル(例: 「positive」)を抽出し、それをラベリングスキーマにマッピングする必要があります(例: 「positive」∈ [「positive」、「negative」、「neutral」]かを確認)。この後処理の部分は特に挑戦的です。LLMの自由形式の出力がしばしばノイズを含み、必ずしも指定されたラベリング指示に従わない場合があるからです。
LLMによるアノテーションで何が問題になる可能性があるのか?
LLMは予測不能な動きをすることがあります。明確な指示を与えても、意図から外れた応答を返すことがあります。LLMをアノテーションに使用する際に留意すべきいくつかの課題について説明します。
以下のようなプロンプトを考えてみましょう。
「以下のテキストの感情をポジティブ、ニュートラル、またはネガティブとしてラベル付けしてください。回答は次の形式で記述してください。Label: <sentiment>
Text: The weather today is beautiful」
問題1: 誤った応答形式と無効なラベル
上記のプロンプトを使用してLLMを呼び出し、アノテーション応答を正常に取得しました。
Label: positive
これは良さそうです。次に、同じプロンプトテンプレートを使用してデータセット内の各文をテキストフィールドとして変更し、100個のデータポイントをアノテーションするスクリプトを作成することにしました。LLMに対して1つのプロンプトごとに1回の呼び出しを行い、結果として100件の応答を受け取ります。その後、別のスクリプトを作成して、LLMラベルを抽出し、ラベルスキーマに一致させる処理を行うことを決めました。
しかし、一部のLLM応答がラベリングやフォーマットの指示から逸脱していることに気付きました(図3参照)。たとえば、応答が指定された形式に従っていない場合(例: Label is positive)や、句読点や大文字小文字の些細な違い(例: Label: “Positive” や Label: Positive.)がラベル抽出プロセスを混乱させる可能性があります。一部のケースでは、生成された応答がアノテーションタスクに全く関係のない内容である場合もあります。指示に従うよう訓練された最新のLLMモデルでも、これらの問題が発生することがあります。
そのため、このようなエラーを処理できる堅牢な後処理メカニズムが、スムーズで効率的なデータアノテーションプロセスにとって重要です。たとえば、正規表現や単語の類似性を活用することで、スペルミスや句読点の問題などの些細なミスをカバーすることができます。また、一部のLLMは構造化された出力モード(例: JSON形式で応答を出力)を提供しており、形式の不正確さの問題を軽減することができます。
図3: LLMの応答例と後処理結果
問題2: 珍しいタスクとスキーマ
アノテーションタスクを変更したいと想像してみてください。たとえば、ラベリング指示を改善するために変更したり(プロンプトの改善)、ラベルスキーマを変更したり(ラベルの選択肢を増やしたい場合)することです。たとえば、ラベルスキーマを「super-positive」「positive」「negative」「super-negative」に更新したいとします。その場合、プロンプトをそれに応じて変更し、再度LLMを呼び出します。
以下の図は、アノテーション応答と後処理結果の例を示した要約です。
図4: LLMアノテーションの要約(無効なラベルとその頻度を示す)
「super-positive」や「super-negative」のラベルの分布が、他のラベルと比べてはるかに少ないことに気付きましたか?これは、おそらくLLMが「positive」と「super-positive」や「negative」と「super-negative」の微妙な違いを理解できていないためです。その理由の1つとして、5つのラベルオプションを持つ新しいスキーマが、「positive」「neutral」「negative」というより一般的なスキーマと比べてあまり普及していないことが考えられます。
LLMは、事前学習された内容を知っています。LLMは、文書分類、トピックモデリング、固有表現抽出などの一般的なNLPタスクで訓練されています。特に、一般的なラベルスキーマを持つタスクについては、LLMは膨大なサンプルを見て、それらを解決する方法を学んでいます。そのため、タスクを一般的なNLP問題として枠組み化できる場合は、従来のラベルスキーマを使用し、LLMにNLP問題として回答させることをお勧めします。たとえば、メールテキストを「spam」と「not spam」に分類するよう指示する方法です。
もう1つの例として、記事へのコメントが元の記事に賛同しているかを尋ねる代わりに、それを自然言語推論(NLI)のタスクとして枠組み化し、ラベルスキーマを「entailment(含意)」「neutral(中立)」「contradiction(矛盾)」とする方法があります。
もう1つの工夫は、プロンプト内で非常に詳細で具体的なラベリングガイドラインを書くことです。たとえば、「super-positive」(例: ecstatic, 非常に喜ばしい)として扱うべき感情と、「positive」(例: satisfied, 満足)の違いを説明する方法があります。また、不確実または混乱を招くデータポイントを捕捉するために、「Other」または「N/A」のような追加のラベルオプションを含めるのも役立ちます。
試行錯誤
LLMによるアノテーションは、その性質上、反復的なプロセスであることを覚えておいてください。最初の試行で完璧な結果を得ることは難しいでしょう。私たちの推奨は、シンプルで小規模な形から始めることです。まずはデフォルトのモデル設定と基本的なプロンプトを使用してください。エラーが発生した場合は、プロセスを進めながら改善していきましょう。
以下はワークフローの一例です。最初のアノテーションを確認した後、有効性を確認するためにプロセスを再実行することが考えられます。再実行は、同じモデルを再利用する場合も、LLMの設定を変更した場合や、完全に新しいLLMモデルを使用した場合もあります。また、LLMによるラベルを観察した後、ラベリングスキーマを変更することも可能です。
LLMによるアノテーションが完了したら、そのラベルをエクスポートし、下流のモデルをトレーニングするために使用できます。トレーニング済みモデルの評価中に、さらにデータを収集する必要がある場合、アノテーションステップを再訪することを検討するかもしれません。
LLMと人間は協力できるのか?
根本的な問いは次のようになります: ラベルスキーマを慎重に設計し、完璧なプロンプトを準備し、LLMの応答に対して堅牢な後処理を構築すれば、LLMが付けたラベルを完全に信頼できるのでしょうか?答えは「いいえ」です。LLMは驚くべき能力を示していますが、人間のアノテーターの代わりにはなれません(Ziems et al. 2024)。現実的な代替案としては、人間とLLMがアノテーションタスクで協力することが考えられます(Wang et al. 2021)。
LLMは、大量のトレーニングデータから学んだ内部知識に依存しています。その結果、LLMは社会文化的な理解を要する文脈やニュアンス、あるいはトレーニングデータで十分にカバーされていない特定のドメインで困難を感じることがあります。また、主観的なタスクや倫理的な配慮が必要な場合、それらを見落とすことや過小評価することがあります。このような場合には、人間による介入がより有益となるでしょう。
図5: 人間とLLMによる協調的なアノテーション
LLMに完全に依存するのではなく、人間とLLMが協力してデータラベリングを行うべきです(図5)。この方法により、LLMの効率性と人間の専門知識の両方を活用して、信頼性が高く堅牢なデータアノテーションプロセスを実現できます。
まとめ
この記事では、LLMをデータアノテーションに活用するための詳細な手順を紹介しました。また、遭遇する可能性のある実践的な課題やLLMアノテーションの信頼性についても議論しました。これらの課題に対処するために、シリーズ第2部では、人間とLLMの協調アノテーションツールであるMEGAnno+を紹介します。このツールは反復的なLLMアノテーションプロセスと人間の協力を前提に設計されており、ユーザーがコードスニペットを手動で記述することなく、高品質なアノテーションをより便利かつ効率的に取得できるようになります。
このシリーズの第2部で、MEGAnnoデモを試していただき、完全版のリリースをお楽しみにお待ちください!