Python 当使用一个热编码时,为什么需要pad_序列?

Python 当使用一个热编码时,为什么需要pad_序列?,python,machine-learning,keras,nlp,one-hot-encoding,Python,Machine Learning,Keras,Nlp,One Hot Encoding,在Keras中,我可以拥有以下代码: docs

在Keras中,我可以拥有以下代码:

docs                                                                                                                                                                                                                                                                                                                                                                
Out[9]: 
['Well done!',
 'Good work',
 'Great effort',
 'nice work',
 'Excellent!',
 'Weak',
 'Poor effort!',
 'not good',
 'poor work',
 'Could have done better.']

labels = array([1,1,1,1,1,0,0,0,0,0]) 
voc_size = 50
encoded = [one_hot(d, voc_size) for d in docs] 
max_length = 4 
padded_docs = pad_sequences(encoded, maxlen=max_length, padding='post')  
我的理解是,“one_hot”编码已经根据词汇表大小创建了相等长度的每个文档。那么为什么每个文档都需要再次填充呢

编辑:更多说明的另一个示例:

单热编码是将分类变量(如cat、dog、rat)表示为二进制向量(如[1,0,0]、[0,1,0]、[0,0,1])


所以在这种情况下,猫、狗和老鼠被编码为长度相等的向量。这与上面的示例有何不同
one\u hot
使每个索引来自固定范围,而不是使结果列表具有固定长度

为了理解这个问题,我们需要理解函数的实际功能。它将文档转换为一系列
int
索引,这些索引的长度与文档中的字数(标记)大致相同。例如:

'one hot encoding' -> [0, 2, 17]
其中每个索引都是词汇表中单词的索引(例如,
one
具有索引
0
)。这意味着,当您将
one_hot
应用于一系列文本(如您提供的代码)时,您将获得列表索引列表,其中每个列表可能具有不同的长度。这对于
keras
numpy
来说是一个问题,它们期望列表以类似数组的形式出现,这意味着每个子列表应该具有相等的固定长度


这是通过
pad_sequences
函数实现的,该函数使每个子列表具有固定的长度

@Macin:你能不能对“猫、狗、老鼠”的例子再加一点解释?特别是它有什么不同?
猫狗、鼠牛、热狗将被转换为例如
[7、9、211、3、2]
。正如您可能看到的,此列表将具有不同的长度。(顺便说一句,如果答案正确,我希望能投赞成票)。