输入文本数据已被标记:
data ['tokenised']['hasan','Minhaj',"响应"," Netflix"," Pulling''''''''''''''''''','show','show','saudi',"阿拉伯"]
数据用0填充,以使所有长度相等的标记文本(在这种情况下为51):
len(data['tokenised'][0])
51
称为100维的单词向量: embeddings_index = dict() f = open('Glove.6b.100d.txt') 对于F中的行 值= line.split() word =值[0] coefs = np.Asarray(值[1:],dtype ='float32') embeddings_index [word] = coefs f.close()
输入数据令牌被转换为其向量形式:
def word2vec(tokens,max_size,dim):
print(tokens)
vec = np.zeros((max_size,dim))
for ind,tok in enumerate(tokens):
if(tok==0):
vec[ind] = vec[ind]
else:
try:
print(ind)
vec[ind] = embeddings_index[tok]
except KeyError:
continue
return vec
data['w2v'][0]
array([[-0.41133001, -0.20108999, -0.54119998, ..., -0.67202002,
0.14799 , -0.055051 ],
[ 0.049478 , 0.26212001, -0.78268999, ..., -0.14226 ,
-0.32286 , 0.13525 ],
[-0.14078 , 0.6573 , 0.44602001, ..., -0.55290002,
0.19839001, 0.39563 ],
...,
[ 0. , 0. , 0. , ..., 0. ,
0. , 0. ],
[ 0. , 0. , 0. , ..., 0. ,
0. , 0. ],
[ 0. , 0. , 0. , ..., 0. ,
0. , 0. ]])
现在,我的每个文本都有长度51个单词,每个单词都由100个维度向量表示(如数据['w2v']所示)。 数据['W2V'] [0]。形状 (51,100)所有数组均具有相同的维度,即(51,100),所有数组元素均为float类型。
data ['w2v']是dataframe的一列。
在火车测试中拆分数据: x_train,x_test,y_train,y_test =
train_testrongplit(data ['w2v'],data ['class'],testrongize = 0.2,strate = data ['class'])
x_train.shape #series data type
(10248,)
x_train[7].shape #2D array
(51, 100)
在带有2D numpy数组的拟合SVM模型上,我以下错误: 型号= LinareSVC(C = 0.3) 型号(x_train,y_train) ValueError:设置具有序列的数组元素。
注意:所有的Numpy阵列均具有相同的形状(51,100)。
请建议如何处理此错误?我应该如何修改x_train,以便可以训练模型?
您的x_train
当前是三维。到目前为止,您所做的一切结果在每个训练示例x_train[i]
中都是(51,100)数组,即x_train
的形状为(n_samples,51,100)。
当您调用fit
方法时,x_train
需要具有形状(n_samples, n_features)
(直接从文档)。因此,您需要将每个输入的51x100数组减少到1D数组/向量。您可以通过 -
- 简单地将您的(51,100)形阵列重塑为(5100)大小的向量,以便您的
x_train
是形状的(n_samples, 5100)
或 - 通过以某种方式组合嵌入方式,例如平均它们或获得较小功能的东西。例如,您可以在每个(51,100)形阵列上进行总和/平均值以获得(51)大小的特征向量。我之所以提及这种可能性,是因为平均单词嵌入嵌入句子是一种非常粗糙但通常使用的基线技术(当然,这通常不适用于转换输入形状)。