0

我有一组样本,每个样本有 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 是我打印出的向量是否正确?

4

1 回答 1

1

形状是 (1,55),因为 55 是整个 n-gram 词汇的大小。当您对包含 1 个文本的列表调用变换时,输出形状仍将为 (1,55),如果您在 2 个文本上调用它,则输出形状将为 (2,55)。输出中的元组意味着词汇表中索引 (0,x) 处的 gram 是单词中的 gram。浮点数是逆文档频率

另外我认为您误解了ngram_range参数的工作方式。你问为什么它会增加,当你输入 (1,3) 而不是 (1,2) 时它不会减少。这是因为当您输入 (1,3) 时,它会将一元、二元和三元都存储在词汇表中。

于 2018-04-16T13:25:47.933 回答