Magika es una novedosa herramienta de detección de tipos de archivos impulsada por IA que se basa en el reciente avance del aprendizaje profundo para proporcionar una detección precisa. Bajo el capó, Magika emplea un modelo Keras personalizado y altamente optimizado que solo pesa unos pocos MB y permite una identificación precisa de archivos en milisegundos, incluso cuando se ejecuta en una sola CPU.
En una evaluación con más de 1 millón de archivos y más de 100 tipos de contenido (que cubren formatos de archivos binarios y textuales), Magika logra una precisión y recuperación de más del 99 %. Magika se utiliza a escala para ayudar a mejorar la seguridad de los usuarios de Google al enrutar archivos de Gmail, Drive y Navegación segura a los escáneres de políticas de contenido y seguridad adecuados. ¡Lea más en nuestro trabajo de investigación!
¡Puedes probar Magika sin instalar nada usando nuestra demostración web, que se ejecuta localmente en tu navegador!
Aquí hay un ejemplo de cómo se ve la salida de la línea de comando de Magika:
Para obtener más contexto, puede leer nuestra publicación de anuncio inicial en el blog OSS de Google.
Importante
¡Estamos a punto de lanzar una serie de cosas nuevas y están listas para probar!
Un nuevo modelo de ML compatible con más de 200 tipos de contenido.
Una nueva CLI escrita en Rust. Esto reemplazará la CLI anterior escrita en Python. Más información aquí. El código base de Rust también se puede utilizar para aplicaciones escritas en Rust, consulte los documentos.
Paquete Python 0.6.0rc1: esta versión incluye el nuevo modelo con soporte para más de 200 tipos de contenido, la CLI escrita en Rust (que reemplaza la anterior escrita en Python) y una API de Python renovada con algunos cambios importantes; consulte los documentos. y el registro de cambios! Si necesita documentos sobre la versión estable, explore este repositorio con la última etiqueta estable, aquí.
Disponible como una herramienta de línea de comandos escrita en Rust, una API de Python, una API de Rust y una versión experimental de TFJS (que impulsa nuestra demostración web).
Capacitado en un conjunto de datos de más de 25 millones de archivos en más de 100 tipos de contenido.
Según nuestra evaluación, Magika logra una precisión y recuperación promedio de más del 99%, superando los enfoques existentes.
Más de 200 tipos de contenido (ver lista completa).
Una vez cargado el modelo (se trata de una sobrecarga única), el tiempo de inferencia es de aproximadamente 5 ms por archivo.
Procesamiento por lotes: puede pasar a la línea de comando y a la API varios archivos al mismo tiempo, y Magika utilizará el procesamiento por lotes para acelerar el tiempo de inferencia. Puedes invocar Magika incluso con miles de archivos al mismo tiempo. También puedes usar -r
para escanear recursivamente un directorio.
Tiempo de inferencia casi constante independientemente del tamaño del archivo; Magika sólo utiliza un subconjunto limitado de bytes del archivo.
Magika utiliza un sistema de umbral por tipo de contenido que determina si "confiar" en la predicción del modelo o si devolver una etiqueta genérica, como "Documento de texto genérico" o "Datos binarios desconocidos".
Admite tres modos de predicción diferentes, que modifican la tolerancia a los errores: high-confidence
, medium-confidence
y best-guess
.
¡Es de código abierto! (Y aún hay más por venir).
Para obtener más detalles, consulte la documentación del paquete python y del paquete js (documentos de desarrollo).
Empezando
Línea de comando de Python
API de Python
Modelo TFJS experimental y paquete npm
Instalación
Ejecutando en Docker
Uso
Configuración de desarrollo
Documentación importante
Limitaciones conocidas y contribución
Preguntas frecuentes
Recursos adicionales
Trabajo de investigación y cita
Licencia
Descargo de responsabilidad
Magika está disponible como magika
en PyPI:
$ pip instalar magika
Si tiene la intención de utilizar Magika sólo como línea de comando, es posible que desee utilizar $ pipx install magika
en su lugar.
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
La nueva línea de comando está escrita en Rust y está disponible en el paquete magika
python.
Ejemplos:
$ cd tests_data/basic && magika -r *asm/code.asm: Ensamblaje (código) lote/simple.bat: archivo por lotes de DOS (código) c/code.c: fuente C (código) css/code.css: fuente CSS (código) csv/magika_test.csv: documento CSV (código) dockerfile/Dockerfile: Dockerfile (código) docx/doc.docx: documento de Microsoft Word 2007+ (documento) epub/doc.epub: documento EPUB (documento) epub/magika_test.epub: documento EPUB (documento) flac/test.flac: datos de flujo de bits de audio FLAC (audio) handlebars/example.handlebars: Fuente del manillar (código) html/doc.html: documento HTML (código) ini/doc.ini: archivo de configuración INI (texto) javascript/code.js: fuente JavaScript (código) jinja/example.j2: Plantilla Jinja (código) jpeg/magika_test.jpg: datos de imagen JPEG (imagen) json/doc.json: documento JSON (código) latex/sample.tex: documento LaTeX (texto) makefile/simple.Makefile: fuente del Makefile (código) markdown/README.md: Documento de rebajas (texto) [...]
$ magia ./tests_data/basic/python/code.py --json [ { "ruta": "./tests_data/basic/python/code.py", "resultado": { "estado": "ok", "valor": { "dl": { "descripción": "fuente de Python" , "extensiones": [ "py", "pyi" ], "grupo": "código", "is_text": verdadero, "etiqueta": "python", "mime_type": "text/x-python" }, "salida": { "descripción": "fuente Python", "extensiones": [ "py", "pyi" ], "grupo": "código", "is_text": verdadero, "etiqueta": "python", "mime_type": "text/x-python" }, "puntuación": 0,753000020980835 } } } ]
$ gato doc.ini | magika - -: archivo de configuración INI (texto)
$ magika --ayuda Determina el tipo de contenido de los archivos con aprendizaje profundo. Uso: magika [OPCIONES] [RUTA]... Argumentos: [RUTA]... Lista de rutas a los archivos a analizar. Utilice un guión (-) para leer desde la entrada estándar (solo se puede utilizar una vez). Opciones: -r, --recursivo Identifica archivos dentro de directorios en lugar de identificar el directorio en sí. --sin-desreferencia Identifica enlaces simbólicos tal cual en lugar de identificar su contenido siguiéndolos --bandera Imprime con colores independientemente del soporte del terminal --sin-colores Imprime sin colores independientemente del soporte del terminal -s, --puntuación de salida Imprime la puntuación de predicción además del tipo de contenido. -i, --tipo-mime Imprime el tipo MIME en lugar de la descripción del tipo de contenido. -l, --etiqueta Imprime una etiqueta simple en lugar de la descripción del tipo de contenido. --json Imprime en formato JSON --jsonl Imprime en formato JSONL --formatoImprime usando un formato personalizado (use --help para más detalles). Se admiten los siguientes marcadores de posición: %p La ruta del archivo %l La etiqueta única que identifica el tipo de contenido. %d La descripción del tipo de contenido. %g El grupo del tipo de contenido. %m El tipo MIME del tipo de contenido %e Posibles extensiones de archivo para el tipo de contenido %s La puntuación del tipo de contenido del archivo. %S La puntuación del tipo de contenido del archivo en porcentaje %b La salida del modelo si se anula (vacío en caso contrario) %% Un % literal -h, --ayuda Imprimir ayuda (ver un resumen con '-h') -V, --versión Versión impresa
Consulte aquí para obtener documentación más detallada.
Ejemplos:
>>> from magika import Magika>>> m = Magika()>>> res = m.identify_bytes(b"# Ejemplon¡Este es un ejemplo de rebajas!")>>> print(res.output.label)markdown
Consulte la documentación de Python para obtener documentación detallada.
También proporcionamos Magika como un paquete experimental para personas interesadas en utilizarlo en una aplicación web. Tenga en cuenta que el rendimiento de la implementación de Magika JS es significativamente más lento y debería esperar gastar más de 100 ms por archivo.
Consulte la documentación de js para obtener más detalles.
Consulte la sección "Configuración de desarrollo" en los documentos de Python.
Documentación sobre la CLI
Documentación sobre la nueva CLI de Rust
Documentación sobre los enlaces para diferentes idiomas.
Lista de tipos de contenido admitidos (para v1, más por venir).
Lista de tipos de contenido admitidos para el nuevo modelo
Documentación sobre cómo interpretar la producción de Magika.
Preguntas frecuentes
Magika mejora significativamente con respecto a lo último en tecnología, ¡pero siempre hay margen de mejora! Se puede trabajar más para aumentar la precisión de la detección, admitir tipos de contenido adicionales, enlaces para más idiomas, etc.
Esta versión inicial no tiene como objetivo la detección políglota y esperamos ver ejemplos contradictorios de la comunidad. También nos encantaría recibir noticias de la comunidad sobre los problemas encontrados, detecciones erróneas, solicitudes de funciones, necesidad de soporte para tipos de contenido adicionales, etc.
Consulte nuestros problemas abiertos de GitHub para ver qué hay en nuestra hoja de ruta e informe detecciones erróneas o solicitudes de funciones abriendo problemas de GitHub (preferido) o enviándonos un correo electrónico a [email protected].
NOTA: NO envíe informes sobre archivos que puedan contener PII, ¡el informe contiene (una pequeña) parte del contenido del archivo!
Consulte CONTRIBUTING.md
para obtener más detalles.
Hemos recopilado una serie de preguntas frecuentes aquí.
Publicación del blog OSS de Google sobre el anuncio de Magika.
Demostración web: demostración web.
Describimos cómo desarrollamos Magika y las decisiones que tomamos en nuestro trabajo de investigación.
Si utiliza este software para su investigación, cítelo como:
@misc{magika, title={{Magika: Detección de tipo de contenido impulsada por IA}}, autor={{Fratantonio, Yanick e Invernizzi, Luca y Farah, Loua y Kurt, Thomas y Zhang, Marina y Albertini, Ange y Galilee , Francois y Metitieri, Giancarlo y Cretin, Julien y Petit-Bianco, Alexandre y Tao, David y Bursztein, Elie}}, año={2024}, eprint={2409.13768}, archivePrefix={arXiv}, PrimaryClass={cs. CR}, URL={https://arxiv.org/abs/2409.13768}, }
Por favor contáctenos directamente en [email protected]
Apache 2.0; consulte LICENSE
para obtener más detalles.
Este proyecto no es un proyecto oficial de Google. No cuenta con el respaldo de Google y Google renuncia específicamente a todas las garantías en cuanto a su calidad, comerciabilidad o idoneidad para un propósito particular.