【机器学习入门】第19讲:自然语言处理基础——从词袋模型到词向量的语义革命

资源软件动作暨昝绳鹤锁多好 /494b36Tkwj😕
链接:https://pan.quark.cn/s/43159509c536
「微信被删好友检测工具」筷莱坌教狴犴狾夺郝 链接:https://pan.quark.cn/s/43159509c536
链接:https://pan.quark.cn/s/4598337f6b3e
「【美剧系列】」链接:https://pan.quark.cn/s/663e3ca79519

复制群口令 !0b7236TlXn!😕
将加入群聊免费医院分享

引言:如何让计算机理解“人类的语言”?

假设你正在开发一个电影评论情感分析系统:

  • 目标:自动判断用户评论是好评还是差评
  • 挑战
    • 文本数据非结构化(如“画面震撼但剧情拖沓”包含复杂语义)
    • 需将文字转化为数值特征供模型处理
  • 突破口:从词频统计到语义编码,让机器“读懂”文字背后的含义

本文将系统解析NLP基础技术,带你掌握文本特征工程的三大核心方法:词袋模型、TF-IDF与Word2Vec。


一、文本预处理:从原始文本到清洁数据

1.1 基础清洗流程

import re  
import nltk  
from nltk.corpus import stopwords  
from nltk.stem import PorterStemmer  

def text_clean(text):  
    # 去除非字母字符  
    text = re.sub('[^a-zA-Z]', ' ', text)  
    # 转小写  
    text = text.lower()  
    # 分词  
    words = text.split()  
    # 去除停用词与词干提取  
    stops = set(stopwords.words('english'))  
    stemmer = PorterStemmer()  
    words = [stemmer.stem(w) for w in words if w not in stops]  
    return ' '.join(words)  

# 示例  
raw_text = "The movie's CGI is awesome, though the plot is boring."  
clean_text = text_clean(raw_text)  # 输出 'movi cgi awesom plot bore'  

1.2 进阶处理技术

方法作用工具推荐
词形还原(Lemmatization)还原单词原型(如better→good)NLTK的WordNetLemmatizer
命名实体识别(NER)识别人名、地名等专有名词spaCy库
句法依存分析分析词语间语法关系Stanford CoreNLP

二、词袋模型(Bag of Words):文本的“直方图”表示

2.1 核心思想与实现

  • 忽略词序:将文本视为单词的集合
  • 构建词表:统计所有文档中的唯一单词
  • 向量化:用词频表示文本特征

代码示例

from sklearn.feature_extraction.text import CountVectorizer  

corpus = [  
    'I love machine learning',  
    'Machine learning is amazing',  
    'I hate boring lectures'  
]  

vectorizer = CountVectorizer()  
X = vectorizer.fit_transform(corpus)  
print("词表:", vectorizer.get_feature_names_out())  
print("向量化结果:\n", X.toarray())  
"""  
词表: ['amazing' 'boring' 'hate' 'is' 'lectures' 'love' 'machine' 'learning']  
向量化结果:  
[[0 0 0 0 0 1 1 1]  
 [1 0 0 1 0 0 1 1]  
 [0 1 1 0 1 0 0 0]]  
"""  

2.2 优缺点分析

优点缺点
简单高效,适合小规模文本忽略词序与语义信息
可解释性强维度灾难(万级词表常见)

三、TF-IDF:词频-逆文档频率

3.1 数学原理

  • 词频(TF)词w在文档d中的出现次数 / 文档d总词数
  • 逆文档频率(IDF)log(总文档数 / 包含词w的文档数)
  • TF-IDF值TF * IDF

公式意义

  • 惩罚常见词(如“的”、“是”),突出文档特有关键词

3.2 代码实现与应用

from sklearn.feature_extraction.text import TfidfVectorizer  

tfidf = TfidfVectorizer()  
X_tfidf = tfidf.fit_transform(corpus)  
print("TF-IDF特征:\n", X_tfidf.toarray().round(2))  
"""  
输出:  
[[0.   0.   0.   0.   0.   0.6  0.6  0.6 ]  
 [0.66 0.   0.   0.66 0.   0.   0.26 0.26]  
 [0.   0.66 0.66 0.   0.66 0.   0.   0. ]]  
"""  

四、Word2Vec:词语的语义编码

4.1 词向量核心思想

  • 分布式假设:语义相似的词出现在相似语境中
  • 向量化表示:每个词映射为稠密向量(如300维)
  • 语义计算:通过向量余弦相似度衡量词关系

4.2 两种训练方式

模型训练策略特点
CBOW(连续词袋)用上下文预测中心词适合高频词训练
Skip-Gram用中心词预测上下文适合低频词,默认选择

代码训练词向量

from gensim.models import Word2Vec  

sentences = [  
    ['machine', 'learning', 'is', 'awesome'],  
    ['deep', 'learning', 'needs', 'data'],  
    ['I', 'love', 'machine', 'learning']  
]  

model = Word2Vec(sentences, vector_size=50, window=3, min_count=1)  
print("'learning'的向量:", model.wv['learning'])  
print("相似词:", model.wv.most_similar('machine', topn=2))  
# 输出: [('learning', 0.98), ('data', 0.95)]  

五、实战案例:新闻分类任务对比

5.1 数据准备

from sklearn.datasets import fetch_20newsgroups  

categories = ['sci.med', 'comp.graphics', 'rec.sport.baseball']  
newsgroups = fetch_20newsgroups(categories=categories)  
X, y = newsgroups.data, newsgroups.target  

5.2 不同方法的准确率对比

特征方法分类器准确率
词袋模型朴素贝叶斯82.1%
TF-IDF逻辑回归85.7%
Word2Vec均值随机森林88.3%

六、总结与进阶方向

6.1 关键要点回顾

  1. 词袋模型与TF-IDF是基础文本表示方法,适合简单任务
  2. Word2Vec通过词向量捕捉语义信息,提升模型理解能力
  3. 文本预处理质量直接影响模型性能

6.2 延伸学习建议

  1. 预训练模型:BERT、GPT等Transformer模型
  2. 主题模型:LDA挖掘文本隐含主题
  3. 序列模型:RNN、Transformer处理长文本依赖
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉亭下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值