向量化文本作为 RNN 的输入

Posted

技术标签:

【中文标题】向量化文本作为 RNN 的输入【英文标题】:Vectorized Text as Input into RNN 【发布时间】:2021-10-07 07:42:19 【问题描述】:

我有以下函数可以向我的数据框添加一个新列。 我想将矢量化文本用作我的 RNN,但是,我无法重塑列以将其用作输入。我该如何解决这个问题?谢谢

# vectorization
max_length = 500
def vectorization(text):
  seq = text.split()
  if seq:
    vectorizer = TfidfVectorizer()
    vectorizer.fit(seq)
    vector = vectorizer.transform(seq)
    return sequence.pad_sequences(vector.toarray(), maxlen=max_length)
  else:
    print(seq)
    return seq

df['text_vector']=df['text_cleaned'].apply(vectorization)

X_train, X_test, Y_train, Y_test = train_test_split(df['text_vector'], df['sentiment'], train_size=0.80, shuffle=True)

X_train = X_train.to_numpy()
X_test = X_test.to_numpy()
Y_train = Y_train.to_numpy()
Y_test = Y_test.to_numpy()

X_train = X_train.reshape((X_train.shape[0], 500, 1))

此处出错:

ValueError: cannot reshape array of size 3876 into shape (3876,500,1)

【问题讨论】:

【参考方案1】:

几点

理想情况下,您应该将 TfidfVectorizer 放在完整的火车文本中,但不要像您正在做的那样按行显示 pad_sequences 之后的每一行都是一个大小为 500 的 np 数组。因此,您必须明智地连接所有 np 数组行以创建大小为 (n X 500) 的 np 数组,其中 nlen(df)

固定代码(内嵌注释):

from sklearn.feature_extraction.text import TfidfVectorizer
from keras.preprocessing import sequence


max_length = 500
def vectorization(vectorizer, text):
    vector = vectorizer.transform(text)
    return sequence.pad_sequences(vector.toarray(), maxlen=max_length)

import pandas as pd 
df = pd.DataFrame( 'text_cleaned': [
                                     'a cat on a table', 
                                     'a dog under a table', 
                                     'apple is red', 
                                     'sky is blue'] )
v = TfidfVectorizer()
# Fit on full test data text
v.fit(df['text_cleaned'])

df['text_vector']= df['text_cleaned'].apply(lambda text: vectorization(v, [text]))
# concatenate all the 500 length sequences
x_train = np.concatenate(df['text_vector'])
# reshape or use expand_dim to add last dimention so that it can be passed to RNN
x_train = x_train.reshape(-1,500,1)       

【讨论】:

谢谢,我会试试这个。但是 Y 呢,我有一个带有 pos、neg 和中性的“情感”列,如果我连接向量,RNN 将如何将文本与情感相匹配?

以上是关于向量化文本作为 RNN 的输入的主要内容,如果未能解决你的问题,请参考以下文章

将 NLTK 文本特征与 sklearn 向量化特征相结合

如何向矢量化数据集添加特征?

词向量技术原理及应用详解

如何构建词空间向量和文本向量化

向量化与HashTrick在文本挖掘中预处理中的体现

文本的词条化和向量化