在 keras.preprocessing.text 中使用 Tokenizer 时内存不足

Har*_*ett 3 python nlp classification keras rnn

我想使用 keras 构建一个 RNN 模型来对句子进行分类。

我尝试了以下代码:

docs = []
with open('all_dga.txt', 'r') as f:
    for line in f.readlines():
        dga_domain, _ = line.split(' ')
        docs.append(dga_domain)

t = Tokenizer()
t.fit_on_texts(docs)
encoded_docs = t.texts_to_matrix(docs, mode='count')
print(encoded_docs)
Run Code Online (Sandbox Code Playgroud)

但得到了一个内存错误。似乎我无法将所有数据加载到内存中。这是输出:

Traceback (most recent call last):
  File "test.py", line 11, in <module>
    encoded_docs = t.texts_to_matrix(docs, mode='count')
  File "/home/yurzho/anaconda3/envs/deepdga/lib/python3.6/site-packages/keras/preprocessing/text.py", line 273, in texts_to_matrix
    return self.sequences_to_matrix(sequences, mode=mode)
  File "/home/yurzho/anaconda3/envs/deepdga/lib/python3.6/site-packages/keras/preprocessing/text.py", line 303, in sequences_to_matrix
    x = np.zeros((len(sequences), num_words))
MemoryError
Run Code Online (Sandbox Code Playgroud)

如果有人熟悉 keras,请告诉我如何预处理数据集。

提前致谢!

alv*_*vas 5

看来你没有问题,安装的文件,从创造的词汇t.fit_on_texts(docs),因为错误发生在t.texts_to_matrix(docs, mode='count')

所以你可以批量转换文档

from keras.preprocessing.text import Tokenizer

t = Tokenizer()

with open('/Users/liling.tan/test.txt') as fin:
    for line in fin:      
        t.fit_on_texts(line.split()) # Fitting the tokenizer line-by-line.

M = []

with open('/Users/liling.tan/test.txt') as fin:
    for line in fin:
        # Converting the lines into matrix, line-by-line.
        m = t.texts_to_matrix([line], mode='count')[0]
        M.append(m)
Run Code Online (Sandbox Code Playgroud)

但是,MemoryError如果您的计算机无法处理内存中的数据量,您会在稍后的某个时间遇到这种情况。