Skip to content

Releases: yinvoke/foxlet-translate

Foxlet Translate 0.5.0:重写分句器,AAR 缩小 25.75%

Choose a tag to compare

@github-actions github-actions released this 15 Sep 17:22

Foxlet Translate 0.5.0:重写分句器,AAR 缩小 25.75%

本次升级主要优化多语言分句与 Android 发行体积,并整理开发目录、补充 Maven 发布能力。继续沿用 0.4.0 的 Foxlet 客户端 API,现有接入代码无需因公开接口变化而迁移。

重写分句器,改善多语言和混合文本处理

用自有 C++ UTF-8 分句器替换 ssplit-cpp 与 PCRE2,基于 Unicode 17 句界属性处理文本,将常用缩写规则直接编译进代码,移除随包分发的 Moses 前缀文件。

重点完善以下场景:

  • 中文、日文:无空格连续文本、句末标点与引号,以及夹杂英文缩写的混合文本。
  • 英文及混合文本:缩写、网址、数字和计量表达,避免把 sq. ft、cu. ft 等短语中的句点当成句末。
  • 俄文:面积、体积、长度、马力、金额与数量缩写,例如 кв.、куб.、пог.;区分 см. 的“厘米”和“参见”上下文,并处理缩写本身位于句末的情况。
  • 韩文及通用 Unicode 文本:完善语言标点、引述、组合字符与 Unicode 空白处理。仍支持调用方提供自定义 UTF-8 缩写表。

在相同方法的 11 套 UD 测试语料、20,877 句上,句界识别 micro-F1 从 94.67% 提升到 96.08%。例如英文 EWT 为 73.98% → 80.80%、日文 GSD 为 96.17% → 98.29%、俄文 SynTagRus 为 97.83% → 99.46%。这是分句质量指标;韩语两个测试集各增加一个误切边界,完整结果保留在版本报告。

裁剪 Android 依赖,发行 AAR 缩小 25.75%

按两个正式 Release 附件压缩后的实际大小比较:

发行 AAR 大小
v0.4.0 3,784,263 字节(3.784 MB)
v0.5.0 2,809,936 字节(2.810 MB)
减少 974,327 字节,约 974.3 KB(25.75%)

体积缩减主要来自分句器及其依赖替换,以及 Android 端移除 SentencePiece 训练库。词表加载、分词和解码功能保留;仓库中的训练源码与主机工具能力也保留。裁剪前后归档的 10,120 条主机译文输出完全一致。

本版统一为一个 AAR,不再分“默认版”和 no-prefixes 版。AAR 不包含模型权重;首次使用仍需下载对应模型。MB、KB 均按十进制计算。

整理开发目录与验证工具

  • native/jni/ 集中 JNI 桥接代码,native/sentence/ 放置自有分句器。
  • sdk-example/ 提供消费最终 AAR、启用 R8 的接入示例。
  • benchmark/app/ 放置基准应用,benchmark/data/ 统一保存版本基准、历史协议和原始结果。
  • docs/ 集中接入、API、架构与构建发布文档,新增英文 README。
  • 新增分句规则测试、语料评分与基准报告生成工具;报告从归档生成,调整展示无需重新跑设备。

Maven 接入与发布状态

新增 Maven 发布配置,坐标为 io.github.yinvoke:foxlet-translate:0.5.0,包含 AAR、POM、Gradle 模块元数据、Kotlin 源码包和 Dokka API 文档包。Maven 元数据声明 Kotlin 与协程依赖,方便通过 Gradle 管理 SDK。

0.5.0 的 GitHub 附件已发布;Maven Central 正在补发,当前尚不可从 Central 解析。 完成账号、命名空间和签名配置后,复用已验收的同一 AAR 上传;可下载后会更新本公告和接入文档。目前可直接使用下方 AAR。

性能与兼容性说明

本次可量化的主要收益是 AAR 体积缩减和分句质量改善。归档中相对 0.3.0 的同协议原生热态速度变化为 −0.2%~+6.6%,多数场景接近;它不是与 0.4.0 的速度对比,也不足以说明整体推理提速。

  • 公开 JVM API 签名与 0.4.0 一致;从 0.3.x 升级仍需迁移调用代码。
  • prefixLanguages 表示内置缩写规则覆盖范围,当前为 en/de/fr/es/pt/it/ru/tr/zh/ja/ko,不代表翻译模型支持的语向。
  • nonbreakingPrefixes = false 关闭缩写规则,仍保留 Unicode 和语言标点处理。分句变化可能改变组批与译文,不保证逐句复现旧版输出。
  • App 标准基准仅完成 8/18 个进程;补充 AAR 回测有四项波动超限;原生译文哈希变化仍记为检查失败。完整数据和限制见版本归档。

普通 CI 和正式发行流程均已通过;最终 R8 示例 APK 已在 Android 16 ARM64 模拟器完成模型下载、翻译、模型管理和生命周期验收,结果及 APK SHA-256 见 device-result.json。模拟器验收用于功能验证。

下载

接入指南 · 分句设计 · 完整变更

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 13 Sep 15:25

0.4.0 统一 Android SDK 的模型管理与翻译 API。应用创建一个 Foxlet 客户端,通过 models 准备、下载、验证和清理模型,通过 translator 翻译并管理内存驻留。

本次发布采用统一后的 API,不保留旧入口。发行附件由同一提交构建;发布流程要求构建与 Android 设备验收通过,设备结果见随包的 device-result.json。

本次 Android 功能验收使用 Android 15 / API 35 的 ARM64 模拟器。该结果不作为真机性能结论;历史设备基准的版本和口径保持原有标注。

破坏性迁移

本版不保留旧接口或兼容别名,宿主必须更新调用代码并重新编译:

  • FoxletEngine / BergamotEngine、EngineConfig、ModelCatalog、ThreadTuning、NonbreakingPrefixes 旧公开入口移除。
  • Foxlet.create(context, config) 与等价 DSL 统一配置目录、模型来源、网络参数、线程和驻留策略。
  • prepare、download、findUsable 返回同一种 InstalledModel,可直接传给翻译、验证和删除。
  • 关闭统一使用挂起式 shutdown;状态查询和模型卸载也使用 suspend,不再向应用暴露 Closeable/Future 生命周期接口。
  • 耗时操作统一使用协程,业务失败使用结构化异常;取消保持 CancellationException。

模型与翻译

  • prepare 优先使用本地最新可用模型,缺少时下载内置版本;LocalOnly 明确禁止联网。
  • 下载、续传、重试和本地复用共享结构化进度;Ready 只在校验与安装完成后发出。
  • 更新报告中的 ModelUpdate.target 非空,可以直接下载该精确版本。查询更新不会自动下载或删除模型。
  • 安装验证区分未检查、已验证、损坏、无法核验;删除与清理报告实际释放字节和部分失败。
  • 单字符串、列表和中转翻译共享 LocalModel、TextFormat;空列表不加载模型。
  • Threading.Fixed/Auto 与 ModelRetention.Idle/AfterRequest/UntilShutdown 代替分散的配置入口和魔法数。
  • 关闭协调客户端操作,等待不可中断的 native 批次结束;未确认释放的模型仍受磁盘占用保护。
  • Demo、基准工具和设备测试已迁移到新 API;保留既有模型身份算法、安装目录与 manifest 格式。

同进程仍只允许一个活动客户端,同一模型目录由单个应用进程管理。索引来源使用 HTTPS、SHA-256 和大小校验,尚未实现 Remote Settings 集合签名验证。翻译文本留在设备上;HTML 处理仍为实验能力。

发行构件

  • foxlet-v0.4.0.aar:默认 SDK,含 25 种语言的分句前缀表。
  • foxlet-v0.4.0-no-prefixes.aar:不含 LGPL-2.1 分句前缀数据,与默认版二选一。
  • foxlet-demo-v0.4.0.apk:Demo,使用开发签名。
  • SHA256SUMS、许可文本与 device-result.json:构件校验、来源和最终 APK 的设备验证记录。

支持 Android 9+、arm64-v8a;AAR 不携带模型权重、FLORES-200 语料或协程的传递依赖。发行门禁包括 JVM 回归、新 API 签名与旧入口移除检查、R8 消费者、产物检查和真实 Android 翻译/模型管理测试。没有新增推理性能结论。

接入与迁移 · API 设计 · 验证记录

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 05 Sep 13:49

本次更新集中在移动端芯片适配、推理性能与内存管理。

相比 v0.1.0,小米 10 英→中默认单 worker 实测:首次翻译 7.21 → 4.74 秒(−34%),峰值 RSS 323 → 182 MiB(−44%)。同模型、200 句语料、相同参数,三轮独立进程中位数。

  • 计算提速:新增 i8mm SMMLA 内核、复用权重打包缓存,并优化 attention 小矩阵乘;不支持 i8mm 的设备自动回退 ruy。
  • 内存降低:embedding 保持 int8,输入按行反量化,输出层复用同一张表。
  • 释放修复:模型与线程缓存可真正释放,并修复多 worker 加载时模型字节被提前释放的问题。
  • 回归验证:覆盖小米 10 / 12 / 14;基准测试集扩充至 200 句。

v0.1.0 与 v0.2.0 的翻译耗时和峰值内存对比

完整基准与复现方法。上述数据为原生引擎测试,首次翻译含模型加载,不是 app PSS。

升级注意:releaseAllModels() 现返回 Future<Boolean>,可确认释放是否完成;升级 AAR 后需重新编译调用方,不要在主线程等待结果。

构件:bergamot-v0.2.0.aar(arm64-v8a,Android 9+)。

完整变更

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 31 Aug 17:53