深度/机器学习基础知识要点:TFIDF、LDA、LSA

本文深入探讨了TF-IDF、LDA和LSA三种文本分析算法,详细介绍了它们的原理和计算公式。TF-IDF用于衡量词在文档中的重要性,LDA是一种主题模型,能识别文档集中的潜在主题,而LSA则通过向量表示词和文档,捕捉它们之间的潜在语义关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TFIDF

  • TF
    Term Frequency,即词频,它表示一个词在文档中出现的次数。

    计算公式:

    TF=某个词在文档中出现的次数文档的总词数TF = \frac{某个词在文档中出现的次数}{文档的总词数}TF

    某个词出现越多,表示它约重要。
    某个词越少见,就越能表达一篇文章的特性,反之则越不能。

  • IDF

    Inverse Document Frequency,即逆文档频率,它是一个表达词语重要性的指标。

    计算公式:

    IDF=log(语料库中的文档数包含该词的文档数+1) IDF=log( \frac{语料库中的文档数}{包含该词的文档数+1}) IDFlog(+1)

    如果所有文章都包涵某个词,该词的IDF=log(1)=0IDF=log(1)=0IDFlog(1)=0,即重要性为零。停用词的IDF约等于0。

    如果某个词只在很少的文章中出现,则IDF很大,其重要性也越高。

  • TF-IDF

    计算公式:

    TFTFTF-IDFIDFIDF =TF×IDF= TF × IDFTF×IDF

    如果某个词在一篇文章中出现的频率高,并且在其他文章中很少出现,则认为此词具有很好的类别区分能力

LDA

  • LDA定义
    LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。

    所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到。

    文档到主题服从多项式分布,主题到词服从多项式分布。

    LDA是一种非监督机器学习技术,可以用来识别大规模文档集(document collection)或语料库(corpus)中潜藏的主题信息。它采用了词袋(bag of words)的方法,这种方法将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息。

  • LDA生成过程

    对于语料库中的每篇文档,LDA定义了如下生成过程:
    1.对每一篇文档,从主题分布中抽取一个主题;
    2.从上述被抽到的主题所对应的单词分布中抽取一个单词;
    3.重复上述过程直至遍历文档中的每一个单词。

  • LDA整体流程

    定义:文档集合D,主题(topic)集合T
    D中每个文档d看作一个单词序列<w1,w2,...,wn><w1,w2,...,wn><w1,w2,...,wn>,wi表示第i个单词,设d有n个单词。
    D中涉及的所有不同单词组成一个大集合VOCABULARY(简称VOC),LDA以文档集合D作为输入,希望训练出的两个结果向量(设聚成k个topic,VOC中共包含m个词):
    对每个D中的文档d,对应到不同Topic的概率θd<pt1,...,ptk>θ_{d}<p_{t_{1}},...,p_{t_{k}}>θd<pt1,...,ptk>,其中,ptip_{t_{i}}pti表示d对应T中第iii个topic的概率。计算方法:pti=ntinp_{t_{i}}=\frac{n_{t_{i}}}{n}pti=nnti,其中ntin_{t_{i}}nti表示d中对应第i个topic的词的数目,n是d中所有词的总数。
    对每个T中的topic t,生成不同单词的概率φt<pw1,...,pwm>φ_t<p_{w_{1}},...,p_{w_{m}}>φt<pw1,...,pwm>,其中,pwip_{w_{i}}pwi表示t生成VOC中第i个单词的概率。计算方法同样很直观,pwi=NwiNp_{w_{i}}=\frac{N_{w_{i}}}{N}pwi=NNwi,其中NwiN_{w_{i}}Nwi表示对应到topict的VOC中第i个单词的数目,N表示所有对应到topict的单词总数。

    LDA的核心公式如下:
    p(w∣d)=p(w∣t)∗p(t∣d)p(w|d)=p(w|t)*p(t|d)p(wd)=p(wt)p(td)

    直观的看这个公式,就是以Topic作为中间层,可以通过当前的θdθ_dθdφtφ_tφt给出了文档d中出现单词w的概率。其中p(t∣d)p(t|d)p(td)利用θdθ_dθd计算得到,p(w∣t)p(w|t)p(wt)利用φtφ_tφt计算得到。

    实际上,利用当前的θdθ_dθdφtφ_tφt,我们可以为一个文档中的一个单词计算它对应任意一个Topic时的p(w∣d)p(w|d)p(wd),然后根据这些结果来更新这个词应该对应的topic。然后,如果这个更新改变了这个单词所对应的Topic,就会反过来影响θdθ_dθdφtφ_tφt

LSA

  • 定义
    LSA(latent semantic analysis)潜在语义分析也可以称为 LSI(latent semantic index)。

    使用向量来表示词(iterms)和文档(documents),并通过向量间的关系来表示词和文档之间的相似度。

    LSA 的核心思想是将词和文档映射到潜在语义空间,再比较其相似性。

    在这里插入图片描述

    • 解释
      矩阵U :每一行表示意思相关的一类词,其中的每个非零元素表示这类词中每个词的重要性(或者说相关性),数值越大越相关。

      矩阵V :每一列表示同一主题一类文章,其中每个元素表示这类文章中每篇文章的相关性。

      矩阵D: 则表示类词和文章类之间的相关性。

    我们只要对关联矩阵X 进行一次奇异值分解(SVD),我们就可以同时完成了近义词分类和文章的分类。(同时得到每类文章和每类词的相关性)

  • 实例
    在这里插入图片描述
    图中一共有10篇文章,选择代表词11个,矩阵中的数字代表横坐标中的词对应的纵坐标中的文章中出现的词频,对这个矩阵进行SVD分解:

    在这里插入图片描述

  • LSA的优点
    1)低维空间表示可以刻画同义词,同义词会对应着相同或相似的主题。
    2)降维可去除部分噪声,使特征更鲁棒。
    3)充分利用冗余数据。
    4)无监督。
    5)与语言无关。

  • LSA的缺点
    1)LSA可以解决一义多词问题
    2)SVD的优化目标基于L-2 norm 或者 Frobenius Norm 的,这相当于隐含了对数据的高斯分布假设。而 term 出现的次数是非负的,这明显不符合 Gaussian 假设,而更接近 Multi-nomial 分布。
    3)特征向量的方向没有对应的物理解释。
    4)SVD的计算复杂度很高,而且当有新的文档来到时,若要更新模型需重新训练。
    5)没有刻画term出现次数的概率模型。
    6)对于count vectors 而言,欧式距离表达是不合适的。

### 奇异值分解 SVD 在机器学习中的应用及与主题模型 LDA 的关系 奇异值分解(SVD)是线性代数中一种重要的矩阵分解方法,广泛应用于数据降维、特征提取文本挖掘等领域。在机器学习中,SVD 通过将高维数据投影到低维空间来揭示潜在的结构信息[^4]。 #### SVD 在主题模型中的作用 SVD 是许多主题模型的基础工具之一,例如潜在语义分析(LSA)。LSA 利用 SVD 分解文档-词项矩阵,从而提取出潜在的主题结构[^2]。尽管 LSA LDA 都用于主题建模,但它们的原理技术实现存在显著差异。 LDA(Latent Dirichlet Allocation)是一种生成式概率模型,它假设每篇文档由多个主题组成,并且每个主题由一组词的概率分布定义。LDA 的目标是从文档集合中推断出这些隐含的主题分布[^1]。虽然 LDA 不直接依赖于 SVD,但在某些情况下,SVD 可以作为预处理步骤,帮助减少数据维度并提高后续 LDA 计算的效率。 #### SVD 在 LDA 中的应用 尽管 LDA SVD 的数学基础不同,但两者可以结合使用以增强主题建模的效果。以下是 SVD 在 LDA 中可能的应用方式: 1. **数据预处理**:通过 SVD 对文档-词项矩阵进行降维,去除噪声并保留主要成分,从而简化输入数据的复杂度[^3]。 2. **初始化参数**:在 LDA 的优化过程中,可以通过 SVD 提供初始值或约束条件,加速收敛速度。 3. **后处理分析**:利用 SVD 分析 LDA 输出的结果,进一步解释主题之间的关系或验证模型的有效性。 #### 示例代码 以下是一个简单的 Python 实现,展示如何使用 SVD 对文档-词项矩阵进行降维: ```python import numpy as np from sklearn.decomposition import TruncatedSVD from sklearn.feature_extraction.text import TfidfVectorizer # 示例文本数据 documents = [ "Machine learning is fascinating", "SVD can be used for dimensionality reduction", "LDA generates topics from a collection of documents" ] # 构建 TF-IDF 矩阵 vectorizer = TfidfVectorizer() tfidf_matrix = vectorizer.fit_transform(documents) # 使用 SVD 进行降维 svd = TruncatedSVD(n_components=2) reduced_matrix = svd.fit_transform(tfidf_matrix) print("SVD 降维后的矩阵:") print(reduced_matrix) ``` #### LDA 的实现 LDA 的实现通常依赖于 Gibbs 采样或变分贝叶斯方法。以下是一个基于 `gensim` 库的 LDA 示例: ```python from gensim import corpora from gensim.models import LdaModel # 创建词典语料库 texts = [[word for word in doc.lower().split()] for doc in documents] dictionary = corpora.Dictionary(texts) corpus = [dictionary.doc2bow(text) for text in texts] # 训练 LDA 模型 lda_model = LdaModel(corpus, num_topics=2, id2word=dictionary, passes=10) # 输出主题分布 for topic in lda_model.print_topics(): print(topic) ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

szZack

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

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

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

打赏作者

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

抵扣说明:

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

余额充值