1. 文本向量化的必要性
在自然语言处理领域,我们面临的第一个难题就是:计算机无法直接理解人类语言。就像两个说不同语言的人需要翻译才能沟通一样,我们需要把文字转换成计算机能理解的数字形式。这就是文本向量化的核心价值。
我刚开始接触NLP时,最困惑的就是为什么简单的文本分类任务需要这么多预处理步骤。直到自己动手实现了一个垃圾邮件分类器才明白,文本向量化的质量直接决定了模型的上限。举个例子,"银行"这个词在金融语境和河流语境中的含义完全不同,如何用数字准确表达这种差异,就是文本向量化要解决的核心问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. One-Hot编码:最基础的向量化方案
2.1 基本原理与实现
One-Hot编码就像给每个单词分配一个专属座位。假设我们的词典有3个词:["苹果","香蕉","橘子"],那么:
- "苹果" → [1,0,0]
- "香蕉" → [0,1,0]
- "橘子" → [0,0,1]
用Python实现非常简单:
python复制from sklearn.feature_extraction.text import CountVectorizer
corpus = ["苹果 香蕉", "香蕉 橘子"]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names_out()) # 输出:['苹果', '香蕉', '橘子']
print(X.toarray()) # 输出:[[1 1 0], [0 1 1]]
2.2 致命缺陷与应对策略
我在电商评论分析项目中就踩过One-Hot的坑。当词典达到10万量级时:
- 内存爆炸:每个向量都是10万维的稀疏矩阵
- 语义缺失:"手机"和"智能手机"被当作完全无关的词
- 维度灾难:实际有效特征可能不足0.1%
临时解决方案是结合TF-IDF加权:
python复制from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer(max_features=5000) # 限制特征数量
