Instructions to use DataSign/gliner-ja-pii-v1 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- GLiNER
How to use DataSign/gliner-ja-pii-v1 with GLiNER:
from gliner import GLiNER model = GLiNER.from_pretrained("DataSign/gliner-ja-pii-v1") - Notebooks
- Google Colab
- Kaggle
gliner-ja-pii-v1
日本語の個人情報 (PII) 検出に特化した GLiNER モデルです。urchade/gliner_multi_pii-v1 をベースに、日本語の合成データでファインチューニングしました。
概要
GLiNER は任意のエンティティラベルを自然言語で指定できる柔軟な NER モデルです。本モデルは以下 8 カテゴリの日本語 PII を検出します:
person name— 氏名 (漢字・ひらがな・カタカナ)phone number— 電話番号 (090-XXXX-XXXX, +81-X-XXXX-XXXX, ベタ書き 11 桁など)address— 住所 (〒郵便番号、都道府県、丁目番地号、ビル名など)email address— メールアドレスdate— 日付 (西暦、令和、平成など)url— URLaccount number— 口座番号 (銀行口座、顧客番号など)secret— パスワード・API キー・認証コードなど
性能
合成テストデータ 600 サンプル (1318 spans) での評価結果:
| Label | Precision | Recall | F1 | Support |
|---|---|---|---|---|
| person name | 0.984 | 0.982 | 0.983 | 439 |
| phone number | 0.856 | 0.856 | 0.856 | 180 |
| address | 0.966 | 0.825 | 0.890 | 103 |
| email address | 0.867 | 0.837 | 0.852 | 203 |
| date | 0.947 | 0.962 | 0.955 | 131 |
| url | 0.942 | 0.802 | 0.866 | 101 |
| account number | 1.000 | 0.948 | 0.973 | 77 |
| secret | 0.963 | 0.917 | 0.939 | 84 |
| micro avg | 0.940 | 0.908 | 0.924 | 1318 |
(しきい値 0.5 時点)
ベースモデル urchade/gliner_multi_pii-v1 をそのまま日本語に適用した場合の F1 は約 0.10 で、本モデルは約 9 倍の精度改善を達成しています。
使い方
インストール
pip install gliner janome
日本語対応のための重要な前処理
GLiNER の標準 whitespace splitter は日本語の単語境界を識別できません。本モデルでは Janome 形態素解析器を使用し、さらに空白だけのトークンを除外する独自の splitter を使うことを前提に学習されています。この splitter を必ず適用してください。
from gliner import GLiNER
from gliner.data_processing import WordsSplitter
class JapaneseSplitterNoWS:
"""Janome ベースの splitter。空白だけのトークンを yield しない。"""
def __init__(self):
self._base = WordsSplitter(splitter_type="janome")
def __call__(self, text):
for tok, s, e in self._base(text):
if tok.strip() == "":
continue
yield tok, s, e
model = GLiNER.from_pretrained("DataSign/gliner-ja-pii-v1", max_width=25)
model.data_processor.words_splitter = JapaneseSplitterNoWS()
基本的な推論
labels = [
"person name", "phone number", "address", "email address",
"date", "url", "account number", "secret",
]
text = (
"氏名: 山田太郎\n"
"住所: 〒980-0021 宮城県仙台市青葉区中央1-2-3\n"
"電話: 022-123-4567\n"
"メール: yamada@example.co.jp\n"
"申込日: 令和8年5月15日"
)
entities = model.predict_entities(text, labels, threshold=0.5)
for e in entities:
print(f"[{e['label']}] {e['text']!r} (score={e['score']:.2f})")
出力例:
[person name] '山田太郎' (score=1.00)
[address] '〒980-0021 宮城県仙台市青葉区中央1-2-3' (score=0.98)
[phone number] '022-123-4567' (score=1.00)
[email address] 'yamada@example.co.jp' (score=1.00)
[date] '令和8年5月15日' (score=1.00)
長文の処理
モデルの最大入力長は 160 トークンです。これより長いテキストは分割が必要です:
def chunk_text(text, splitter, chunk_size=120, overlap=20):
tokens = list(splitter(text))
chunks = []
i = 0
while i < len(tokens):
end = min(i + chunk_size, len(tokens))
chunks.append((tokens[i][1], tokens[end - 1][2],
text[tokens[i][1]:tokens[end - 1][2]]))
if end == len(tokens):
break
i = end - overlap
return chunks
splitter = JapaneseSplitterNoWS()
chunks = chunk_text(long_text, splitter)
all_entities = []
for char_start, _, chunk in chunks:
preds = model.predict_entities(chunk, labels, threshold=0.5)
for p in preds:
p["start"] += char_start
p["end"] += char_start
all_entities.append(p)
学習データ
合成データのみで学習しています。Faker (ja_JP ロケール) で氏名・住所・電話・メールを生成し、テンプレートに差し込む方式で 4,000 サンプルを作成しました。テンプレートは以下を含みます:
- フォーム形式 (
氏名: <値>,住所:\n<値>) - ビジネスメール (
<氏名>様、ご依頼の件、<日付>までに対応します) - HubSpot 風通知 (
姓: <姓>\n名: <名>\nメール: <email>形式) - ログメッセージ (
User <name> failed to login at <date>) - パスワード共有 (
パスワードは <secret>、APIキーは <secret> です)
実データは含まれていないため、業務文書の表記揺れには弱い場合があります。
制限事項
- 最大入力長 160 トークン: 長文は分割推論が必要
- 会社名・組織名は検出されません: 8 カテゴリに含まれないため
- 合成データのみ学習: 業務文書特有の表記には実データを追加学習することで精度向上が期待できます
- 1 文字漢字の名前:
諒などの 1 文字漢字名は学習サンプルが限定的で recall が低い場合があります
ライセンス
Apache License 2.0 (ベースモデル urchade/gliner_multi_pii-v1 と同じ)
引用
ベースモデル GLiNER の論文:
@misc{zaratiana2023gliner,
title={GLiNER: Generalist Model for Named Entity Recognition using Bidirectional Transformer},
author={Urchade Zaratiana and Nadi Tomeh and Pierre Holat and Thierry Charnois},
year={2023},
eprint={2311.08526},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
- Downloads last month
- 14
Model tree for DataSign/gliner-ja-pii-v1
Base model
urchade/gliner_multi_pii-v1