前言
Python 成为 AI 的主流开发语言,是一个很复杂的问题。包括编程语言特性、AI 开发特点、社区环境支持等因素都对这一结果有影响。
Python 很适合做数据处理
作为一个脚本语言,Python 非常轻量级,很适合做数据处理。比如调整、合并文件内容等。很多操作,甚至可以直接在命令行中做。
如果需要交互、需要留存代码,也可以用 IPython、Jupyter Lab 等'类似命令行'的开发工具来完成。结合了轻量级、即时交互、代码留存的优势。
而我们知道,AI 开发里很多时候在处理数据,常见的比如清洗数据、数据集分割、分词并根据 Word2Vec 词表转成词 ID 向量、计算评价指标等。用 Python,可以很好的完成这些步骤。
而一个人一般同一时间只能写一种代码,不然语法容易弄混,毕竟很多时候都是肌肉记忆,不会过脑子的。记得我刚写 Python 时就喜欢每行后面打个分号。。。所以,预处理后处理都用 Python 解决的话,中间模型的代码也用 Python 解决会更顺一点。
Python 的 pickle 包,以及更高级的,TensorFlow 和 Hugging Face 中的 Dataset 对象,也给数据保存和传输带来了很大的便利。
Python 有很多支持包
这里说得还不只是那些耳熟能详的神经网络工具。
我们先来看看历史,看看神经网络刚开始火起来的那几年(2012 年左右)Python 环境支撑。这有助于帮助我们了解为什么 TensorFlow 等工具在 Python 中出现。
NumPy,1995 年,提供了大量矩阵运算工具。
NLTK,2001 年,提供了大量自然语言处理工具。
Scikit-learn,2010 年,提供了大量传统机器学习的算法与评价指标。
这些工具为基于 Python 的神经网络工具,如 Theano(2008 年)、TensorFlow(2015 年)等奠定了基础。
当然,同期也有很多竞品。比如 C/C++ 的 Caffe、OpenCV、Word2Vec,Java 的 Stanford CoreNLP,HanLP 等。所以,一度有一个说法,是做 CV 的用 C/C++,做 NLP 的用 Python/Java。我在 2015 年左右刚接触 NLP 时,还纠结过应该用哪种语言来着。
奠定 Python 王者地位的,是 TensorFlow 和 Keras
TensorFlow 和 Keras 都是 2015 年发布的。早期 Keras 只支持 Theano 的 backend,后来也支持了 TensorFlow。
2015 年那会儿,神经网络并不好写。反正我写作业,简单的前馈神经网络,用过 Java、C# 等。而复杂的神经网络,用啥写的都有。因为 Theano 等库实在太难用,我也见过直接用 NumPy 写 CNN 的。但这些玩意儿对初学者实在不友好。
而 Keras 简直是神器,居然支持 Layer 对象,居然直接有 fit 和 evaluate 方法,极大地方便了初学者学习神经网络,从而提高了 Python 在 AI 开发中的地位。
后来的 TensorFlow 和 PyTorch 吸收了很多 Keras 中优秀的特性。并且基于这些,有了很多更高级的工具,如 DGL 和 Transformers 等,让 Python 的环境生态得以蓬勃发展。同时,由于 Python 的用户群体很大,很多其它工具也都开始提供 Python 接口。比如 Stanford CoreNLP(2016 年)。
而我觉得,这些的根源,主要是 TensorFlow 和 Keras 的成功所吸引的用户群体和业界的关注。
当然,以上只是我个人的观点。都只是站在一个 NLP 的学习者与研究的角度思考得,没有做过全面的调查。欢迎大家讨论交流。


