該存儲庫微調最先進的PII檢測系統的狀態,並通過合成PII數據生成增強性能。
簡介•突出顯示•合成PII數據•PII實體檢測系統•問題•
個人可識別信息(PII)是用於識別,定位或聯繫個人的敏感數據。 PII實體檢測系統可以在非結構化文本中識別,分類和編輯敏感信息。改善PII檢測系統有助於維持個人的隱私和安全性,符合法律和監管要求,並防止身份盜用,欺詐或其他類型的傷害。圖1提供了使用內部,外部,啟動(IOB)格式的示例PII實體。

圖1:IOB格式的PII數據示例[源]。
該存儲庫中的工作是在Kaggle競爭期間得出的。學習機構實驗室-PII數據檢測。使用此存儲庫中的技術將在競爭中提供最高1%的解決方案。
PII PlaceHolders的最佳技術,而不是直接將PII數據放入提示中。class_weights參數以及焦點損失或跨熵損失來解決。IOB格式(通常也稱為生物格式)是一種常見的標記格式,用於標記令牌中的標記任務,例如命名實體識別(NER)應用程序。創建標記的BIO數據集可能是針對特定域數據集的時間和勞動密集型。另一種方法是合成生成密切代表您真實應用程序的PII數據集。請參閱gen-data目錄以創建特定域PII數據的代碼。以下文件將被順序執行,因為它們每個都代表合成PII數據創建中的另一個任務。
合成PII數據是使用Faker和自定義功能創建PII信息的。將這些數據放入下一步創建的LLM生成的非結構化文本中。
生成LLM(例如Llama3)用於生成類似於域特定文本的非結構化文本。在此存儲庫中,數據模仿了在線課程中學生的論文。請參閱各種提示,以提示此工作中使用的示例。
注意:在這項工作中學習的有用的見解是促使LLM為PII數據創建placeholders 。步驟1的數據將注入佔位符。 PII佔位符的方法提供了以下軼事優勢:
給出了兩個提示策略的示例,這些示例證明了直接使用PII提示(示例1)然後與占位符(示例2)之間的差異。
示例1:使用直接PII數據注入的LLM提示
Model Prompt:
Write an sentence introducing yourself and include only your personal information provided below:
- FULL_NAME: John Doe
- PHONE_NUM: 555-123-4567
Model Response:
My name is John Doe and you can reach me at 555-125-4567 or by email at [email protected].這種提示的技術通常從LLM中引入了一些錯誤,這些錯誤很難在編程上識別並導致PII以生物格式錯誤地標記。示例1要求該模型將PII數據直接插入文本中,並註意幾個錯誤:
[email protected]電子郵件。示例2:LLM提示與PII佔位符
Model Prompt:
Write an sentence introducing yourself and include only your personal information using the placeholders provided below:
- {FULL_NAME}: First and Last Name
- {PHONE_NUM}: Personal phone number
Model Response:
My name is {FULL_NAME} and you can reach me at {PHONE_NUM}.示例2 LLM沒有機會在phone_num或full_name中轉置任何錯誤。同樣,LLM似乎不太頻繁地納入額外的PII實體。
以上兩個步驟將PII數據和域特定文本生成解耦。在步驟#3中,步驟#1 PII數據插入步驟#2的LLM域特定生成的文本。這很有用,因為您可以輕鬆地使用PII數據和域特定文本生成數據的不同組合進行實驗。
PII實體檢測的最佳性能LLM模型是Microsoft的解碼增強的BERT,並具有分離的注意V3模型。對於編碼器模型任務,例如命名實體識別(NER),問答以及分類,該模型始終如一地表現良好。
訓練Deberta-V3模型的一個好的起點是基線Deberta-V3微調模塊。在此模塊中,創建了一個定制的擁抱面部培訓師,以訓練焦點損失或CE損失,以解決階級失衡。
class CustomTrainer ( Trainer ):
def __init__ (
self ,
focal_loss_info : SimpleNamespace ,
* args ,
class_weights = None ,
** kwargs ):
super (). __init__ ( * args , ** kwargs )
# Assuming class_weights is a Tensor of weights for each class
self . class_weights = class_weights
self . focal_loss_info = focal_loss_info
def compute_loss ( self , model , inputs , return_outputs = False ):
# Extract labels
labels = inputs . pop ( "labels" )
# Forward pass
outputs = model ( ** inputs )
logits = outputs . logits
# Loss calculation
if self . focal_loss_info . apply :
loss_fct = FocalLoss ( alpha = 5 , gamma = 2 , reduction = 'mean' )
loss = loss_fct ( logits . view ( - 1 , self . model . config . num_labels ),
labels . view ( - 1 ))
else :
loss_fct = CrossEntropyLoss ( weight = self . class_weights )
if self . label_smoother is not None and "labels" in inputs :
loss = self . label_smoother ( outputs , inputs )
else :
loss = loss_fct ( logits . view ( - 1 , self . model . config . num_labels ),
labels . view ( - 1 ))
return ( loss , outputs ) if return_outputs else loss培訓目錄中包含的微調PII檢測系統的其他技巧和技巧是:
unlabeled datasets集將模型暴露於特定領域的語言模式和術語。微調一個模型,該模型從特定的任務或域進行了額外的預訓練,從針對手頭的任務和數據分配量身定制的初始檢查點開始,通常與從通用初始檢查點開始的微調模型相比,性能更高[源:1,2]。注意:此處介紹的此工作流程可以適用於許多擁抱的臉部深度學習應用程序,而不僅僅是LLM。
該存儲庫將竭盡所能維護。如果您面臨任何問題或想進行改進,請提出問題或提交拉動請求。 ?