解説
AIの分類ラベルが毎回ぶれる?許可する値とunknownの扱いを先に決めよう
AIへ作業の状態を分類させたら、done・完了・DONEが混ざった。読み手には似ていても、そのまま集計するプログラムでは別の値になるかもしれないよ。

AIへ作業の状態を分類させたら、done・完了・DONEが混ざった。読み手には似ていても、そのまま集計するプログラムでは別の値になるかもしれないよ。
この記事では、架空の作業メモをtodo・doing・done・unknownへ整理する。実際の業務データや有料APIは使わず、許可する値の確認を小さく練習しよう。
ラベルの意味と、文字列をそろえる
| 値 | この練習での定義 |
|---|---|
| todo | まだ着手していないと分かる |
| doing | 作業中と分かる |
| done | 完了したと分かる |
| unknown | 資料だけでは判断できない |
unknownを設けるのは、情報がない状態を勝手にtodoへ入れないため。実際の業務では、保留や中止など、必要な状態が別にあるかも検討しよう。
定義が曖昧なまま文字だけそろえても、分類の意味がそろうとは限らないんだ。
enumは、許可値を並べる指定
JSON SchemaはJSONデータの条件を表す仕組み。enumを使うと、受け入れる値を列挙できる。
{
"type": "string",
"enum": ["todo", "doing", "done", "unknown"]
}
このスキーマでは、doneは許可されるが、DONEや完了は列挙されていない別の文字列。nullや数値も、この条件には合わない。
enumという指定を書いた資料をAIへ見せただけで、どの実行環境でも厳密に強制されるわけではない。利用するサービスの出力制約と、受け取ったあとの検証も分けて考えよう。
許可値の確認をPythonで試す
allowed = {"todo", "doing", "done", "unknown"}
def allowed_status(value):
return isinstance(value, str) and value in allowed
for value in ["done", "unknown", "DONE", "完了", None]:
print(value, allowed_status(value))
結果は順にTrue・True・False・False・False。編集部では、この例と、空文字や数値のケースを実行して確認した。この関数はラベルの許可値だけを調べる例で、JSON Schema全体を検証する実装ではないよ。
表記を直すなら、対応表を明示する
「完了はdoneへ変える」と決めたいなら、許可する変換の対応表を用意する。どんな文字も小文字へ直せば安全、あるいは未知の値を一律にunknownへ変えればよいとは限らない。
AIが仕様外の値を返した場合と、資料が不足してunknownと判断した場合を同じ記録にしない。原因を見分けるため、元の値と、変換・再確認した理由を残そう。
形式が通っても、分類は間違うことがある
「来週完了する予定」という文へdoneを付けても、許可値の検証だけなら通ってしまう。文字列が正しい候補であることと、根拠に合う分類であることは別。
代表的な例、不足する例、否定や予定を含む例で意味も確認する。受け取りの条件を整えたあとに、分類の評価を省略しないようにしよう。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。