炼数成金 门户 大数据 Python 查看内容

快速访问4GB词典向量:LMDB 嵌套

2018-9-25 09:36| 发布者: 炼数成金_小数| 查看: 22947| 评论: 0|原作者: 郭明 译|来自: Python程序员

摘要: 通过 Lightning Memory-Mapped Database 可以快速查询单词向量(嵌套), 查询时间开销会非常小, 并且内存使用量远低于gensim或其他等效解决方案.受 Delft 的启发. 如同他们在自述文件中所说, 这个方法可以让我们提前训 ...

Python Java Hadoop 培训 C++ 方法

通过 Lightning Memory-Mapped Database 可以快速查询单词向量(嵌套), 查询时间开销会非常小, 并且内存使用量远低于gensim或其他等效解决方案.
受 Delft 的启发. 如同他们在自述文件中所说, 这个方法可以让我们提前训练的嵌套立刻"温热"(没有加载时间)起来, 让我们得以释放内存, 以及在使用 SSD 运行时, 使用任意数目的嵌套而产生的影响却可以忽略不计.

例如, 在传统方法中, glove-840B 要花2分钟来加载, 并需要 4GB 的缓存. 使用 LMDB 管理后, glove-840B 可以立即被访问, 而且只使用了几兆的内存, 并且运行时的影响可以忽略(大概慢了1%).

读向量

写向量
一个从 gensim 模型写 LMDB 向量文件的例子. 如果你有另一种格式的向量, 只要产生单词和向量对的迭代器被支持, 那么只需要适当改变下面的 iter_embeddings 方法即可.
我将会写一个 CLI 接口来快速转化标准格式.

运行测试
pytest
定制化
LMDB 嵌套默认使用 pickle 来序列化向量(可使用较高应用协议来进行优化和pickled). 然而, 也很容易换为其他方式如 msgpack. 只需要将序列化和反序列化作为回调注入到 LmdbEmbeddingsWriter 和 LmdbEmbeddingsReader 中即可. 

英文原文:https://github.com/ThoughtRiver/lmdb-embeddings 

声明:文章收集于网络,如有侵权,请联系小编及时处理,谢谢!

欢迎加入本站公开兴趣群
软件开发技术群
兴趣范围包括:Java,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流
QQ群:26931708

Hadoop源代码研究群
兴趣范围包括:Hadoop源代码解读,改进,优化,分布式系统场景定制,与Hadoop有关的各种开源项目,总之就是玩转Hadoop
QQ群:288410967 

鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2018-12-15 09:02 , Processed in 0.137823 second(s), 24 queries .