郭震 AI公众号:郭震AI

11 只生成词向量之TF-IDF

发布日期:

最近更新:

分类: NLP小白

预计阅读: 5 分钟

阅读次数: 0

预计阅读5 分钟
结构重点5 个
图文要点6 张
正文规模2.1k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

独立整理围绕 5 个结构重点拆成环境、步骤、验证点和常见误区,尽量让读者能照着复现。
图文对照保留 6 张和配置、流程、判断结果有关的图片,方便快速定位正文重点。
持续校对工具、模型和命令变化较快,后续优先修正入口、参数和风险提醒。

阅读路线

先按这条路线读

先抓住主线,再回到代码、配置和图文细节,读起来会更稳。

图文要点

先看本文图文节点

按图先建立主线,再跳回正文核对步骤、配置和判断标准。

TF-IDF 词向量流程图查看大图
TFIDF 词向量流程图

TF-IDF 的价值在于让常见词少抢权重,让更能区分文档的词浮出来。它常用于搜索、聚类和传统分类基线。

TF-IDF 词向量实操核对图查看大图
TFIDF 词向量实操核对图

我会抽查每篇文档权重最高的词。如果都是无意义高频词,分词或停用词表可能有问题。

在自然语言处理(NLP)中,词向量的表示方法有很多,从最简单的词袋模型开始,再到我们今天要讨论的TF-IDF(Term Frequency-Inverse Document Frequency)方法。相较于词袋模型,TF-IDF不仅考虑了词频,还考虑了词的重要性,从而为文本提供更为精确的表示。

什么是TF-IDF

TF-IDF 是一个统计算法,它用来评估单词在文档集合或语料库中的重要性。它由两个部分组成:

TF-IDF词向量判断卡查看大图
TFIDF词向量判断卡

学习 TF-IDF 时,先看词在本文档中出现多少,再看它在整个语料中是否普遍。

  • 词频(TF):一个词在某篇文档中出现的频率。其计算公式为:

    TF(w,d)=nw,dwdnw,dTF(w, d) = \frac{n_{w, d}}{\sum_{w' \in d} n_{w', d}}

    其中,nw,dn_{w, d}表示词w在文档d中的出现次数,wdnw,d\sum_{w' \in d} n_{w', d}表示文档d中词的总数。

  • 逆文档频率(IDF):一个词在所有文档中重要性的度量。其计算公式为:

    IDF(w,D)=log(D{dD:wd})IDF(w, D) = \log\left(\frac{|D|}{|\{d \in D: w \in d\}|}\right)

    其中,D|D|表示整个文档集合的大小,而{dD:wd}|\{d \in D: w \in d\}|表示包含词w的文档数量。

  • 结合这两个部分,我们可以得到TF-IDF的计算公式:

    TFIDF(w,d,D)=TF(w,d)×IDF(w,D)TFIDF(w, d, D) = TF(w, d) \times IDF(w, D)

    TF-IDF的工作流程

    TF-IDF的计算流程通常包括以下几个步骤:

    自然语言处理阅读地图卡查看大图
    自然语言处理阅读地图卡

    读《只生成词向量之TF-IDF》时,可以把配图当成路线卡:先看整体顺序,再看每一步为什么这样做,最后再检查边界条件。

    1. 文本预处理:去除停用词、标点符号,进行分词等。

    2. 计算词频(TF):统计每个词在每个文档中的出现频率。

    3. 计算逆文档频率(IDF):统计每个词在所有文档中出现的情况。

    4. 计算TF-IDF值:将TF和IDF相乘以获得每个词的TF-IDF值。

    案例演示

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

    • 文档1:我 爱 自然 语言
    • 文档2:我 爱 编程
    • 文档3:自然 语言 处理 是 很 有趣 的

    我们来计算“自然”这个词在这三篇文档中的TF-IDF值。

    步骤1:文本预处理

    在这个例子中,文本已经被很好地分词。我们可以直接进入下一步。

    步骤2:计算词频(TF)

    • 文档1:我(1), 爱(1), 自然(1), 语言(1) => TF = {我: 0.25, 爱: 0.25, 自然: 0.25, 语言: 0.25}
    • 文档2:我(1), 爱(1), 编程(1) => TF = {我: 0.33, 爱: 0.33, 编程: 0.33}
    • 文档3:自然(1), 语言(1), 处理(1), 是(1), 很(1), 有趣(1), 的(1) => TF = {自然: 0.14, 语言: 0.14, 处理: 0.14, 是: 0.14, 很: 0.14, 有趣: 0.14, 的: 0.14}

    步骤3:计算逆文档频率(IDF)

    • 自然在文档1和文档3中出现,文档总数为3,因此有:
    IDF(w,D)=log(32)0.176IDF(w, D) = \log\left(\frac{3}{2}\right) \approx 0.176

    步骤4:计算TF-IDF值

    • 文档1
    TFIDF(w,doc1)=0.25×0.1760.044TFIDF(w, doc1) = 0.25 \times 0.176 \approx 0.044
    • 文档2:没有自然,因此为0。

    • 文档3

    TFIDF(w,doc3)=0.14×0.1760.025TFIDF(w, doc3) = 0.14 \times 0.176 \approx 0.025

    最终结果为:

    • 文档1中的“自然” TF-IDF 值为 0.044
    • 文档2中的“自然” TF-IDF 值为 0
    • 文档3中的“自然” TF-IDF 值为 0.025

    Python实现

    我们可以使用Python中的scikit-learn来方便地计算TF-IDF值。以下是一个简单的实现:

    from sklearn.feature_extraction.text import TfidfVectorizer
    
    # 样本文档
    documents = ["我 爱 自然 语言", "我 爱 编程", "自然 语言 处理 是 很 有趣 的"]
    
    # 创建TF-IDF向量器
    vectorizer = TfidfVectorizer()
    
    # 拟合并转换文档
    tfidf_matrix = vectorizer.fit_transform(documents)
    
    # 打印结果
    feature_names = vectorizer.get_feature_names_out()
    dense = tfidf_matrix.todense()
    denselist = dense.tolist()
    
    import pandas as pd
    
    df_tfidf = pd.DataFrame(denselist, columns=feature_names)
    print(df_tfidf)
    

    输出将为一个包含每个单词在每个文档中TF-IDF值的矩阵。

    只生成词向量之TFIDF应用复盘卡查看大图
    只生成词向量之TFIDF应用复盘卡

    如果《只生成词向量之TFIDF》还没完全消化,可以从这张卡片的四个动作重新走一遍。

    只生成词向量之TFIDF应用检查卡查看大图
    只生成词向量之TFIDF应用检查卡

    回看《只生成词向量之TFIDF》时,不必一次做大项目,先用一条简单样例确认主线是否清楚。

    小结

    TF-IDF是一种强有力的文本特征提取方法,它解决了词袋模型的局限性,通过考虑词频和逆文档频率,我们能够提取出语料中的重要信息及词的相对重要性。在接下来的篇章中,我们将学习更为复杂的Word2Vec模型,这将进一步丰富我们的词向量知识体系。

    通过本篇教程,你应该对TF-IDF有了基本的理解,以及如何在Python中实现它。希望你能在后续的学习中步入更深入的NLP领域!

    继续阅读

    从这篇继续找到相关教程

    AI 教程总索引

    常见问题

    读前先确认这三点

    只生成词向量之TF-IDF适合谁读?

    这是 自然语言处理入门 系列第 11 / 30 篇,适合正在学习自然语言处理入门,并且需要把概念落到操作步骤或判断标准里的读者。

    读这篇自然语言处理入门教程要多久?

    按中文技术文章阅读速度估算,通读大约 5 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。

    这篇文章里的图文节点怎么用?

    正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。

    分享文章

    转发到常用平台

    微信/朋友圈可先复制链接

    相关教程

    AI 教程总索引

    继续阅读

    继续找到相关 AI 教程

    返回栏目

    Reader Messages

    读者留言

    有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

    最多 800 字

    为了防刷,每条留言会做长度、链接数量和提交频率限制。

    0/800

    留言列表

    0
    正在加载留言...