• TF-IDF在现代搜索引擎优化策略中的作用


    TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于文本挖掘和信息检索的统计方法,用来评估一个词语对于一个文档或一个语料库的重要程度。TF-IDF算法结合了词频(TF)和逆文档频率(IDF)两个指标,既考虑了词语在单个文档中的出现频率,也考虑了词语在整个语料库中的普遍性。

    1. 术语解释

    1.1 词频(TF)

    词频(Term Frequency)是指一个词在文档中出现的频率。如果一个词经常出现,它就一定很重要,对吗?并非总是如此!像 “and”、"the "和 "is "这样的词在英语中经常出现,但它们并不能说明文档的内容。这就是 IDF 的作用所在。

    tf(t,d) = count of t in d / number of words in d
    

    1.2 逆文档频率(IDF)

    逆文档频率(Inverse Document Frequency)用来衡量词语在整个语料库中的普遍性。词语出现得越频繁,其信息量越小,反之,出现得越少,其信息量越大。

    在这里插入图片描述

    2. TF-IDF计算

    TF-IDF值是TF和IDF的乘积,用来衡量词语的重要性。公式如下:

    TF-IDF(t,d,D)=TF(t,d)×IDF(t,D)

    3. 示例

    假设我们有如下三个文档:

    • 文档1:我喜欢看电影
    • 文档2:我不喜欢看电影
    • 文档3:我喜欢看书

    首先,我们计算每个文档中词语的词频(TF):

    词语文档1 TF文档2 TF文档3 TF
    1/41/41/4
    喜欢1/41/41/4
    1/41/41/4
    电影1/41/40
    01/40
    001/4

    接着,我们计算每个词语的逆文档频率(IDF):

    词语出现文档数IDF
    3log⁡(3/3)=0\log(3/3) = 0log(3/3)=0
    喜欢3log⁡(3/3)=0\log(3/3) = 0log(3/3)=0
    3log⁡(3/3)=0\log(3/3) = 0log(3/3)=0
    电影2log⁡(3/2)≈0.176\log(3/2) \approx 0.176log(3/2)0.176
    1log⁡(3/1)≈1.098\log(3/1) \approx 1.098log(3/1)1.098
    1log⁡(3/1)≈1.098\log(3/1) \approx 1.098log(3/1)1.098

    最后,我们计算TF-IDF值:

    词语文档1 TF-IDF文档2 TF-IDF文档3 TF-IDF
    000
    喜欢000
    000
    电影1/4×0.176≈0.0441/4 \times 0.176 \approx 0.0441/4×0.1760.0441/4×0.176≈0.0441/4 \times 0.176 \approx 0.0441/4×0.1760.0440
    01/4×1.098≈0.2751/4 \times 1.098 \approx 0.2751/4×1.0980.2750
    001/4×1.098≈0.2751/4 \times 1.098 \approx 0.2751/4×1.0980.275

    4. 代码

    >>> from sklearn.feature_extraction.text import TfidfTransformer
    >>> from sklearn.feature_extraction.text import CountVectorizer
    >>> from sklearn.pipeline import Pipeline
    >>> corpus = ['this is the first document',
    ...          'this document is the second document',
    ...          'and this is the third one',
    ...          'is this the first document']
    >>> vocabulary = ['this', 'document', 'first', 'is', 'second', 'the',
    ...              'and', 'one']
    >>> pipe = Pipeline([('count', CountVectorizer(vocabulary=vocabulary)),
    ...                 ('tfid', TfidfTransformer())]).fit(corpus)
    >>> pipe['count'].transform(corpus).toarray()
    array([[1, 1, 1, 1, 0, 1, 0, 0],
       [1, 2, 0, 1, 1, 1, 0, 0],
       [1, 0, 0, 1, 0, 1, 1, 1],
       [1, 1, 1, 1, 0, 1, 0, 0]])
    >>> pipe['tfid'].idf_
    array([1.        , 1.22314355, 1.51082562, 1.        , 1.91629073,
       1.        , 1.91629073, 1.91629073])
    >>> pipe.transform(corpus).shape
    (4, 8)
    

    参考 https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfTransformer.html

    5. 应用场景

    • 信息检索:通过TF-IDF算法可以提升搜索引擎的搜索结果质量,使得相关性高的文档排在前面。
    • 文本分类:作为文本特征提取的方法,TF-IDF在文本分类中有广泛应用。
    • 推荐系统:结合用户的历史记录和文档的TF-IDF值,推荐系统可以向用户推荐更符合其兴趣的内容。

    6. 优缺点

    优点

    • 简单易实现: TF-IDF算法计算简单,易于实现。
    • 有效性: 在许多文本挖掘和信息检索任务中,TF-IDF算法表现良好。

    缺点

    • 忽略词序和语义: TF-IDF只考虑词频和逆文档频率,忽略了词语的顺序和上下文语义。
    • 高维稀疏性: 在大型语料库中,TF-IDF矩阵会非常稀疏,计算和存储成本较高。

    7. 总结

    TF-IDF算法是一种经典且广泛使用的文本特征提取方法,尽管有一些局限性,但在许多实际应用中依然表现良好。理解和掌握TF-IDF算法对于从事自然语言处理和信息检索领域的研究人员和工程师来说,是非常重要的。

    我会定期在CSDN分享我的学习心得,项目经验和行业动态。如果你对某个领域感兴趣,或者想要了解更多技术干货,请关注我的账号,一起成长!

  • 相关阅读:
    开源深度学习模型部署工具箱MMDeploy简介及安装
    DataX-web安装部署和使用
    字符串自由组合的种类个数
    jetpack compose中实现丝滑的轮播图效果
    易航网址引导系统 v1.9 源码:去除弹窗功能的易航网址引导页管理系统
    VMware Fusion 13 正式版终于来了
    基于柯西变异的蚁狮优化算法 - 附代码
    第二章 数据结构(2)
    【鸿蒙NEXT】设置全屏
    IP地址在网络安全中的关键作用
  • 原文地址:https://blog.csdn.net/weixin_41446370/article/details/139719208