当前位置:   article > 正文

4个文本相似度计算基础案例

4个文本相似度计算基础案例

引言:文本相似度概念与Gensim库简介

文本相似度,简单来说,就是衡量两段文本在内容上的接近程度。它广泛应用于信息检索、文本分类、推荐系统等领域,帮助我们理解文本间的内在关联。今天,我们将借助强大的自然语言处理库——Gensim,结合其提供的TF-IDF(Term Frequency-Inverse Document Frequency)算法,通过四个实战案例来探索文本相似度计算的世界。

案例1:构建TF-IDF模型并分析单篇文档

导入所需库与数据准备

首先,确保已安装gensimpandas库,然后导入它们:

import gensim
import pandas as pd
  • 1
  • 2

接下来,我们使用一个简单的文本数据集作为示例:

data = ["This is a sample document about Python programming.",
        "Another document discussing machine learning techniques."]
  • 1
  • 2

使用Gensim创建TF-IDF模型

利用Gensim的TfidfModel,我们可以轻松构建TF-IDF模型:

from gensim.corpora import Dictionary
from gensim.models import TfidfModel

# 创建词典(Dictionary),将文本转换为词袋表示
dictionary = Dictionary([doc.split() for doc in data])
corpus = [dictionary.doc2bow(doc.split()) for doc in data]

# 基于词袋表示创建TF-IDF模型
tfidf_model = TfidfModel(corpus)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

分析单篇文档TF-IDF权重

现在,让我们选取第一篇文档,计算其各词项的TF-IDF权重:

first_doc_bow = corpus[0]
first_doc_tfidf = tfidf_model[first_doc_bow]

for word_id, tfidf_score in first_doc_tfidf:
    print(f"Word: {dictionary[word_id]}, TF-IDF Score: {tfidf_score}")
  • 1
  • 2
  • 3
  • 4
  • 5

这段代码将展示该文档中每个词项的TF-IDF得分,直观反映其在文档中的重要性。

案例2:计算两篇文档间的相似度

准备对比文档对

继续使用上述数据集中的两篇文档进行对比:

doc1 = "This is a sample document about Python programming."
doc2 = "Another document discussing machine learning techniques."
  • 1
  • 2

应用TF-IDF模型计算相似度

Gensim提供similarity_matrix方法,可以计算文档间的余弦相似度:

from gensim.similarities import SparseMatrixSimilarity

# 将文档转化为TF-IDF向量
doc1_tfidf_vec = tfidf_model[dictionary.doc2bow(doc1.split())]
doc2_tfidf_vec = tfidf_model[dictionary.doc2bow(doc2.split())]

# 计算两文档的相似度
similarity = gensim.matutils.cossim(doc1_tfidf_vec, doc2_tfidf_vec)
print(f"Document Similarity: {similarity:.4f}")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

结果解读与可视化

数值越接近1,说明两文档越相似。可以使用matplotlib等库绘制散点图,直观展示两文档在TF-IDF空间中的相对位置及其余弦相似度。

案例3:批量计算文档集合间相似度矩阵

数据集导入与预处理

此处假设有一个包含多篇文档的数据集,存储在CSV文件中,结构如下:

idtext
1
2
df = pd.read_csv("documents.csv")
texts = df["text"].tolist()
  • 1
  • 2

接下来,重复案例1中的步骤构建TF-IDF模型和计算相似度矩阵:

corpus = [dictionary.doc2bow(doc.split()) for doc in texts]
tfidf_model = TfidfModel(corpus)

# 计算相似度矩阵
index = SparseMatrixSimilarity(tfidf_model[corpus], num_features=len(dictionary))
  • 1
  • 2
  • 3
  • 4
  • 5

构建TF-IDF模型并计算相似度矩阵

index对象现在包含了所有文档间的相似度矩阵。我们可以提取特定文档对的相似度,或进行聚类分析以识别文本主题。

探索相似度矩阵与聚类分析

使用scipy.sparse库将相似度矩阵转换为稀疏矩阵,便于进一步操作。例如,可以使用scipy.cluster.hierarchy.linkage进行层次聚类,可视化文档间的亲疏关系。

案例4:基于TF-IDF的文档检索系统搭建

设计检索系统架构

系统主要包括三个部分:用户查询处理、文档库匹配、结果展示与评估。

1.用户查询处理 :接收用户输入的查询文本,将其转换为TF-IDF向量。
2.文档库匹配 :计算查询向量与文档库中各文档的相似度,按相似度排序。
3.结果展示与评估 :返回最相关的文档列表,可选地展示相似度分数。定期评估检索系统的查准率、查全率等指标。

实现用户查询与文档库匹配

def retrieve_documents(query, top_n=10):
    query_tfidf_vec = tfidf_model[dictionary.doc2bow(query.split())]
    
    # 计算查询与文档库中各文档的相似度
    sims = index[query_tfidf_vec]
    
    # 按相似度降序排序文档ID
    sorted_indices = sims.argsort()[::-1][:top_n]
    
    return sorted_indices
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/550645
推荐阅读
相关标签
  

闽ICP备14008679号