Společnost Google představila vydání nástroje Magika 1.0, určeného k určení typu obsahu na základě analýzy dat obsažených v souboru. Magika dokáže přesně určit programovací jazyky, metody komprese, instalační balíčky, spustitelný kód, typy značkování, formáty zvuku, videa, dokumentů a obrázků obsažené v obsahu. Související nástroje a hotový model strojového učení se šíří pod licencí Apache 2.0. Knihovny byly připraveny pro jazyky Rust, Python, JavaScript/TypeScript a Go.
Na rozdíl od podobných projektů, které určují MIME typ na základě obsahu, se Magika vyznačuje použitím metod strojového učení, výkonem a přesností určení. Model byl vyškolen pomocí frameworku Keras na 100 milionech příkladů souborů (velikost datové sady přes 3 TB) a podporuje rozpoznávání 200 typů dat s přesností alespoň 99 %. Model je sestaven ve formátu ONNX a má velikost pouhých několik megabajtů. Využití metod hlubokého strojového učení umožnilo zvýšit přesnost určení o 50 % ve srovnání s dříve používaným systémem Google založeným na ručně definovaných pravidlech.
V Google se systém používá k třídění souborů v službách Gmail, Drive, Code Insight a Safe Browsing při provádění bezpečnostních kontrol a dodržování pravidel služeb. Magika je integrována do platforem VirusTotal a abuse.ch jako prvek pro primární filtrování souborů před provedením specifických analyzátorů. Nasazená konfigurace Magika ve struktuře Google zajišťuje skenování několika milionů souborů za sekundu a několika stovek miliard souborů týdně. Po nahrání modelu činí doba potřebná pro generování výstupu 5 ms při testování na jednom CPU jádře. Doba určení téměř nezávisí na velikosti souboru.
Pro Magika jsou k dispozici nástroje pro příkazový řádek, balíčky pro Python, Rust a Go, stejně jako JavaScriptová knihovna, která může fungovat v prohlížeči nebo v projektech založených na Node.js. Rozhraní příkazového řádku a API podporují dávkové zpracování, což znamená, že lze ověřit několik souborů jedním požadavkem. Existuje režim rekurzivního skenování celého obsahu adresáře a tři režimy predikce, které umožňují nastavení odolnosti vůči chybám (vysoká jistota, střední jistota a nejlepší odhad).
Projekt byl původně vyvíjen v programovacím jazyce Python, ale během přípravy verze 1.0 byl engine pro určování typů obsahu přepsán v jazyce Rust, což umožnilo dosáhnout vyššího výkonu při zachování potřebné úrovně zabezpečení kódu. Pro provádění modelu strojového učení byl použit framework ONNX Runtime a pro paralelní asynchronní zpracování požadavků knihovna Tokio. Na MacBooku Pro (M4) umožňuje výkon engine zpracovávat přibližně 1000 souborů za sekundu.
Kromě nového engine se ve verzi 1.0 uvádí rozšíření počtu podporovaných typů z přibližně 100 na 200; přidání nového příkazového klienta napsaného v Rustu; zvýšení přesnosti určování textových formátů, jako jsou konfigurační soubory a kód; přepracování modulů pro Python a TypeScript k usnadnění jejich integrace s dalšími projekty. Mezi nově podporované typy obsahu patří formáty používané ve strojovém učení a AI; programovací jazyky Swift, Kotlin, TypeScript, Dart, Solidity (solidity), Web Assembly a Zig; DevOps komponenty (Dockerfiles, TOML, HashiCorp, buildovací soubory Bazel a pravidla YARA); databáze SQLite; soubory AutoCAD (dwg, dxf), Adobe Photoshop (psd) a písma (woff, woff2). Bylo vylepšeno dělení kódu na C++ a C, JavaScript a TypeScript.
Zdroj: opennet.ru
