背景
我正在为计算语言学项目开发一个计算密集的项目,但我遇到的问题非常普遍,因此我希望解决方案对其他人来说也很有趣.
要求
我必须写的这个特定程序的关键方面是它必须:
步骤1和2并不难有效:只需使用生成器并拥有数据分析管道.最大的问题是操作3(和连接4)
括号:技术细节
如果构建向量的实际过程影响解决方案:
对于语料库中的每一行,一个或多个向量必须更新其基重.
如果你根据python列表来考虑它们,每一行在处理时,通过将一个或多个索引处的这些列表的值递增一个值来更新一个或多个列表(如果需要,可以创建它们)(可能会因此而异)指数).
向量不依赖于彼此,也不重要读取语料库的顺序.
试图解决方案
关于如何做到这一点,有三个极端:
所有这些选择都相当棘手.1只是耗尽了所有的系统内存,它会引起恐慌和减速.因为IO操作不快,所以2太慢了.出于同样的原因,3可能甚至比2慢.
目标
一个好的解决方案包括:
问题是,我不确定如何解决这个问题.担心像RAM这样的系统属性似乎有点单声道,但我没有看到如何在不考虑这一点的情况下最佳地解决这类问题.结果,我真的不知道如何开始这种事情.
题
有谁知道如何解决这类问题?我的python根本不是这种东西的正确语言?或者是否有一个简单的解决方案可以最大化从内存中完成多少(在合理范围内),同时最小化必须从磁盘读取数据或写入数据的次数?
非常感谢您的关注.我期待着看到stackoverflow的聪明才智能够引起我的注意.
额外细节
运行这个问题的机器通常有20多个内核和~70G的RAM.该问题可以并行化(例如,MapReduce),因为可以从语料库的片段构建一个实体的单独向量,然后将其添加以获得将从整个语料库构建的向量.
部分问题涉及确定在磁盘写入需要发生之前可以在内存中构建多少的限制.python是否提供任何机制来确定可用的RAM数量?