名刺OCRの精度を上げるプロンプト設計術【ペルソナ・Few-shot・出力制御】

この記事のポイント

  • プロンプトの書き方ひとつで名刺OCRの精度が大きく変わることを実例で解説
  • 「ペルソナ設定」「Few-shot例」「出力形式の制御」の3つのテクニック
  • やりすぎると逆効果になるケースと、適切なバランスの取り方

はじめに

「名刺をGeminiに読み取らせたら、会社名と部署が混ざって出力された…」

LLM-OCRは非常に便利ですが、プロンプトの書き方によって精度が大きく左右されます。特に名刺は、限られたスペースに様々な情報が詰め込まれているため、AIが「どの情報を何の項目として抽出すべきか」を迷いやすい書類です。

本記事では、3つのプロンプトテクニックを使って名刺OCRの精度を段階的に改善する方法を解説します。


検証環境

項目内容
モデルGemini 2.0 Flash(Vertex AI)
テストデータ名刺PDF 10枚(IT・企業・医療・和風・飲食など)
評価方法各プロンプトで同じ名刺10枚を読み取り、項目分類の正確性を比較

テクニック1:基本プロンプト vs 構造化プロンプト

まず、最もシンプルなプロンプトと、出力形式を指定したプロンプトを比較します。

検証に使用したIT企業名刺はこちらです。

名刺サンプル:IT企業

プロンプトA:シンプル指示

この名刺の内容を読み取ってください。

出力例(IT企業名刺):

氏名: 渡辺 亮太 (RYOTA WATANABE)
役職: CTO / Co-Founder
会社名: 株式会社ノヴァテック (NOVATECH Inc.)
住所: 〒106-0032 東京都港区六本木4-2-8 六本木テックスクエア7F
電話番号: 03-6789-0123
携帯電話: 080-4567-8901
メールアドレス: r.watanabe@novatech.io
ウェブサイト: https://novatech.io

情報自体は正確ですが、形式がバラバラでそのままデータベースに取り込めません

プロンプトB:JSON形式を指定

この名刺画像からすべての情報を読み取り、以下のJSON形式で出力してください。
該当する情報がない場合は空文字 "" としてください。JSONのみを出力してください。

{
    "会社名": "",
    "部署": "",
    "役職": "",
    "氏名": "",
    "電話番号": "",
    "メールアドレス": "",
    "住所": "",
    "URL": ""
}

出力例(同じIT企業名刺):

{
  "会社名": "株式会社ノヴァテック",
  "部署": "",
  "役職": "CTO / Co-Founder",
  "氏名": "渡辺亮太",
  "氏名(フリガナ)": "",
  "郵便番号": "〒106-0032",
  "住所": "東京都港区六本木4-2-8 六本木テックスクエア7F",
  "電話番号": "03-6789-0123",
  "FAX": "",
  "メールアドレス": "r.watanabe@novatech.io",
  "URL": "https://novatech.io",
  "その他": ""
}

JSON形式を指定するだけで、構造化されたデータとして出力されます。

比較結果

観点プロンプトA(シンプル)プロンプトB(JSON指定)
テキスト認識
構造化✗(自由文)◎(JSON)
DB取り込み不可(要加工)そのまま可能
10枚の出力安定性△(形式がバラつく)◎(全件同一形式)

教訓: LLM-OCRでは「何を読み取るか」だけでなく「どう出力するか」を明示することが重要。


テクニック2:ペルソナ設定

AIに「名刺管理の専門家」という役割を与えることで、分類精度が向上するか検証します。

プロンプトC:ペルソナ付き

あなたは企業の人事・総務部門で名刺管理を10年担当してきた専門家です。
名刺に記載されている情報を正確に読み取り、項目ごとに分類する能力に長けています。

以下の名刺画像から情報を読み取り、JSON形式で出力してください。

分類のルール:
- 「代表取締役」「部長」「課長」などは「役職」に分類
- 「営業部」「開発部」「○○事業部」などは「部署」に分類
- 「○○ディレクター」は文脈に応じて役職または部署に分類

{
    "会社名": "",
    "部署": "",
    "役職": "",
    "氏名": "",
    "電話番号": "",
    "メールアドレス": "",
    "住所": "",
    "URL": "",
    "その他": ""
}

ペルソナ設定で改善された具体例

問題ケース1:モダンデザイン名刺

名刺サンプル:モダンデザイン

この名刺には「クリエイティブディレクター / デザイン事業部」と書かれています。

プロンプト部署役職
B(JSON指定のみ)クリエイティブディレクター / デザイン事業部(空欄)
C(ペルソナ付き)デザイン事業部クリエイティブディレクター

問題ケース2:建築・設計事務所の名刺

名刺サンプル:建築・設計事務所

この名刺には「一級建築士 / 設計部長」と書かれています。

プロンプト部署役職
B(JSON指定のみ)設計部長(空欄)
C(ペルソナ付き)(空欄)設計部長

ペルソナ設定の「○○長は役職に分類」「○○ディレクターは役職に分類」というルールが効き、正確に分離されました。

10枚での比較(役職・部署の分類精度)

プロンプト役職の正確な分類部署の正確な分類
B(JSON指定のみ)8/10 (80%)8/10 (80%)
C(ペルソナ付き)10/10 (100%)10/10 (100%)

プロンプトBでは10枚中2枚(モダン・建築)で役職と部署の混同が発生しましたが、ペルソナ設定で全件正確に分類されました。

教訓: ペルソナ設定は「曖昧な分類」を解消するのに効果的。ただし役割は簡潔に。


テクニック3:Few-shot(読み取り例の提示)

AIに「正しい出力例」を1〜2件見せることで、出力の一貫性と精度をさらに向上させます。

プロンプトD:Few-shot付き

あなたは名刺管理の専門家です。名刺画像から情報を正確に読み取り、
JSON形式で構造化してください。

【読み取り例】

入力:医療系クリニックの名刺(院長の名刺)
出力:
{
  "会社名": "さくら内科クリニック",
  "部署": "",
  "役職": "院長",
  "氏名": "山本花子",
  "氏名(フリガナ)": "",
  "電話番号": "03-1111-2222",
  "メールアドレス": "hanako@sakura-clinic.jp",
  "住所": "東京都新宿区西新宿1-1-1",
  "URL": "",
  "その他": "内科・小児科"
}

注意事項:
- 診療科目は「その他」に分類
- 資格名(医学博士など)は「役職」に含める
- 不明な情報は空文字にし、推測で埋めないこと

では、以下の名刺を読み取ってください。

Few-shot で改善された具体例

問題ケース:和食料理店の名刺

名刺サンプル:和食料理店

プロンプト会社名フリガナの扱い営業時間の扱い
C(ペルソナのみ)(空欄)「にほんりょうり かげつ」→ フリガナに誤分類「その他」に分類
D(Few-shot付き)花月(空欄)→ 正しく無視「その他:営業時間 昼11:30-14:00 / 夜17:00-22:00」と整形

ペルソナのみのCでは「にほんりょうり かげつ」を人名のフリガナと誤解し、店名(会社名)が空欄になりました。Few-shot付きのDでは、読み取り例で「クリニック名→会社名」というパターンを示したことで、「花月」を正しく会社名に分類できました。

10枚での比較(全項目の総合精度)

プロンプトJSON出力役職・部署の正確な分類付随情報の分類
A(シンプル)0/10(全件自由文)―(構造化なし)
B(JSON指定)10/108/10 (80%)
C(ペルソナ付き)10/1010/10 (100%)
D(Few-shot付き)10/1010/10 (100%)

やりすぎ注意:過剰なプロンプトの逆効果

NG例:指示が多すぎるプロンプト

あなたは大企業の総務部で20年以上名刺管理を担当してきたベテランです。
年間10万枚以上の名刺を処理した経験があり、どんなデザインの名刺でも
一瞬で情報を読み取れます。あなたの目は名刺に特化したOCRエンジンの
ように精密です。

以下の37項目を必ず抽出してください:
会社名(正式名称)、会社名(略称)、会社名(英語)、
部署名(第1階層)、部署名(第2階層)、部署名(英語)、
役職(日本語)、役職(英語)、...

このような過剰なプロンプトは以下の問題を引き起こします。

問題説明
過度な推測名刺にない情報まで埋めようとする
出力の肥大化空欄だらけの37項目JSONが出力される
レスポンス遅延プロンプトが長いほど処理時間・コストが増加
精度低下指示が多すぎてAIが混乱し、基本的な分類ミスが増える

適切なバランス

推奨される項目数:8〜12項目
推奨されるFew-shot例:1〜2件
推奨されるペルソナ:2〜3文

名刺に一般的に記載される情報は限られています。抽出項目を増やしすぎるより、よくある分類ミスをルールとして明示する方が効果的です。


実践テンプレート

以下は、本記事の検証結果を踏まえた推奨プロンプトです。

あなたは名刺管理の専門家です。名刺画像から正確に情報を読み取り、
JSON形式で構造化してください。

【分類ルール】
- 「○○長」「○○取締役」「○○ディレクター」→ 役職
- 「○○部」「○○課」「○○事業部」→ 部署
- 診療科目・資格・営業時間など → その他
- 不明な情報は空文字にし、推測で埋めないこと

【出力形式】JSONのみ出力してください。
{
    "会社名": "",
    "部署": "",
    "役職": "",
    "氏名": "",
    "氏名(フリガナ)": "",
    "郵便番号": "",
    "住所": "",
    "電話番号": "",
    "FAX": "",
    "メールアドレス": "",
    "URL": "",
    "その他": ""
}

まとめ

名刺OCRのプロンプト設計は、3つのステップで段階的に改善できます。

ステップテクニック改善内容
1出力形式(JSON)の指定自由文 → 構造化JSON(10/10成功)
2ペルソナ設定の追加役職・部署の分類精度 80% → 100%
3Few-shot例の追加店名・診療科目など付随情報の分類が安定

最も重要なのは ステップ1の「出力形式の指定」 です。これだけでJSON出力が安定します。ペルソナ設定は「役職と部署の混同」を解消し、Few-shotは「飲食店名を会社名に分類する」といった業種特有のパターンに対応するのに効果的です。


関連記事


困ったときは

名刺OCRのプロンプト設計やチューニングでお困りでしたら、AI DARUMAにご相談ください。貴社の名刺フォーマットに最適化されたプロンプトを設計いたします。

〒723-0062 広島県三原市本町 1丁目7-29 2階 コワーキングスペースarica内