jieba-rs 分词性能优化记录:提升 2.4 倍

jieba-rs 分词性能优化记录:提升 2.4 倍

📝

内容提要

jieba-rs的性能优化记录显示,HMM分词速度从2.85µs降至1.32µs,非HMM从2.21µs降至0.94µs,分别提升了2.16倍和2.35倍。主要改动包括使用thread_local!替代lazy_static!、复用内存、减少拷贝和优化数据结构,最终用更高效的字符分类方法替换了正则引擎,显著提升了分词性能。

🎯

关键要点

  • jieba-rs的HMM分词速度从2.85µs降至1.32µs,非HMM从2.21µs降至0.94µs,分别提升了2.16倍和2.35倍。

  • 主要改动包括使用thread_local!替代lazy_static!、复用内存、减少拷贝和优化数据结构。

  • 用更高效的字符分类方法替换了正则引擎,显著提升了分词性能。

  • 通过复用HMM工作内存,减少了每次分配的开销。

  • 借用切片代替拷贝,减少了字符串拷贝的次数,提升了性能。

  • 将HashMap替换为Vec,优化了DAG中的字节偏移存储方式。

  • 干掉正则引擎后,分词性能提升了25-29%。

  • 预计算发射概率和词频的对数,进一步提升了性能。

延伸问答

jieba-rs的HMM分词性能提升了多少?

HMM分词速度从2.85µs降至1.32µs,提升了2.16倍。

jieba-rs的非HMM分词性能提升了多少?

非HMM分词速度从2.21µs降至0.94µs,提升了2.35倍。

jieba-rs的性能优化主要改动有哪些?

主要改动包括使用thread_local!替代lazy_static!、复用内存、减少拷贝和优化数据结构。

为什么jieba-rs要替换正则引擎?

因为正则引擎占用了29%的CPU时间,替换后性能提升了25-29%。

如何通过复用内存来提升jieba-rs的性能?

通过复用HMM工作内存,减少每次分配的开销,从而提升性能。

jieba-rs的性能测试是如何进行的?

每个commit单独checkout,使用cargo bench进行基准测试,记录中位数。

➡️

继续阅读