赞
踩
文本相似度,简单来说,就是衡量两段文本在内容上的接近程度。它广泛应用于信息检索、文本分类、推荐系统等领域,帮助我们理解文本间的内在关联。今天,我们将借助强大的自然语言处理库——Gensim,结合其提供的TF-IDF(Term Frequency-Inverse Document Frequency)算法,通过四个实战案例来探索文本相似度计算的世界。
首先,确保已安装gensim
和pandas
库,然后导入它们:
import gensim
import pandas as pd
接下来,我们使用一个简单的文本数据集作为示例:
data = ["This is a sample document about Python programming.",
"Another document discussing machine learning techniques."]
利用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)
现在,让我们选取第一篇文档,计算其各词项的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}")
这段代码将展示该文档中每个词项的TF-IDF得分,直观反映其在文档中的重要性。
继续使用上述数据集中的两篇文档进行对比:
doc1 = "This is a sample document about Python programming."
doc2 = "Another document discussing machine learning techniques."
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,说明两文档越相似。可以使用matplotlib等库绘制散点图,直观展示两文档在TF-IDF空间中的相对位置及其余弦相似度。
此处假设有一个包含多篇文档的数据集,存储在CSV文件中,结构如下:
id | text |
---|---|
1 | … |
2 | … |
… | … |
df = pd.read_csv("documents.csv")
texts = df["text"].tolist()
接下来,重复案例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))
index
对象现在包含了所有文档间的相似度矩阵。我们可以提取特定文档对的相似度,或进行聚类分析以识别文本主题。
使用scipy.sparse
库将相似度矩阵转换为稀疏矩阵,便于进一步操作。例如,可以使用scipy.cluster.hierarchy.linkage
进行层次聚类,可视化文档间的亲疏关系。
系统主要包括三个部分:用户查询处理、文档库匹配、结果展示与评估。
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。