【资源软件】 动作暨昝绳鹤锁多好 /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 关键要点回顾
- 词袋模型与TF-IDF是基础文本表示方法,适合简单任务
- Word2Vec通过词向量捕捉语义信息,提升模型理解能力
- 文本预处理质量直接影响模型性能
6.2 延伸学习建议
- 预训练模型:BERT、GPT等Transformer模型
- 主题模型:LDA挖掘文本隐含主题
- 序列模型:RNN、Transformer处理长文本依赖


被折叠的 条评论
为什么被折叠?



