TLDR
- WHAT: Rust 实现BLEU Score计算
- GitHub: https://github.com/shenxiangzhuang/bleuscore
- PyPI: https://pypi.org/project/bleuscore/
- crates: https://crates.io/crates/bleuscore
- Docs: https://docs.rs/bleuscore/latest/bleuscore/
Why
- Huggingface 的 Evaluate 库真的不好用,且慢,见issue
- Talk is cheap: 看了太多和 Rust 相关的争论,还是决定动手写一下再做判断
- BLEU 的计算是难度相对较低,比较适合作练习的项目
Overview
-
Rust 实现 BLEU Score 计算(采用和 Huggingface evaluate完全一致的算法),通过 Binding 构建 Python 库
-
做了大量的结果对比测试来保证此 Rust 实现的结果和 Huggingface 结果是一致的
- 基于 Hypothesis ,一个仿 Haskell QuickCheck 的 property test 库
-
做了较为充分的 Benchmark 来测试当前 Rust 实现的性能
初步结论
- 开发体验: 总体的过程(编译,测试,文档,依赖管理等)还是很丝滑的(个人之前并没有太多 Rust 基础),主要得益于 Rust 完整的生态
- 机器学习: 当算法正已经在 Python 实现,想追求更好的性能时,用 Rust 来实现算法可以有效提升算法运行效率(同时可以用 Python 实现来验证当前 Rust 实现的正确性)。另外就是Rust 实现后通过 Binding 构建 Python 库是非常简单的(PyO3/Maturin),线上的业务一样可以依赖 Python 开发, 这点对于机器学习系统来说还是非常友好的。
- 性能: 当前 bleuscore 的性能提升在大规模数据集上更为显著,性能提升主要来自目前的实现用了多核并行(基于 rayon)。在数据集本身比较小或没有使用多核时,其实性能提升并不大(详情见 Benchmark )
最后
欢迎理性讨论,欢迎 PR !