Rasa_NLU_Chi icon indicating copy to clipboard operation
Rasa_NLU_Chi copied to clipboard

MITIE内存溢出,究竟要多少内存才够用

Open jxg972 opened this issue 7 years ago • 17 comments

Issue:std::bad_alloc内存溢出

Content of configuration file : number of raw ASCII files found: 513 num words: 200000 saving word counts to top_word_counts.dat number of raw ASCII files found: 513 Sample 50000000 random context vectors Now do CCA (left size: 50000000, right size: 50000000). std::bad_alloc 8G的中文数据,jieba分好的,在32G的机子试了,内存溢出,64G的还是溢出,需要怎么处理?加到128G?怎么判断内存够不够用?大概要用多少

jxg972 avatar Nov 29 '17 01:11 jxg972

这是你跑哪一步的错误?用MITIE预训练词向量吗?我这一步是256GB内存。

crownpku avatar Nov 29 '17 02:11 crownpku

是训练词向量,我们机子主要都是集群用,单机都不是很大,看来只能想法子加内存了

jxg972 avatar Nov 29 '17 02:11 jxg972

嗯,你可以去MITIE的仓库看看相关的issue或者直接向他们提问,看看有没有分布式之类的解决办法: https://github.com/mit-nlp/MITIE

crownpku avatar Nov 29 '17 02:11 crownpku

好的,谢谢

jxg972 avatar Nov 29 '17 02:11 jxg972

@crownpku 又打扰了,还有一个关于MITIE的问题。某些情况下会出现词语本身就包含空格,比如一些外国品牌,类似MINI JCW(汽车)、ANNA SUI 安娜·苏(化妆品),所以我想问一下,怎样修改mitie的代码,使得结巴分词换一个分隔符输出?比如换成@@?

jxg972 avatar Nov 29 '17 08:11 jxg972

这是jieba分词部分的问题,请参考 https://github.com/fxsjy/jieba

一个例子:

seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "@@".join(seg_list))  # 精确模式

输出:

我@@来到@@北京@@清华大学

crownpku avatar Nov 29 '17 09:11 crownpku

这个我已经修改了,主要是目前流程中分词是这样的 python -m jieba -d " " ./test > ./test_cut 我的意思是,我如果改成 python -m jieba -d "@@" ./test > ./test_cut 恐怕,mitie识别不了吧? 如果只是修改结巴分词的部分,但是它输出的分隔符还是空格,那么原本含有空格的词汇不是还是相当于分开了么? 之前给到mitie的文件是: 我 来到 北京 清华大学 现在变成 我@@来到@@北京@@清华大学 不需要修改mitie代码么? C语言比较陌生,不太看得懂mitie的代码,所以这里不是很明白,请见谅

jxg972 avatar Nov 29 '17 09:11 jxg972

MITIE的tokenizer应该在这里,具体修改的地方需要你再仔细看代码: https://github.com/mit-nlp/MITIE/blob/master/mitielib/include/mitie/unigram_tokenizer.h

退一步讲,这一步只是做embedding,“MINI JCW"这样特别的词关系不是很大。 建议的做法是在最后训练和inference的时候才把这样的词放去jieba词库里面。

crownpku avatar Nov 29 '17 09:11 crownpku

谢谢,我现在就去看看代码。主要是目前尝试在汽车领域应用,“MINI JCW"这样特别的词其实还挺多的,担心影响会比较大

jxg972 avatar Nov 29 '17 09:11 jxg972

还有一个丑陋的方法就是把词库里所有这样"MINI JCW"和文本中匹配到的"MINI JCW",都写一个脚本把空格换成@@,即换成“MINI@@JCW”。这样就不存在你说的问题了......

crownpku avatar Nov 29 '17 09:11 crownpku

找到了 https://github.com/mit-nlp/MITIE/blob/master/mitielib/include/mitie/conll_tokenizer.h 第179行 else if (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r') 修改成 else if (ch == '@' || ch == '\t' || ch == '\n' || ch == '\r')

这里ch是char类型,不能用@@,改为单个@了,不然改动就大了

jxg972 avatar Nov 30 '17 08:11 jxg972

crownpku 你好, 因為我這邊必須要使用繁體中文字的wiki內容訓練MITIE, 但我在網路上都找不到繁體訓練完的 total_word_feature_extractor_chi.dat 所以想請教你關於內存的部份到底要多少GB才夠呢? (官網上說要128GB,你BLOG建議說可能會幾十GB)

麻煩你了,謝謝!!

DoubleAix avatar Jan 25 '18 13:01 DoubleAix

@DoubleAix 我自己是256GB內存訓練的。

網路上有很多簡繁轉換的Python包,你也可以仍然使用我訓練好的模型,只是在處理繁體輸入時先在程式里轉換成簡體就可以了。

crownpku avatar Jan 25 '18 13:01 crownpku

@crownpku 你回好快喔,這招真高招,那我等我的主機來再玩玩MITIE 另外,我對rasa-nlu不熟,我看了文件是不是就是只有這步MITIE需要很大的內存呢?

DoubleAix avatar Jan 25 '18 13:01 DoubleAix

只有訓練MITIE這一步需要大內存,其它步驟不需要這麼大的內存。如果你是用我訓練好的MITIE模型,普通PC應該就足夠應付rasa nlu了。

crownpku avatar Jan 25 '18 13:01 crownpku

@crownpku 你好,我的机器内存太小了,无法训练得到文件total_word_feature_extractor_chi.dat 。 而你之前分享该文件的地址已经失效了,能不能再次分享一下这个训练好的文件呢? 万分感激中 :-)~~~~~~

fangnster avatar May 21 '18 19:05 fangnster

@crownpku 可不可請你再分享一次 total_word_feature_extractor_chi.dat 文件, 網路上找到的連結都已經失效了, 感謝

siennx avatar Aug 15 '18 23:08 siennx