TfIdf 向量化器为缺失的词返回正值
TfIdf vectorizer returning positive values for absent words
我正在使用 sklearn 中的 TfIdf 矢量化器对语料库进行矢量化。语料库很大,但数据大致是这样的:
index speaker text
1 Bob 'this is sample text'
2 Dick 'also some sample words but different ones'
3 Jane 'stuff goes here that did not go above'
4 Mary 'my name is mary and my text is not being analyzed'
我想了解前三个说话者的单词 TfIdf 值是如何按说话者分解的。所以我有:
from sklearn.feature_extraction.text import TfidfVectorizer
vec = TfidfVectorizer(stop_words=stemmed_stops)
word_vec = vec.fit_transform(df.loc[['Bob', 'Dick', 'Jane'], 'text'])
矢量化语料库后,我创建了一个数据框,其中包含 TfIdf 值,其列是词汇表:
speaker_vocab = pd.DataFrame(word_vec.toarray(), index=['Bob', 'Dick', 'Jane'], columns = vec.vocabulary_)
这给出了一个如下所示的数据框:
this sample that my text ...
Bob 0.5 0.3 0.0 0.0 0.5
问题在于从不使用某些术语的说话者会得到这些术语的正 TfIdf 值。例如,如果我查看 Jane 的单词,我会得到:
In: df.loc['Jane'].sort_values(ascending=False)
Out:
sample 0.32
goes .14
text .11
这似乎发生在所有说话者身上,而且从来没有出现在他们所在行中的肯定词。正值不同,但仍然是正值。
一般来说,矢量化器是否有理由 return 不在同一说话人行中的词的正值?
您在
中使用的列参数错误
speaker_vocab = pd.DataFrame(word_vec.toarray(),
index=['Bob', 'Dick', 'Jane'],
columns = vec.vocabulary_)
vocabulary_ : dict
A mapping of terms to feature indices.
Dicts 可以 return 任意顺序的项目。所以这个 dict
可能(将)不会按照 return 在 word_vec
中编辑的数据的相同顺序给出名称。
要按准确顺序获取名称,请使用 vec.get_feature_names()
。
speaker_vocab = pd.DataFrame(word_vec.toarray(),
index=['Bob', 'Dick', 'Jane'],
columns = vec.get_feature_names())
之后你会得到正确的输出。
speaker_vocab.loc['Jane'].sort_values(ascending=False)
#Output:
stuff 0.5
goes 0.5
go 0.5
above 0.5
words 0.0
this 0.0
text 0.0
sample 0.0
ones 0.0
我正在使用 sklearn 中的 TfIdf 矢量化器对语料库进行矢量化。语料库很大,但数据大致是这样的:
index speaker text
1 Bob 'this is sample text'
2 Dick 'also some sample words but different ones'
3 Jane 'stuff goes here that did not go above'
4 Mary 'my name is mary and my text is not being analyzed'
我想了解前三个说话者的单词 TfIdf 值是如何按说话者分解的。所以我有:
from sklearn.feature_extraction.text import TfidfVectorizer
vec = TfidfVectorizer(stop_words=stemmed_stops)
word_vec = vec.fit_transform(df.loc[['Bob', 'Dick', 'Jane'], 'text'])
矢量化语料库后,我创建了一个数据框,其中包含 TfIdf 值,其列是词汇表:
speaker_vocab = pd.DataFrame(word_vec.toarray(), index=['Bob', 'Dick', 'Jane'], columns = vec.vocabulary_)
这给出了一个如下所示的数据框:
this sample that my text ...
Bob 0.5 0.3 0.0 0.0 0.5
问题在于从不使用某些术语的说话者会得到这些术语的正 TfIdf 值。例如,如果我查看 Jane 的单词,我会得到:
In: df.loc['Jane'].sort_values(ascending=False)
Out:
sample 0.32
goes .14
text .11
这似乎发生在所有说话者身上,而且从来没有出现在他们所在行中的肯定词。正值不同,但仍然是正值。
一般来说,矢量化器是否有理由 return 不在同一说话人行中的词的正值?
您在
中使用的列参数错误speaker_vocab = pd.DataFrame(word_vec.toarray(),
index=['Bob', 'Dick', 'Jane'],
columns = vec.vocabulary_)
vocabulary_ : dict
A mapping of terms to feature indices.
Dicts 可以 return 任意顺序的项目。所以这个 dict
可能(将)不会按照 return 在 word_vec
中编辑的数据的相同顺序给出名称。
要按准确顺序获取名称,请使用 vec.get_feature_names()
。
speaker_vocab = pd.DataFrame(word_vec.toarray(),
index=['Bob', 'Dick', 'Jane'],
columns = vec.get_feature_names())
之后你会得到正确的输出。
speaker_vocab.loc['Jane'].sort_values(ascending=False)
#Output:
stuff 0.5
goes 0.5
go 0.5
above 0.5
words 0.0
this 0.0
text 0.0
sample 0.0
ones 0.0