我有一组样本,每个样本有 3 个单词(名字、中间名和姓氏)
text = ['James Jackson Jammy',
'Steve Smith Something',
'Chamak Chalo Chanta',
'Polo Rolo Colo']
试图解决神经网络输入的问题,我想提取名称的字符级别 tf(例如 james --> ja,am,me,es)并将其保存为数组以将其提供给神经网络分类。
使用TfIdfVectorizer,我试图从语料库中提取特定单词的 tf
# creating the corps
corpus =[]
# splitting the text in to words
corpus = ' '.join(text[i] for i in range(len(text))).split()
# copy only unique words
corpus = set(corpus)
# creating the character vector (2 letters)
vectorizer = TfidfVectorizer(ngram_range=(1,2), analyzer= 'char')
X = vectorizer.fit(corpus)
# checking the vector of the one word
# ab = X.transform(['Chamak Chalo Chanta'])
ab = X.transform(['Chamak'])
print(ab.shape)
print(ab)
当我检查输出时,我得到了类似的东西
(1,55)
(0, 28) 0.38126785705606514
(0, 27) 0.23541325871187607
(0, 23) 0.3274372645024392
(0, 16) 0.28924385126550206
(0, 15) 0.23541325871187607
(0, 7) 0.28924385126550206
(0, 6) 0.23541325871187607
(0, 4) 0.28924385126550206
(0, 2) 0.38126785705606514
(0, 0) 0.4298956344860669
它说形状是 (1, 55),我不明白它显示的是什么向量。(0,0) ...(0,28) 的值是否有任何意义。对于“chamak”这个词,我期望它应该显示“ch”、“ha”、“am”、“ma”、“ak”的 tf 值,但这些值是 55 而不是 5。
当我使用ngram_range=(1,3)
输出是
(1, 91)
(0, 49) 0.30927373541425635
(0, 48) 0.30927373541425635
(0, 47) 0.1909605977541359
(0, 42) 0.26560787654230167
(0, 29) 0.30927373541425635
(0, 27) 0.23462645662609066
(0, 26) 0.1909605977541359
(0, 14) 0.23462645662609066
(0, 13) 0.23462645662609066
(0, 12) 0.1909605977541359
(0, 7) 0.30927373541425635
(0, 6) 0.23462645662609066
(0, 3) 0.30927373541425635
(0, 0) 0.34871921735651773
当我将范围增加到 3 而不是 3(如 cha、ham、amp、..)时,它应该会减小,但为什么会增加。
我对这个概念的理解出错了,但我做错了吗?我可以使用向量输入到神经网络吗?对于我想要的输出,用于 ch、am、ma、ap、pa、ak(6 个向量)的 tf 是我打印出的向量是否正确?