Skip to content

Boundary Lab

点ではなく決定境界を調べます。ラベルが付くたびに、Potatoは最小限の反実仮想的な編集でその判断が変わるかを尋ね、通常のアノテーションからコントラストセットと品質管理を生み出します。

v2.7.0の新機能

どのアノテーションツールも点のラベルを集めます。アイテムXにラベルY、という具合です。Boundary Lab(境界ラボ)は、Potatoに決定境界を集めさせます。アノテーターがラベルを確定した瞬間、Potatoはテキストに最小限の反実仮想的な編集を加えたものを提示し、1つずつ尋ねます。

あなたは Polite と答えました。この編集を加えても、その判断は保たれますか?

各ラベルの後に、色分けされた差分の上で反実仮想プローブを提示する:「この判断は保たれますか?」

回答はクリック1回で済みます。こうして通常のアノテーションから、素のラベル出力では得られない3つの成果物が生まれます。

  1. コントラストセットが手間なく手に入る。 回答済みのプローブはすべて、ラベル付きの*(オリジナル, 反実仮想)*ペアです。反実仮想で拡張したデータはモデルの頑健性を高めることが示されています(Gardner et al. 2020Kaushik et al. 2020)。コントラストセットの構築は通常、別立ての手間のかかる作業です。
  2. 境界の根拠。 ラベルが反転したとき、アノテーターは何が線を越えさせたのかを述べます。この根拠は、コードブックのどこが曖昧なのかを突き止めます。
  3. 見えない品質管理。 不変性プローブは意味を保つ言い換えなので、一貫したアノテーターがここで判断を変えることはありません。変えてしまったアノテーターはダッシュボードでフラグ付けされます。偽のゴールドアイテムを1つも仕込まずに、注意力のシグナルが得られます。

設定

yaml
boundary_probing:
  enabled: true
  schema: politeness          # scheme to probe (default: first radio scheme)
  probes_per_item: 3          # probes per (instance, label), invariance included
  include_invariance: true    # add one paraphrase probe (the QC signal)
  sources:                    # probe generation tiers, in priority order
    - precomputed
    - llm
    - rules
  precomputed_key: counterfactuals   # item-data field for precomputed probes
  rationale_on_flip: true     # ask "what crossed the line?" when a label flips
  debounce_ms: 900            # delay between label selection and probe fetch

プローブのソース

プローブは3つの層から供給されます。前の層が埋めきれなかった枠を後の層が埋めるので、条件が揃わなくても機能は段階的に縮退します。

precomputed — 精選した反実仮想をデータと一緒に配布します。決定的なので、統制された研究に向いています。

json
{"id": "req_02", "text": "Send me the slides before the meeting.",
 "counterfactuals": [
   {"text": "Please send me the slides before the meeting.", "kind": "flip",
    "edit_hint": "added \"please\""},
   {"text": "Before the meeting, send me the slides.", "kind": "invariance",
    "edit_hint": "reordered clauses"}
 ]}

llm — 設定済みのAIエンドポイント(Anthropic、OpenAI、Ollama、vLLM)でその場でプローブを生成します。プローブは (instance, label) ごとに一度だけ生成されてアノテーター間で共有されるため、LLMのコストはアノテーター数ではなくデータセットの規模で決まります。

rules — 決定的な語彙変換です。否定の反転、強調語の入れ替え、丁寧さのマーカー、句読点の強さ、不変性用の短縮形や挨拶の言い換えなどを行います。依存もモデル呼び出しも不要で、これがLLMをまったく設定しなくてもBoundary Labを動かせる理由です。

プローブの種類と判定

種類意味期待される挙動
flipラベルの境界を越えることを狙った最小の編集反転しても保たれてもよい。どちらも情報になる
invariance意味を保つ言い換え反転しないはず。反転は一貫性の欠如を示す

アノテーターは各プローブに holds(ラベルは保たれる)、flips(ラベルが変わる。新しいラベルを選び、任意で理由を述べる)、can't tell(判断できない)のいずれかで答えます。

ダッシュボード

/boundary/dashboard(管理者アクセス)で確認できます。

  • ラベル別の境界感度 — 各ラベルを狙った最小編集のうち、実際に反転した割合。反転率90%はそのラベルが紙一重のところにあることを、10%は小さな摂動に対して頑健であることを意味します。
  • アノテーターの不変性一貫性 — 言い換えプローブに対するアノテーターごとのhold率。60%を下回ると赤でフラグ付けされます。
  • ラベルが反転する場所 — 確認された反転を、単語単位の差分とアノテーターの根拠とともに並べたギャラリー。

コントラストセットのエクスポート

GET /boundary/api/export(管理者)はJSONLをダウンロードします。回答済みプローブ1件につき、ラベル付きペアが1行です。

json
{"instance_id": "req_02", "schema": "politeness",
 "original_text": "Send me the slides before the meeting.",
 "original_label": "Impolite",
 "counterfactual_text": "Please send me the slides before the meeting.",
 "counterfactual_label": "Neutral",
 "kind": "flip", "flipped": true,
 "rationale": "please softens the command",
 "edit_hint": "added \"please\"", "probe_source": "precomputed",
 "annotator": "alice", "timestamp": 1783827299.4}

holds の判定は counterfactual_label が元のラベルと同じ値でエクスポートされるので、hard negativeとして使えます。unsure の判定は除外されます。

設計上のメモ

  • プローブは (instance, schema, label) ごとにキャッシュされ、アノテーター間で共有されます。そのため不変性の一貫性はアノテーター同士で比較できます。
  • プローブのパネルはオーバーレイです。メインのアノテーション作業を妨げることはなく、プローブへの回答は任意で、アノテーターはいつでも閉じられます。
  • 現時点でプロービングの対象は、タスクごとに1つの単一選択(radio)スキーマです。

参考資料