会这种操作,至少让你的Python快100倍!一点都不…

2018-07-11 03:41:35来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

会这种操作,至少让你的Python快100倍!一点都不吹牛!

 

所以其实这里有点耍花招,虽然我们是在讨论 Python,但还要用一些 Cython的魔法。但别忘了,Cython 是 Python 的超集(http://cython.org/),所以别被它吓住了!

你现在的 Python 程序已经是 Cython 程序了。

几种情况下你可能会需要这种加速,例如:

  • 用 Python 为生产环境开发 NLP 模块;
  • 用 Python 在大型 NLP 数据集上计算分析结果;
  • 为 pyTorch 或 TensorFlow 等深度学习框架预处理一个大型数据集,或者在深度学习的批次加载器中有个很复杂的处理逻辑使得训练变慢。

在我们开始前要说的最后一件事:这篇文章里的例子我都放在了Jupyter Notebook(https://github.com/huggingface/100-times-faster-nlp)上。试试看吧!

会这种操作,至少让你的Python快100倍!一点都不吹牛!

 

会这种操作,至少让你的Python快100倍!一点都不吹牛!

 

利用 Cython 实现更快的循环

会这种操作,至少让你的Python快100倍!一点都不吹牛!

 

用个简单的例子来说明。假设我们一个巨大的集合里包含许多长方形,保存为 Python 对象(即 Rectangle 类的实例)的列表。模块的主要功能就是遍历该列表,数出有多少个长方形超过了某个阈值。

我们的 Python 模块非常简单,如下所示:

会这种操作,至少让你的Python快100倍!一点都不吹牛!

 

会这种操作,至少让你的Python快100倍!一点都不吹牛!

 

然后我们就可以将长方形列表保存在一个 C 数组中,传递给 check_rectangle 函数。现在该函数就需要接收一个 C 数组作为输入,因此它应该用 cdef 关键字(而不是 def)定义为 Cython 函数。(注意 cdef 也被用来定义 Cython C 对象。)

下面是 Cython 高速版本的模块:

会这种操作,至少让你的Python快100倍!一点都不吹牛!

 

会这种操作,至少让你的Python快100倍!一点都不吹牛!

 

试一下这段代码

会这种操作,至少让你的Python快100倍!一点都不吹牛!

 

会这种操作,至少让你的Python快100倍!一点都不吹牛!

 

在 Jupyter 中测试

会这种操作,至少让你的Python快100倍!一点都不吹牛!

 

会这种操作,至少让你的Python快100倍!一点都不吹牛!

 

通过 spaCy 使用 Cython 加速 NLP

前面说的这些都很好……但这跟 NLP 还没关系呢!没有字符串操作,没有 Unicode 编码,自然语言处理中的难点都没有支持啊!

会这种操作,至少让你的Python快100倍!一点都不吹牛!

 

会这种操作,至少让你的Python快100倍!一点都不吹牛!

 

StringStore 对象实现了在 Python unicode 字符串和 64 比特 hash 之间的查找操作。

StringStore 可以从 spaCy 中的任何地方、任何对象中访问,例如可以通过 nlp.vocab.string、doc.vocab.strings 或 span.doc.vocab.string 等。

会这种操作,至少让你的Python快100倍!一点都不吹牛!

 

通过 spaCy 和 Cython 进行快速 NPL 处理

假设我们有个文本文档的数据集需要分析。

会这种操作,至少让你的Python快100倍!一点都不吹牛!

 

但也非常慢!在我的笔记本上这段代码大概需要1.4秒才能得到结果。如果有100万个文档,那就要超过一天的时间。

会这种操作,至少让你的Python快100倍!一点都不吹牛!

 

会这种操作,至少让你的Python快100倍!一点都不吹牛!

 

会这种操作,至少让你的Python快100倍!一点都不吹牛!

 

进群:125240963 即可获取数十套PDF哦!01也可以

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:flask 高级编程-基础

下一篇:Day_06 is == 的区别, 编码与解码.深浅拷贝