Python中文
首页
教程
问答
标签
搜索
登录
注册
概率PAR的内存使用
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我正在为范围连接语法编写一个CKY解析器。我想用树库作为语法,这样语法会很大。我用Python编写了一个原型<a href="http://www.nltk.org/download" rel="nofollow">1</a>,当我模拟一个由几十个句子组成的树库时,它似乎可以很好地工作,但是内存的使用是不可接受的。我试着用C++编写,但到目前为止,我一直没有用C++,这是非常令人沮丧的。以下是一些数据(n是语法基于的句子数):</p> <pre><code>n mem 9 173M 18 486M 36 836M </code></pre> <p>这种增长模式是最好的优先算法所期望的,但是开销的大小是我关心的。根据heapy的数据,内存使用量比这些数字小10倍,valgrind报告了类似的情况。是什么导致了这种差异?我能用Python(或Cython)对此做些什么吗?也许是因为碎片化?或者是python字典的开销?在</p> <p>背景知识:两种重要的数据结构是将边缘映射到概率的议程和将非终结点和位置映射到边缘的字典图表。这个议程是用heapdict(内部使用dict和heapq列表)实现的,这个图表有一个字典,将非终端和位置映射到边缘。议程经常被插入和删除,图表只得到插入和查找。我用这样的元组表示边:</p> ^{pr2}$ <p>字符串是语法中的非终结符标签,位置被编码为位掩码。当一个成分不连续时,可能有多个位置。所以这个边可以代表对“is Mary happy”的分析,其中“is”和“happy”都属于VP。在本例中,图表字典按此边的第一个元素(“S”,111)编制索引。在一个新版本中,我尝试将此表示转换为可重用的内存:</p> <pre><code>(("S", "NP", "VP), (111, 100, 011)) </code></pre> <p>我认为,如果第一部分与不同的位置结合使用,Python只会存储一次,尽管我不确定这是否正确。不管是哪种情况,似乎都没什么区别。在</p> 基本上我想知道的是,是否值得进一步追问我的Python实现,包括用Cython和不同的数据结构来做事情,或者从C++中直接编写它是唯一可行的选择。在</p> <p><strong>更新</strong>:经过一些改进,我不再有内存使用问题。我正在研究一个优化的Cython版本。对于提高代码效率的最有用的建议,我将给予奖励。在<a href="http://student.science.uva.nl/~acranenb/plcfrs_cython.html" rel="nofollow">http://student.science.uva.nl/~acranenb/plcfrs_cython.html</a>处有一个带注释的版本</p> <p><a href="http://www.nltk.org/download" rel="nofollow">1</a><a href="https://github.com/andreasvc/disco-dop/" rel="nofollow">https://github.com/andreasvc/disco-dop/</a> --跑测试.py分析一些句子。需要Python2.6、<a href="http://www.nltk.org/download" rel="nofollow">nltk</a>和<a href="http://pypi.python.org/pypi/HeapDict" rel="nofollow">heapdict</a></p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>你试过用PyPy而不是CPython来运行应用程序吗?在</p> <p>PyPy比CPython聪明得多,在注意到共性和避免与不必要的复制相关的内存开销方面。在</p> <p>无论如何值得一试:<a href="http://pypy.org/" rel="nofollow">http://pypy.org/</a></p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何在乒乓球比赛中预测球的轨迹,对于AI球拍预测?
2 回答
如何在乒乓球游戏中阻止球
9 回答
如何在乘法和模中不乘空间?
8 回答
如何在乘法和除以2个不同的数字之间进行交换?
7 回答
如何在也是数据一部分的单个字符上拆分大字符串
8 回答
如何在乾草堆中找到針,有更好的解決方案嗎?
6 回答
如何在事件wxWidgets中传递自定义数据
4 回答
如何在事件中使用lambda i=i?
3 回答
如何在事件中心只接收最近的数据
9 回答
如何在事件发生之前保持云函数运行?
4 回答
如何在事件发生后使页面重定向到同一页面
5 回答
如何在事件回调之间保持python生成器的状态
4 回答
如何在事件处理程序(pythonsocket、sphinx)中保留docstring
6 回答
如何在事件处理程序中更改wxRichTextCtrl的光标位置?
9 回答
如何在事件处理程序中访问外部对象?
1 回答
如何在事件循环中将协程打包为正常函数?
9 回答
如何在事件循环之外运行协同程序?
7 回答
如何在事件循环结束时为并发未来的所有线程调用类方法?
9 回答
如何在事件文件中只保留一份摘要?
7 回答
如何在事件模板中添加事件
6 回答