500MB压到97MB,AI文本检测器在浏览器本地跑,不上传
作者把一个 RoBERTa 文本检测模型从约 500 MB 压到约 97 MB,在浏览器客户端里直接跑。同时打包的还有约 26 MB 的图像检测器。检测全部在本地完成,内容不发往服务器。
模型不是从零训练的。基底是两个现成的开源检测器:fakespot-ai/roberta-base-ai-text-detection-v1(Apache-2.0)和 Community Forensics(commfor-model-384,MIT)。作者的工作是微调、压缩和浏览器运行时实现。
作者做了轻量微调,数据里人类和 AI 文本都有。HC3、GPT-wiki-intro、HAP-E、WildChat、Gutenberg,还有本地用 Gemma-3-1B 生成的文本。之后又用 WiSE-FT,在原始权重和微调权重之间插值,防止模型偏离原始版本太远。
压缩分两块。词嵌入矩阵从 ONNX 图里拿出来,存成 int4,配 fp16 每行缩放。这部分约 19 MB 加 2 MB。矩阵在 JavaScript 里反量化,再传给 transformer 主体。主体用混合精度量化,约 75 MB。字节级 BPE 分词器和 Fakespot 的 clean_text 预处理,也在 JavaScript 里重新实现了一遍。
图像模型是量化过的 Community Forensics ViT,输出分数做了校准,约 26 MB。调整大小、中心裁剪、归一化都在本地完成,然后才进入推理。
运行时用 ONNX Runtime Web 1.30。有 GPU 适配器就走 WebGPU,否则退回线程 WASM。为了让线程 WASM 能在 GitHub Pages 上跑,service worker 加了 COOP/COEP 头。模型和运行时文件也被它缓存。
首次真实检查前有预热运行,专门编译 GPU 着色器。之后,在作者的笔记本上,约 100 个 token 的文本检查大约 60 毫秒,图像大约 200 毫秒。
训练目录里的所有步骤都在单台笔记本上跑完。候选基准、调优、WiSE alpha 选择、导出、量化扫描、评估,全都包括在内。作者想收集反馈,尤其是量化选择,以及模型在你自己的文本上失效的例子。
作者也列出了局限。高分不证明谁写了某段文字。短文本、随意文本、改写、重度编辑、截图、裁剪,还有更新的生成器,都会让模型变不准。首次加载是一次大下载,手机上尤其明显。