python计算稀疏表示的TF-IDF

常见的文本特征(句向量)提取方法有哪些?什么是One-Hot、TF-IDF?word2vec如何训练?【Python】 文本特征提取的方法目前已经有很多种,传统的提取方法有平权统计、TF-IDF等,神经网络的方法有word2vec,接下来我会具体对这三种方法进行介绍,以及如何用代码实现。 平权统计 平权统计非常容易理解,参见下述代码。 # 特征向量化——稀疏表示 from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer() corpus = ['This is the first document.', 阅读详情

使用sklean的计算方法,这种结果是稠密矩阵,如果数据集太大,计算结果将会占满内存,或者直接报MemeryError的错误。

tfidf详细计算参考:https://blog.youkuaiyun.com/Eastmount/article/details/50323063

import jieba  
import jieba.posseg as pseg  
import os  
import sys  
from sklearn import feature_extraction  
from sklearn.feature_extraction.text import TfidfTransformer  
from sklearn.feature_extraction.text import CountVectorizer  
  
if __name__ == "__main__":  
    corpus=["我 来到 北京 清华大学",#第一类文本切词后的结果,词之间以空格隔开  
        "他 来到 了 网易 杭研 大厦",#第二类文本的切词结果  
        "小明 硕士 毕业 与 中国 科学院",#第三类文本的切词结果  
        "我 爱 北京 天安门"]#第四类文本的切词结果  
    vectorizer=CountVectorizer()#该类会将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频  
    transformer=TfidfTransformer()#该类会统计每个词语的tf-idf权值  
    tfidf=transformer.fit_transform(vectorizer.fit_transform(corpus))#第一个fit_transform是计算tf-idf,第二个fit_transform是将文本转为词频矩阵  
    word=vectorizer.get_feature_names()#获取词袋模型中的所有词语  
    weight=tfidf.toarray()#将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重  
    for i in range(len(weight)):#打印每类文本的tf-idf词语权重,第一个for遍历所有文本,第二个for便利某一类文本下的词语权重  
        print u"-------这里输出第",i,u"类文本的词语tf-idf权重------"  
        for j in range(len(word)):  
            print word[j],weight[i][j]  

 

当数据集过大的时候,我们可以使用稀疏存储的方式来计算TF-IDF。最后返回结果是一个list,里面的元素是字典,同时这样表示之后的余弦相似度计算也更简单。

corpus 就是分词好的数据,每行是一个数组;
直接传入函数calc_tfidf(corpus)计算得到tfidf;
每一行里面是一个map,key是词,value是tfidf;
cos_sim函数传入两行数据,map格式,计算两个文本的相似度;

get_top(tfidf,top)保留每个文本里面的top词,可以直接传入小数,表示保留百分比;

 

# coding=utf-8
# @author: bryan
corpus = data['标题'].apply(lambda x: [i for i in jb.cut(x)])
import math

def list2dic(l):
    tmp = {}
    for i in l:
        if i in tmp:
            tmp[i] += 1
        else:
            tmp[i] = 1
    return tmp

def calc_tfidf(corpus):
    tf, tmp = [], []
    for line in corpus:
        tf.append(list2dic(line))
    for i in tf:
        tmp.extend(i.keys())
    idf = list2dic(tmp)
    N = len(tf)
    for i in idf:
        idf[i] = math.log(N / (idf[i] + 1))
    for i in range(len(tf)):
        for word in tf[i]:
            tf[i][word] = tf[i][word] * idf[word]
    return tf

def cos_sim(x1, x2):
    if (not x1) | (not x2):
        return 0
    if (len(x1) == 0) | (len(x2) == 0):
        return 0
    fenzi, fenmu1, fenmu2 = 0, 0, 0
    for i in x1.keys():
        if i in x2:
            fenzi += x1[i] * x2[i]
        fenmu1 += x1[i] * x1[i]
    for i in x2.values():
        fenmu2 += i * i
    fenmu = math.sqrt(fenmu1) * math.sqrt(fenmu2)
    return fenzi / fenmu

def get_top(tfidf, top):
    # 根据tf-idf保留top的词
    return [dict(sorted(i.items(), key=lambda x: x[1], reverse=True)[:int(len(i) * top)]) for i in tfidf]  

 

 

Python实现混合搜索引擎:关键词检索与向量语义检索实战 传统搜索引擎依赖倒排索引和关键词匹配,难以处理语义相似、表达多样的查询。向量检索通过将文本映射到高维空间,以语义距离度量相关性,与关键词检索互补。结合两者优势的混合搜索架构,逐渐成为现代搜索引擎和RAG应用的核心基础。在电商、企业内部文档问答、客服工单检索等场景中,混合搜索能显著提升召回准确率与结果稳定性。本文从倒排索引与向量检索的原理出发,介绍如何用Python实现一个融合关键词与TF-IDF向量相似度的轻量级混合搜索服务,并探讨工程落地中的优化方向与最佳实践,为开发者提供一套可扩展的搜索系统搭建思路。 阅读详情

相关推荐

文本特征提取实战:从One-Hot到Word2Vec的Python实现与优化技巧

本文系统介绍了文本特征提取的演进与实践,从基础的One-Hot编码到引入权重的TF-IDF,再到能捕捉语义的Word2Vec模型。文章提供了详细的Python实现代码,并分享了针对稀疏性、中文处理、参数调优及句向量构建等关键环节的实用优化技巧,帮助开发者高效地将文本转化为有效的数值特征。

weixin_29094539的博客 285

词频矩阵TfidfVectorizer结果与稀疏矩阵csr_matrix的遍历

关系 TfidfVectorizer的结果是由csr_matrix这种方式组织的,在数据结构中稀疏矩阵的实现是csr_matrix。这是由于矩阵中有大量的0元素占据了大量的空间,从而采用稀疏矩阵来压缩空间。 csr_matrix可以调用toarray()方法转变为真正的矩阵,利用numpy的索引方式来进行对元素的精确索引。 问题 但是有时候由于矩阵太大,而使得csr_matrix转变为numpy矩阵时,计算机的内存会“爆掉”。使得无法转变,这就会带来一个问题——无法使用简洁的方式来索引元素。 解决方法 ge

NLP翟 2380

Python NLP实战:从文本预处理到LDA主题建模的完整竞赛解决方案

自然语言处理(NLP)是人工智能领域的关键技术,旨在让计算机理解和处理人类语言。其核心原理是通过分词、向量化等方法将非结构化的文本转化为结构化数据,进而应用机器学习模型挖掘语义信息。这项技术的价值在于能够自动化地从海量文本中提取关键主题、量化情感倾向,极大提升了信息处理的效率和深度。在数学建模竞赛、产品评论分析、社交媒体挖掘等场景中,NLP技术是解决文本分析问题的务实工具。本文以Python为工具,详细复盘了从数据清洗、中文分词、TF-IDF特征工程到LDA主题建模的完整链路,并重点探讨了在实战中如何通过一

weixin_33968104的博客 394

自然语言处理4——TF-IDF及特征提取

TF-IDF原理。 文本矩阵化,使用词袋模型,以TF-IDF特征值为权重。(可以使用Python中TfidfTransformer库) 互信息的原理。 使用第二步生成的特征矩阵,利用互信息进行特征筛选。 文章目录1. TF-IDF原理2. 文本矩阵化 1. TF-IDF原理 TF-IDF是Term Frequency - Inverse Document Frequency的缩写,即“词频—...

Growing_Snake的博客 3517

稀疏向量批量相似度计算:从内存崩溃到毫秒响应的四层优化

稀疏嵌入(Sparse Embeddings)是处理高维低密度特征(如用户行为序列、商品标签、短文本匹配)的核心表示形式,其本质是支撑集交集上的加权点积,而非全维遍历。传统稠密相似度库(如Scikit-learn、Faiss)因忽略稀疏结构导致大量无效内存访问与精度损失;而真正高效的方案需立足CSR存储结构,通过倒排索引实现维度级分发、Numba JIT消除Python开销、AVX-512掩码加速访存,并支持动态插入与定点压缩。本文聚焦稀疏向量余弦相似度的批量计算优化,覆盖单机指令级到分布式Ray架构的完整

weixin_34072296的博客 332

Python电影推荐系统实战教程

推荐系统已经成为现代信息技术的基石,尤其在电商、视频流媒体和社交媒体等领域发挥着重要作用。它通过分析用户的历史行为和偏好,预测用户可能感兴趣的新内容,并在海量信息中为用户推荐个性化选项。

weixin_36173034的博客 662

【Python稀疏矩阵】

数组和矩阵是数值计算的基础元素。目前为止,我们都是使用NumPy的ndarray数据结构来表示数组,这是一种同构的容器,用于存储数组的所有元素。 有一种特殊情况,矩阵的大部分元素都为零,这种矩阵被称为稀疏矩阵。对于稀疏矩阵,将所有零保存在计算机内存中的效率很低,更合适的方法是只保存非零元素以及位置信息。 假设存在一个神经网络,16个神经元分布在一个4×4的二维矩形网格上,其中只有最近邻的神经元是相连的。那么,神经网络的连接情况就可以表示为一个稀疏矩阵。...

vor234的博客 6583

全面讲解电子齿轮比与脉冲数计算

什么是编码器分辨率。

viixin的博客 1万+

如何度量数据的稀疏程度?

©PaperWeekly 原创 ·作者 | 苏剑林单位 | 追一科技研究方向 | NLP、神经网络在机器学习中,我们经常会谈到稀疏性,比如我们经常说注意力矩阵通常是很稀疏的。然而,不知道大家发现没有,我们似乎从没有给出过度量稀疏程度的标准方法。也就是说,以往我们关于稀疏性的讨论,仅仅是直观层面的感觉,并没有过定量分析。那么问题来了,稀疏性的度量有标准方法了吗?经过搜索,笔者发现确实是有一些可用的...

Paper weekly 1657

基于Python的携程景点评价爬虫与情感评分分析

摘要: 本项目通过Python技术栈实现携程景点评论的情感分析系统,包含数据爬取、文本预处理、情感评分和可视化分析全流程。使用requests抓取评论接口,jieba进行中文分词,SnowNLP计算情感得分(0-1),并通过词云、情感分布图呈现结果。典型分析显示72%评论为正面,负面反馈多涉及"排队久""票价贵"等问题。系统可辅助景点口碑管理,扩展方向包括多景点对比、BERT模型优化等。项目强调需遵守爬虫伦理,控制请求频率,适用于非商业用途的旅游数据分析。(150字)

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 978

Apifox CLI + Claude Skills:将接口自动化测试融入ai

基于 Apifox CLI、Claude Code以及Claude Skills组合,实现自然语言触发接口自动化测试。

wwz_0012的博客 598

关于推荐系统-数据分析中指定数据集稀疏度解决方案及思路

最近在做用Mvielens100K数据集做推荐系统算法训练,为了在不同高度的稀疏度当中获得实验结果必须对原数据集进行进一步筛选。 于是有了下面这个指定数据集稀疏度代码。 基础数据格式是python pandas里的DataFrame,和numpy的array。 因为需要做的是稀疏度到98%的300*500,3000条记录的稀疏数据集,所以平均每个用户是10条。 Temp的含义是不够3000可以额外增加至3000(记录缺失条数) 只不过此模块还没完善但是已经达到要求所以没有继续优化。 下附源码供大

superherotht的博客 1971

基于YOLOv26的道路抛洒物检测系统原理实现

本文提出了一种基于YOLOv26的道路抛洒物智能检测系统,通过深度学习技术实现道路抛洒物的实时检测与分类。系统采用分层架构设计,包含视频采集、目标检测、分类评估和预警处理等模块,能够自动识别轮胎碎片、货物包装、金属零件等多种抛洒物,并根据危险程度分级预警。YOLOv26算法在检测精度和速度上的优势使其特别适合道路监控场景,结合背景建模和运动目标提取技术,有效提高了复杂道路环境下抛洒物的识别率。该系统可集成到现有智能交通监控平台,为道路安全管理提供实时决策支持。

一键难忘的博客 1254

第七章 文本表示:概述及向量表示(一)

TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于评估词项在文档中重要性的统计方法,其核心原理是通过结合词频(TF)与逆文档频率(IDF)来加权词项,突出那些在当前文档中高频出现但在整个语料库中低频出现的关键词。例如,在一个包含词汇["AI", "学习", "数据"]的空间中,文档“AI学习”可表示为向量 [0.8, 0.6, 0],其中非零数值代表各词的重要性(AI:0.8,学习:0.6),零数值说明不包含词汇“数据”。

zidianwjq的博客 312

DC/DC开关电源学习笔记(十三)Buck-Boost升降压电路工作原理

Buck-Boost电路是一种能够实现输出电压高于或低于输入电压的DC-DC变换器,且输出电压极性与输入电压相反。它结合了Buck(降压)和Boost(升压)两种拓扑的特点,广泛应用于需要灵活电压调整的场合,如电池供电设备、LED驱动和工业控制系统。本文将从电路结构、工作原理、关键公式推导及实际应用等方面进行详细分析。

小幽余生不加糖 3505

YOLO26科研优化:多损失函数(EIoU、SIoU等)融合,让边界框回归精度再上台阶

将原有损失函数替换为我们编写的MultiLoss。例如,在bbox_loss。

LXY_LOVE36的博客 172

自然语言处理中的数据预处理和特征工程

1.背景介绍 1. 背景介绍 自然语言处理(NLP)是计算机科学和人工智能领域的一个分支,旨在让计算机理解、处理和生成人类自然语言。在NLP任务中,数据预处理和特征工程是至关重要的环节,它们可以直接影响模型的性能。本文将深入探讨NLP中的数据预处理和特征工程,揭示其核心概念、算法原理和最佳实践。 2. 核心概念与联系 2.1 数据预处理 数据预处理是指将原始数据转换为适用于模型训练的格式...

AI天才研究院 1230

一种抑制undershoot/overshoot锐化算法介绍

一、USM 当增强图像的边缘、细节信息等高频信息时,图像的锐化视觉效果会得到较大提升。提高图像锐化的一种经典算法为非锐化掩码(UNsharp Masking)技术。该技术首先通过高通滤波并与缩放系数相乘,其结果再与原始图像相加,即可对高频信息进行增强。其主要的原理如下图所示: 其中,对图像进行高通滤波的另一种等效方法为:原始图像减去原始图像的低通滤波图像,其结果被称之为“掩码”。因此,上述的USM方法可以表示为: 原始图像减去原始图像低通滤波之后的图像得到掩码M。 2.掩...

大熊 4242

Latent Dirichlet Allocation 文本分类主题模型

文本提取特征常用的模型有:1.Bag-of-words:最原始的特征集,一个单词/分词就是一个特征。往往一个数据集就会有上万个特征;有一些简单的指标可以帮助筛选掉一些对分类没帮助的词语,例如去停词,计算互信息熵等等,但不管怎么训练,特征维度都很大,每个特征的信息量太小;2.统计特征:包括Term frequency(TF) , Inverse document frequency(IDF...

anqiu4023的博客 647

【PCL 特征】积分图法线估计

本文介绍了基于积分图的有序点云法线估计方法。通过利用点云数据的行列式结构特性,该方法避免了传统KD树搜索,采用积分图将邻域统计运算复杂度从O(k²)降至O(1)。详细阐述了四种法线估计算法:协方差矩阵法(精度最高)、平均3D梯度法(实时性好)、平均深度变化法(适合SLAM)和简单3D梯度法(速度最快)。重点分析了积分图构建、动态窗口平滑处理、法线方向调整等关键技术,并提供了PCL实现代码示例。实验表明,不同方法在精度和速度上存在显著差异,可根据具体应用场景选择合适算法。

yijiujiusan的博客 277

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

稀疏嵌入批量相似度计算:内存可控的ChunkDot工程实践

余弦相似度是文本、推荐、生物信息等领域最基础的向量匹配指标,其数学本质是归一化点积。在大规模稀疏场景下(如TF-IDF、用户行为矩阵),传统方法因隐式稠密化导致内存爆炸,核心矛盾在于‘输入稀疏’与‘输出近稠密’的结构性冲突。ChunkDot通过分块计算、CSR原生内核与L2范数预缓存三大设计,在不牺牲精度的前提下实现确定性内存占用和多核加速。它适用于千万级稀疏向量的实时/准实时相似检索,尤其契合法律文书去重、电商商品关联、长尾内容推荐等典型业务场景。

weixin_30781775的博客 407

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

文本表示方法

本文介绍了文本表示的常见方法及其应用场景。传统方法如词袋模型(BoW)和TF-IDF简单高效但忽略语义和语序;词嵌入(Word2Vec)能捕捉语义关系但缺乏上下文;基于Transformer的BERT等模型提供动态上下文表示但计算复杂。文章还比较了各类方法的优缺点,并提供了相应的Python代码示例,帮助开发者根据任务需求选择合适的文本表示技术。

m0_57545130的博客 364

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

朴素贝叶斯算法代码实现,朴素贝叶斯算法的作用

特点:训练集对结果影响很大,且算法无需调参优点:1.分类效果稳定 2.对缺失数据不敏感,常用于文本分类缺点:算法是假设特征之间是独立的,如果特征之间有关联则会影响效果。

wenangou6 934

python 稠密重建_机器学习稀疏矩阵简介(附Python代码)

对于一个矩阵而言,若数值为零的元素远远多于非零元素的个数,且非零元素分布没有规律时,这样的矩阵被称作稀疏矩阵;与之相反,若非零元素数目占据绝大多数时,这样的矩阵被称作稠密矩阵。稀疏矩阵在工程应用中经常被使用,尤其是在通信编码和机器学习中。若编码矩阵或特征表达矩阵是稀疏矩阵时,其计算速度会大大提升。对于机器学习而言,稀疏矩阵应用非常广,比如在数据特征表示、自然语言处理等领域。用稀疏表示和工作在计算上...

weixin_39589644的博客 1201

机器学习基础(4):朴素贝叶斯算法(附python代码和详细注释)

朴素贝叶斯法 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。前提各个特征条件独立,也是“朴素”之名的来历。 1. 概率公式 联合概率:包含多个条件,且所有条件同时成立的概率 记作:P(A,B) = P(A)P(B) 条件概率:事件A在事件B已经发生条件下的发生概率 记作:P(A|B) P(A1, A2|B) = P(A1|B)P(A2|B) 且 A1 和 A2相互独立 2. 实例分析:文档分类任务 首先给出贝叶斯公式: P(C∣W)=P(W∣C)P(C)P(W) P\left( C|W \ri

双鸭山•克里菲斯•北方孤星之堕 6751
上一篇: 腾讯2018广告算法大赛思路解析 100行代码带你上0.73
下一篇: 基于sklearn同时处理连续特征和离散特征
Bryan__
博客等级 码龄12年 2500粉丝 166原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值