Google опубликовал Magika 1.0, инструментарий для определения типа содержимого файлов

Компания Google представила релиз инструментария Magika 1.0, предназначенного для определения типа содержимого на основе анализа имеющихся в файле данных. Magika может точно определять в содержимом используемые языки программирования, методы сжатия, установочные пакеты, исполняемый код, виды разметки, форматы звука, видео, документов и изображений. Связанный с проектом инструментарий и готовая модель машинного обучения распространяются под лицензией Apache 2.0. Обвязки подготовлены для языков Rust, Python, JavaScript/TypeScript и Go.

От похожих проектов, определяющих MIME-тип по содержимому, Magika отличается применением методов машинного обучения, высокой производительностью и точностью определения. Модель обучена с использованием фреймворка Keras на 100 млн примеров файлов (размер набора данных более 3 TB) и поддерживает распознавание 200 типов данных с точностью не менее 99%. Модель скомпонована в формате ONNX и имеет размер всего несколько мегабайт. Задействование методов глубокого машинного обучения позволило на 50% повысить точность определения по сравнению с ранее применявшейся в Google системой на основе вручную заданных правил.

В Google система используется для классификации файлов в сервисах Gmail, Drive, Code Insight и Safe Browsing при выполнения проверок безопасности и соответствия правилам сервисов. Обеспечена интеграция Magika в платформы VirusTotal и abuse.ch в качестве звена для первичной фильтрации файлов перед выполнением специфичных анализаторов. Развёрнутая в инфраструктуре Google конфигурация Magika обеспечивает сканирование нескольких миллионов файлов в секунду и нескольких сотен миллиардов файлов в неделю. После загрузки модели время формирования вывода составляет 5 мс при тестировании на одном ядре CPU. Время определения почти не зависит от размера файла.

Для задействования Magika в своих проектах подготовлены утилита командной строки, пакеты для Python, Rust и Go, а также JavaScript-библиотека, способная работать в браузере или в проектах на базе Node.js. Интерфейс командной строки и API поддерживают выполнение операций в пакетном режиме, т.е. позволяют проверять несколько файлов за один запрос. Имеется режим рекурсивного сканирования всего содержимого каталога и три режима прогнозирования для настройки устойчивости к ошибкам (высокая уверенность, средняя уверенность и наилучшая догадка).

Изначально проект развивался на языке Python, но при подготовке релиза 1.0 движок для определения типов контента был переписан на языке Rust, что позволило добиться более высокой производительности, сохранив должный уровень защищённости кода. Для выполнения модели машинного обучения задействован фреймворк ONNX Runtime, а для параллельной асинхронной обработки запросов – библиотека Tokio. На MacBook Pro (M4) производительность движка позволяет обрабатывать около 1000 файлов в секунду.

Помимо нового движка, из изменений в выпуске 1.0 отмечается расширение числа поддерживаемых типов с примерно 100 до 200; добавление нового клиента командной строки, написанного на Rust; повышение точности определения текстовых форматов, таких как файлы конфигурации и код; переработка модулей для Python и TypeScript для упрощения их интеграции с другими проектами. Среди поддерживаемых новых типов контента: форматы, применяемые при машинном обучении и AI; языки программирования Swift, Kotlin, TypeScript, Dart, Solidity (solidity), Web Assembly и Zig; DevOps-компоненты (Dockerfiles, TOML, HashiCorp, сборочные файлы Bazel и правила YARA); БД SQLite; файлы
AutoCAD (dwg, dxf), Adobe Photoshop (psd) и шрифты (woff, woff2). Улучшено разделение кода на C++ и C, JavaScript и TypeScript.

Release. Ссылка here.