为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

皈依舞 2023-06-20 13:43:24
我需要将两组数据传递给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 setf_data = pd.DataFrame(columns = ['Headline', 'articleBody'])# Adding data from x_train to f_dataf_data['Headline'] = x_train['Headline']f_data['articleBody'] = x_train['articleBody']# Appending x_val headline and article body columnsf_data = f_data.append(x_val[['Headline', 'articleBody']])f_dataKeras/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_indexprint('Vocab size:', len(word_index))>> Vocab size: 2data = 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']]) # ndarraysequences = 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()....
查看完整描述

1 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

您可以分别对两列进行标记,然后将它们输入到两个不同的输入层,将它们连接起来并将它们输入到 LSTM 层,对吗?如果这种方法适合您,我可以解释如何操作。


编辑:如果您习惯使用 Functional API,请生成对应于 2 列的 2 个填充序列输入,如下所示:


tokenizer.fit_on_texts(f_data['Headline'])

vocab_size = len(tokenizer.word_index) + 1


headline_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) + 1


art_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是你的两个输入对应于你的神经网络中的两个输入层。


查看完整回答
反对 回复 2023-06-20
  • 1 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信