自然语言处理关注如何让机器理解和处理文本。搜索、客服、评论审核、舆情分析、问答系统、文档分类、信息抽取和大模型应用,都离不开 NLP。
文本和结构化数据不同。它是离散、变长、语义丰富的。机器学习模型不能直接理解一句话,需要先把文本转换成数值表示。
一、常见 NLP 任务
| 任务 | 示例 |
|---|---|
| 文本分类 | 判断评论情感、工单类别、新闻主题 |
| 序列标注 | 抽取人名、地点、商品名、时间 |
| 文本匹配 | 判断两个问题是否相似 |
| 摘要生成 | 从长文中提取核心内容 |
| 机器翻译 | 不同语言之间转换 |
| 语义搜索 | 按含义而不是关键词检索文档 |
不同任务需要不同数据标注方式。文本分类标注句子或文档,序列标注需要标注每个实体边界,问答任务还需要问题、上下文和答案。
二、文本预处理
传统 NLP 常见预处理包括分词、去停用词、大小写归一、标点处理、词形还原等。中文任务通常需要分词,但在现代 Transformer 模型中,分词方式更多由模型 tokenizer 决定。
预处理不要过度。比如情感分析中,感叹号、表情符号、重复字可能有情绪信息;代码搜索中,大小写和符号也可能有意义。
三、TF-IDF:强大的传统基线
TF-IDF 用词频和逆文档频率衡量一个词对文档的重要性。它简单、快速、可解释,在很多文本分类和检索任务中仍然是很强的基线。
典型组合:
1 | TF-IDF + 逻辑回归 |
如果任务数据量不大、类别较清晰、解释性要求高,传统方法可能比复杂深度模型更稳。
四、词向量与语义表示
词向量把词映射到连续向量空间,使语义相近的词距离更近。Word2Vec、GloVe 等方法让模型可以利用词之间的相似关系。
但词向量通常是静态的,一个词在不同上下文中表示相同。例如“苹果”可能是水果,也可能是公司。上下文语义需要更强的模型。
五、Transformer 与上下文表示
Transformer 通过注意力机制建模上下文关系。BERT、RoBERTa、GPT 等模型能够根据上下文动态生成表示,使同一个词在不同句子里有不同向量。
这类模型在文本分类、实体识别、问答、语义匹配等任务中表现强,但也带来更高的计算成本和部署复杂度。
六、语义 Embedding 与检索
语义 Embedding 把一句话、一段文本或一篇文档转成向量。它常用于:
- 语义搜索。
- 相似问题匹配。
- 文档聚类。
- RAG 召回。
- 文本去重。
语义搜索和关键词搜索不同。用户搜索“怎么让 Docker 日志别把磁盘写满”,语义搜索可以召回“Docker log 文件过大解决方案”,即使关键词不完全一致。
七、评估文本模型
文本分类常用 Accuracy、Precision、Recall、F1。类别不均衡时要关注 Macro F1 和各类别召回率。
语义检索常用 Recall@K、MRR、NDCG,并需要人工评估相关性。生成式任务还要关注事实性、一致性和可控性,不能只看自动指标。
八、实践建议
NLP 项目可以按三层推进:
- 传统基线:TF-IDF + 线性模型。
- 预训练模型:用 BERT 类模型微调。
- 语义系统:Embedding 检索 + 大模型生成或重排。
不要跳过基线。基线能帮助你判断数据质量、标签定义和任务难度,也能在复杂模型失效时提供可靠对照。