快速訪問4GB詞典向量:LMDB 嵌套
知識
09-25
通過 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
譯者:郭明
※智領雲華中區Mesos技術專題分享會
※Vim 8.1發布:支持在 Vim 窗口中運行終端
TAG:Python部落 |