tfidf.transform()函数未返回正确的值

发布于 2021-01-29 16:40:00

我正在尝试将tfidf矢量化器适合特定的文本语料库,然后使用相同的矢量化器来查找新文本的tfidf值的总和,但是,总和值不符合预期。下面是示例:

text = ["I am new to python and R , how can anyone help me","why is no one able to crack the python code without help"]
tf= TfidfVectorizer(stop_words='english',ngram_range =(1,1))
tf.fit_transform(text)
zip(tf.get_feature_names(),tf.idf_)

[(u'able', 1.4054651081081644),
 (u'code', 1.4054651081081644),
 (u'crack', 1.4054651081081644),
 (u'help', 1.0),
 (u'new', 1.4054651081081644),
 (u'python', 1.0)]

现在,当我尝试tf使用新文本进行相同操作时:

new_text = "i am not able to code"
np.sum(tf.transform([new_text]))
1.4142135623730951

我预计输出约为2.80。关于这里可能出问题的任何建议都会非常有帮助。

关注者
0
被浏览
42
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这是由于“ l2归一化”(TfidfVectorizer中的默认设置)。如您所料,的第一个结果transform()是:

    array([[ 1.40546511,  1.40546511,  0.        ,  0.        ,  0.        ,
         0.        ]])
    

    但是现在标准化已完成。在这种情况下,上述向量被除法器除:

    dividor = sqrt(sqr(1.40546511)+sqr(1.40546511)+sqr(0)+sqr(0)+sqr(0)+sqr(0))
            = sqrt(1.975332175+1.975332175+0+0+0+0)
            = 1.98762782
    

    因此,最终的数组为:

    array([[ 0.70710678,  0.70710678,  0.        ,  0.        ,  0.        ,
         0.        ]])
    

    然后应用求和,其结果为= 1.4142135623730951

    希望现在清楚了。您可以在这里参考我的回答,以完成TfidfVectorizer的工作。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看