TF-IDF算法

TF-IDF(词频-逆文档频率)

        是一种用于衡量文本中词语重要性的方法,特别适用于信息检索和文本挖掘任务。下面我将深入讲解TF-IDF的计算过程,以便更好地理解。

         TF-IDF的计算过程可以分为两个主要部分:词频(TF)逆文档频率(IDF)

1. 词频(TF - Term Frequency):

        词频是指某个词语在文档中出现的频率。TF表示了一个词语在文档中的重要性,通常通过以下公式计算:

                                        ​​​​​​​        ​​​​​​​        ​​​​​​​        \text{TF}(t, d) = \frac{n_{t,d}}{\sum_{t' \in d} n_{t',d}}

其中n_{t,d} 表示词语  t  在文档  d 中出现的次数,\sum_{t' \in d} n_{t',d}表示文档  d 中所有词语的出现次数之和。

2. 逆文档频率(IDF - Inverse Document Frequency):

        逆文档频率度量了一个词语在整个文档集合中的重要性。IDF值越大,表示词语在整个文档集合中越不常见,因此在文档中的重要性越高。(就是说物以稀为贵)IDF通常通过以下公式计算:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \text{IDF}(t) = \log \left( \frac{N}{\text{DF}(t)+1} \right)

其中  N 表示文档集合中的文档总数,\text{DF}(t) +1表示包含词语  t 的文档数量。(加1防止分母为0)

3. TF-IDF的计算:

        TF-IDF的计算是将词频(TF)和逆文档频率(IDF)相结合,以确定词语在文档中的整体重要性。计算公式如下:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \text{TF-IDF}(t, d) = \text{TF}(t, d) \times \text{IDF}(t)​​​​​​​

TF-IDF 的计算结果是一个词语在文档中的重要性的加权值,该值既考虑了词语在文档中的频率,又考虑了词语在整个文档集合中的重要程度。通常情况下,TF-IDF 值越大,表示词语在文档中的重要性越高。

思考:为什么要用log函数来表示?括号里面是大于1的。然后当文档有100000本,但是出现了一个罕见字,那么不加log的话,它的数值会非常大。所以log会将数值变小。

代码

from sklearn.feature_extraction.text import TfidfVectorizer

def test():
    vectorizer = TfidfVectorizer()
    corpus = ['This is the first document.', 'This is the second second document.', 'And the third one.', 'Is this the first document?']
    X = vectorizer.fit(corpus)
    vectors = vectorizer.transform(corpus)
    
    '''
    稀疏矩阵的存储
    (0, 8)        0.4387767428592343
    (0, 6)        0.35872873824808993
    (0, 3)        0.4387767428592343
    (0, 2)        0.5419765697264572
    (0, 1)        0.4387767428592343
    (1, 8)        0.2723014675233404
    (1, 6)        0.22262429232510395
  '''
    
    print(vectors)
    
    '''
    表示四个文档,9个单词的矩阵

    (4, 9)
    '''
    print(vectors.shape)
    
    '''
    [[0.         0.43877674 0.54197657 0.43877674 0.         0.
  0.35872874 0.         0.43877674]
 [0.         0.27230147 0.         0.27230147 0.         0.85322574
  0.22262429 0.         0.27230147]
 [0.55280532 0.         0.         0.         0.55280532 0.
  0.28847675 0.55280532 0.        ]
 [0.         0.43877674 0.54197657 0.43877674 0.         0.
  0.35872874 0.         0.43877674]]
  '''
    
    print(vectors.toarray())
    
    
    '''
    ['and' 'document' 'first' 'is' 'one' 'second' 'the' 'third' 'this']
    '''
    print(vectorizer.get_feature_names_out())
    
    
if __name__ == '__main__':
    test()

自然语言文本预处理

一般情况下我们拿到的文本是不规范的,需要我们进行一系列的预处理操作。        

  • 文本数据清洗:去除特殊符号、HTML标签、数字等无关字符。
  • 分词:将文本拆分成单词或词组。
  • 停用词去除:排除常见的停用词,如“的”、“在”等,以减少噪音。

是否能生成摘要任务?

TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用的文本特征提取方法,用于衡量一个词对于文档的重要程度。虽然 TF-IDF 主要用于词袋模型(Bag of Words)中的特征提取和文本分类等任务,但也可以在一定程度上用于生成摘要。

生成摘要的目标是从文档中提取出最重要的信息,使得摘要能够概括文档的主题和内容。在这方面,TF-IDF 可以作为一种衡量词汇重要性的指标,帮助我们识别文档中最关键的词语。

生成摘要的一种简单方法是选择文档中 TF-IDF 得分最高的词语作为摘要的关键词。这些高 TF-IDF 得分的词语通常是在文档中频繁出现但在语料库中其他文档中较少出现的词语,因此可能具有较高的信息量。

然而,需要注意的是,仅仅依靠 TF-IDF 得分来生成摘要可能会忽略诸如词语之间的语义关系、上下文等信息。因此,在实际应用中,还需要结合其他技术或方法来进一步提炼和生成更加准确和连贯的摘要。

综上所述,TF-IDF 可以作为一种辅助手段用于生成摘要,但最好与其他技术或方法结合使用,以提高摘要的质量和准确性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值