• TOP
  • トピックス

トピックス

Topics

社内文書のタグ付け、AIでどこまで自動化できる?― Jev・ローカルLLM・ルールベース比較

社内文書のタグ付け、AIでどこまで自動化できる?― Jev・ローカルLLM・ルールベース比較
えだまめのアイコン

えだまめ
2026-10-30

BTMAIZ のえだまめです。

社内にたまった文書・メール・議事録に、「どの部署の話か」「機密かどうか」といったタグ(文書に付ける目印のラベル)を付けておくと、探す・守る・拾い漏らさないが楽になります。ただ、人手で付け続けるのは大変です。そこで今回は、タグ付けをどこまで自動でできるかを、3つの方法で比べました。新しいAI「Jev」(文章は書かず、「選択肢のうちどれか」だけを選ぶAIです)、手元のPCで動かす無料のローカルLLM、ルールベース(AIを使わず、「この言葉が出てきたらこのタグ」と人があらかじめ決めた規則で振り分ける方法)です。実際の社内文書は使えないので、AIで作った架空の文書(合成データ)で試しています。

要点

AIで作った架空の文書(合成データ)199件で、3つの方式によるタグ付けを比べました。結論から言うと、「Jevが少し正確で、速く、回答の一致率も高い」という程度の差で、劇的な差ではありませんでした。

  • 5つのタグの平均正答率(5つのタグそれぞれの正答率の平均):ルール85.6%、ローカルLLM87.4%、Jev90.8%。差は数ポイントです。
  • Jevは速く、安く、安定していた:1件あたり約0.4秒、1,000件で約0.2ドル。同じ入力を3回流しても、部門とプロジェクトの答えは199件すべて同じでした。
  • 人が見るタグは、確信度で絞れる:Jevは答えと一緒に「自信の度合い」(確信度、0〜1)を返します。確信度0.9以上の部門は99%正解、それ未満は59%まで下がりました。確信度0.9未満だったタグ判定は約2割で、人が確認する対象を絞る目安になりそうです。
  • 機密度だけはルールが強かった:今回のデータには「社外秘」などの目印があったため、ルールが約99%でした(正解が「公開」とされた15件を除いた値。全件では91%で、Jevの82%より上です)。
  • ローカルLLMは無料で、要対応は得意:手元のPCの中で動かし、API費用は0円。ただし1件約3.5秒かかり、確信度は当てにしにくい結果でした。

これは合成データ199件の小規模な検証です。結論は「この規模・この条件では」と読んでください。

何を確かめたのか

社内には、文書・メール・議事録が散らばっています。たとえば、共有フォルダに数千件のファイルがあり、「営業部の、あの案件の、機密の議事録」を探したいとします。そこに次の5つのタグが付いていれば、「営業部の、あの案件の、機密の議事録」のように絞れて、探す・守る・対応漏れを防ぐが楽になります。

  • 部門:どの部署の話か
  • プロジェクト:どの案件の話か
  • 種類:提案・契約・報告などの文書の種類
  • 機密度:公開・社内・機密
  • 要対応:誰かが何かをする必要があるか

問題は、これを人手で付け続けるのは大変だということです。そこで「タグ付けを、どこまで安く自動化できるか」を確かめました。

散らばった情報に、5つのタグを自動で付ける

散らばった社内の情報に5つのタグを付ける文書、メール、議事録を3つの方式でタグ付けする流れ社内の情報に5つのタグを自動で付ける① バラバラに置かれた情報文書:提案書・契約書などメール:やり取り・依頼議事録:会議・決定事項② 自動でタグを付ける・ルール:言葉の目印で分類・Jev:型付きの判断モデル・ローカルLLM:手元のPCで動作③ 付けたい5つのタグ部門プロジェクト種類機密度要対応タグ付けで探しやすく、確認しやすく。人手で続ける負担を減らせるか検証。

比べた3つの方式

方式 たとえると 特徴
ルールベース AIは使わず、「社外秘」という言葉があれば機密、のように、人が決めた規則でタグを付ける係 速くて無料。目印の言葉がある時は強いが、言い回しが変わったり、目印がなかったりすると外れる
Jev 文章は書かず、選択肢のうちどれかを確信度つきで答える専門家 前回の記事で使った型付きの判断モデル。速く、確信度が出る
ローカルLLM 手元のPCの中で動く、文章を理解できるAI(Ollama + qwen3.5) API料金は0円。ただし手元のPCの性能に依存し、1件に数秒かかる

3つの方式の違い

3つの方式の違いルール85.6%、Jev90.8%、ローカルLLM87.4%の3方式比較3つの方式の違い合成データ199件・5軸平均ルールベースAIを使わず、言葉の目印で分類5軸平均の正答率85.6%速さほぼ0秒費用0円機密度は99%(公開ラベル除く)JevLLMではない、型付きの判断モデル5軸平均の正答率90.8%速さ約0.4秒/件費用約0.2ドル/1,000件確信度は、人が確認する目安ローカルLLM手元のPCで動かすLLM5軸平均の正答率87.4%速さ約3.5秒/件費用API利用料0円要対応は得意、確信度は要注意

Jevは、TypeSafe AI社が2026年9月に早期アクセスを開始した、文章を書かずに「選択肢のうちどれか」を選ぶ型付きのモデルです。前回の記事では、社内文書を探す仕組みの「選ぶ」役として使いました。今回は、タグを選ぶ役として使っています。

ローカルLLMは、インターネットのサービスに頼らず、手元のPCの中で動かすAIです。無料のOllamaというソフトと、qwen3.5というモデルを使いました。API費用はかからず、データを社外に出さずに動かせるのが利点です。手元のPCの構成は、GPUがRTX 5080 Laptop(VRAM 16GB)、メモリが32GBです。

どう確かめたのか

  • 架空の会社の文書・メール・議事録を生成した合成データを使いました(実際の社内文書は使っていません)。
  • 評価用の199件で、5つのタグの「正解」を先に決めておき、3つの方式が何件当てるかを数えました。しきい値などを決めるための開発用101件は、別に取り分けています。
  • 分析の計画は、分類を始める前に固定してから採点しました。
  • Jevは同じ入力を3回流して、答えがぶれないかも見ています。
  • さらに、Jevが「自信がない」ときだけローカルLLMに回す「カスケード」も試しました。

結果:Jevは少し正確で、速く、安定していた

5つのタグの平均正答率(評価用199件)は、ルールベース85.6%、ローカルLLM87.4%、Jev90.8%でした。Jevが一番高いものの、差は数ポイントです。「劇的に勝つ」ではなく、「少し正確で、速く、回答の一致率も高い」というのが正直な印象です。

  • 速さ:1件あたりの中央値は、Jevが0.39秒、ローカルLLMが3.49秒でした。
  • 費用:Jevは1,000件で約0.2ドル、ローカルLLMは0円(電気代のみ)。仕分け編の全段階(予備検証から長文の確認まで、呼び出し1,123回)のAPI費用の合計は、約0.24ドルでした。本番の仕分け300件は、1回分で約0.06ドルです。
  • 安定性:Jevは3回流しても、部門とプロジェクトの答えは199件すべて同じでした。

タグごとの正答率(ルール/Jev/ローカルLLM)

5つのタグごとの正答率199件の5軸でルール、Jev、ローカルLLMを比較した横棒グラフタグごとの正答率合成データ199件ルールJevローカルLLM部門ルール84%Jev94%ローカルLLM87%プロジェクトルール95%Jev98%ローカルLLM96%種類ルール74%Jev82%ローカルLLM78%機密度ルール91%Jev82%ローカルLLM78%要対応ルール83%Jev96%ローカルLLM97%機密度はルール、他の3軸はJevが優勢。要対応はローカルLLMがわずかに上回る。

人の目に回す目安:確信度

Jevは答えと一緒に、「どれくらい自信があるか」(確信度)を返します。これが、実用上いちばん役に立ちました。

  • 確信度0.9以上の部門は、172件中171件(99%)が正解でした。
  • 確信度0.9未満になると、27件中16件(59%)まで下がりました。

つまり、確信度を目安に人が確認するタグを絞れそうです。評価用では、199件の文書に対する5種類のタグ判定995件のうち、202件(約2割)が確信度0.9未満でした。ただし、高い確信度でもタグによって正答率は異なるため、自動採用には注意が必要です。なお、Jevが自信のないタグだけをローカルLLMに回す方法も試しましたが、Jev単独(90.8%)を超えませんでした(90.5%、詳しくは付録)。ローカルLLMの確信度は較正されておらず、同じ使い方はやや不安です。

確信度で、人が見るタグを絞る

確信度と人の確認Jevの確信度0.9以上と未満を比較、約2割のタグ判定が0.9未満確信度で確認対象を絞るJevは判定と一緒に確信度を返す確信度 0.9以上約8割のタグ判定部門:172件中171件が正解正答率 99%自動採用の候補になる確信度 0.9未満約2割のタグ判定部門:27件中16件が正解正答率 59%人が確認する候補になる※「約2割」は文書数ではなく、995件のタグ判定のうち202件の割合。確信度が高くても誤判定はあるため、タグに応じた確認基準が必要です。

具体例:1通のメールを仕分けると

評価用の合成データで、1通のメールがどう仕分けられたかを見てみます。法務部からの「【要対応】個人情報保護規程関連の契約条項見直しに関する件」というメールです。本文は、個人情報の扱いに関する契約書の条文(収集目的、第三者提供、苦情処理窓口)を見直し、明日の15時までに修正案を出してほしい、という依頼でした。

タグ 正解 ルール Jev(確信度) ローカルLLM
部門 法務 法務 法務(1.00) 法務
プロジェクト P35(個人情報保護) 該当なし P35(0.83) 該当なし
種類 契約 契約 連絡(0.72) 提案
機密度 社内 機密 社内(0.86) 社内
要対応 あり あり あり(0.99) あり
  • ルールは、本文に「機密情報」という言葉が出てくるため、キーワードに反応して「機密」としたとみられます(推測です)。本文には案件名が書かれておらず、プロジェクトも見つけられませんでした。
  • ローカルLLMも、プロジェクトを見つけられず、種類は「提案」としました。
  • Jevは、プロジェクトと機密度を当てました。種類は「連絡」で、正解ラベルの「契約」とは違います。ただし、確信度は0.72と低めでした。

面白いのは、この「契約」というラベルの方が怪しいことです。メールは契約書そのものではなく、条項の見直しの依頼です。別のAIによる確認でも、「提案または連絡」のほうが妥当という指摘でした。つまりJevの「連絡」は、必ずしも間違いとは言えません。そして、Jevは確信度が0.9未満のタグ(プロジェクト・種類・機密度)を、自分から「自信がない」と示していました。運用では、この3つのタグが「人が見る」対象になります。

ルールが強かった所:機密度

意外だったのは機密度です。ここだけはルールベースがいちばん良く、約99%でした。Jevは約89%、ローカルLLMは約84%です。これは、正解ラベルが「公開」とされた15件(ラベルの付け方に問題があったため、別に扱いました)を除いた値で、全件では、ルール91%、Jev82%、ローカルLLM78%でした。

理由は単純で、今回のデータには「社外秘」「関係者限り」のような目印が文書に書かれていたからです。目印があれば、ルールは素直に当たります。実際の社内文書に同じ目印があるとは限らないので、「ルールはいつも強い」ではなく「目印が揃っていれば強い」と読むのが安全です。

また、JevとローカルLLMの機密度の間違いは、ほぼ「社内」を「機密」と判定する側に倒れました(詳細は付録)。機密を見逃した件は、どの方式も0件でした。

導入を考えるときの目安

この検証の範囲で言えることを、目安として書きます。

  • 一次のタグ付けはJev:速く安く、確信度が出るので、人に回す目安になります。
  • 機密度は、目印のルールを併用:文書に目印がある運用なら、ルールを足すと強くなります。
  • 確信度が低いタグは人が見る:「自信がない時だけLLM」を試しましたが、今回は伸びませんでした(付録)。
  • 長文は事前に分けて渡す:Jevには入力の上限があり、本文が約3万2千字以上の2件(メール1通と議事録1件)は、上限を超えてエラーになりました。
  • まず合成データで試す:本物の社内文書に入れる前に、同じ手順で小さく確かめられます。

この検証の限界

  • 文書はすべて合成データです。実際の社内文書では、結果が変わる可能性があります。
  • 「正解」は、文書を作ったときのラベルを、別のAI(Claude)が独立に確認したものです。人が全件を見直したわけではありません。
  • テスト文書の本文を生成したのも、ローカルLLMと同じqwen3.5です。言い回しの癖を共有しているため、ローカルLLMに有利に働く可能性があります。
  • 正解が「公開」とされた15件の多くは、本文が公開を支持していませんでした(生成の失敗)。機密度の集計では、別に扱っています。
  • 件数が199件なので、1〜2ポイントの差は誤差の範囲です。

まとめと次回予告

合成データ199件で、タグ付けを3つの方式で比べました。Jevは平均90.8%で最も高く、速く、安く、安定していましたが、差は数ポイントです。確信度で人が見るタグを絞れること、機密度は目印があればルールが強いことが、実務に近いわかったことでした。ローカルLLMは、無料で手元のPCで動かせる点が魅力で、要対応の判定は得意でした。

次回の「Copilot編」では、このタグをSharePointの列に書き戻し、Microsoft 365 Copilot(Work IQ)の答えがどう変わるかを測ります。

付録:技術者向けの詳細

評価設計

  • データ:合成の文書・メール・議事録。評価用199件、開発用101件(開発用はカスケードのしきい値を決めるためだけに使用)。
  • 5軸:部門・プロジェクト・種類・機密度・要対応。
  • 方式:ルールベース / Jev(run0〜run2の3回) / ローカルLLM(Ollama qwen3.5:latest、9.7B、Q4_K_M、思考モードoff、num_ctx 8192、num_predict 4096) / カスケード(Jev run0 → 確信度がしきい値未満の軸だけローカルLLM)。
  • 精度は、正答率とWilsonの95%信頼区間で報告しました。分析計画は、分類を始める前に固定しています。

データの形:入力と出力

仕分けで扱ったデータの形を、1通のメール(前半の具体例と同じ mail-0011)で示します。キー名は、読みやすいように簡略化しています。

1. 入力:文書1件

入力データの例 JSON
{
  "id": "mail-0011",
  "type": "email",            // document / email / minutes
  "title": "【要対応】個人情報保護規程関連の契約条項見直しに関する件",
  "body": "各位\n\nお疲れ様です。法務部の…と申します。…(以下、条文の見直し依頼が続く)"
}

2. 判定する5つのタグと、選択肢

タグ(キー名) 選択肢
部門(department) 営業 / 開発 / 法務 / 人事 / 経理 / 経営企画 など
プロジェクト(project) 案件コード(P01〜)+該当なし。約40の案件から選ぶ(予備検証では41択)
種類(doc_kind) 提案 / 契約 / 報告 / 連絡 / 仕様 / 議事
機密度(sensitivity) 公開 / 社内 / 機密
要対応(needs_action) あり / なし

Jevには、1件につき1回、本文と「5つのタグそれぞれの質問と選択肢(定義の説明つき)」を渡しました。ローカルLLMには、選択肢を縛ったJSONで、5つのタグを1回で答えさせています。

3. 出力:Jevの答え(タグごとに、値と確信度)

Jevの判定結果 JSON
{
  "id": "mail-0011",
  "department":   { "value": "法務",  "confidence": 1.00 },
  "project":      { "value": "P35",   "confidence": 0.83 },
  "doc_kind":     { "value": "連絡",  "confidence": 0.72 },   // 正解ラベルは「契約」
  "sensitivity":  { "value": "社内",  "confidence": 0.86 },
  "needs_action": { "value": true,    "confidence": 0.99 }
}

ローカルLLMの確信度は、答えの値のトークン確率(logprob)から出した、較正していない参考値です。ルールベースには確信度がありません。

4. 集計用の形(1件×1つのタグで1行)

列 意味
id / split / type 文書のID、評価用か開発用か、文書・メール・議事録の別
is_hard / supported / clean 難問か、本文がラベルを裏付けるか、生成品質の問題がないか
axis / label タグの名前と、正解の値
方式ごとの予測 ルール、Jev(run0〜run2)、ローカルLLM、カスケードの答え
方式ごとの確信度 Jev(3回)とローカルLLMの確信度
集計データのサンプル CSV
id,split,axis,label,rule,jev_run0,llm,jev_conf,llm_conf
mail-0011,eval,department,法務,法務,法務,法務,1.00,1.00
mail-0011,eval,project,P35,NONE,P35,NONE,0.83,0.57
mail-0011,eval,doc_kind,契約,契約,連絡,提案,0.72,0.40
mail-0011,eval,sensitivity,社内,機密,社内,社内,0.86,0.58
mail-0011,eval,needs_action,True,True,True,True,0.99,1.00

5. カスケードの規則

カスケードの判定ルール LOGIC
for タグ in 5つのタグ:
    if jev[タグ].confidence < 0.5:     # しきい値(開発用で決めた値)
        答え[タグ] = local_llm[タグ]       # 自信がないタグだけ、ローカルLLMに回す
    else:
        答え[タグ] = jev[タグ]

6. SharePointへの書き戻し(次の記事で使う形)

決まったタグは、SharePointの列に書き戻します。Microsoft Graphで、文書1件ごとに次のような値を書き込みます(プロジェクトは複数選択の列なので、型の指定を添えています。環境によっては不要な場合もあるため、実際に使うときは、書き込みの応答で確かめてください)。

SharePointへの書き戻し例 HTTP / JSON
PATCH /sites/{site-id}/lists/{list-id}/items/{item-id}/fields
{
  "JevDept": "法務",
  "JevProject@odata.type": "Collection(Edm.String)",
  "JevProject": ["P35"],
  "JevDocType": "連絡",
  "JevSensitivity": "社内",
  "JevActionRequired": true
}

3通りの集計(5軸平均)

集計 件数 ルール Jev run0 ローカルLLM
全件 199 85.6% 90.8% 87.4%
本文が全軸で支持した件 159 87.8% 94.7% 90.6%
支持した件かつ品質の問題なし 106 87.9% 95.1% 90.9%

正解ラベルの質を絞るほど、全方式の数値が上がります。方式の順位は変わりませんでした。この切り口は分類の後に決めた探索的なものなので、結論の根拠にはしていません。

軸別の正答率(評価用・全件199)

軸 ルール Jev run0 ローカルLLM カスケード(0.5)
部門 84% 94% 87% 94%
プロジェクト 95% 98% 96% 98%
種類 74% 82% 78% 82%
機密度 91% 82% 78% 81%
機密度(正解が公開の件を除く) 99% 89% 84% 87%
要対応 83% 96% 97% 96%
5軸平均 85.6% 90.8% 87.4% 90.5%

各軸は整数に丸めて表示しています。5軸平均は、丸める前の値から出しているため、表の整数の平均とは0.2〜0.4ずれます。

機密度の混同行列(行=正解、列=予測)

機密度の間違い方

機密度の間違い方行が正解、列が予測。ルール2件、Jev21件、ローカルLLM30件を社内から機密へ判定機密度の間違い方「社内」を「機密」とした判定に注目ルールベース公開社内機密公開(15)0141社内(120)01182機密(64)0064Jev公開社内機密公開(15)1131社内(120)09921機密(64)0064ローカルLLM公開社内機密公開(15)1131社内(120)09030機密(64)0064「社内」→「機密」はルール2件 / Jev21件 / LLM30件。「機密」64件の見逃しは全方式0件。
方式 正解 公開 社内 機密
ルール 公開(15) 0 14 1
ルール 社内(120) 0 118 2
ルール 機密(64) 0 0 64
Jev run0 公開(15) 1 13 1
Jev run0 社内(120) 0 99 21
Jev run0 機密(64) 0 0 64
ローカルLLM 公開(15) 1 13 1
ローカルLLM 社内(120) 0 90 30
ローカルLLM 機密(64) 0 0 64

確信度ごとの正答率(Jev run0・全件)

軸 確信度0.9以上 0.9未満
部門 171/172(99%) 16/27(59%)
プロジェクト 184/186(99%) 12/13(92%)
種類 146/172(85%) 18/27(67%)
機密度 86/89(97%) 78/110(71%)
要対応 173/174(99%) 19/25(76%)

ローカルLLMの確信度は、値トークンの確率で、較正していません。

確信度0.9未満の件だけで比べる

軸 件数 Jev run0 ローカルLLM ルール
部門 27 59% 44% 52%
プロジェクト 13 92% 85% 92%
種類 27 67% 48% 81%
機密度 110 71% 63% 86%
要対応 25 76% 84% 92%

Jevが迷う件はローカルLLMも迷い、軸によってはルールのほうが当たりました。ローカルLLMが上回ったのは要対応だけです。

カスケードの上限と実際

「自信がない時だけLLM」は伸びなかった

カスケードの上限と実際しきい値を上げるほど理想上限は上がったが実際の正答率は低下「自信がない時だけLLM」は今回は伸びなかった2段目が完璧な場合の上限実測の正答率88%90%92%94%96%98%0.500.750.99カスケードの確信度しきい値しきい値を高くすると、2段目に回す件数は増える一方、今回の実測ではJev単独の90.8%を超えませんでした。
しきい値 2段目に回した軸 上限(2段目が完璧) 実際(ローカルLLM) Jev単独
0.5(採用) 5% 92.6% 90.5% 90.8%
0.7 12% 94.4% 89.7% 90.8%
0.9 20% 96.7% 89.0% 90.8%
0.99 42% 97.9% 88.6% 90.8%

しきい値は、開発用の全件で5軸平均が最も高い0.5に決めました(同点ならローカルLLMに回す割合が小さい方)。評価用の列は参考で、しきい値の選び直しには使っていません。要対応の確信度はmax(p, 1−p)なので0.5未満にならず、しきい値0.5では2段目に回りません。

Jevのばらつき(3回実行)

軸 各回の正答率 全回で予測が一致
部門 94.0 / 94.0 / 94.0% 199/199
プロジェクト 98.5 / 98.5 / 98.5% 199/199
種類 82.4 / 82.9 / 82.4% 198/199
機密度 82.4 / 82.4 / 81.4% 194/199
要対応 96.5 / 96.0 / 95.5% 197/199

難問と文書の種類(5軸平均)

区分 件数 ルール Jev ローカルLLM
難問 67 85.4% 91.3% 88.1%
通常 132 85.8% 90.5% 87.1%
文書 67 85.4% 90.4% 86.3%
メール 66 82.7% 87.0% 83.3%
議事録 66 88.8% 94.8% 92.7%

速さと費用(全300件)

方式 1,000件あたり p50 p95 入力トークン平均
Jev run0 $0.2027 0.39秒 0.48秒 4,827
ローカルLLM(Ollama) $0 3.49秒 3.77秒 2,829
ルール $0 0秒 0秒 0

ローカルLLMはローカルのハイエンドGPU(RTX 5080 Laptop)での実測で、GPUのないPCではもっと遅くなります。費用に電気代は含めていません。

長文6件(精度の集計とは別)

  • メール3件・議事録3件、本文は約1.4万〜3.8万字。
  • Jevの入力には上限があります(公式仕様では、状態と最長の質問で32kトークン)。本文32,178字のメールと38,267字の議事録は、入力が上限を超えて400エラー(max_tokens_exceeded)になり、3回とも失敗しました。
  • 処理できた4件では、Jevの3回の結果は同じでした。
  • ローカルLLMはnum_ctx 8192のため、長文では入力が約8,200トークンで打ち切られました。
  • ルールベースは長さに影響されません。

データ品質

  • 合成データの生成で、機械的チェックに12試行でも通らなかった23件(7.7%、上限10%)は、別のラベルの件で補充しました。
  • 二次レビュー(30件)との一致率は、5軸合計で97%(146/150)、κは0.82でした。二次レビューは別のClaudeセッションが判定したもので、人手の独立した判定ではありません。
  • 品質の問題の例:文書なのに本文が「本メール」になっている、題が「社外向け」なのに本文は社外秘、簡体字の混入。

参考リンク

投稿日2026年10月30日

カテゴリーTech Blog

タグ Local LLM、RAG

トップへ戻る