1MB的神奇AI,檢測百萬文件,99%的準(zhǔn)確率!
在 Web 開發(fā)中,上傳文件至服務(wù)器前的文件類型檢測至關(guān)重要。這一步驟不僅能夠確保服務(wù)器和用戶的安全,攔截可能的惡意文件,還能保證上傳的文件完整且符合預(yù)期,提高數(shù)據(jù)的合規(guī)性。同時,通過及時給予用戶反饋和指導(dǎo),也能提升用戶體驗(yàn),避免不必要的困惑。
之前阿寶哥有介紹過 “JavaScript 如何檢測文件的類型?”,現(xiàn)在我們已經(jīng)進(jìn)入 AI 時代,要與時俱進(jìn)。接下來,阿寶哥將介紹如何利用谷歌開源的 Magika[1] 工具,實(shí)現(xiàn)精準(zhǔn)的文件類型檢測。
圖片
Magika 簡介
Magika 是一款新穎的人工智能文件類型檢測工具,依靠最新的深度學(xué)習(xí)技術(shù)提供精確的檢測。它采用了高度優(yōu)化的定制 Keras 模型,該模型僅重約 1MB,即使在單 CPU 上運(yùn)行,也能在幾毫秒內(nèi)實(shí)現(xiàn)精確的文件識別。
在對超過 100 萬個文件和超過 100 種內(nèi)容類型(涵蓋二進(jìn)制和文本文件格式)的評估中,Magika 實(shí)現(xiàn)了 99% 以上的精確度和召回率。Magika 被大規(guī)模使用,通過將 Gmail、云端硬盤和安全瀏覽文件路由到適當(dāng)?shù)陌踩蛢?nèi)容策略掃描儀,來保障 Google 用戶的安全。
Magika 的特點(diǎn)
- 支持檢測 100 多種文件類型。
- 支持 Python 命令行、Python API 和實(shí)驗(yàn)性 TFJS 版本等多種使用方式。
- 模型加載后(這是一次性開銷),每個文件的推理時間約為 5 毫秒。
- 接近恒定的推理時間,與文件大小無關(guān)。Magika 僅使用文件字節(jié)的有限子集。
- 支持批處理:支持同時向命令行和 API 發(fā)送多個文件,Magika 將使用批處理來加快推理時間。
- 在包含 100 多種內(nèi)容類型的超過 2500 萬個文件的數(shù)據(jù)集上進(jìn)行了訓(xùn)練。
- 經(jīng)過大規(guī)模評估,Magika 的平均精確度和召回率達(dá)到 99% 以上,優(yōu)于現(xiàn)有方法。
- Magika 使用每個內(nèi)容類型的閾值系統(tǒng)來確定是否“信任”模型的預(yù)測,或者是否返回通用標(biāo)簽,例如“通用文本文檔”或“未知二進(jìn)制數(shù)據(jù)”。
- 支持三種不同的預(yù)測模式,調(diào)整對錯誤的容忍度:高置信度、中等置信度和最佳猜測。
Magika 的性能
圖片
性能方面,Magika 憑借其 AI 模型和大型訓(xùn)練數(shù)據(jù)集,在包含 100 多種文件類型的 1M 文件基準(zhǔn)測試上進(jìn)行評估時,其性能比其他現(xiàn)有工具高出約 20%。按文件類型細(xì)分,如下表所示,我們發(fā)現(xiàn)文本文件的性能提升更大,包括其他工具可能難以處理的代碼文件和配置文件。
圖片
Magika 在線示例
Magika 支持瀏覽器和 Node.js 環(huán)境,你可以通過訪問 Web Demo[2] 網(wǎng)站來體驗(yàn)它的功能。
圖片
Magika 快速上手
安裝 magika
npm install magika
or
pnpm add magika
瀏覽器中使用 magika
import { Magika } from "magika";
const file = new File(["# Hello I am a markdown file"], "hello.md");
const fileBytes = new Uint8Array(await file.arrayBuffer());
const magika = new Magika();
await magika.load();
const prediction = await magika.identifyBytes(fileBytes);
console.log(prediction);
Node.js 中使用 magika
import { readFile } from "fs/promises";
import { MagikaNode as Magika } from "magika";
const data = await readFile("some file");
const magika = new Magika();
await magika.load();
const prediction = await magika.identifyBytes(data);
console.log(prediction);
有關(guān) Magika 的相關(guān)內(nèi)容就介紹到這里,如果你想進(jìn)一步了解 Magika,可以繼續(xù)閱讀 Magika: AI powered fast and efficient file type identification[3] 這篇文章。
參考資料
[1]Magika: https://github.com/google/magika
[2]Web Demo: https://google.github.io/magika/
[3]Magika: AI powered fast and efficient file type identification: https://opensource.googleblog.com/2024/02/magika-ai-powered-fast-and-efficient-file-type-identification.html