Skip to main content

privyscope-zh-hant

從繁體中文文本中**偵測並遮蔽個人資訊(PII)**的引擎。它是 privyscope 系列的繁體中文版本,能自動辨識並遮蔽 姓名、電話號碼、各類證件號碼、電子郵件、地址、金融資訊、非公開日期以及 認證憑證(密鑰)。

⚠️ privyscope 只是輔助遮蔽的工具,並不保證去識別化或法規遵循。 詳見限制。

📖 English README

安裝

pip install privyscope-zh-hant      # 會自動安裝 `privyscope` 核心

一分鐘上手

在 Python 中使用

from privyscope_zh_hant import Privyscope

engine = Privyscope.from_pretrained()                 # 首次執行時下載 ONNX 權重
result = engine.redact("我叫陳志明,電話是0912-345-678,信箱是 chen@example.com")

result.masked_text        # "我叫<PER>,電話是<PHONE>,信箱是 <EMAIL>"
result.detected_spans     # [DetectedSpan(label="PER", start=2, end=5, ...), ...]
result.summary            # {"span_count": 3, "by_label": {"PER": 1, "PHONE": 1, "EMAIL": 1}, ...}

在終端機中使用

privyscope redact "我叫陳志明,電話是0912-345-678,信箱是 chen@example.com"
cat notes.txt | privyscope redact --operating-point high_recall

文件

更詳細的指南依用途整理在 docs/ 目錄中:

我想要…… 指南
在終端機執行 CLI 參考
從 Python 呼叫 Python API 參考
理解 JSON 輸出 輸出結構
用自己的標註資料評分 評估與輸出模式
權衡精確率與召回率 運行點
離線 / 內網使用 離線使用
用自己的資料微調 微調

能辨識哪些項目

基礎項目(正規表示式 + NER)共 8 類: PER · PHONE · ID_NUM · EMAIL · LOC · BANK · DATE · SECRET。

還有僅用正規表示式辨識的擴充項目: PASSPORT · UNIFIED_BUSINESS_NO · PLATE · CRYPTO · IP · DEVICE · URL — 參見 privyscope_zh_hant/entity_config.yaml。

Stage-1 的正規表示式規則來自 pii-pattern-engine 規則集。多數規則 都帶有驗證函式(檢查碼 / 字典檢查),只是形狀相似的數字不會被遮蔽,例如中華民國 身分證字號(如 A123456789)會做檢查碼驗證。

分詞器以 do_lower_case=True 設定,讓大寫拉丁字母(身分證字號的開頭英文字母、 品牌名稱等)不會變成 [UNK] —— 訓練與推論必須使用相同設定。

privyscope_zh_hant/regex_rules.yaml 由 scripts/gen_regex_rules.py 自動產生, 每次建置都會被覆寫 —— 要改規則請修改該腳本,而非 YAML。詳見 CONTRIBUTING。

代碼使用 BCP-47 腳本子標籤 zh-Hant(繁體);與簡體 (privyscope-zh-hans,zh-Hans)的區別本質上是字形,而非地區。

運作原理

兩階段混合流水線,兩路結果取聯集合併(SRS §3.4):

  1. 正規表示式過濾 —— 擷取電話、電子郵件、證件號、銀行卡、密鑰等形狀固定的 PII。
  2. ONNX NER —— 擷取姓名、地址、非公開日期等需結合上下文判斷的 PII,採用 BIOES 詞元分類器加約束 Viterbi 解碼器。

推論階段只依賴 ONNX Runtime,不需要 PyTorch。預設以不漏抓(召回優先)為主, 無需重新訓練,只調整運行點即可改變行為。只有 微調時才需要 PyTorch。中文是逐字(char-level)切分,因此 不存在跨詞元邊界的問題。

模型與效能

  • 結構 —— google-bert/bert-base-chinese(Apache-2.0)編碼器 → BIOES 詞元分類頭 → 約束 Viterbi 解碼器。

  • 發布產物 —— INT8 量化的 ONNX 模型,約 98 MB(在 ≤150 MB 預算內),最大序列 長度 256。權重首次使用時從 Hugging Face Hub 下載,並附帶 SHA-256 checksum.txt 供完整性驗證。

  • 精度 —— 在與訓練不重疊的驗證集(typed/strict 評分,regex + NER 完整流水線) 上的實體級 strict F1:

    PER LOC DATE ID_NUM BANK PHONE SECRET
    1.00 1.00 0.94 0.93 0.96 0.97 0.98

    micro-F1 為 0.976(1,000 句)。姓名、地址、電話、銀行卡等項目都相當穩定。 LOC(地址)原本因正規表示式以不限長度的漢字開頭而過度擷取(常把「收件地址」等前綴 一起框進去,F1 僅 0.14),現已改為錨定台灣 22 個縣市,提升到 1.00。SECRET 原本為 0.86,原因是環境變數規則連後面的中文一併匹配;現限定為 ASCII 字元,升至 0.97。目前較弱的是 ID_NUM 精確率(0.90;剩下的誤判多為「零九幺…」這類以中文數字念出的電話)與 DATE(0.94)。此驗證 集在本機以 carriers/zh_hant.val.json 產生(含口語 / 錯字 / 無空格寫法),並以 strict(偏移完全一致)評分,屬保守下限,乾淨文本會更高。EMAIL 由正規表示式 確定性辨識,本次樣本中未出現。可用 privyscope eval --lang zh_hant your_val.jsonl 復現。

實戰範例:網購諮詢

以下是一位顧客寄給購物平台的真實諮詢(約 210 字,含姓名、日期、電子郵件、電話、 地址、信用卡號),經過 engine.redact() 處理後的結果。

輸入

您好,我叫陳志明。我於2024年3月14日購買的一雙慢跑鞋到現在還沒有收到,因此想詢問一下。我在註冊會員時使用的電子郵件是 chen.ming92@gmail.com,白天可以聯絡到我的手機號碼是 0912-345-678。收件地址:台北市信義區信義路五段7號,付款使用的是信用卡 4539-1488-0343-6467,並且已經付款成功。如果商品確實已經遺失,能否將貨款退還到我的信用卡?請協助查詢目前的物流狀態,並盡快給我回覆。非常感謝您的幫助。

遮蔽結果(result.masked_text)

您好,我叫<PER>。我於<DATE>購買的一雙慢跑鞋到現在還沒有收到,因此想詢問一下。我在註冊會員時使用的電子郵件是 <EMAIL>,白天可以聯絡到我的手機號碼是 <PHONE>。收件地址:<LOC>,付款使用的是信用卡 <BANK>,並且已經付款成功。如果商品確實已經遺失,能否將貨款退還到我的信用卡?請協助查詢目前的物流狀態,並盡快給我回覆。非常感謝您的幫助。

辨識出的 6 項

標籤 辨識到的文字
PER 陳志明
DATE 2024年3月14日
EMAIL chen.ming92@gmail.com
PHONE 0912-345-678
LOC 台北市信義區信義路五段7號
BANK 4539-1488-0343-6467

限制

  • 不保證去識別化或法規遵循。請將它作為隱私設計中的多重防線之一來使用。
  • 也有辨識不佳的情況:少見或地域性強的姓名可能漏抓;上下文含糊時可能過度遮蔽 公眾人物;在格式高度混雜的文本中跨度可能被切碎;對全新格式的 SECRET 可能漏抓。
  • 在醫療、法律、金融、政務等敏感場景中,建議再由人工複核一遍。

授權

以 Apache-2.0 發布。模型權重同樣是 Apache-2.0,連同用於完整性驗證的 checksum.txt(SHA-256)一起發布在 Hugging Face Hub 上。歡迎貢獻 —— 詳見 CONTRIBUTING.md。

Metadata

Release files for privyscope-zh-hant 0.1.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for privyscope-zh-hant 0.1.6
File Size Uploaded
privyscope_zh_hant-0.1.6.tar.gz 20.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for privyscope-zh-hant 0.1.6
File Interpreter ABI Platform
privyscope_zh_hant-0.1.6-py3-none-any.whl Python 3 none any Details

Total release size: 35.4 kB

Release files / privyscope_zh_hant-0.1.6.tar.gz

Download URL privyscope_zh_hant-0.1.6.tar.gz
Size 20.5 kB
Tags Source
SHA-256 checksum
How to use checksums
744a25509029a0697592522a323c175667748c33e0730b5dd2f92e6829fbc044
BLAKE2b-256 checksum
How to use checksums
c1490a08151f0f0854a48d43bfc071e27378b20abb3343e84134219170994723
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / privyscope_zh_hant-0.1.6-py3-none-any.whl

Download URL privyscope_zh_hant-0.1.6-py3-none-any.whl
Size 14.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8dab57686c99bb29cddc73965e7e493994987c0f4f025d135985b6dcbb5e55df
BLAKE2b-256 checksum
How to use checksums
9d08d9f9d1fd592a9a1e308ae72abf152d5254477ef3a52d972a7020b777fa91
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.1.6 This release

2 release files

0.1.5

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page