يقوم هذا المستودع بإعداد نظام اكتشاف PII على أحدث طراز ويعزز الأداء مع توليد بيانات PII الاصطناعية.
مقدمة • أبرز ما • بيانات PII الاصطناعية • أنظمة الكشف عن كيان PII • القضايا •
المعلومات التعريف الشخصية (PII) هي بيانات حساسة المستخدمة لتحديد أو تحديد أو الاتصال بالفرد. يمكن أن أنظمة الكشف عن كيان PII تحديد وتصنيف وتقليل المعلومات الحساسة في النص غير المهيكلة. يساعد تحسين أنظمة اكتشاف PII في الحفاظ على خصوصية وأمن الأفراد ، والامتثال للمتطلبات القانونية والتنظيمية ، ومنع سرقة الهوية ، أو الاحتيال ، أو غيرها من أنواع الأذى. يوفر الشكل 1 مثالًا على تنسيق PII باستخدام تنسيق Inside و Outside و Begin (IOB).

الشكل 1: مثال على بيانات PII بتنسيق IOB [المصدر].
تم اشتقاق العمل في هذا المستودع خلال مسابقة Kaggle The Learning Agency Lab - PII Detection. سيوفر استخدام التقنيات في هذا المستودع حلولًا في أعلى 1 ٪ للمنافسة.
PII PlaceHolders بدلاً من وضع بيانات PII مباشرة في موجه.class_weights في مدرب الوجه المعانقة ومع فقدان البؤرة أو فقدان الانتروبيا المتقاطع. يعد تنسيق IOB ، الذي يشار إليه أيضًا باسم التنسيق الحيوي ، تنسيقًا شائعًا لعلم العلامات لعلامة الرموز المميزة في مهمة التقطيع مثل تطبيقات التعرف على الكيانات المسماة (NER). يمكن أن يكون إنشاء مجموعات بيانات حيوية مصممة الوقت والعمالة المكثفة لمجموعات البيانات الخاصة بالمجال. تتمثل النهج البديل في إنشاء مجموعات بيانات PII بشكل صناعي تمثل عن كثب تطبيق الحياة الواقعية. ارجع إلى دليل gen-data للحصول على كود لإنشاء بيانات PII محددة للمجال. سيتم تنفيذ الملفات أدناه بالتتابع لأن كل منها يمثل مهمة مختلفة في إنشاء بيانات PII الاصطناعية.
تم إنشاء بيانات PII الاصطناعية باستخدام وظائف Faker و Custom لإنشاء معلومات PII. تم وضع هذه البيانات في نص LLM الذي تم إنشاؤه تم إنشاؤه في الخطوة التالية.
تم استخدام LLMS التوليدي (على سبيل المثال ، LLAMA3) لإنشاء نص غير منظم يشبه نص المجال المحدد. في هذا المستودع ، تحاكي البيانات مقالات من الطلاب في دورة عبر الإنترنت. ارجع إلى المطالبات المختلفة لطرح الأمثلة المستخدمة في هذا العمل.
إشعار : كانت رؤية مفيدة تعلمتها خلال هذا العمل هي مطالبة LLM بإنشاء placeholders لبيانات PII. سيتم حقن البيانات من الخطوة رقم 1 في العناصر النائبة. قدم نهج العامل النائب PII الفوائد القصصية التالية:
يتم إعطاء مثالين على الاستراتيجيات المطلوبة والتي توضح الاختلافات بين المطالبة بـ PII مباشرة (مثال 1) ثم مع العناصر النائبة (مثال 2).
مثال 1: مطالبة LLM مع حقن بيانات PII المباشر
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].قدمت هذه التقنية المطالبة بشكل روتيني بعض الأخطاء من LLMs التي كان من الصعب التعرف عليها برمجيًا وتؤدي إلى سوء التسمية لـ 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 في النص الذي تم إنشاؤه في مجال LLM في الخطوة 2. هذا مفيد لأنه يمكنك بسهولة تجربة مجموعات مختلفة من بيانات PII وبيانات توليد النص المحددة للمجال.
كان أفضل نموذج LLM لاكتشاف كيان PII هو BERT المعزز بفك تشفير Microsoft مع نموذج 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].ملاحظة : يمكن تكييف سير العمل هذا المقدم هنا للعديد من تطبيقات التعلم العميق المعانقة ، وليس فقط LLMs.
هذا المستودع سيبذل قصارى جهده للحفاظ عليه. إذا واجهت أي مشكلة أو ترغب في إجراء تحسينات ، فيرجى إثارة مشكلة أو تقديم طلب سحب. ؟