机器学习知识自然语言处理入门
一、引言:当文字遇上数学 —— 自然语言的数字化革命
在自然语言处理(NLP)的世界里,计算机要理解人类语言,首先需要将文字转化为数学向量。早期的 One-Hot 编码如同给每个词语分配一个唯一的 “房间号”,例如 “我爱北京天安门” 分词后,每个词用一个仅含一个 1 的高维向量表示。但这种方法如同用庞大的书架存放稀疏的书籍 —— 维度爆炸、语义割裂,无法捕捉词语间的潜在联系。
于是,** 分布式表示(Distributed Representation)** 应运而生,它如同为词语打造一张 “语义地图”,每个词被映射为低维空间中的一个点,相近的点代表语义相关的词。Word2Vec 正是这一思想的经典实现,它用简洁的神经网络架构,让计算机学会 “理解” 词语的隐含关系,甚至能完成 “king - man + woman = queen” 这样的语义推理。
二、Word2Vec:让词语在向量空间中 “对话”
2.1 从 One-Hot 到词向量:稀疏到稠密的跨越
One-Hot 编码的缺陷在于 “维度诅咒”:若词表有 N 个词,每个向量需 N 维,且仅有一个 1。而 Word2Vec 通过训练,将词语映射到d 维稠密向量(d 通常为 50-300),每个维度对应一种潜在语义特征(如 “性别”“地点”“情感” 等)。例如 “国王” 和 “女王” 可能在 “权力” 维度值高,在 “性别” 维度值相反。
2.2 模型架构:简化的神经网络魔法
Word2Vec 本质是一个两层神经网络,有两种经典模式:
- CBOW(连续词袋模型):用上下文词语预测目标词(如用 “I” 和 “learning” 预测 “deep”)。
- Skip-gram:用目标词预测上下文(如用 “deep” 预测 “I” 和 “learning”)。
以 CBOW 为例,模型结构如下:
- 输入层:上下文词语的 One-Hot 向量(假设词表大小 V,向量维度 V)。
- 隐藏层:权重矩阵 W(V×d)与输入向量相乘,压缩为 d 维词向量。
- 输出层:通过 Softmax 计算目标词的概率(矩阵 W'(d×V)将隐藏层映射回 V 维空间)。
2.3 数据生成:滑动窗口里的语义世界
训练数据来自大规模文本(如维基百科),通过滑动窗口提取上下文 - 目标词对。例如句子 “I like deep learning and NLP”,窗口大小设为 3 时,可生成样本:
- 上下文 [“I”, “like”] → 目标词 “deep”
- 上下文 [“like”, “deep”] → 目标词 “learning”
...
滑动窗口遍历全文后,形成大量训练样本。为解决 Softmax 计算量过大的问题,引入负采样(Negative Sampling):对每个正样本(真实上下文 - 目标词对),随机采样若干负样本(非目标词),将多分类问题转化为二分类,大幅提升训练效率。
三、训练 Word2Vec:让机器学会 “猜词”
训练的核心是通过反向传播优化权重矩阵 W 和 W',使得预测目标词的概率最大化。过程可简化为:
- 初始化:随机初始化词向量矩阵。
- 前向传播:根据输入上下文计算目标词概率。
- 计算损失:用交叉熵衡量预测与真实标签的差距。
- 反向传播:更新权重,降低损失。
训练完成后,每个词语对应隐藏层的权重向量即为其词向量。这些向量不仅能通过余弦相似度衡量词语相关性(如 “猫” 与 “狗” 接近),还能通过向量运算发现语义规律,如 “中国” - “北京” + “巴黎” ≈ “法国”。
四、Word2Vec 的优缺点:通用但不完美的语义引擎
优点:
- 高效性:相比传统 Embedding,更低的维度和更快的训练速度。
- 语义关联性:能捕捉词语间的类比关系(如 “男人 - 女人” 对应 “国王 - 女王”)。
- 通用性:可迁移至多种 NLP 任务(如文本分类、机器翻译)。
缺点:
- 多义词困境:一个词对应一个向量,无法区分 “bank(银行 / 河岸)” 在不同语境的含义。
- 静态局限性:词向量固定,无法针对特定任务动态调整(如情感分析中 “棒” 的褒义强度)。
五、实战:用 Word2Vec 生成古诗
5.1 数据准备:构建诗词语料库
收集唐诗、宋词等古典文本,预处理步骤:
- 分词(保留单字,因古诗以字为基本单位)。
- 清洗(去除标点、特殊符号)。
- 构建词表(统计高频字,过滤生僻字)。
5.2 训练诗词专用词向量
调整 Word2Vec 参数:
- 窗口大小设为 2-5(捕捉近邻字的语义关联,如 “床前”“明月”)。
- 向量维度设为 100-200(平衡语义表达与计算效率)。
- 负采样数设为 5-10(增加训练难度,提升向量质量)。
训练完成后,“月”“夜”“酒” 等字的向量应在语义空间中接近,而 “江”“河”“湖” 形成地理相关的簇。
5.3 结合语言模型生成诗句
Word2Vec 仅提供词向量,生成古诗需结合序列模型(如 RNN/LSTM):
- 编码层:将输入字转换为 Word2Vec 向量。
- 隐藏层:RNN 捕捉上下文依赖,输出隐藏状态。
- 解码层:通过 Softmax 预测下一个字的概率,采样生成诗句。
示例代码框架(伪代码):
python
# 假设已训练好word2vec模型和RNN模型
def generate_poem(seed_word, length=4): poem = [seed_word] for _ in range(length): # 编码当前序列 vecs = [word2vec[word] for word in poem] hidden_state = rnn(vecs) # 预测下一字 next_word = softmax(hidden_state).sample() poem.append(next_word) return ''.join(poem) # 生成示例:以“春”开头的五言绝句
print(generate_poem('春', 20)) # 输出类似“春眠不觉晓,处处闻啼鸟...”的诗句
六、结语:从词向量到认知智能的起点
Word2Vec 如同打开自然语言理解的第一扇窗,用简单的架构揭示了语言的数学本质。尽管它存在局限,但作为后续预训练模型(如 BERT、GPT)的基石,其思想深远影响着 NLP 的发展。从古诗生成到智能对话,词向量始终是连接人类语言与机器智慧的桥梁。
思考延伸:如何用 Word2Vec 分析不同诗人的写作风格?多语言场景下,如何让不同语言的词向量 “对话”?欢迎在评论区分享你的想法!
参考资料:
- 《Word2Vec Parameter Learning Explained》(Tomas Mikolov et al.)
- 《自然语言处理入门》(何晗)
- Word2Vec 官方实现:gensim 库