醋醋百科网

Good Luck To You!

TF-IDF(词频-逆文档频率)(tfidf词频统计)

TF-IDF解释

是一种用于信息检索和文本挖掘的统计方法,衡量词语对文档的重要性。

是一种用于评估词语在文档集合中重要性的统计方法。

核心思想

TF(词频): 词语在文档中出现的频率

IDF(逆文档频率): 衡量一个词语在整个文档集合中的普遍重要性

TF-IDF 由两部分组成:

  1. TF (词频): 词语 t 在文档 d 中出现的频率
  • 公式: TF(t,d) = (词语 t 在文档 d 中的出现次数) / (文档 d 中词语总数) 有时也使用简化版本: TF(t,d) = 词语 t 在文档 d 中的出现次数
  1. IDF (逆文档频率): 衡量词语 t 的通用性或特殊性
  • 公式: IDF(t) = log(文档总数 / 包含词语 t 的文档数) 为避免分母为零,通常加1: IDF(t) = log(文档总数 / (包含词语 t 的文档数 + 1)) + 1
  1. TF-IDF: 两者相乘
  • 公式: TF-IDF(t,d) = TF(t,d) * IDF(t)
import math
from collections import Counter


def compute_tf(text):
    """
    计算词频(TF)
    :param text: 文本
    :return: 词频字典
    """
    counter = Counter(text.split())
    total_words = len(text.split())
    tf_dict = {word: count / total_words for word, count in counter.items()}
    return tf_dict


def compute_idf(documents):
    """
    计算逆文档频率(IDF)
    :param documents: 文档集合
    :return: 逆文档频率字典
    """
    num_docs = len(documents)
    idf_dict = {}
    all_words = set()
    for doc in documents:
        all_words.update(doc.split())

    for word in all_words:
        doc_count = sum(1 for doc in documents if word in doc)
        idf_dict[word] = math.log(num_docs / (1 + doc_count))
    return idf_dict


def compute_tf_idf(documents):
    """
    计算 TF - IDF
    :param documents: 文档集合
    :return: 每个文档的 TF - IDF 字典列表
    """
    idf = compute_idf(documents)
    tf_idf_list = []
    for doc in documents:
        tf = compute_tf(doc)
        tf_idf = {word: tf[word] * idf[word] for word in tf}
        tf_idf_list.append(tf_idf)
    return tf_idf_list


# 示例文档集合
documents = [
    "The dog runs in the park",
    "A dog is playing in the garden",
    "I like to run in the morning"
]

tf_idf_result = compute_tf_idf(documents)
for i, doc_tf_idf in enumerate(tf_idf_result):
    print(f"Document {i + 1} TF - IDF: {doc_tf_idf}")
    

基本概念

  • 词频(TF,Term Frequency):指的是一个词语在一篇文档中出现的频率。词频越高,说明该词语在文档中越重要。计算方法是用该词语在文档中出现的次数除以文档中总词语数。
  • 逆文档频率(IDF,Inverse Document Frequency):是一个词语在整个文档集合中的稀有程度。如果一个词语在很少的文档中出现,那么它的逆文档频率就高,说明这个词语具有很好的区分度。计算方法是用文档集合的总文档数除以包含该词语的文档数,然后取对数。

计算方法

  • 假设我们有一个文档集合D,包含n篇文档。对于一个特定的词语t和一篇文档d,其词频\(TF(t, d)\)的计算公式为: \(TF(t, d)=\frac{在文档d中词语t出现的次数}{文档d中词语的总数}\)
  • 逆文档频率\(IDF(t)\)的计算公式为: \(IDF(t)=\log\frac{n}{包含词语t的文档数}\)
  • 那么\(TF - IDF\)值的计算公式就是: \(TF - IDF(t, d)=TF(t, d)\times IDF(t)\)

应用场景

  • 信息检索:在搜索引擎中,通过计算查询词与文档的\(TF - IDF\)值,可以对搜索结果进行排序,将与查询词相关性较高的文档排在前面,提高检索效率和准确性。
  • 文本分类:可以作为文本特征提取的一种方法,将文本转化为向量表示,然后用于文本分类模型的训练。\(TF - IDF\)值较高的词语往往是区分不同类别文本的关键特征。
  • 关键词提取:通过计算文档中各个词语的\(TF - IDF\)值,找出值较高的词语作为文档的关键词,能够快速概括文档的主要内容。

示例

TF-IDF 的主要用途包括:

  • 文本特征提取和向量化
  • 关键词提取
  • 文档相似度计算
  • 文档检索和排序
  • 文本分类

在知识图谱构建中,TF-IDF 的作用主要体现在:

  • 实体和关系抽取:帮助识别文本中的重要概念和术语
  • 本体构建:辅助识别领域中的关键概念
  • 文本数据预处理:筛选出重要特征词,减少噪声
  • 实体消歧:通过计算文本相似度帮助确定实体提及的正确指向

比 TF-IDF 更好的选择:

  1. 词嵌入模型:Word2Vec、GloVe、FastText 能捕捉词语的语义信息
  2. 基于深度学习的方法:
  • BERT、RoBERTa、XLNet 等预训练语言模型 TransE、DistMult 等知识图谱嵌入模型
  1. 主题模型:LDA (Latent Dirichlet Allocation)
  2. BM25:改进的 TF-IDF 变体,更适合信息检索
  3. TextRank:基于图的关键词提取算法

选择哪种方法取决于具体任务、数据规模、计算资源和精度要求。现代知识图谱构建通常采用深度学习方法与传统方法相结合的策略。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言