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

基于 Quest 摄像头数据开发的原理介绍【Unity Meta Quest MR 开发教程】

比如想在识别到的现实物体上叠加虚拟物体,需要知道这个现实物体在 Unity 的世界坐标下的哪个位置,是带有 x,y,z 三个轴的数据的。而 WebCamTexture 捕捉到的图像只是个 2D 的平面,没有三维世界的深度信息,我们通过物体识别算法识别到的物体坐标只是在这个 2D 平面上的一个屏幕坐标,可以理解为 Quest 拍摄了一张照片,我们识别到这张照片上的某个像素点为需要识别的现实物体的中心。是不是看起来比较复杂?Quest 的相机访问功能是在安卓的。

qq_46044366的博客 2105

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

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

Paper weekly 1657

【QT】基于QSerialPort的跨平台串口通信实战指南

本文是一份基于Qt QSerialPort模块的跨平台串口通信实战指南。详细介绍了从硬件基础、QSerialPort核心类使用、参数配置、设备自动发现到数据异步读写和错误处理的完整流程,并通过构建一个功能齐全的串口调试助手实例,帮助开发者快速掌握在Windows、Linux和macOS系统下进行高效、稳定的串口应用开发。

a1b2c3d的博客 982

Simulink/Requirements Toolbox 学习(一):概述

编写、导入、导出需求并使需求正式化;两种创建需求的模块:需求编辑器、需求透视;描述需求的方式:文本、图像和关键字;通过导入和导出需求文件,与第三方需求管理工具(例如 Microsoft Word、Microsoft Excel®、IBM DOORS和 IBM DOORS Next)集成。涉及模块:Requirements Eidtor、Requirements Table等;

856

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

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

superherotht的博客 1971

DESeq2实战:利用LRT检验解析时间序列基因表达动态变化

本文详细介绍了如何使用DESeq2中的LRT检验分析时间序列基因表达数据,揭示基因表达动态变化模式。通过构建完整模型与简化模型比较,LRT检验能有效识别处理效应随时间变化的基因,适用于发育过程、疾病进展等研究。文章提供了从数据准备、模型构建到结果可视化的完整实战指南,并分享了高级技巧与常见问题排查方法。

weixin_29062671的博客 439

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

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

zidianwjq的博客 312

Gamma变换算法之Matlab&FPGA实现

Gamma映射原理 什么是Gamma曲线 人眼的感光与光强并不是呈线性关系的,而是呈非线性关系(指数型关系,如下图左-曲线。在低照度下,人眼更容易分辨出亮度的变化,随着照度的增加,人眼不易分辨出亮度的变化。而图像传感器与输入光强呈线性关系(如下图左-直线)。从图中可见,当传感器感光在20%左右时,人眼感光响应达到了50%,人眼对低照度的变化更为敏感。从下图右侧可见,Reference Tone为人眼感光50%的亮度,而传感器在感光50%时则相对暗的多(见Select,近似中性灰)。这种将原始图像通过映射操

CrazyBingo的博客 7406

【SPSS实战】手动实现Quade非参数协方差分析:从数据准备到结果解读

本文详细介绍了在SPSS中手动实现Quade非参数协方差分析的全过程。针对数据不满足正态性和方差齐性假设时,如何通过秩转换、回归调整残差,并最终利用Kruskal-Wallis检验完成组间比较。该方法为处理含协变量的非参数多组比较问题提供了清晰的实战解决方案,并探讨了其与标准Quade检验的异同及适用场景。

weixin_29306317的博客 357

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

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

AI天才研究院 1230

openclaw中文版安装教程和常用命令

OpenClaw 中文版的和,涵盖本地一键部署、Docker 隔离部署、阿里云极速部署三种方式,以及六大类高频命令,方便你快速上手和日常运维。

suny8的专栏 2998

Latent Dirichlet Allocation 文本分类主题模型

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

anqiu4023的博客 647

Node-RED系列(二二):使用dashboard搭配echarts制作漂亮的面板

在node-red中dashboard 是一个很常用的模块,其中它有一个chart节点可以用来制作一些图表,比如柱状图,折线图,饼图,但其中的图表并不是很美观,而且可配置项非常的少。 于是就有很多小伙伴找我做一套比较好看的图表面板,在对比了一下几个图表库,我选中了echarts。 不仅美观大方,而且非常容易集成,配置。下面先来看一下我做的效果。这里是直接做了四个折线图,第一个折线图有动态效果,第二个折线图是一个多线条的折线图,第三个折线图是在一个图例显示两个折线图。第二第三都可以用于数据对比。 第四个折线

知无涯 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

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

weixin_30781775的博客 407

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

文本表示方法

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

m0_57545130的博客 364

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

特点:训练集对结果影响很大,且算法无需调参优点: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、付费专栏及课程。

余额充值