NLP | 文本特征向量化方法

第09章 文本特征向量化 本章详细介绍了特征词转文本向量的方法、词袋模型与词集模型的计算方法、词频与逆词频的计算方法等内容。由于原始数据往往并不是数值型的(如字词列表),为满足数学模型的处理要求,这样就需要将文本特征词的数据进行向量化处理,即转换为数值向量格式。假设现有如下文档需转换为数字向量形式。文档1:“我来到成都,成都春熙路很开心”文档2:“今天在宽窄巷子耍了一天”文档1:[2, 0, 0, 1, 1, 0, 1]文档2:[0, 1, 1, 0, 0, 1, 0]... 阅读详情

01 起

在之前的文章中,我们学习了一种分类方法:朴素贝叶斯,朴素贝叶斯特别适合文本分类,比如:

  1. 根据邮件内容,判断哪些是垃圾邮件
  2. 根据新闻内容,判断新闻情感是正面、负面还是中立
    ……

如果想要使用朴素贝叶斯模型去给文本数据分类,就必须对文本数据进行处理。

怎么处理呢?一般是这样的:

  1. 对文本分词(作为特征),比如把这句话“我是天才”分词为“我”“是”“天才”(这里面的学问就更多了,本文不赘述)
  2. 统计各词在句子中是否出现(词集模型)
  3. 统计各词在句子中出现次数(词袋模型)
  4. 统计各词在这个文档的TFIDF值(词袋模型+IDF值)

本文主要讲解并实践三种文本特征向量化方法:

词集模型:one-hot编码向量化文本
词袋模型+IDF:TFIDF向量化文本
哈希向量化文本

在以下三种向量化方法中,待处理的文本都长这样:


02 one-hot编码向量化文本

两种方式实现,本文主要讲解自定义函数实现:

  • 自定义函数 doc2onehot_matrix()
  • sklearn DictVectorizer
# 自定义方法:文本转onehot编码
"""
说明:
文档格式txt,每行表示一个训练样本(一句话,一段文字都可以)
文档如果是不分行的一段话,可以用nltk.tokenize.sent_tokenize(text)将文档分句,然后把每句话当作一个样本进行编码
"""
import numpy as np
import pandas as pd
import jieba

def doc2onthot_matrix():
    # 读取待编码的文件
    file_path=input("请输入待编码文件路径及文件名:")
    with open(file_path,encoding="utf-8") as f:
        docs=f.readlines()
    
    # 将文件每行分词,分词后的词语放入words中
    words=[]
    for i in range(len(docs)):
        docs[i]=jieba.lcut(docs[i].strip("\n"))
        words+=docs[i]
    
    # 找出分词后不重复的词语,作为词袋,是后续onehot编码的维度
    vocab=sorted(set(words),key=words.index)
    
    # 建立一个M行V列的全0矩阵,M问文档样本数,这里是行数,V为不重复词语数,即编码维度
    V=len(vocab)
    M=len(docs)
    onehot=np.zeros((M,V))
    
    for i,doc in enumerate(docs):
        for word in doc:
            if word in vocab:
                pos=vocab.index(word)
                onehot[i][pos]=1
    onehot=pd.DataFrame(onehot,columns=vocab)
    return onehot

我们将待处理文本输入到代码中,得到如下输出,可以看到,每句话都统计出各词语是否出现


03 TF-IDF文本向量化

同样的,也可以通过两种方式实现,本文主要讲解自定义函数实现:

  • 自定义函数 doc2tfidf_matrix()
  • sklearn TfidfVectorizer,CountVectorizer,TfidfTransformer
import numpy as np
import pandas as pd
import math
import jieba

def doc2tfidf_matrix():
    # 读取待编码的文件
    file_path=input("请输入待编码文件路径及文件名:")
    with open(file_path,encoding="utf-8") as f:
        docs=f.readlines()
    
    # 将文件每行分词,分词后的词语放入words中
    words=[]
    for i in range(len(docs)):
        docs[i]=jieba.lcut(docs[i].strip("\n"))
        words+=docs[i]
    
    # 找出分词后不重复的词语,作为词袋
    vocab=sorted(set(words),key=words.index)
    
    # 建立一个M行V列的全0矩阵,M问文档样本数,这里是行数,V为不重复词语数,即编码维度
    V=len(vocab)
    M=len(docs)
    onehot=np.zeros((M,V)) # 二维矩阵要使用双括号
    tf=np.zeros((M,V))
    
    for i,doc in enumerate(docs):
        for word in doc:
            if word in vocab:
                pos=vocab.index(word)
                onehot[i][pos]=1
                tf[i][pos]+=1 # tf,统计某词语在一条样本中出现的次数

    row_sum=tf.sum(axis=1) # 行相加,得到每个样本出现的词语数
    # 计算TF(t,d)
    tf=tf/row_sum[:,np.newaxis] #分母表示各样本出现的词语数,tf为单词在样本中出现的次数,[:,np.newaxis]作用类似于行列转置
    # 计算DF(t,D),IDF
    df=onehot.sum(axis=0) # 列相加,表示有多少样本包含词袋某词
    idf=list(map(lambda x:math.log10((M+1)/(x+1)),df))
    
    # 计算TFIDF
    tfidf=tf*np.array(idf)
    tfidf=pd.DataFrame(tfidf,columns=vocab)
    return tfidf

我们将待处理文本输入到代码中,得到如下输出,可以看到,每句话都统计出各词语的TFIDF值


04 哈希向量化文本

调用sklearn HashingVectorizer实现。

什么时候使用哈希向量化呢?

TfidfVectorizer在执行时,需要先将词袋矩阵放入内存,再计算各位置单词的TFIDF值,如果词袋维度大,将占用过多内存,效率低,此时可以使用哈希向量化。

哈希向量化可以缓解TfidfVectorizer在处理高维文本时内存消耗过大的问题。

哈希技巧是无固定状态的(stateless),它把任意的数据块映射到固定数目(n_features)的位置,并且保证相同的输入一定产生相同的输出,不同的输入尽可能产生不同的输出。它可以用并行,线上,流式传输创建特征向量,因为它初始化是不需要文集输入的。(额,其实这段话我目前还不太明白,待学习~~)


05 总结

朴素贝叶斯模型特别适合分类文本数据,但分类之前需要对文本提取特征并向量化。

本文总结了三种文本特征向量化的方法:onehot,TFIDF,Hashing,这是使用/自定义朴素贝叶斯模型的前提。

文本特征向量化处理后,就可以进行下一步了:朴素贝叶斯模型的调用和自定义,感兴趣的朋友可以点击查看。

【NLP笔记】文本向量化 在自然语言处理中,文本向量化(Text Embedding)是很重要的一环,是将文本数据转换成向量表示,包括词、句子、文档级别的文本,深度学习向量表征就是通过算法将数据转换成计算机可处理的数字化形式。 阅读详情

相关推荐

机器学习笔记(5,第二周)— 多维特征、向量化

机器学习,多维特征,向量化

ygy555的博客 1485

NLP学习-文本特征向量化

首先说一下文本分析流程: 现在已经到了流程图的第五块内容了~ 下面讲述文本特征向量化的相关内容。 前面四个模块的完成,意味着我们已经有了以词为单元的数据了,但是有个问题...计算机能直接用这些词来训练吗?答案是不能的,例如如果之前接触过神经网络等概念的,或者自己拿别人模型跑着玩的时候就会发现,训练机是数字数据的时候可以直接用,如果图片、音频等其实也都是转化成数字数据的格式来进行训练的,那...

任萌新的小生活 2603

基于NLP与向量化技术的电影内容特征分析与对比系统构建指南

自然语言处理(NLP)与文本向量化是处理非结构化文本数据、实现语义理解的核心技术。其原理在于通过预训练模型将文本转换为高维向量表示,使语义相似的文本在向量空间中距离相近。这项技术的价值在于将主观、感性的内容对比转化为客观、可量化的分析流程,极大地提升了信息处理的效率和准确性。在工程实践中,它广泛应用于智能搜索、内容推荐、知识库构建及自动化报告生成等场景。本文以电影内容对比为具体案例,详细阐述了如何利用Python生态中的主流工具,如sentence-transformers进行文本嵌入,并结合关键词提取等特

weixin_34293911的博客 454

【机器学习】多元特征线性回归与向量化

只有一个特征变量的线性模型叫做一元线性回归模型,含有多个特征变量的线性模型叫做多元特征线性回归模型,也叫做多元线性回归模型,而不是线性回归,线性回归指的是其它的东西。对于多元线性回归模型,我们在实现代码时,使用矢量化可以使我们的代码更短,也可以使其运行的速率更高,多元线性回归模型求代价函数的最小值有两个方法,一个是梯度下降算法,另一个方法叫正规方程,正规方程虽然可以找到多元线性回归模型代价函数的最小值,但是有不少缺点:不像梯度下降,正规方程不能推广到其他学习算法,运行的也很慢............

m0_51816252的博客 1837

如何使用工具包 (NLTK) 开发NLP 项目?(附教程)

基础概念: 自然语言处理 (NLP) 是机器学习的一个子领域,它使计算机能够理解、分析、操纵和生成人类语言。 在本文中,小普将向您展示如何使用自然语言工具包 (NLTK) 开发您自己的 NLP 项目,但在我们深入本教程之前,让我们看一些 NLP 的日常用例。 NLP 机器学习示例 垃圾邮件过滤器 自动更正 预测文本 语音识别 信息检索 信息抽取 机器翻译 文字简化 情绪分析 文字摘要 查询响应 自然语言生成 NLP 入门 NLTK 是一个流行的 Python 库开源套件。NL

PUSHIAI的博客 2250

NLP:自然语言处理技术中常用的文本特征表示方法之字典特征抽取(对字典型数据通过特征抽取和向量化进而实现特征数字化,one-hot编码/仅有值稀疏矩阵,如对类别型特征转换数字型)代码实现

​ NLP:自然语言处理技术中常用的文本特征表示方法之字典特征抽取(对字典型数据通过特征抽取和向量化进而实现特征数字化,one-hot编码/仅有值稀疏矩阵,如对类别型特征转换数字型)代码实现 目录 自然语言处理技术中常用的文本特征表示方法之字典特征抽取(对字典型数据通过特征抽取和向量化进而实现特征数字化,one-hot编码/仅有值稀疏矩阵,如对类别型特征转换数字型)代码实现 自然语言处理技术中常用的文本特征表示方法之字典特征抽取(对字典型数据通过特征抽取和向量化进而实现特征数字化,one-hot编码

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 1952

NLP基础

自然语言处理(NLP)是计算机科学、人工智能和语言学的交叉领域,旨在使计算机能够理解、解释和生成自然语言。:将文本分解为单词或短语。:去掉常见的、无实际意义的词(如“是”、“的”)。:将词语还原为基本形式(如“running”还原为“run”)。:一个包含文本中所有独特词汇的列表,用于构建特征表示。:一个包含大量文本数据的集合,通常用于训练和评估模型。:一种简化的表示方法,将文本表示为词的出现频率,忽略词序。:通过考虑连续的N个词(如二元组、三元组等)来捕捉词序信息。

2401_83649983的博客 1462

自然语言处理之文本分类:SupportVectorMachines(SVM):文本分类中的数据清洗

SVM 在文本分类中是一个强大的工具,它通过最大化间隔来找到最佳分类超平面,同时利用核技巧处理非线性问题。通过上述代码示例,我们可以看到如何使用库将文本数据转换为向量,并训练 SVM 分类器进行分类任务。请注意,虽然题目要求不包括数据清洗,但在实际的文本分类任务中,数据清洗是必不可少的步骤,包括去除停用词、标点符号、数字,以及进行词干提取和词形还原等。这些步骤通常在将文本转换为向量之前进行,以提高模型的性能。

zhubeibei168的博客 839

vocab 文本_NLP | 文本特征向量化方法

weixin_28730353的博客 639

自然语言处理之文本分类:K-Nearest Neighbors (KNN):自然语言处理基础

文本分类是自然语言处理(NLP)中的一个核心任务,它涉及将文本数据分配到预定义的类别中。例如,新闻文章可以被分类为体育、政治、科技等类别。文本分类在信息检索、情感分析、垃圾邮件过滤、主题建模等领域有着广泛的应用。

zhubeibei168的博客 697

19、高级特征工程、NLP算法与规则系统

本文深入探讨了高级特征工程与NLP算法的核心概念,重点介绍了文本向量化技术如word2vec、Doc2vec和GloVe在深度学习中的关键作用。同时详细解析了规则系统在自然语言处理中的应用,包括其架构、开发生命周期、优缺点及与机器学习方法的比较。通过自动驾驶汽车和语法纠正等实例,阐述了规则系统在小数据、高精度场景下的优势,并讨论了其面临的挑战与最新发展趋势,如与机器学习的融合和自动化规则生成。最后提供了聊天机器人和情感分析等实际应用场景的方法选择建议。

gitlab7runner的博客 46

英文自然语言预处理

目录 1、数据集准备 2、数据集处理 (1)简单分词、词性还原、停用词过滤 (2)特征提取(TT-IDF、信息增益、卡方检验、互信息、N-Gram等) (3)文本标签向量化 (4)选择合适的算法模型进行训练 1、数据集准备 测试数据集下载:testdata.xls 停用词过滤表下载:stopwords.txt 2、数据集处理 (...

分享实践与思考 5562

13、自然语言处理中的特征工程与算法详解

本文详细介绍了自然语言处理中的核心特征工程技术和算法,涵盖TF-IDF、向量化、独热编码、语言模型等关键方法的原理与应用。文章结合数学公式、实际示例和代码实践,系统讲解了文本数据的预处理、特征提取与建模流程,并总结了各项技术的优势与局限性。同时展望了未来NLP技术在多技术融合、语义理解增强、模型轻量化和跨语言应用等方面的发展趋势,为读者提供全面的理论基础和实践指导。

gitlab7runner的博客 37

自然语言处理(NLP)文本预处理

本文介绍了自然语言处理(NLP)的基础知识和关键技术。主要内容包括:1)NLP定义与文本预处理(分词、NER、词性标注);2)文本表示方法(One-hot、Word2Vec、词嵌入);3)文本数据分析(EDA、长度统计、词频分析);4)特征处理技术(N-gram、句子长度规范)。文章通过Python代码示例演示了jieba分词、FastText词向量训练等实操内容,并总结了NLP任务中的关键要点和实用技巧。

2301_76243776的博客 935

网易新闻语料库文本分类与NLP实战教程

网易新闻作为中国知名的在线新闻平台,积累了大量的新闻数据,形成了包含丰富内容和广泛主题的语料库。该语料库不仅包括文章的文本内容,还包括了用户评论、新闻类别标签以及发布时间等多维度信息。由于其覆盖范围广泛、更新速度快,网易新闻语料库成为研究自然语言处理(NLP)和文本挖掘的理想数据来源。在本文中,我们将详细探讨网易新闻语料库的结构、特点以及如何有效利用这一资源来执行自然语言处理任务,如文本分类、情感分析等。

weixin_36328210的博客 1040

Python文本特征抽取与向量化算法学习

主要为大家详细介绍了Python文本特征抽取与向量化算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

【文本分类】A C-LSTM Neural Network for Text Classification

Recurrent Neural Network for Text Classification with Multi-Task Learning

十一月廿七风雨大作 7945

实测对比:Gromacs GPU版vsCPU版性能差异到底有多大?2023最新基准测试

本文通过2023年最新基准测试,详细对比了Gromacs GPU版与CPU版的性能差异。测试显示,GPU版本在计算速度上可提升54倍,同时显著降低内存需求和能耗成本。文章还提供了GPU版安装优化实践和硬件选购指南,为计算生物学研究提供关键参考。

weixin_29243063的博客 337

2020 泰迪杯数据 文本挖掘入门

1.数据预处理 对于中文文本,在进行NLP,最重要的一步就是对文本进行合理的分词。这一步的好坏对后面模型的精确与否有深刻的影响。我们对留言文本分词采用的工具是jieba。Jieba是python的一个中文分词模块,GitHub上称其为最好的中文分词组件。这里我们注意到对于问政系统的留言中存在着大量的地名以及机构名。仅仅使用jieba分词,很容易将这些比较长的地名以及机构名拆分成一个个词语,这样很容易破坏留言原本的语言,给模型的训练带来困难。因为这些地名与机构名是在留言中往往以高频词出现的。 基于上面的问

qq_40819197的博客 763

SAP 公司间库存调拨通过IDOC完成自动发票校验

本文仅用于SAP软件的应用与学习,不代表SAP公司。(注:文中所示截图来源SAP ERP软件,软件相应著作权归SAP所有。公司间采购时,通过SAP内部EDI 数据传输功能, 由销售方开的公司间发票自动触发采购方的发票校验。​欢迎扫码加如下微信,我会把大家拉到SAP PP学习群,随时欢迎跟我和其他SAP PP顾问一起交流和学习,如下图库存调拨订单,系统已经完成了发货方发货和收货方收货。

2402_84262664的博客 926

5G NR上行控制信道PUCCH

一、PUCCH概述 PUCCH用于承载上行控制信息,相比LTE,NR PUCCH支持5种不同的格式,按照时域上所占用的符号数量可以分为短格式和长格式两种,如下表所示,短格式占用1-2个符号,可以承载1-2bit信息,长格式占用4-14个符号,可承载大于2bit的信息。NR引入短格式PUCCH的目的是可以缩短HARQ-ACK反馈的时延,长格式仍然是考虑到持续时间长可以保证覆盖。 NR中,考虑到系...

一个关于5G NR的博客^^ 3万+
上一篇: 支持向量机(SVM) | 核技巧于SMO算法的实现
下一篇: Python | 数据可视化汇总
Sudden|nebbuS
博客等级 码龄17年 112粉丝 35原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值