1. 文本编码:NLP世界的基石
第一次接触NLP时,我被一个看似简单的问题难住了:计算机如何理解人类语言?这个问题困扰了我整整两周,直到在斯坦福CS224N课程中找到了答案——文本编码。就像人类需要将思想转化为语言才能交流一样,计算机也需要将文字转化为数字才能处理。这不是简单的字符替换,而是一套完整的语言数字化体系。
文本编码在NLP中的地位,相当于建筑中的地基。2013年Word2Vec的横空出世,让这个基础技术焕发出新的生命力。我在处理电商评论分类项目时,尝试过从One-Hot到BERT的各种编码方案,最终发现:没有最好的编码,只有最合适的编码。初学者常犯的错误是直接套用现成模型,却忽略了文本编码对后续任务的决定性影响。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 文本编码的核心方法论
2.1 离散表示:从One-Hot到词袋模型
One-Hot编码是NLP的"Hello World"。假设我们要编码["猫","狗","鱼"]三个词,会得到:
- 猫:[1,0,0]
- 狗:[0,1,0]
- 鱼:[0,0,1]
这种编码的致命缺陷在真实语料中暴露无遗。当我用10万词汇的电商评论数据集时,向量维度爆炸到10万维,而每个向量中只有1个1,其余全是0。这导致:
- 内存占用飙升(实际项目中出现过32GB内存不够用的情况)
- 无法表达词义关系("猫"和"狗"的距离与"猫"和"鱼"相同)
词袋模型(BoW)在此基础上加入了词频统计。在情感分析项目中,我发现通过统计"优秀"、"糟糕"等情感词的频率,准确率比纯One-Hot提升了约15%。但依然无法解决这些问题:
- "不优秀"和"优秀"被当作独立词处理
- "iPhone"和"苹果手机"被视为无关词
2.2 分布式表示:Word2Vec的革命
2013年Google发布的Word2Vec改变了游戏规则。通过神经网络学习,每个词被表示为稠密向量(通常100-300维),语义相似的词在向量空间中距离相近。在我的实践中,这种编码展现出惊人特性:
- 向量运算:vec("国王") - vec("男") + vec("女") ≈ vec("女王")
- 跨语言对齐:训练后的中英文词向量能自发对齐
具体实现时需要注意:
python复制# Gensim实现示例
from gensim.models impor
