
FARO - Document Sensitivity Detector

FARO एक उपकरण है जो किसी संगठन में दस्तावेज़ों में संवेदनशील जानकारी का पता लगाने के लिए है। यह छोटी कंपनियों और व्यक्तियों के उपयोग के लिए बनाया गया है जो अपने संगठन के अंदर अपने संवेदनशील दस्तावेज़ों को ट्रैक करना चाहते हैं, लेकिन जटिल डेटा सुरक्षा उपकरणों को कॉन्फ़िगर करने में बहुत समय और पैसा खर्च नहीं कर सकते।
FARO दस्तावेज़ों से संवेदनशीलता संकेतक (जैसे दस्तावेज़ ID, मौद्रिक राशियाँ, व्यक्तिगत ईमेल) निकालता है और दस्तावेज़ में संकेतकों की आवृत्ति और प्रकार का उपयोग करके दस्तावेज़ को संवेदनशीलता स्कोर (निम्न से उच्च) देता है।
वर्तमान में इस उपकरण की सभी कार्यक्षमता स्पेनिश भाषा में लिखे गए दस्तावेज़ों के लिए है, हालाँकि इसे आसानी से अधिक भाषाओं को कवर करने के लिए उन्नत किया जा सकता है।
यह उपकरण TEGRA R&D Cybersecurity Center द्वारा विकसित किया गया है।
परियोजना में निम्नलिखित फ़ोल्डर हैं:
faro/ : यह FARO मॉड्यूल है जिसमें मुख्य कार्यक्षमता है।config/: yaml कॉन्फ़िगरेशन फ़ाइलें यहाँ रखी जाती हैं। प्रति भाषा एक yaml फ़ाइल (साथ ही गैर-पहचानी गई भाषाओं के लिए बुनियादी कार्यक्षमता प्रदान करने के लिए एक nolanguage.yaml) और सभी भाषाओं के लिए सामान्य कॉन्फ़िगरेशन वाली एक yaml फ़ाइल config/commons.yaml।models/: यह FARO मॉडल रखने का फ़ोल्डर है।faro_detection.py: एकल फ़ाइल पर स्वतंत्र संचालन के लिए FARO का लॉन्चर।faro_spider.sh: बल्क प्रोसेसिंग के लिए स्क्रिप्ट।docker_build_faro.sh: Linux और Mac OS पर FARO Docker इमेज बनाने की स्क्रिप्ट।docker_build_faro.bat: Windows पर FARO Docker इमेज बनाने की स्क्रिप्ट।docker_run_faro.sh: Linux और Mac OS पर FARO कंटेनर चलाने की स्क्रिप्ट।docker_run_faro.bat: Windows पर FARO कंटेनर चलाने की स्क्रिप्ट।FARO Docker का उपयोग करके एक स्वतंत्र कंटेनर के रूप में चल सकता है। आप स्वयं इमेज बना सकते हैं या इसे Docker Hub रिपॉजिटरी से प्राप्त कर सकते हैं।
यदि आपके सिस्टम पर Docker स्थापित और चल रहा है, तो Docker Hub से नवीनतम FARO इमेज प्राप्त करने के लिए निम्नलिखित कमांड निष्पादित करें।
docker pull gradiant/faro
Docker इमेज चलाने के लिए स्क्रिप्ट docker_run_faro.sh (Linux/Mac OS) या docker_run_faro.bat (Windows) का उपयोग करें। आप उन्हें परियोजना के मूल में या नवीनतम रिलीज़ में पा सकते हैं।
यदि आपके सिस्टम पर Docker स्थापित और चल रहा है, तो FARO इमेज बनाने के लिए निम्नलिखित करें।
Linux और Mac OS
./docker_build_faro.sh
Windows
docker_build_faro.bat
FARO कंटेनर चलाने के लिए परियोजना के मूल में कुछ स्क्रिप्ट प्रदान की गई हैं। सुविधा के लिए आप उन स्क्रिप्ट को कहीं और कॉपी और उपयोग कर सकते हैं। "output" फ़ोल्डर आपकी वर्तमान निर्देशिका के अंतर्गत बनाया जाएगा।
Linux और Mac OS
./docker_run_faro.sh <आपकी फ़ाइलों वाला फ़ोल्डर>
Windows
docker_run_faro.bat <आपकी फ़ाइलों वाला फ़ोल्डर>
हमने tika में इसके tesseract एकीकरण के माध्यम से OCR समर्थन जोड़ा है। OCR प्रक्रिया के कुछ अनुकूलन को एक env फ़ाइल के उपयोग के माध्यम से ट्वीक किया जा सकता है जिसका पथ स्क्रिप्ट को दूसरे तर्क के रूप में प्रदान किया जाना चाहिए। हमने एक टेम्पलेट के रूप में एक टिप्पणी उदाहरण यहाँ प्रदान किया है।
./docker_run_faro.sh <आपकी फ़ाइलों वाला फ़ोल्डर> <env फ़ाइल का पथ>
उदाहरण के लिए:
./docker_run_faro.sh ../data docker_faro_env_example.list
FARO वर्तमान फ़ोल्डर के अंदर एक "output" फ़ोल्डर बनाता है और निष्पादन के परिणामों को दो फ़ाइलों में संग्रहीत करता है:
output/scan.$CURRENT_TIME.csv: यह एक csv फ़ाइल है जिसमें दस्तावेज़ को दिया गया स्कोर और प्रत्येक फ़ाइल में संकेतकों की आवृत्ति होती है।filepath,score,person_position_organization,monetary_quantity,signature,personal_email,mobile_phone_number,financial_data,document_id,custom_words,meta:content-type,meta:author,meta:pages,meta:lang,meta:date,meta:filesize,meta:num_words,meta:num_chars,meta:ocr
/Users/test/code/FARO_datasets/quick_test_data/Factura_NRU_0_1_001.pdf,high,0,0,0,0,0,0,1,4,application/pdf,Powered By Crystal,1,es,,85739,219,1185,False
/Users/test/code/FARO_datasets/quick_test_data/Factura_Plancha.pdf,high,0,6,0,0,0,0,2,8,application/pdf,Python PDF Library - http://pybrary.net/pyPdf/,1,es,,77171,259,1524,True
/Users/test/code/FARO_datasets/quick_test_data/20190912-FS2019.pdf,high,0,3,0,0,0,0,1,2,application/pdf,FPDF 1.6,1,es,2019-09-12T20:08:19Z,1545,62,648,False
output/scan.$CURRENT_TIME.entity: यह एक json है जिसमें फ़ाइल से निकाले गए संकेतकों (विघटित) की सूची होती है। उदाहरण के लिए:{"filepath": "/Users/test/code/FARO_datasets/quick_test_data/Factura_NRU_0_1_001.pdf", "entities": {"custom_words": {"facturar": 3, "total": 1}, "prob_currency": {"12,0021": 1, "12,00": 1, "9,92": 1, "3,9921": 1, "3,99": 1, "3,30": 1, "15,99": 1, "13,21": 1, "1.106.166": 1, "1,00": 1, "99,00": 1}, "document_id": {"89821284M": 1}}, "datetime": "2019-12-11 14:19:17"}
{"filepath": "/Users/test/code/FARO_datasets/quick_test_data/Factura_Plancha.pdf", "entities": {"document_id": {"H82547761": 1, "21809943D": 2}, "custom_words": {"factura": 2, "facturar": 2, "total": 2, "importe": 2}, "monetary_quantity": {"156,20": 4, "2,84": 2, "0,00": 2, "159,04": 2, "32,80": 4, "191,84": 2}, "prob_currency": {"1,00": 6, "189,00": 2}}, "datetime": "2019-12-11 14:19:27"}
{"filepath": "/Users/test/code/FARO_datasets/quick_test_data/20190912-FS2019.pdf", "entities": {"document_id": {"C-01107564": 1}, "custom_words": {"factura": 1, "total": 1}, "monetary_quantity": {"3,06": 1, "0,64": 1, "3,70": 1}}, "datetime": "2019-12-11 14:19:33"}
नोट: केवल LINUX और MAC OS X
मोड को ठीक से काम करने के लिए कुछ ऑपरेटिंग सिस्टम और लाइब्रेरीज़ की आवश्यकता है
एक अलग वर्चुअल वातावरण का उपयोग करना उचित है। virtualenv के साथ वर्चुअल वातावरण बनाने के लिए।
virtualenv -p `which python3` <आपके env का नाम>
अपने टर्मिनल पर वर्चुअल वातावरण को सक्रिय करने के लिए बस टाइप करें:
source <आपके env का नाम>/bin/activate
सिस्टम को चालू और चलाने का सबसे आसान तरीका इस तरह निर्भरताएँ स्थापित करना है
pip install -r requirements.txt
निर्भरताओं की सूची निम्नलिखित है:
ये अन्य निर्भरताएँ परीक्षण के लिए उपयोग की जाती हैं:
FARO काम करने के लिए कई ML मॉडलों पर निर्भर करता है।
detection:
nlp_model : es_core_news_sm
crf_ner_list: models/crf_professions_v1.joblib
personal_email_detection: models/email_detector.joblib
target_list: models/legal.txt
crf_ner_classic: models/crf_classic_step1.joblib,models/crf_classic_step2.joblib,models/crf_classic_step3.joblib,models/crf_classic_step4.joblib,models/crf_classic_step5.joblib
corp_mail_list: models/corp_mail_list.txt
हमारे रिपॉजिटरी में हम उनके आकार के कारण Git LFS के माध्यम से मॉडलों को संभाल रहे हैं। यदि आपके पास git-lfs स्थापित है, तो जब आप पहली बार हमारे रिपॉजिटरी को क्लोन करेंगे तो आपके पास स्वचालित रूप से मॉडल डाउनलोड हो जाने चाहिए।
यदि आप मॉडलों को मैन्युअल रूप से डाउनलोड करना चाहते हैं, तो परियोजना के मूल से निम्नलिखित कमांड निष्पादित करें।
git lfs pull
जाँच लें कि config/es.yml फ़ाइल के अंदर नीचे दिखाए गए पथ मॉडलों की ओर इंगित करते हैं।
हमारा स्पाइडर एक फ़ोल्डर के अंदर दस्तावेज़ों का पुनरावर्ती रूप से विश्लेषण करने, विश्लेषण के परिणामों को एक फ़ाइल पर संग्रहीत करने की स्क्रिप्ट है।
./faro_spider.sh <आपकी फ़ाइलों वाला फ़ोल्डर>
OCR जोड़ने के बाद, कुछ कॉन्फ़िगरेशन हैं जिन्हें पर्यावरण चर के माध्यम से FARO निष्पादन के लिए अनुकूलित किया जा सकता है:
FARO_DISABLE_OCR: यदि यह चर मिलता है (किसी भी मान के साथ) FARO दस्तावेज़ों पर OCR निष्पादित नहीं करेगाFARO_REQUESTS_TIMEOUT: सेकंड की संख्या जिसके बाद FARO का टाइमआउट हो जाएगा यदि tika सर्वर प्रतिक्रिया नहीं देता (डिफ़ॉल्ट: 60)FARO_PDF_OCR_RATIO: PDF मिश्रित दस्तावेज़ों (टेक्स्ट और इमेज) में OCR को बाध्य करने के लिए प्रति वर्ण बाइट्स (डिफ़ॉल्ट: 150 बाइट्स/चार)लॉगिंग कॉन्फ़िगरेशन को भी पर्यावरण चरों के माध्यम से कॉन्फ़िगर किया जा सकता है:
FARO_LOG_LEVEL: Faro लॉगिंग स्तर (डिफ़ॉल्ट: INFO)FARO_LOG_FILE: Faro लॉगिंग फ़ाइल (डिफ़ॉल्ट: None). Docker का उपयोग करते समय इसे होस्ट मशीन पर बनाए रखने के लिए output फ़ोल्डर के अंदर सेट करना सुनिश्चित करें।आप हमारी faro_detection.py स्क्रिप्ट का उपयोग करके एक एकल फ़ाइल पर faro डिटेक्शन निष्पादित कर सकते हैं
./faro_detection.py -i <आपकी फ़ाइल>
दो आउटपुट फ़ाइलें पथों के साथ उत्पन्न होती हैं <आपकी फ़ाइल>.entity और <आपकी फ़ाइल>.score।
a) <आपकी फ़ाइल>.entity: एक json जिसमें उनके प्रकार और उपस्थितियों की संख्या के अनुसार क्रमबद्ध संस्थाओं की सूची होती है (एंटिटी डिटेक्टर मॉड्यूल का आउटपुट):
{"LOC": {"Pontevedra": 1}, "MONEY": {"1.000 euros": 2}, "PER": {"Betty Corti\u00f1as": 1, "Eva Expósito": 1, "Belén Portela": 1, "Marta Rivadulla": 1, "Miguel Rivas": 1}, "PROF": {"el tutor": 1}, "ORG": {"Centro de Recursos Educativos": 1}}
b) <आपकी फ़ाइल>.score: एक json जिसमें संस्थाओं के प्रकार और इस प्रकार की संस्था पाठ में जितनी बार दिखाई देती है, उसकी संख्या होती है। इस json में "score" गुण में संवेदनशीलता स्कोर भी होता है (यह "low", "medium" और "high" हो सकता है)।
{"score": "high", "summary": {"monetary_quantity": 1, "person_position": 1, "mobile_phone_number": 1, "personal_email": 1, "credit_account_number": 2}}
हमारी डिटेक्शन स्क्रिप्ट को पारित किए जा सकने वाले अतिरिक्त तर्कों के बारे में जानकारी के लिए, यहाँ देखें।
FARO एंटिटी डिटेक्टर दो चरण करता है:
संकेतकों की सूची निम्नलिखित है:
person_position_organization: यह संस्थाओं (व्यक्ति, नौकरी - पद, संगठन) का एक समूह है जो दस्तावेज़ों से निकाले और एक साथ जोड़े गए थे।
monetary_quantity: मुद्रा राशि (वर्तमान में केवल यूरो और डॉलर समर्थित हैं)।
signature: यह उस व्यक्ति को आउटपुट करता है जो दस्तावेज़ पर हस्ताक्षर करता है
personal_email: ईमेल जो कॉर्पोरेट नहीं हैं (जैसे info@ rrhh@ नहीं)
mobile_phone_number: मोबाइल फ़ोन नंबर (गैर-मोबाइल को फ़िल्टर करके)
financial_data: क्रेडिट कार्ड और IBAN खाता नंबर
document_id: स्पेनिश NIF और CIF।
इन वाक्यों की अद्वितीय गणना एक json ऑब्जेक्ट में एकत्र की जाती है और अगले चरण में इनपुट के रूप में भेजी जाती है।
निम्नलिखित नियम लागू होते हैं:
प्रत्येक संवेदनशीलता स्तर संवेदनशीलता संकेतकों के लिए थ्रेसहोल्ड सेट करता है। एक दस्तावेज़ को वह स्कोर प्राप्त करने के लिए कम से कम एक थ्रेसहोल्ड (न्यूनतम और अधिकतम) का पालन करना होगा।
यदि दस्तावेज़ में विभिन्न संवेदनशीलता थ्रेसहोल्ड दिखाई देते हैं (वर्तमान में तीन के लिए कॉन्फ़िगर किया गया है), तो दस्तावेज़ स्तर के लिए सभी थ्रेसहोल्ड का पालन करने के बावजूद संवेदनशीलता स्कोर बढ़ा देता है।
"low" स्कोर उन दस्तावेज़ों को भी निर्दिष्ट किया जाता है जहाँ कोई संवेदनशीलता संकेतक नहीं मिला।
यह अपनी कार्यक्षमता को कॉन्फ़िगर करने के लिए YAML फ़ाइलों का एक सेट नियुक्त करता है (YAML फ़ाइलें "config" फ़ोल्डर के अंदर स्थित हैं)।
common.yaml: इसमें प्रत्येक भाषा के लिए सामान्य कार्यक्षमता है।
.yaml: इसमें एक भाषा के लिए विशिष्ट कॉन्फ़िगरेशन है (वर्तमान में केवल स्पेनिश समर्थित है: "es" कोड)। यह यह भी इंगित करता है कि ML मॉडल कहाँ स्थित हैं (उदाहरण के लिए डिफ़ॉल्ट रूप से "models" फ़ोल्डर के अंदर)।
ये शर्तों का एक संग्रह है जो कॉन्फ़िगरेशन फ़ाइल के विनिर्देश के अनुसार एक स्कोर चुनता है। स्तरों को sensitivity_list में उनकी तीव्रता के अनुसार क्रमबद्ध किया जाता है (कम से अधिक संवेदनशील तक)। sensitivity डिक्ट में संस्थाओं के प्रकार के अनुसार शर्तें (min, max) होती हैं। दस्तावेज़ को संवेदनशीलता के उस स्तर के साथ फ़्लैग करने के लिए सिस्टम को केवल एक निश्चित स्तर की एक शर्त को पूरा करने की आवश्यकता होती है। इसके अलावा, यदि दस्तावेज़ में एक निश्चित स्तर के कई KPI पाए जाते हैं (जैसा कि sensitivity_multiple_kpis पैरामीटर द्वारा चिह्नित किया गया है), तो सिस्टम उनके संवेदनशीलता स्तर को बढ़ा देता है (उदाहरण के लिए मध्यम से उच्च)।
sensitivity_list:
- low
- medium
- high
sensitivity_multiple_kpis: 3
sensitivity:
low:
person_position:
min: 1
max: 5
monetary_quantity:
min: 1
max: 5
signature:
min: 0
max: 0
personal_email:
min: 0
max: 0
....
sensitivity_list विभिन्न संवेदनशीलता स्कोरों की सूची है जो तीव्रता के अनुसार क्रमबद्ध है।
sensitivity_multiple_kpis यह संख्या किसी स्तर में संवेदनशीलता स्कोर को बढ़ाने से पहले अनुमत एक साथ स्कोर की संख्या को इंगित करती है।
sensitivity एक डिक्ट है जिसमें संवेदनशीलता की शर्तें हैं जो संवेदनशीलता स्तर तक पहुँचने के लिए पूरी होनी चाहिए।
FARO एप्लिकेशन दस्तावेज़ प्रसंस्करण के लिए Tika का उपयोग करता है। इसलिए Tika द्वारा संसाधित किए जाने वाले सभी प्रारूपों को इनपुट के रूप में उपयोग किया जा सकता है। फिर भी, बल्क प्रोसेसिंग के लिए faro_spider.sh/faro_spider.bat स्क्रिप्ट निम्नलिखित एक्सटेंशन तक सीमित हैं: .doc, .docx, .pptx, .ppt, .xls, .pdf, .odt, .ods, .odp, .txt और .rtf।
FARO क्लासिक संस्थाओं (व्यक्ति, संगठन और स्थान) और नौकरी पदों को निकालने के लिए NER (CRFs के साथ निर्मित) का उपयोग करता है।
अन्य संकेतक RegExp (दस्तावेज़ ID, फ़ोन और क्रेडिट कार्ड नंबर, आदि) के साथ निकाले जाते हैं।
मेल RegExp के साथ निकाले जाते हैं। कॉर्पोरेट और व्यक्तिगत ईमेल के बीच अंतर करने के लिए एक ML वर्गीकरणकर्ता और अनुमान का उपयोग किया जाता है।
FARO में सिस्टम की कार्यक्षमता को सत्यापित करने के लिए कई परीक्षण हैं (वर्तमान में परीक्षण केवल नियमित अभिव्यक्तियों को कवर करते हैं)। परीक्षण निम्नलिखित कमांड के साथ निष्पादित किए जा सकते हैं:
python test_suite.py
--dump: सिस्टम <आपकी फ़ाइल>.score की जानकारी को stdout पर csv प्रारूप में डंप करता है। जैसे आउटपुट का एक उदाहरण हो सकता है:
id_file,score,person_jobposition_organization,monetary_quantity,sign,personal_email,mobile_phone_number,credit_account_number,id_document
data/test/test2.pdf,medium,3,0,1,0,0,0,0
आउटपुट फ़ाइलों के पथों को कमांड लाइन पर --output_entity_file और --output_score_file का उपयोग करके स्पष्ट रूप से सेट किया जा सकता है।
python faro_detection.py --input_file <आपकी फ़ाइल> --output_entity_file <आउटपुट के लिए पथ> --output_score_file <आउटपुट के लिए पथ>
हमारी डिटेक्शन स्क्रिप्ट का डिफ़ॉल्ट व्यवहार केवल उन संस्थाओं के प्रकार को दिखाना है जो सीधे संवेदनशीलता स्कोर को प्रभावित करते हैं। सभी पहचानी गई संस्थाओं को दिखाने के लिए कमांड लाइन पर --verbose पैरामीटर का उपयोग करें।
एक अतिरिक्त पैरामीटर (--split_lines) है जिसका उपयोग उन दस्तावेज़ों के साथ किया जाना चाहिए जिनमें दस्तावेज़ की प्रत्येक पंक्ति एक वाक्य (या पैराग्राफ) है। डिफ़ॉल्ट रूप से, FARO दस्तावेज़ में पंक्तियों को जोड़ने का प्रयास करता है क्योंकि कई मामलों में एक अलग पंक्ति का मतलब एक अलग वाक्य नहीं होता (जैसे PDF में)।
git-lfs (GIT बड़ी फ़ाइल स्टोरेज) स्थापित करने के निर्देशों का पालन करें, जो इस पर निर्भर करता है
पैकेज को https://git-lfs.github.com/ से डाउनलोड करें और स्थापना निर्देशों का पालन करें।
Windows पर "git bash" स्थापित करें (इस लिंक में Windows अनुभाग देखें https://git-scm.com/downloads) और बाद में https://git-lfs.github.com/ पर जाएँ और स्थापना निर्देशों का पालन करें।
brew install git-lfs
git lfs install
एक models फ़ोल्डर सभी मॉडलों के साथ बनाया जाएगा।
पूर्ण कार्यक्षमता केवल स्पेनिश दस्तावेज़ों के साथ काम करती है, हालाँकि इसे नई भाषाओं (विशेष रूप से यदि वे SpaCy द्वारा समर्थित हैं, जो वाक्य, दस्तावेज़ों को संसाधित करने के लिए उपयोग किया जाने वाला NLP उपकरण है) के साथ आसानी से विस्तार योग्य है।
सिस्टम पार्सिंग और PoS वाक्य प्रीप्रोसेसिंग के लिए SpaCy का उपयोग करता है। यद्यपि SpaCy शास्त्रीय संस्थाओं के लिए एक प्रशिक्षित NER सिस्टम प्रदान करता है, कस्टम NER का उपयोग शास्त्रीय संस्थाओं (व्यक्ति, संगठन, स्थानीयकरण) और व्यवसायों/नौकरी पदों के निष्कर्षण के लिए किया जाता है।
TEGRA गैलिसिया (स्पेन) में स्थित एक अनुसंधान एवं विकास साइबर सुरक्षा केंद्र है। यह साइबर सुरक्षा के क्षेत्र में नवीन उत्पादों और सेवाओं को बनाने के लिए टेलीफ़ोनिका, एक अग्रणी अंतरराष्ट्रीय दूरसंचार कंपनी, अपनी वैश्विक साइबर सुरक्षा इकाई ElevenPaths के माध्यम से, और Gradiant, एक ICT अनुसंधान एवं विकास केंद्र जिसमें 100 से अधिक पेशेवर कनेक्टिविटी, सुरक्षा और खुफिया जैसे क्षेत्रों में काम कर रहे हैं, के बीच एक संयुक्त प्रयास है।
TEGRA का काम साइबर सुरक्षा परिदृश्य के भीतर दो क्षेत्रों पर केंद्रित है: डेटा सुरक्षा और सुरक्षा विश्लेषण। हम अत्याधुनिक तकनीकें बनाने के लिए प्रतिबद्ध हैं जो हमारे उत्पादों को पोषित कर सकती हैं और इस प्रकार उन्हें विभेदित मूल्य प्रदान कर सकती हैं।
CONTRIBUTORS फ़ाइल देखें।
CHANGELOG