如何将 tokenizer.fit_on_texts() 应用于包含两列我需要训练的对象/字符串的

我需要将两组数据传递给tokenizer.fit_on_texts(),但遇到无法识别文本的问题。tokenizer.word_index()返回的是数字 2。我怀疑问题发生在tokenizer.fit_on_texts()我向它传递一个带有 (33481, 2) 字符串的数据帧时。我看过的大多数示例都使用了 IMBD 数据集。

附加信息:我目前正在试验多分类问题,其中有带有标签的标题-文章对(同意、不同意、讨论、不相关)。我计划使用 LSTM 和预训练的 Glove 创建映射到已知嵌入的单词索引。


资料

f_data -

  • 数据框 (33481, 2)

  • 列 = ['标题','articleBody']。

  • 从另外两个 df [ x_train(26784, 2), val_train(6697, 2)]创建

  • f_data[0]回报

    ['kim yo jong 接替了 kim jong un role north ko...', 'san francisco marketwatch north korean leader...']

这是创作的片段f_data

# This df will be fed into the fit_on_texts()

# Creating df to contain the train and validation set

f_data = pd.DataFrame(columns = ['Headline', 'articleBody'])

# Adding data from x_train to f_data

f_data['Headline'] = x_train['Headline']

f_data['articleBody'] = x_train['articleBody']

# Appending x_val headline and article body columns

f_data = f_data.append(x_val[['Headline', 'articleBody']])

f_data

Keras/TF 代码问题

问题:我遇到的问题是,当我打印出 word_index 的长度时,它返回 2:


tokenizer.fit_on_texts(f_data[['Headline', 'articleBody']]

sequences = tokenizer.texts_to_sequences(f_data[['Headline', 'articleBody']])

word_index = tokenizer.word_index

print('Vocab size:', len(word_index))

>> Vocab size: 2


data = pad_sequences(sequences, padding = 'post', maxlen = MAX_SEQ_LEN)

print('Shape of data tensor:', data.shape)

print('Shape of label tensor:', y_train_cat.shape)

我试过变成f_datandarray 但得到一个属性错误。


f_data_2 = np.array(f_data[['Headline', 'articleBody']]) # ndarray

sequences = tokenizer.texts_to_sequences(apple)

AttributeError: 'numpy.ndarray' object has no attribute 'lower'

有什么建议么?我看过其他一些问题,但他们正在处理一个字符串列表


解决方案: 我想我终于有了一些工作,但我不完全确定这是正确的。


f_data = np.c_[(np.array(f_data['Headline']), np.array(f_data['articleBody']))]

f_data= f_data.tolist()

....

皈依舞
浏览 140回答 1
1回答

狐的传说

您可以分别对两列进行标记,然后将它们输入到两个不同的输入层,将它们连接起来并将它们输入到 LSTM 层,对吗?如果这种方法适合您,我可以解释如何操作。编辑:如果您习惯使用 Functional API,请生成对应于 2 列的 2 个填充序列输入,如下所示:tokenizer.fit_on_texts(f_data['Headline'])vocab_size = len(tokenizer.word_index) + 1headline_sequences_train = tokenizer.texts_to_sequences(f_data['Headline'])#headline_seq_validation = tokenizer.texts_to_sequences(val_data['Headline'])headline_padded_train = pad_sequences(headline_sequences_train, padding='post', maxlen = MAX_SEQ_LEN)#headline_padded_validation = pad_sequences(headline_seq_validation,padding = 'post',maxlen = MAX_SEQ_LEN)同样对于文章正文:tokenizer.fit_on_texts(f_data['articleBody'])vocab_size = len(tokenizer.word_index) + 1art_body_seq_train = tokenizer.texts_to_sequences(f_data['articleBody'])#art_body_seq_validation = tokenizer.texts_to_sequences(val_data['articleBody'])art_body_padded_train = pad_sequences(art_body_seq_train, padding='post', maxlen = MAX_SEQ_LEN)#art_body_padded_validation = pad_sequences(art_body_seq_validation, padding='post', maxlen = MAX_SEQ_LEN)注意:对于两个不同的列,MAX_SEQ_LEN 可能不同。取决于您的喜好。我建议你分别分析Headline和Article Body栏的字长,并选择不同的看起来合适的最大序列长度。headline_padded_train并且art_body_padded_train是你的两个输入对应于你的神经网络中的两个输入层。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python