会这种操作,至少让你的Python快100倍!一点都不…
2018-07-11 03:41:35来源:博客园 阅读 ()
所以其实这里有点耍花招,虽然我们是在讨论 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)上。试试看吧!
利用 Cython 实现更快的循环
用个简单的例子来说明。假设我们一个巨大的集合里包含许多长方形,保存为 Python 对象(即 Rectangle 类的实例)的列表。模块的主要功能就是遍历该列表,数出有多少个长方形超过了某个阈值。
我们的 Python 模块非常简单,如下所示:
然后我们就可以将长方形列表保存在一个 C 数组中,传递给 check_rectangle 函数。现在该函数就需要接收一个 C 数组作为输入,因此它应该用 cdef 关键字(而不是 def)定义为 Cython 函数。(注意 cdef 也被用来定义 Cython C 对象。)
下面是 Cython 高速版本的模块:
试一下这段代码
在 Jupyter 中测试
通过 spaCy 使用 Cython 加速 NLP
前面说的这些都很好……但这跟 NLP 还没关系呢!没有字符串操作,没有 Unicode 编码,自然语言处理中的难点都没有支持啊!
StringStore 对象实现了在 Python unicode 字符串和 64 比特 hash 之间的查找操作。
StringStore 可以从 spaCy 中的任何地方、任何对象中访问,例如可以通过 nlp.vocab.string、doc.vocab.strings 或 span.doc.vocab.string 等。
通过 spaCy 和 Cython 进行快速 NPL 处理
假设我们有个文本文档的数据集需要分析。
但也非常慢!在我的笔记本上这段代码大概需要1.4秒才能得到结果。如果有100万个文档,那就要超过一天的时间。
进群:125240963 即可获取数十套PDF哦!01也可以
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- PythonDay08 2019-08-13
- 列表和元组 2019-08-13
- python Django基础操作 2019-07-24
- xadmin进行全局配置(修改模块名为中文以及其他自定义的操作 2019-07-24
- python基础-2 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash