自然语言处理中的TF-IDF技术

在处理大量数据时,传统的词袋模型存在局限性,而TF-IDF(词频-逆文档频率)技术能够有效地提升文本分类的效果,增强机器学习模型对文本信息的理解和分析能力。本文将展示如何在Python中从零开始构建TF-IDF模型,并进行数值计算。

概览

TF-IDF是自然语言处理NLP)中的关键技术,它通过考虑词频和词的稀有度来增强文本分类的效果。本文将详细解释包括词频(TF)、文档频率(DF)和逆文档频率(IDF)在内的核心术语,并逐步介绍TF-IDF分数的数值计算方法。

TF-IDF矩阵在搜索引擎、文本分类、聚类和摘要等领域有广泛应用,但它不考虑词序或上下文。

术语解释

在深入计算和代码之前,理解以下关键术语是必要的:

t: 词(word) d: 文档(document,一组词) N: 语料库中的文档总数 语料库(corpus): 总文档集合

词频(TF)衡量一个词在文档中出现的频率。一个词在文档中的权重与其出现频率直接相关。词频的计算公式为:

文档频率(DF)衡量一个文档在语料库中的重要性。DF统计包含特定短语的文档数量,与TF不同,TF统计一个词在文档中出现的次数。文档频率的计算公式为:

逆文档频率(IDF)衡量一个词的信息量。在计算TF时,所有词被赋予相同的权重,而IDF有助于提升罕见词的权重,降低常见词(如停用词)的权重。IDF的计算公式为:

IDF(t) = log((N + 1) / (DF(t) + 1))

其中N是文档总数,DF(t)是包含词t的文档数量。

TF-IDF是词频-逆文档频率的缩写,是一种统计方法,用于评估一个词对文档在文档集合或语料库中的重要性。它结合了词在文档中的重要性(TF)和词在语料库中的稀有度(IDF)。计算公式为:

TF-IDF的数值计算

让分解给定文档的TF-IDF数值计算:

文档:

“天空是蓝色的。” “今天太阳很明亮。” “天空中的太阳很明亮。” “可以看到闪耀的太阳,明亮的太阳。”

文档1:“天空是蓝色的。”

词 计数 TF

the 1 1/4 sky 1 1/4 is 1 1/4 blue 1 1/4

文档2:“今天太阳很明亮。”

词 计数 TF

the 1 1/5 sun 1 1/5 is 1 1/5 bright 1 1/5 today 1 1/5

文档3:“天空中的太阳很明亮。”

词 计数 TF

the 2 2/7 sun 1 1/7 in 1 1/7 sky 1 1/7 is 1 1/7 bright 1 1/7

文档4:“可以看到闪耀的太阳,明亮的太阳。”

词 计数 TF

we 1 1/9 can 1 1/9 see 1 1/9 the 2 2/9 shining 1 1/9 sun 2 2/9 bright 1 1/9

使用N=4:

词 DF IDF

the 4 log(4/4+1)=log(0.8)≈−0.223 sky 2 log(4/2+1)=log(1.333)≈0.287 is 3 log(4/3+1)=log(1)=0 blue 1 log(4/1+1)=log(2)≈0.693 sun 3 log(4/3+1)=log(1)=0 bright 3 log(4/3+1)=log(1)=0 today 1 log(4/1+1)=log(2)≈0.693 in 1 log(4/1+1)=log(2)≈0.693 we 1 log(4/1+1)=log(2)≈0.693 can 1 log(4/1+1)=log(2)≈0.693 see 1 log(4/1+1)=log(2)≈0.693 shining 1 log(4/1+1)=log(2)≈0.693

现在,让计算每个文档中每个词的TF-IDF值。

文档1:“天空是蓝色的。”

词 TF IDFTF-IDF

the 0.25 -0.223 0.25 * -0.223 ≈-0.056 sky 0.25 0.287 0.25 * 0.287 ≈ 0.072 is 0.25 0 0.25 * 0 = 0 blue 0.25 0.693 0.25 * 0.693 ≈ 0.173

文档2:“今天太阳很明亮。”

词 TF IDFTF-IDF

the 0.2 -0.223 0.2 * -0.223 ≈ -0.045 sun 0.2 0 0.2 * 0 = 0 is 0.2 0 0.2 * 0 = 0 bright 0.2 0 0.2 * 0 = 0 today 0.2 0.693 0.2 * 0.693 ≈0.139

文档3:“天空中的太阳很明亮。”

词 TF IDFTF-IDF

the 0.285 -0.223 0.285 * -0.223 ≈ -0.064 sun 0.142 0 0.142 * 0 = 0 in 0.142 0.693 0.142 * 0.693 ≈0.098 sky 0.142 0.287 0.142 * 0.287≈0.041 is 0.142 0 0.142 * 0 = 0 bright 0.142 0 0.142 * 0 = 0

文档4:“可以看到闪耀的太阳,明亮的太阳。”

词 TF IDFTF-IDF

we 0.111 0.693 0.111 * 0.693 ≈0.077 can 0.111 0.693 0.111 * 0.693 ≈0.077 see 0.111 0.693 0.111 * 0.693≈0.077 the 0.222 -0.223 0.222 * -0.223≈-0.049 shining 0.111 0.693 0.111 * 0.693 ≈0.077 sun 0.222 0 0.222 * 0 = 0 bright 0.111 0 0.111 * 0 = 0

Python中TF-IDF的实现

现在让使用scikit-learn中的TfidfVectorizer和内置数据集来应用TF-IDF计算。

确保已安装scikit-learn:

pip install scikit-learn import pandas as pd from sklearn.datasets import fetch_20newsgroups from sklearn.feature_extraction.text import TfidfVectorizer

获取20 Newsgroups数据集:

newsgroups = fetch_20newsgroups(subset='train') vectorizer = TfidfVectorizer(stop_words='english', max_features=1000)

将文本文档转换为TF-IDF矩阵:

tfidf_matrix = vectorizer.fit_transform(newsgroups.data)

将矩阵转换为DataFrame以提高可读性:

df_tfidf = pd.DataFrame(tfidf_matrix.toarray(), columns=vectorizer.get_feature_names_out()) df_tfidf.head()

通过使用20 Newsgroups数据集和TfidfVectorizer,可以将大量文本文档转换为TF-IDF矩阵。这个矩阵以数值形式表示每个文档中每个词的重要性,便于进行文本分类、聚类等自然语言处理任务。scikit-learn中的TfidfVectorizer提供了一种高效直接的方式来实现这种转换。

  1. 搜索引擎根据与查询的相关性对文档进行排名
  2. 文本分类识别用于对文档进行分类的最重要词
  3. 聚类根据关键词对相似文档进行分组
  4. 文本摘要从文档中提取重要句子
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485