我们应该如何使用pad_sequences在keras中填充文本序列?

ka

我已经使用从网络教程中获得的知识和自己的直觉编写了一个序列,以便自己在喀拉拉邦学习LSTM。我将示例文本转换为序列,然后使用pad_sequencekeras中的函数进行填充

from keras.preprocessing.text import Tokenizer,base_filter
from keras.preprocessing.sequence import pad_sequences

def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]

txt="abcdefghijklmn"*100

tk = Tokenizer(nb_words=2000, filters=base_filter(), lower=True, split=" ")
tk.fit_on_texts(txt)
x = tk.texts_to_sequences(txt)
#shifing to left
y = shift(x,1)

#padding sequence
max_len = 100
max_features=len(tk.word_counts)
X = pad_sequences(x, maxlen=max_len)
Y = pad_sequences(y, maxlen=max_len)

经过仔细检查,我发现我的填充序列看起来像这样

>>> X[0:6]
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7]], dtype=int32)
>>> X
array([[ 0,  0,  0, ...,  0,  0,  1],
       [ 0,  0,  0, ...,  0,  0,  3],
       [ 0,  0,  0, ...,  0,  0,  2],
       ..., 
       [ 0,  0,  0, ...,  0,  0, 13],
       [ 0,  0,  0, ...,  0,  0, 12],
       [ 0,  0,  0, ...,  0,  0, 14]], dtype=int32)

填充序列应该看起来像这样吗?除数组中的最后一列外,其余全为零。我认为我在将文本填充到序列中时犯了一些错误,如果可以,您能否告诉我我在哪里犯了错误?

纳西姆一世

如果要通过char标记,可以手动进行,这不太复杂:

首先为您的角色建立词汇表:

txt="abcdefghijklmn"*100
vocab_char = {k: (v+1) for k, v in zip(set(txt), range(len(set(txt))))}
vocab_char['<PAD>'] = 0

这将为txt中的每个字符关联一个不同的数字。应保留索引为0的字符作为填充。

掌握反向词汇将有助于解码输出。

rvocab = {v: k for k, v in vocab.items()}

有了这个之后,您可以先将文本分成多个序列,比如说您要具有长度序列seq_len = 13

[[vocab_char[char] for char in txt[i:(i+seq_len)]] for i in range(0,len(txt),seq_len)]

您的输出将如下所示:

[[9, 12, 6, 10, 8, 7, 2, 1, 5, 13, 11, 4, 3], 
 [14, 9, 12, 6, 10, 8, 7, 2, 1, 5, 13, 11, 4],
 ...,
 [2, 1, 5, 13, 11, 4, 3, 14, 9, 12, 6, 10, 8], 
 [7, 2, 1, 5, 13, 11, 4, 3, 14]]

请注意,最后一个序列的长度不同,您可以丢弃它,也可以将序列填充到max_len = 13,它将加0。

您可以通过将所有内容移动1来以相同的方式构建目标Y::-)

我希望这有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用keras和pad_sequences在R中填充文本序列?

我们应该使用序列还是身份作为我们的主键?

Keras pad_sequences即使在标记化后也会失败

我们应该如何使用微服务构建我们的模型?

我们应该如何使用异步等待?

我们应该如何使用不同的谷歌字体?

什么是ButtonBarLayout,我们应该如何使用它?

我们应该如何使用android 4.4中添加的mipmap文件夹?

Laravel 5.4 我们如何使用填充方法?

我们如何使用LSTM对序列进行分类?

如何解决Keras pad_sequences()将浮点值四舍五入到零?

我们应该使用HashSet吗?

我们如何从数组中过滤文本

我们应该在何时何地使用这些keras LSTM模型

还有其他原因为什么我们使用填充使序列长度相同?

当我们使用 corr.() 时,我们应该关心 DataFrame 中的 NA 数据吗?

HTML:我们应该在 HTML 文本字段中使用 `type="text"` 吗?

如果我们有,如何使用 like 命令?_ % 在我们的 sql 中

v2.4中不推荐使用/ [post-id],我们应该如何检索单个帖子?

我们应该在哪里编写我们的 CURD 操作在模型视图集或视图集或 django rest 框架中的序列化程序中

为什么我们使用序列化程序而不是完全干净来验证模型,或者我们应该互换使用它们?

我们如何在不同的选项卡上序列化 selectpicker 插件文本?

我们如何定义用于识别给定序列中特定序列的规则?

Keras pad_sequences为以10为底的int()抛出无效的文字

为什么 Keras.preprocessing.sequence pad_sequences 处理字符而不是单词?

我们如何使用DPLYR过滤R中的联接

我们如何使用tapGesture在Tvos中播放视频

如果我们在程序中使用延迟,我们应该使用cron吗?

我们如何从 UITextView 中的选定文本中获取整个文本?