机器学习-文本特征提取(TF-IDF):使用人工智能探索文本信息

机器学习-文本特征提取(TF-IDF)

引言

在当今信息爆炸的时代,文本数据的规模不断增长,从社交媒体帖子到新闻文章,都蕴含着无尽的宝贵信息。为了从这些海量的文本数据中提取有价值的信息,机器学习领域涌现出了许多有效的技术。其中,TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用且有效的文本特征提取方法。本文将深入探讨TF-IDF的原理、应用和实际案例,带你走进文本特征提取的精彩世界。

了解TF-IDF的基本原理

TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用的文本特征抽取方法,用于衡量文本中词语重要性的统计方法。
TF-IDF将词语的重要性表示为一个数值,该数值与词语在文档中的频率(TF)和在整个文档集合中的逆文档频率(IDF)成比例,它结合了词频(TF)和逆文档频率(IDF)两个部分,从而在一篇文档中高权重地标记那些在该文档中频繁出现,但在整个文本集合中不常见的词语。

词频(TF)的计算方法

词频指的是某个词在文本中出现的频率,一般采用简单计数或归一化后的计数方法来计算,以避免对文档长度的依赖。
常见的计算公式是将词语在文档中出现的次数除以文档中所有词语的总数。例如,一个文档中包含10个词语,其中目标词语出现了2次,那么该词语在文档中的TF为2/10=0.2。

逆文档频率(IDF)的计算方法

词语在整个文档集合中的逆文档频率用于衡量一个词语对整个文档集合的重要性。IDF计算的是词语在整个文档集合中的稀缺程度。如果一个词语在整个文档集合中经常出现,那么它的IDF值将较低;如果一个词语在整个文档集合中很少出现,那么它的IDF值将较高。
IDF的计算通常使用文档集合中包含该词语的文档数量的倒数,并通过取对数来缩放结果。例如,如果一个词语在整个文档集合中出现了100次,而文档集合总共包含1000个文档,那么该词语的IDF可以计算为log(1000/100)=1。

构建TF-IDF向量

TF-IDF的值的计算公式如下:

  1. 词语在文档中的频率(Term Frequency,TF):
    TF是一个词语在文档中出现的频率,可以通过以下公式计算:

    TF = (词语在文档中出现的次数) / (文档中的总词语数)
    

    通常还可以使用词频归一化等方法来计算TF,以避免对文档长度的依赖。

  2. 词语在整个文档集合中的逆文档频率(Inverse Document Frequency,IDF):
    IDF用于衡量一个词语在整个文档集合中的稀缺程度,可以通过以下公式计算:

    IDF = log((文档集合中的文档总数) / (包含该词语的文档数)) + 1
    

    在这里,使用对数是为了将IDF值缩放,避免IDF值过大。

  3. TF-IDF值:
    TF-IDF值是将词语在文档中的频率(TF)和在整个文档集合中的逆文档频率(IDF)相乘得到的:

    TF-IDF = TF * IDF
    

TF-IDF值的计算允许我们在文本中找到那些在特定文档中频繁出现且在整个文档集合中较为独特的词语,这些词语可以作为文本的关键特征,用于文本分类、聚类等任务。

TF值、IDF值和TF-IDF值越大的含义

  • TF值(Term Frequency)

    • TF值衡量了一个词语在文档中的频率。
    • TF值越大表示该词语在文档中出现的次数越多,即在文档中越重要。
  • IDF值(Inverse Document Frequency)

    • IDF值衡量了一个词语在整个文档集合中的逆文档频率。
    • IDF值越大表示该词语在整个文档集合中越稀缺,即在整个文档集合中越重要。
  • TF-IDF值(Term Frequency-Inverse Document Frequency)

    • TF-IDF值是TF值和IDF值的乘积,用于综合衡量一个词语在文档中的重要性。
    • TF-IDF值越大表示该词语在文档中频繁出现,但在整个文档集合中相对较为稀缺,即在该文档中且在整个文档集合中都越重要。

总结:

  • 当TF值较大时,表示该词语在文档中频繁出现,对文档的重要性较高。
  • 当IDF值较大时,表示该词语在整个文档集合中相对较为稀缺,对整个文档集合的重要性较高。
  • 当TF-IDF值较大时,表示该词语在该文档中频繁出现且在整个文档集合中相对较为稀缺,因此在该文档中具有较高的重要性,有助于区分该文档和其他文档。

TF-IDF与CountVectorizer文本特征提取方法的对比

  1. 特征计算方式:

    • TF-IDF:TF-IDF计算的是词语在文档中的频率(TF)和在整个文档集合中的逆文档频率(IDF)的乘积,用于衡量一个词语在文档中的重要性。

    • CountVectorizer:CountVectorizer计算的是词语在文档中的出现次数,用于构建一个简单的词频矩阵。

  2. 特征值类型:

    • TF-IDF:TF-IDF的特征值是一个实数,表示该词语在文档中的重要性程度。

    • CountVectorizer:CountVectorizer的特征值是一个整数,表示该词语在文档中出现的次数。

  3. 处理频繁出现的词语:

    • TF-IDF:对于在文档中频繁出现的词语,由于其TF值高,但IDF值较低,TF-IDF值可能会降低它们的重要性,因此在一定程度上进行了平衡。

    • CountVectorizer:CountVectorizer只关注词语在文档中出现的次数,对于频繁出现的词语,特征值可能会较高。

  4. 处理停用词:

    • TF-IDF:通常在TF-IDF中可以通过设置停用词列表来过滤掉在文档集合中普遍出现但对于分类或聚类任务没有太多信息量的词语。

    • CountVectorizer:CountVectorizer无法直接处理停用词,需要在后续进行额外处理。

  5. 适用场景:

    • TF-IDF:TF-IDF在文本挖掘、信息检索、文本分类等任务中表现良好,特别适用于挖掘文本中关键词和重要主题。TF-IDF在实际场景中的应用案例包括垃圾邮件分类、情感分析等。

    • CountVectorizer:CountVectorizer适用于简单的文本表示和词频统计,例如在一些简单的文本分类任务中。

简单代码示例

import jieba
from sklearn.feature_extraction.text import TfidfVectorizer

def cut_word(text):
    """
    进行中文分词:“我爱北京天安门” -> "我 爱 北京 天安门"
    :param text: 输入的中文文本
    :return: 分词后的文本,用空格分隔
    """

    return ' '.join(jieba.cut(text))

def tfidf_demo():
    """
    用TF-IDF的方法进行文本特征抽取
    :return: None
    """
    data = ['一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。',
            '我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。',
            '如果只用一种方式了解某件事物,他就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。']
    
    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    print("分词结果:\n", data_new)

    # 1、实例化一个转换器类
    transfer = TfidfVectorizer()
    # 2、调用fit_transform进行特征抽取,返回TF-IDF矩阵
    data_final = transfer.fit_transform(data_new)
    print("TF-IDF矩阵:\n", data_final.toarray())
    print("特征名字:\n", transfer.get_feature_names_out())
    return None

if __name__ == "__main__":
    tfidf_demo()
    # print(cut_word('我爱北京天安门'))




['一种 还是 一种 今天 很 残酷 , 明天 更 残酷 , 后天 很 美好 , 但 绝对 大部分 是 死 在 明天 晚上 , 所以 每个 人 不要 放弃 今天 。', '我们 看到 的 从 很 远 星系 来 的 光是在 几百万年 之前 发出 的 , 这样 当 我们 看到 宇宙 时 , 我们 是 在 看 它 的 过去 。', '如果 只用 一种 方式 了解 某件事 物 , 他 就 不会 真正 了解 它 。 了解 事物 真正 含义 的 秘密 取决于 如何 将 其 与 我们 所 了解 的 事物 相 联系 。']
data_final:
 [[0.30847454 0.         0.20280347 0.         0.         0.
  0.40560694 0.         0.         0.         0.         0.
  0.20280347 0.         0.20280347 0.         0.         0.
  0.         0.20280347 0.20280347 0.         0.40560694 0.
  0.20280347 0.         0.40560694 0.20280347 0.         0.
  0.         0.20280347 0.20280347 0.         0.         0.20280347
  0.        ]
 [0.         0.         0.         0.2410822  0.         0.
  0.         0.2410822  0.2410822  0.2410822  0.         0.
  0.         0.         0.         0.         0.         0.2410822
  0.55004769 0.         0.         0.         0.         0.2410822
  0.         0.         0.         0.         0.48216441 0.
  0.         0.         0.         0.         0.2410822  0.
  0.2410822 ]
 [0.12826533 0.16865349 0.         0.         0.67461397 0.33730698
  0.         0.         0.         0.         0.16865349 0.16865349
  0.         0.16865349 0.         0.16865349 0.16865349 0.
  0.12826533 0.         0.         0.16865349 0.         0.
  0.         0.16865349 0.         0.         0.         0.33730698
  0.16865349 0.         0.         0.16865349 0.         0.
  0.        ]]
特征名字:
 ['一种' '不会' '不要' '之前' '了解' '事物' '今天' '光是在' '几百万年' '发出' '取决于' '只用' '后天' '含义'
 '大部分' '如何' '如果' '宇宙' '我们' '所以' '放弃' '方式' '明天' '星系' '晚上' '某件事' '残酷' '每个'
 '看到' '真正' '秘密' '绝对' '美好' '联系' '过去' '还是' '这样']

进程已结束,退出代码0

在这个例子中,我们首先导入了TfidfVectorizer类,然后准备了一个包含4个文档的简单文本数据列表。接着,我们创建了TfidfVectorizer对象并对文本数据进行拟合和转换,得到TF-IDF特征向量。最后,我们打印了词语列表和特征向量。

结论

我们简要探讨了机器学习中的文本特征提取方法——TF-IDF。通过对TF-IDF的原理、应用和实际案例的介绍,读者可以更好地理解如何利用TF-IDF从海量文本数据中挖掘有价值的信息。在实际应用中,选择合适的文本特征提取方法对于机器学习任务的成功至关重要。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jmu xzh_0618

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值