这是一篇记录了我们把一大段 Python/Cython 代码迁移到 Go语言经历的(长)博客。如果你希望了解整个故事、背景等所有的内容,请接着读。如果只对 Python 开发者进入之前需要知道的东西感兴趣,点击下面的链接:
从 Python 迁移到 Go 的提示与技巧
背景
我们在 Repustate 技术上最大的成果就是实现了阿拉伯语情感分析。阿拉伯语真是一个难啃的骨头,它的单词语法形态太复杂了。阿拉伯语的分词(tokenization,把一个句子分成独立的词语)相比诸如英语更难,因为阿拉伯语单词内部可能包含空格(例如,aleph内的位置)。这个不需要保密,那就是 Repustate 使用了支持向量机(SVM)来得到句子最可能的意思,然后在此基础上分析情感。我们总共用了 22 个模型(22 个支持向量机),文档中的每个单词都会被分析。也就是说,如果一篇文档包含 500 词的话,将会有一万次以上的支持向量机的比较操作。
Python
Repustate几乎是彻底用 Python 实现的,因为我们使用了 Django 作为应用程序接口和网站架构。所以只能保持代码的统一,同时用 Python 实现整个阿拉伯语情感引擎。原型与实现的过程中,Python 还是很不错的。非常强的表达能力,强大的第三方库资源。如果你只是服务于网页的话,还是很完美的。但是,当你需要进行底层计算,需要在散列表(Python 中的字典)上进行大量的比较运算的时候,速度就慢下来了。我们每秒钟只能处理2到3篇阿拉伯语文档,这太慢了。对比我们的英语情感引擎,每秒钟能处理 500 篇文档。
瓶颈