我有一组样本,每个样本都有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,.)它应该减少,但是为什么它在增加。
我对这个概念的理解出了问题,但我做错了吗?我能用向量输入到神经网络吗?对于我想要的输出,tf对ch,am,ma,ap,pa,ak (6个向量)是正确的吗?
发布于 2018-04-16 13:25:47
形状是(1, 55 ),因为55是你整个n克词汇表的大小.当您对一个包含一个文本的列表调用transform时,输出形状仍然是(1,55),如果在2文本上调用它,它将是(2,55)。输出中的元组意味着词汇表中索引(0,x)处的克是单词中的一克。浮点数是逆文档频率。
此外,我认为您误解了ngram_range参数的工作方式。您会问为什么它会增加,而不是在输入(1,3)而不是(1,2)时减少。这是因为当您输入(1,3)时,它会在词汇表中同时存储单数、比例尺和曲线图。
https://stackoverflow.com/questions/49856775
复制相似问题