日本語テキストから社外秘の固有表現を11カテゴリで抽出する LFM2 ベースのモデルです。
組織内の文書・ログ・メールなどに含まれる機密情報を構造化 JSON として出力します。
1{
2 "address": ["住所・所在地"],
3 "company_name": ["企業・研究機関・組織名"],
4 "email_address": ["メールアドレス"],
5 "human_name": ["人名"],
6 "phone_number": ["電話番号"],
7 "account_identifier": ["ユーザーID・アカウント名・従業員番号・マイナンバーなど"],
8 "network_identifier": ["IPアドレス・MACアドレス・内部ドメイン・ホスト名"],
9 "system_config": ["ファイルパス・ディレクトリ構造・DBテーブル/カラム名"],
10 "project_info": ["プロジェクト名・開発コードネーム・未発表製品/機能名"],
11 "financial_info": ["売上・原価・利益率・契約金額・個人の給与/報酬額"],
12 "transaction_id": ["契約書番号・請求書番号・見積書番号・顧客管理ID"]
13}
本件は山田 太郎(user_89012)から celegans@liquid.ai へ送信されたメールです。
サーバー 192.168.1.15 (/var/log/syslog) の障害について、
Project Apollo の予算 1,500,000円 に関わる契約書番号 INV-20260606-001 を確認してください。
担当: 株式会社サンプル、東京都港区〇〇1-2-3、03-1234-5678
1# システムプロンプトを変数にセット
2SYS="あなたはテキストから社外秘の固有表現を抽出するアシスタントです。入力テキストを分析し、以下の11カテゴリの機密情報を抽出して、必ずJSON形式のみで出力してください。\n\nカテゴリ定義:\n- address: 住所・所在地\n- company_name: 企業・研究機関・組織名\n- email_address: メールアドレス\n- human_name: 人名\n- phone_number: 電話番号\n- account_identifier: アカウント識別子(ユーザーID・アカウント名・従業員番号・社会保障番号・マイナンバー等)\n- network_identifier: ネットワーク識別情報(IPアドレス・MACアドレス・内部ドメイン・ホスト名)\n- system_config: システム構成情報(ファイルパス・ディレクトリ構造・DBテーブル/カラム名)\n- project_info: プロジェクト関連情報(プロジェクト名・開発コードネーム・未発表の製品/機能名)\n- financial_info: 金額・財務情報(売上・原価・利益率・契約金額・個人の給与/報酬額)\n- transaction_id: 取引管理番号(契約書番号・請求書番号・見積書番号・顧客管理ID)\n\n出力形式(全キーを必ず含め、該当なしは空リスト):\n{\"address\": [], \"company_name\": [], \"email_address\": [], \"human_name\": [], \"phone_number\": [], \"account_identifier\": [], \"network_identifier\": [], \"system_config\": [], \"project_info\": [], \"financial_info\": [], \"transaction_id\": []}"
3
4# Q4_K_M (on-device 推奨)
5llama-cli -hf akiFQC/LFM2.5-1.2B-JP-202606-Conf-Extract-GGUF:Q4_K_M \
6 --temperature 0.0 --system-prompt "$SYS"
7
8# Q8_0 (精度重視)
9llama-cli -hf akiFQC/LFM2.5-1.2B-JP-202606-Conf-Extract-GGUF:Q8_0 \
10 --temperature 0.0 --system-prompt "$SYS"
11
12# BF16 (最高精度)
13llama-cli -hf akiFQC/LFM2.5-1.2B-JP-202606-Conf-Extract-GGUF:BF16 \
14 --temperature 0.0 --system-prompt "$SYS"
transformers 版(
akiFQC/LFM2.5-1.2B-JP-202606-Conf-Extract)を使う場合、
tokenizer_config.json の
chat_template がシステムプロンプトを自動注入するため、明示的な指定は不要です。
1import json, torch
2from transformers import AutoModelForCausalLM, AutoTokenizer
3
4model_id = "akiFQC/LFM2.5-1.2B-JP-202606-Conf-Extract"
5tok = AutoTokenizer.from_pretrained(model_id)
6model = AutoModelForCausalLM.from_pretrained(model_id, dtype=torch.bfloat16, device_map="auto")
7model.eval() # 必須: LoRA 学習後の dropout を無効化
8
9text = "本件は山田 太郎(user_89012)から celegans@liquid.ai へ送信されたメールです。"
10
11inputs = tok.apply_chat_template(
12 [{"role": "user", "content": text}],
13 add_generation_prompt=True,
14 return_tensors="pt",
15 return_dict=True, # transformers 5.x は必須
16).to(model.device)
17
18with torch.no_grad():
19 output_ids = model.generate(
20 **inputs,
21 max_new_tokens=256,
22 do_sample=True,
23 temperature=0.3,
24 min_p=0.15,
25 repetition_penalty=1.05,
26 )
27
28generated = tok.decode(output_ids[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True)
29
30try:
31 entities = json.loads(generated)
32 print("人名:", entities["human_name"])
33 print("メール:", entities["email_address"])
34except json.JSONDecodeError:
35 print("JSON parse 失敗 — max_new_tokens を増やすか生成設定を確認")