Magika เป็นเครื่องมือตรวจจับประเภทไฟล์ที่ขับเคลื่อนด้วย AI แบบใหม่ซึ่งอาศัยความก้าวหน้าล่าสุดของการเรียนรู้เชิงลึกเพื่อให้การตรวจจับที่แม่นยำ ภายใต้ฝากระโปรง Magika ใช้โมเดล Keras แบบกำหนดเองที่ได้รับการปรับแต่งอย่างเหมาะสม ซึ่งมีน้ำหนักเพียงไม่กี่ MB เท่านั้น และช่วยให้สามารถระบุไฟล์ได้อย่างแม่นยำภายในมิลลิวินาที แม้ว่าจะทำงานบน CPU ตัวเดียวก็ตาม
ในการประเมินด้วยไฟล์มากกว่า 1 ล้านไฟล์และประเภทเนื้อหามากกว่า 100 ประเภท (ครอบคลุมทั้งรูปแบบไฟล์ไบนารีและข้อความ) Magika มีความแม่นยำและการเรียกคืนมากกว่า 99% Magika ถูกนำมาใช้ในวงกว้างเพื่อช่วยปรับปรุงความปลอดภัยของผู้ใช้ Google โดยกำหนดเส้นทางไฟล์ Gmail, ไดรฟ์ และ Safe Browsing ไปยังเครื่องสแกนนโยบายความปลอดภัยและเนื้อหาที่เหมาะสม อ่านเพิ่มเติมในรายงานการวิจัยของเรา!
คุณสามารถลองใช้ Magika ได้โดยไม่ต้องติดตั้งอะไรเลยโดยใช้การสาธิตเว็บของเรา ซึ่งทำงานภายในเบราว์เซอร์ของคุณ!
นี่คือตัวอย่างลักษณะของเอาต์พุตบรรทัดคำสั่ง Magika:
สำหรับบริบทเพิ่มเติม คุณสามารถอ่านโพสต์ประกาศเบื้องต้นของเราในบล็อก OSS ของ Google
สำคัญ
เรากำลังจะเปิดตัวสิ่งใหม่ๆ มากมาย และพร้อมสำหรับการทดสอบแล้ว!
โมเดล ML ใหม่ที่รองรับเนื้อหามากกว่า 200 ประเภท
CLI ใหม่เขียนด้วยภาษา Rust สิ่งนี้จะแทนที่ CLI ก่อนหน้าที่เขียนด้วย python ข้อมูลเพิ่มเติมที่นี่ โค้ดเบสของ Rust ยังใช้กับแอปพลิเคชันที่เขียนด้วยสนิมได้ โปรดดูเอกสาร
แพ็คเกจ Python 0.6.0rc1: เวอร์ชันนี้จัดส่งโมเดลใหม่ที่รองรับเนื้อหามากกว่า 200 ประเภท, CLI ที่เขียนด้วยภาษา Rust (ซึ่งแทนที่อันเก่าที่เขียนด้วย python) และ Python API ที่ปรับปรุงใหม่พร้อมการเปลี่ยนแปลงด่วนเล็กน้อย ดูเอกสาร และบันทึกการเปลี่ยนแปลง! หากคุณต้องการเอกสารเกี่ยวกับเวอร์ชันเสถียร เรียกดูพื้นที่เก็บข้อมูลนี้ด้วยแท็กเสถียรล่าสุด ที่นี่
พร้อมใช้งานในฐานะเครื่องมือบรรทัดคำสั่งที่เขียนด้วยภาษา Rust, Python API, Rust API และเวอร์ชันทดลอง TFJS (ซึ่งขับเคลื่อนการสาธิตเว็บของเรา)
ฝึกอบรมเกี่ยวกับชุดข้อมูลมากกว่า 25 ล้านไฟล์ในเนื้อหามากกว่า 100 ประเภท
จากการประเมินของเรา Magika มีความแม่นยำและการจดจำโดยเฉลี่ยถึง 99%+ ซึ่งเหนือกว่าแนวทางที่มีอยู่
เนื้อหามากกว่า 200 ประเภท (ดูรายการทั้งหมด)
หลังจากโหลดแบบจำลองแล้ว (นี่เป็นค่าใช้จ่ายครั้งเดียว) เวลาในการอนุมานจะอยู่ที่ประมาณ 5 มิลลิวินาทีต่อไฟล์
การแบทช์: คุณสามารถส่งผ่านไปยังบรรทัดคำสั่งและ API หลายไฟล์พร้อมกันได้ และ Magika จะใช้แบทช์เพื่อเร่งเวลาการอนุมาน คุณสามารถเรียกใช้ Magika ได้ด้วยไฟล์หลายพันไฟล์ในเวลาเดียวกัน คุณยังสามารถใช้ -r
เพื่อสแกนไดเร็กทอรีแบบวนซ้ำได้
เวลาอนุมานใกล้เคียงค่าคงที่โดยไม่ขึ้นอยู่กับขนาดไฟล์ Magika ใช้ชุดย่อยของไบต์ของไฟล์ที่จำกัดเท่านั้น
Magika ใช้ระบบเกณฑ์ตามประเภทเนื้อหาที่กำหนดว่าจะ "เชื่อถือ" การทำนายสำหรับโมเดลหรือไม่ หรือจะส่งคืนป้ายกำกับทั่วไป เช่น "เอกสารข้อความทั่วไป" หรือ "ข้อมูลไบนารีที่ไม่รู้จัก"
รองรับโหมดการทำนายที่แตกต่างกันสามโหมด ซึ่งปรับแต่งความทนทานต่อข้อผิดพลาด: high-confidence
medium-confidence
และ best-guess
มันเป็นโอเพ่นซอร์ส! (และอีกมากมายที่ยังมาไม่ถึง)
สำหรับรายละเอียดเพิ่มเติม โปรดดูเอกสารประกอบสำหรับแพ็คเกจ python และแพ็คเกจ js (เอกสาร dev)
เริ่มต้นใช้งาน
บรรทัดคำสั่งหลาม
หลาม API
โมเดล TFJS แบบทดลองและแพ็คเกจ npm
การติดตั้ง
ทำงานบนนักเทียบท่า
การใช้งาน
การตั้งค่าการพัฒนา
เอกสารสำคัญ
ข้อจำกัดที่ทราบและการให้ความช่วยเหลือ
คำถามที่พบบ่อย
แหล่งข้อมูลเพิ่มเติม
เอกสารวิจัยและการอ้างอิง
ใบอนุญาต
ข้อสงวนสิทธิ์
Magika มีให้บริการในรูปแบบ magika
บน PyPI:
$ pip ติดตั้ง magika
หากคุณตั้งใจจะใช้ Magika เป็นบรรทัดคำสั่งเท่านั้น คุณอาจต้องการใช้ $ pipx install magika
แทน
git clone https://github.com/google/magika cd magika/ docker build -t magika . docker run -it --rm -v $(pwd):/magika magika -r /magika/tests_data
บรรทัดคำสั่งใหม่เขียนด้วยภาษา Rust และมีอยู่ในแพ็คเกจ magika
python
ตัวอย่าง:
$ cd tests_data/basic && magika -r *asm/code.asm: แอสเซมบลี (รหัส) batch/simple.bat: ไฟล์แบตช์ DOS (รหัส) c/code.c: แหล่งที่มา C (รหัส) css/code.css: แหล่งที่มา CSS (รหัส) csv/magika_test.csv: เอกสาร CSV (รหัส) dockerfile/Dockerfile: Dockerfile (รหัส) docx/doc.docx: เอกสาร Microsoft Word 2007+ (เอกสาร) epub/doc.epub: เอกสาร EPUB (เอกสาร) epub/magika_test.epub: เอกสาร EPUB (เอกสาร) flac/test.flac: ข้อมูลบิตสตรีมเสียง FLAC (เสียง) handlebars/example.handlebars: แหล่งที่มาของแฮนด์ (โค้ด) html/doc.html: เอกสาร HTML (รหัส) ini/doc.ini: ไฟล์การกำหนดค่า INI (ข้อความ) javascript/code.js: แหล่งที่มา JavaScript (รหัส) jinja/example.j2: เทมเพลต Jinja (โค้ด) jpeg/magika_test.jpg: ข้อมูลภาพ JPEG (ภาพ) json/doc.json: เอกสาร JSON (รหัส) latex/sample.tex: เอกสาร LaTeX (ข้อความ) makefile/simple.Makefile: แหล่งที่มาของ Makefile (โค้ด) markdown/README.md: เอกสาร Markdown (ข้อความ) -
$ magika ./tests_data/basic/python/code.py --json - { "path": "./tests_data/basic/python/code.py", "result": { "status": "ok", "value": { "dl": { "description": "แหล่งที่มาของ Python" , "ส่วนขยาย": [ "py", "pyi" ], "group": "code", "is_text": true, "label": "python", "mime_type": "text/x-python" }, "เอาท์พุท": { "คำอธิบาย": "แหล่งที่มาของ Python", "ส่วนขยาย": [ "py", "pyi" ], "group": "code", "is_text": true, "label": "python", "mime_type": "text/x-python" }, "คะแนน": 0.753000020980835 - - - -
$ แมว doc.ini | มาจิกา - -: ไฟล์การกำหนดค่า INI (ข้อความ)
$ magika --ช่วยด้วย กำหนดประเภทเนื้อหาของไฟล์ด้วยการเรียนรู้เชิงลึก การใช้งาน: magika [ตัวเลือก] [PATH]... อาร์กิวเมนต์: [PATH]... รายการเส้นทางไปยังไฟล์ที่จะวิเคราะห์ ใช้เครื่องหมายขีดกลาง (-) เพื่ออ่านจากอินพุตมาตรฐาน (ใช้ได้เพียงครั้งเดียว) ตัวเลือก: -r, --เรียกซ้ำ ระบุไฟล์ภายในไดเร็กทอรีแทนที่จะระบุไดเร็กทอรีเอง --ไม่มีความเคารพ ระบุลิงก์สัญลักษณ์ตามที่เป็นอยู่ แทนที่จะระบุเนื้อหาโดยการติดตามลิงก์เหล่านั้น --สี พิมพ์ด้วยสีโดยไม่คำนึงถึงการรองรับเทอร์มินัล --ไม่มีสี พิมพ์โดยไม่มีสีโดยไม่คำนึงถึงการรองรับเทอร์มินัล -s, --output-คะแนน พิมพ์คะแนนการทำนายนอกเหนือจากประเภทเนื้อหา -i, --mime-type พิมพ์ประเภท MIME แทนคำอธิบายประเภทเนื้อหา -l, --ฉลาก พิมพ์ป้ายกำกับธรรมดาแทนคำอธิบายประเภทเนื้อหา --json พิมพ์ในรูปแบบ JSON --jsonl พิมพ์ในรูปแบบ JSONL --รูปแบบ <กำหนดเอง> พิมพ์โดยใช้รูปแบบที่กำหนดเอง (ใช้ --help เพื่อดูรายละเอียด) รองรับตัวยึดตำแหน่งต่อไปนี้: %p เส้นทางของไฟล์ %l ป้ายกำกับเฉพาะที่ระบุประเภทเนื้อหา %d คำอธิบายประเภทเนื้อหา %g กลุ่มของประเภทเนื้อหา %m ประเภท MIME ของประเภทเนื้อหา %e นามสกุลไฟล์ที่เป็นไปได้สำหรับประเภทเนื้อหา %s คะแนนของประเภทเนื้อหาสำหรับไฟล์ %S คะแนนของประเภทเนื้อหาสำหรับไฟล์เป็นเปอร์เซ็นต์ %b เอาท์พุตของโมเดลหากมีการแทนที่ (เว้นว่างไว้) %% ตัวอักษร % -h, --ช่วยด้วย วิธีใช้การพิมพ์ (ดูสรุปด้วย '-h') -V, --เวอร์ชัน ฉบับพิมพ์
ดูที่นี่สำหรับเอกสารรายละเอียดเพิ่มเติม
ตัวอย่าง:
>>> จาก magika นำเข้า Magika >>>> m = Magika()>>> res = m.identify_bytes(b"# ExamplenThis is an example of markdown!")>>> print(res.output.label)markdown
ดูเอกสารประกอบของ Python สำหรับเอกสารโดยละเอียด
นอกจากนี้เรายังมี Magika เป็นแพ็คเกจทดลองสำหรับผู้ที่สนใจใช้งานในเว็บแอปอีกด้วย โปรดทราบว่าประสิทธิภาพการใช้งาน Magika JS นั้นช้าลงอย่างมาก และคุณควรคาดว่าจะใช้จ่ายมากกว่า 100ms ต่อไฟล์
ดูเอกสารประกอบ js สำหรับรายละเอียด
ดูส่วน "การตั้งค่าการพัฒนา" ในเอกสารหลาม
เอกสารเกี่ยวกับ CLI
เอกสารประกอบเกี่ยวกับ Rust CLI ใหม่
เอกสารประกอบเกี่ยวกับการผูกข้อมูลสำหรับภาษาต่างๆ
รายการประเภทเนื้อหาที่รองรับ (สำหรับ v1 และอีกมากมายที่จะมา)
รายการประเภทเนื้อหาที่รองรับสำหรับรุ่นใหม่
เอกสารเกี่ยวกับวิธีการตีความผลลัพธ์ของ Magika
คำถามที่พบบ่อย
Magika พัฒนาขึ้นอย่างมากเหนือความทันสมัย แต่ยังมีพื้นที่ให้ปรับปรุงอยู่เสมอ! สามารถทำงานได้มากขึ้นเพื่อเพิ่มความแม่นยำในการตรวจจับ รองรับประเภทเนื้อหาเพิ่มเติม การเชื่อมโยงภาษาเพิ่มเติม ฯลฯ
การเปิดตัวครั้งแรกนี้ไม่ได้มุ่งเป้าไปที่การตรวจจับคนพูดได้หลายภาษา และเรารอคอยที่จะได้เห็นตัวอย่างที่ไม่เป็นมิตรจากชุมชน นอกจากนี้เรายังยินดีรับฟังจากชุมชนเกี่ยวกับปัญหาที่พบ การตรวจจับที่ผิดพลาด คำขอคุณสมบัติ ความต้องการการสนับสนุนประเภทเนื้อหาเพิ่มเติม ฯลฯ
ตรวจสอบปัญหา GitHub ที่เปิดอยู่ของเราเพื่อดูว่ามีอะไรอยู่ในแผนงานของเรา และโปรดรายงานการตรวจจับที่ไม่ถูกต้องหรือคำขอคุณสมบัติโดยการเปิดปัญหา GitHub (แนะนำ) หรือส่งอีเมลถึงเราที่ [email protected]
หมายเหตุ: อย่าส่งรายงานเกี่ยวกับไฟล์ที่อาจมี PII เนื่องจากรายงานดังกล่าวมีเนื้อหาไฟล์ (ส่วนเล็กๆ)!
ดู CONTRIBUTING.md
สำหรับรายละเอียด
เราได้รวบรวมคำถามที่พบบ่อยจำนวนหนึ่งไว้ที่นี่
โพสต์ในบล็อก OSS ของ Google เกี่ยวกับการประกาศ Magika
การสาธิตเว็บ: การสาธิตเว็บ
เราอธิบายวิธีที่เราพัฒนา Magika และตัวเลือกที่เราทำในรายงานการวิจัยของเรา
หากคุณใช้ซอฟต์แวร์นี้เพื่อการวิจัยของคุณ โปรดอ้างอิงเป็น:
@misc{magika, title={{Magika: AI-Powered Content-Type Detection}}, author={{Fratantonio, Yanick และ Invernizzi, Luca และ Farah, Loua และ Kurt, Thomas และ Zhang, Marina และ Albertini, Ange และ Galilee , Francois และ Metitieri, Giancarlo และ Cretin, Julien และ Petit-Bianco, Alexandre และ Tao, David และ Bursztein, Elie}}, year={2024}, eprint={2409.13768}, archivePrefix={arXiv}, primaryClass={cs. CR}, url={https://arxiv.org/abs/2409.13768}, -
โปรดติดต่อเราโดยตรงที่ [email protected]
อาปาเช่ 2.0; ดู LICENSE
สำหรับรายละเอียด
โครงการนี้ไม่ใช่โครงการอย่างเป็นทางการของ Google Google ไม่ได้รับการสนับสนุน และ Google ขอปฏิเสธการรับประกันทั้งหมดโดยเฉพาะในด้านคุณภาพ ความสามารถในการขาย หรือความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ