当前位置: 首页 > ai >正文

2025-04-18-文本相似度-菜鸟

2025-04-18-文本相似度-菜鸟

题目内容

实现一个基于 T F − I D F TF-IDF TFIDF的文本相似度计算系统。具体要求如下:

  1. 读取输入的文本数据。
  2. 对文本数据进行预处理(例如分词、去停用词,大小写统一)。
  3. 使用 T F − I D F TF-IDF TFIDF方法提取文本特征。
  4. 计算每对文本之间的余弦相似度。

输入描述

输入为一个维列表,包含若干英义文本数据。

输出描述

输出为一个二维列表,表示每对文本之间的余弦相似度,保留两位小数,用字符串形式表示。

具体格式见输出样例。

样例

输入:
["l love this product","I LOVE this product","I love this ipad pro"]输出:
['1.00','1.00','0.24']
['1.00','1.00','0.24']
['0.24','0.24','1.00']
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
text = eval(input())
text
['l love this product', 'I LOVE this product', 'I love this ipad pro']
vectorizer = TfidfVectorizer(stop_words="english", lowercase=True)
mat = vectorizer.fit_transform(text)
print(mat)
  (0, 3)	0.7898069290660905(0, 1)	0.6133555370249717(1, 3)	0.7898069290660905(1, 1)	0.6133555370249717(2, 2)	0.652490884512534(2, 0)	0.652490884512534(2, 1)	0.3853716274664007
cosine_result = cosine_similarity(mat) # 余弦值计算
cosine_result
array([[1.        , 1.        , 0.23636982],[1.        , 1.        , 0.23636982],[0.23636982, 0.23636982, 1.        ]])
# 输出结果
round_arr = np.round(cosine_result, 2)
for row in round_arr:str_row = [f"{x:.2f}" for x in row]print(str_row)
['1.00', '1.00', '0.24']
['1.00', '1.00', '0.24']
['0.24', '0.24', '1.00']

TF-IDF 文本特征提取

1. 定义

TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于信息检索和文本挖掘的常用加权技术,用于评估一个词对于一个文档集或语料库中的某个文档的重要程度。它由两部分组成:

  • 词频(TF,Term Frequency):衡量词在文档中出现的频率,计算公式为:
    TF ( w ) = 词语  w 在文档中出现的次数 文档中所有词语的总数 \text{TF}(w) = \frac{\text{词语 } w \text{ 在文档中出现的次数}}{\text{文档中所有词语的总数}} TF(w)=文档中所有词语的总数词语 w 在文档中出现的次数

  • 逆文档频率(IDF,Inverse Document Frequency):衡量词的普遍重要性,计算公式为:
    IDF ( w ) = log ⁡ ( 语料库中的文档总数 包含词语  w 的文档数 + 1 ) \text{IDF}(w) = \log \left( \frac{\text{语料库中的文档总数}}{\text{包含词语 } w \text{ 的文档数} + 1} \right) IDF(w)=log(包含词语 w 的文档数+1语料库中的文档总数)
    TF-IDF 的值通过将 TF 和 IDF 相乘得到:
    TF-IDF ( w ) = TF ( w ) × IDF ( w ) \text{TF-IDF}(w) = \text{TF}(w) \times \text{IDF}(w) TF-IDF(w)=TF(w)×IDF(w)
    TF-IDF 值越高,说明该词语在当前文档中的重要性和区分度越高。

2. Python 实现

在 Python 中,可以使用 scikit-learn 库中的 TfidfVectorizer 类来实现 TF-IDF 特征提取。以下是一个简单的示例代码:

TfidfVectorizer 提供了多个参数,例如 stop_words(停用词集合)、max_df(文档频率的最大阈值)和 min_df(文档频率的最小阈值),用于定制化特征提取。

3. 应用场景

TF-IDF 广泛应用于自然语言处理和信息检索领域,常见的应用场景包括:
关键词提取:通过计算每个词的 TF-IDF 值,挑选出 TF-IDF 值高的词作为文档的关键词。
文本分类:将文本转换为 TF-IDF 特征向量,输入到机器学习模型(如 SVM、朴素贝叶斯等)进行分类。
信息检索:搜索引擎通过计算查询词和文档中词的 TF-IDF 值,返回与查询最相关的文档。
推荐系统:基于 TF-IDF 计算用户对不同文档的兴趣度,推荐个性化内容。

4. 优缺点

优点

  • 计算简单,易于实现。
  • 能有效衡量词汇在文档中的重要性,避免常见词的干扰。
  • 适合处理大规模文本数据。

缺点

  • 无法考虑词序和上下文信息。
  • 对多义词或语境依赖较强的词效果较差。
  • 假设词频和文档频率完全独立,可能不完全符合真实语境。
    TF-IDF 是一种经典的文本特征提取方法,尽管随着深度学习的发展,其在某些场景中逐渐被更先进的模型(如 BERT、GPT 等)替代,但在简单高效的文本处理任务中,TF-IDF 仍然是一个重要的工具。
from sklearn.feature_extraction.text import TfidfVectorizer# 示例文档
documents = ["Python is a high-level programming language.","Python is widely used in data science.","Machine learning is a subset of artificial intelligence."
]# 创建 TfidfVectorizer 对象
vectorizer = TfidfVectorizer()# 计算 TF-IDF 矩阵
tfidf_matrix = vectorizer.fit_transform(documents)# 获取特征名称
feature_names = vectorizer.get_feature_names_out()# 打印 TF-IDF 矩阵
print("TF-IDF 矩阵:")
print(tfidf_matrix.toarray())# 打印特征名称
print("特征名称:")
print(feature_names)
TF-IDF 矩阵:
[[0.         0.         0.45050407 0.         0.         0.266074960.45050407 0.         0.45050407 0.         0.         0.450504070.34261996 0.         0.         0.         0.        ][0.         0.41074684 0.         0.41074684 0.         0.24259370.         0.         0.         0.         0.         0.0.31238356 0.41074684 0.         0.41074684 0.41074684][0.39687454 0.         0.         0.         0.39687454 0.23440050.         0.39687454 0.         0.39687454 0.39687454 0.0.         0.         0.39687454 0.         0.        ]]
特征名称:
['artificial' 'data' 'high' 'in' 'intelligence' 'is' 'language' 'learning''level' 'machine' 'of' 'programming' 'python' 'science' 'subset' 'used''widely']

余弦相似度

1. 定义

余弦相似度(Cosine Similarity)是一种衡量两个向量在多维空间中方向相似度的度量方法。它通过计算两个向量的夹角余弦值来衡量它们的相似性。余弦值越接近 1,表示两个向量的方向越接近;余弦值越接近 0 或 -1,表示两个向量的方向越不相似。

余弦相似度的计算公式为:
Cosine Similarity ( A , B ) = A ⋅ B ∥ A ∥ ∥ B ∥ \text{Cosine Similarity}(A, B) = \frac{A \cdot B}{\|A\| \|B\|} Cosine Similarity(A,B)=A∥∥BAB
其中:

  • A ⋅ B A \cdot B AB 是向量 A A A B B B 的点积。
  • ∥ A ∥ \|A\| A ∥ B ∥ \|B\| B 分别是向量 A A A B B B 的欧几里得范数(即向量的长度)。

2. Python 实现

在 Python 中,可以使用 numpyscipy 库来计算余弦相似度。以下是一个简单的示例代码:

使用 numpy 计算余弦相似度

import numpy as np# 定义两个向量
A = np.array([1, 2, 3])
B = np.array([4, 5, 6])# 计算点积
dot_product = np.dot(A, B)# 计算向量的范数
norm_A = np.linalg.norm(A)
norm_B = np.linalg.norm(B)# 计算余弦相似度
cosine_similarity = dot_product / (norm_A * norm_B)
print("余弦相似度:", cosine_similarity)
余弦相似度: 0.9746318461970762
http://www.xdnf.cn/news/3965.html

相关文章:

  • LLM(17):计算所有输入 token 的注意力权重
  • 【C语言练习】023. 编写条件编译代码
  • 高速互联技术:NVLink和PCIe有什么区别
  • 信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(七)
  • 深度学习系统学习系列【4】之反向传播(BP)四个基本公式推导
  • Jogging(ABC249-A-竞赛题解)
  • 【QT】QT安装
  • ​亚马逊云服务器技术全景解析:从基础架构到行业赋能​
  • 42. 接雨水(相向双指针/前后缀分解),一篇文章讲透彻
  • 从代码学习深度学习 - 目标检测前置知识(二) PyTorch版
  • uniapp 云开发全集 云开发的概念
  • 什么是原码、反码与补码?
  • 数据管理能力成熟度评估模型(DCMM)全面解析:标准深度剖析与实践创新
  • 【Java项目脚手架系列】第二篇:JavaWeb项目脚手架
  • js获取明天日期、Vue3大菠萝 Pinia的使用
  • 【Linux系统篇】:Linux线程互斥---如何用互斥锁守护多线程程序
  • MCUboot 中的 BOOT_SWAP_TYPE_PERM 功能介绍
  • (undone) MIT6.S081 2023 学习笔记 (Day11: LAB10 mmap)
  • Redis数据结构ZipList,QuickList,SkipList
  • 《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》封面颜色空间一图的选图历程
  • 电磁气动 V 型球阀:颗粒状矿浆与煤黑水介质处理的革命性解决方案-耀圣
  • GAF-CNN-SSA-LSSVM故障诊断/分类预测,附带模型研究报告(Matlab)
  • 学习海康VisionMaster之亮度测量
  • 图像批量处理工具 界面直观易懂
  • TCP 与 UDP报文
  • Doo全自动手机壳定制系统
  • 【AI大模型学习路线】第一阶段之大模型开发基础——第四章(提示工程技术-1)Zero-shot与Few-shot。
  • 基于 jQuery 实现灵活可配置的输入框验证功能
  • 模型 - Xiaomi MiMo
  • Sui 上线两周年,掀起增长「海啸」