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

文本特征提取

一、为什么要做文本特征提取?

想象你要教AI识别两种文本:

  • 类型A:"这部电影太棒了,强烈推荐!"

  • 类型B:"糟糕的观影体验,浪费钱。"

计算机只认识数字,不认识汉字/英文。我们需要把文字转换成特征向量(一组数字),就像把中文翻译成计算机的母语。


二、文本特征提取三大方法

方法1:词袋模型(Bag of Words)

核心思想:数单词出现的次数,忽略顺序
类比:就像把一篇文章丢进碎纸机,统计每个单词碎片的数量

from sklearn.feature_extraction.text import CountVectorizercorpus = ["I love python programming",  # 文档1"Python is better than Java"  # 文档2
]# 创建词袋模型
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)# 查看结果
print("词表:", vectorizer.get_feature_names_out())
print("特征矩阵:\n", X.toarray())
 

输出

词表: ['better' 'java' 'love' 'programming' 'python' 'than']
特征矩阵:[[0 0 1 1 1 0]  # love(1), programming(1), python(1)[1 1 0 0 1 1]] # better(1), java(1), python(1), than(1)
 

特点

  • 简单直接

  • 丢失了单词顺序("狗咬人"和"人咬狗"结果一样)

  • 适合小规模文本分类

方法2:TF-IDF(词频-逆文档频率)

核心思想:给重要的词打高分,常见词打低分
类比:老师批改作文时,会给"人工智能"这种专业词加分,对"的/是"这种常见词忽略

from sklearn.feature_extraction.text import TfidfVectorizercorpus = ["The cat sat on the mat","The dog ate my homework"
]vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)print("词表:", vectorizer.get_feature_names_out())
print("TF-IDF矩阵:\n", X.toarray().round(2))
 

输出

词表: ['ate' 'cat' 'dog' 'homework' 'mat' 'my' 'on' 'sat' 'the']
TF-IDF矩阵:[[0.   0.6  0.   0.   0.6  0.   0.45 0.45 0.38]  # cat/mat得分高[0.53 0.   0.53 0.53 0.   0.53 0.   0.   0.27]] # ate/dog/homework得分高
 

特点

  • 降低了常见词的权重(如"the")

  • 提升了关键词的重要性

  • 适合信息检索、关键词提取

方法3:Word2Vec(词嵌入)

核心思想:让意思相近的词在数字空间里位置也接近
类比:把单词放到地图上,"北京"和"上海"距离近,"西瓜"和"水果"距离近

from gensim.models import Word2Vecsentences = [["machine", "learning", "is", "fun"],["deep", "learning", "uses", "neural", "nets"]
]# 训练Word2Vec模型
model = Word2Vec(sentences, vector_size=3, window=2, min_count=1)# 查看"learning"的词向量
print(model.wv["learning"])
 

输出示例

[ 0.012  0.456 -0.789]  # 3维向量

特点

  • 能捕捉语义关系(king - man + woman ≈ queen)

  • 需要大量训练数据

  • 适合需要理解语义的场景


三、如何选择方法?

场景推荐方法原因
垃圾邮件分类词袋/TF-IDF简单高效
电影评论情感分析TF-IDF需要突出情感词
智能客服问答系统Word2Vec/BERT需要理解语义相似度
新闻主题聚类TF-IDF + PCA降维后可视化

四、处理中文文本的特殊技巧

  1. 分词:英文有空格分隔,中文需要先分词

    import jieba
    text = "我喜欢机器学习"
    print(" ".join(jieba.cut(text)))  # 输出:我 喜欢 机器 学习
     
  2. 去除停用词:过滤掉"的/了/是"等无意义词

    stopwords = ["的", "了", "是"]
    words = [w for w in words if w not in stopwords]
     
  3. 词性过滤:只保留名词/动词等关键词语

    import jieba.posseg as pseg
    words = [word for word, flag in pseg.cut(text) if flag.startswith('n')]
     

五、完整文本处理流水线示例


六、动手实验建议

  1. 用TF-IDF处理豆瓣电影短评,看看哪些词对"好评/差评"影响最大

  2. 比较词袋和TF-IDF在新闻分类任务中的准确率差异

  3. 使用gensim训练自己的Word2Vec模型,找找"算法"最近的10个词

记住:文本特征提取是NLP的基石,掌握它你就打开了自然语言处理的大门!

http://www.xdnf.cn/news/636463.html

相关文章:

  • GO 语言进阶之 进程 OS与 编码,数据格式转换
  • 【Leetcode 每日一题】2131. 连接两字母单词得到的最长回文串
  • 39.组合总和
  • leetcode560-和为k的子数组
  • arxml文件
  • JVM 的类加载机制
  • 进程管理(第二、三、四章)
  • 【车用永磁同步电机随机开关频率控制策略:高频谐波抑制的工程实践】
  • Python入门手册:条件判断
  • 云原生安全之网络IP协议:从基础到实践指南
  • mysql都有哪些锁?
  • 历年北京理工大学保研上机真题
  • 分布式缓存:ZSET → MGET 跨槽(cross‐slot)/ 并发 GET解决思路
  • 第十九章:数据治理之数据指标(一):数据指标工具之【指标口径管理系统】与【指标数据查询系统】
  • AnyIOasyncio 现代化方法
  • Ntfs!NtfsReadBootSector函数分析之nt!CcGetVacbMiss中得到一个nt!_VACB结构
  • 李宏毅《机器学习2025》笔记 第二讲 —— AI Agent
  • Dubbo与OpenFeign的区别
  • Apache 高级配置实战:从连接保持到日志分析的完整指南
  • 用python实现中国象棋
  • Tool-Star新突破!RL赋能LLM多工具协同推理,性能全面超越基线方法
  • Linux的进程控制
  • 基于RedisBloom的JWT黑名单管理方案
  • 【2025】ubuntu22.04 docker安装全过程
  • Odoo 前端开发框架技术全面解析
  • Odoo: Owl Props 深度解析技术指南
  • Linux操作系统之进程(三):进程优先级与进程切换调度
  • npm幻影依赖问题
  • npm修改镜像的教程,将npm镜像修改为国内地址增加下载速度
  • SpringBoot-11-基于注解和XML方式的SpringBoot应用场景对比