如何将keras tokenizer. texts_to_matrix(一热编码矩阵)的单词转换成文本。

问题描述 投票:0回答:1

我参考了这个帖子,其中讨论了如何使用 reverse_map 策略从 keras 中 tokenizer 的 text_to_sequences 函数获取文本。

我想知道是否有一个函数可以为text_to_matrix函数获取文本。

举个例子,我想知道是否有一个函数来获取text_to_matrix函数的文本。

from tensorflow.keras.preprocessing.text import Tokenizer

docs = ['Well done!',
    'Good work',
    'Great effort',
    'nice work',
    'Excellent!']

# create the tokenizer
t = Tokenizer()

# fit the tokenizer on the documents
t.fit_on_texts(docs)
print(t)
encoded_docs = t.texts_to_matrix(docs, mode='count')
print(encoded_docs)
print(t.word_index.items())

Output: 
<keras_preprocessing.text.Tokenizer object at 0x7f746b6594e0>
[[0. 0. 1. 1. 0. 0. 0. 0. 0.]
[0. 1. 0. 0. 1. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 1. 1. 0. 0.]
[0. 1. 0. 0. 0. 0. 0. 1. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 1.]]
dict_items([('work', 1), ('well', 2), ('done', 3), ('good', 4), ('great', 5), ('effort', 6), 
('nice', 7), ('excellent', 8)])

如何从one-hot matrix中获取回文档?

python-3.x text keras tokenize one-hot-encoding
1个回答
1
投票

如果你只是想要字词,你可以很容易地做如下操作,但如果你需要的是顺序,你可以使用反向映射策略从tokenizer函数中获取文本。

import numpy as np
import pandas as pd
r, c = np.where(encoded_docs>=1)
res = pd.DataFrame({'row':r, 'col':c})
res["col"] = res["col"].map(t.index_word)
res = res.groupby('row').agg({'col':lambda x: x.str.cat(sep=' ')})

但是如果你需要顺序,你就做不到。当你采用字袋表示法的时候,你就会失去文档中的单词顺序。


0
投票

对于预测而不是给定的一热矩阵,我想出了下面的解决方案。

def onehot_to_text (mat,tokenizer, cutoff):
    mat = pd.DataFrame(mat)
    mat.rename(columns=tokenizer.index_word, inplace=True)
    output = mat.sum(axis=1)
    for row in range(mat.shape[0]):
       if output[row] == 0:
          output[row] = []
       else:
          output[row] = mat.columns[mat.iloc[row,:] >= cutoff].tolist()
   return(output)

onehot_to_text(encoded_docs,t, 0.5)给出了相应的文本列表。

这个函数可以处理全部为0的行。

© www.soinside.com 2019 - 2024. All rights reserved.