c++ 无法分配内存使用KenLM build_binary时分配失败

j91ykkif  于 2023-03-25  发布在  其他
关注(0)|答案(1)|浏览(127)

我有一个arpa文件,我通过以下命令创建:

./lmplz -o 4 -S 1G <tmp_100M.txt >100m.arpa

现在我想将这个arpa文件转换为二进制文件:

./build_binary 100m.arpa 100m.bin

我得到了一个错误:

mmap.cc:225 in void util::HugeMalloc(std::size_t, bool, util::scoped_memory&) threw ErrnoException because `!to.get()'.
Cannot allocate memory Failed to allocate 106122412848 bytes Byte: 80
ERROR

我尝试添加-S参数:

./build_binary -S 1G 100m.arpa 100m.bin

我得到了同样的错误。
1.如何转换为二进制文件?
1.为什么会出现此错误?

xytpbqjk

xytpbqjk1#

查看https://aclanthology.org/W16-4618以获得一些简单的解释
试试这个:

LM_ORDER=4
CORPUS_LM="tmp_100M"
LANG_E="txt"
LM_ARPA="100m.arpa"
LM_FILE="100m.bin"

${MOSES_BIN_DIR}/lmplz --order ${LM_ORDER} -S 80% -T /tmp \
< ${CORPUS_LM}.${LANG_E} | gzip > ${LM_ARPA}

${MOSES_BIN_DIR}/build_binary trie -a 22 -b 8 -q 8 ${LM_ARPA} ${LM_FILE}

MOSES_BIN_DIR是存储已编译的二进制文件的目录。
如果在使用trie和量化选项时仍然面临内存问题,则可能需要更改为CPU RAM足以读取语言模型并生成二进制文件的机器/示例。

相关问题