文本处理基础

当文字遇见算法

第六课
郑思尧
上海交通大学 国际与公共事务学院

一个转场:从“模型能做什么”到“文字到底是什么”

"All quantitative models of language are wrong, but some are useful."

Grimmer & Stewart, 2013

上节课我们已经看到了主题模型、词向量和智能体。
今天往回走一步:在任何模型开始之前,你都要先回答一个更基础的问题。
怎样把“文字”变成“可以计算的数据”,以及 BERT / LLM 为什么改写了这件事?

上节课留下的接口问题

lecture05 已经讲到的能力模型端

词向量表示语义距离
LDA 发现隐藏话题
Agent 调用工具执行任务

现实世界交给你的输入文本端

原始句子没有特征表格
中文没有天然空格
同一个词可能有多个意思

机器学习喜欢的是 X 矩阵。
现实世界给你的是 报告、评论、政策文本、聊天记录
第六课讲的就是中间这层 接口工程,以及它在 BERT / LLM 时代如何被重写。

今天的路线图

Part 1
文本为什么难
歧义、语境、中文
Part 2
Tokenization
模型如何读文本
Part 3
稀疏表示
BoW、TF-IDF、DTM
Part 4
BERT 与 LLM
上下文表示
Part 5
AI 文本系统
RAG、评估、应用

今天的核心句:AI 时代的关键,是选对表示、模型和上下文接口。

Part 1 / 5 文字不是数字:
文本为什么特殊?

同一句话,人和机器看到的不是同一个东西

人类读到的是
“市民抱怨地铁太挤了。”

你会立刻联想到:
通勤高峰、公共服务评价、负面情绪、城市治理问题。
语境 常识 隐含情绪
机器最开始拿到的是
市 / 民 / 抱 / 怨 / 地 / 铁 / 太 / 挤 / 了 U+5E02 U+6C11 U+62B1 U+6028 ... 或者:["市民","抱怨","地铁","太","挤","了"]
字符、编码、位置、频次。“抱怨” 这个概念不是天然存在的。

语言的第一个麻烦:同词异义,不同词也能同义

Polysemy: 一个词,不止一个意思
苹果:水果 / 公司
模型:统计模型 / 展示模型
银行:金融机构 / 河岸(在英文更常见)
:打电话 / 打分 / 打车 / 打工
上下文决定意思
Synonymy: 不同说法,可以指向同一件事
支持 / 赞成 / 拥护
失业 / 找不到工作 / 待业
不满意 / 体验差 / 差评
就业压力大 / 找工作困难
表述不同 语义接近

语序和上下文,都会改变你读到的东西

同样的词,不同顺序

狗 咬 人 人 咬 狗
词没变,角色变了
责任归属变了
新闻价值甚至也变了

同样的词,不同上下文

苹果很好吃 → 水果
苹果发布新品 → 公司

“模型很好” 也可能指:
统计效果、3D 模型、商业模型

这意味着:文本分析不是简单地“识别单词”。
你还要决定 哪些上下文信息要保留,哪些可以丢掉

中文文本有自己独特的难点

空格
没有天然词边界
英文句子里空格天然帮你切词。中文没有这一层“免费标注”。
新词
专有名词和热词变化快
平台术语、政策口号、人名机构名,经常比词典更新得更快。
变体
简称、隐喻、委婉表达多
同一个议题可能被写成多种说法,政治文本里尤其如此。

经典例子:南京市长江大桥
你到底该切成 南京市 / 长江大桥,还是别的东西?这个问题没有机器自己就能“天然知道”的答案。

把文字变成模型输入,不只是切词
而是在定义表示接口

文本的难点来自三件事:
歧义性、语境依赖性、中文的边界模糊性。

AI 模型虽然更强,但依然要先决定
模型读入的是字、词、子词,还是一段上下文

这也是为什么 AI 时代更关心 tokenizer、embedding 和 context window。

Part 2 / 5 Tokenization 与输入接口:
模型从哪里开始读文本

Tokenization 到底在做什么?

原始文本
切成单位
建立索引
计算特征

例子:政府支持人工智能产业发展

政府 支持 人工智能 产业 发展

只有先组织成单位,机器才能继续做稀疏表示、embedding、分类、检索或生成。

英文分词看起来简单,其实也不完全简单

New York
专有名词
一个地点名,还是两个普通词?
can't
缩写
一个 token,还是 ca + n't
state-of-the-art
连字符表达
拆开会丢失一个固定短语。
#BlackLivesMatter
社交媒体文本
标签、表情、提及符号,都不一定是“噪音”。

切分从来不是目的本身,它是在替下游模型定义输入接口。

中文分词:边界本来就不“天然”

原始字符串 切分方案 A 切分方案 B 含义变化
南京市长江大桥 南京市 / 长江大桥 南京 / 市长 / 江大桥 后者几乎把地名结构完全切坏了。
研究生命起源 研究 / 生命 / 起源 研究生 / 命 / 起源 同样的字串,可以变成完全不同的句法结构。
乒乓球拍卖完了 乒乓球拍 / 卖完了 乒乓球 / 拍卖完了 一个是“球拍卖完”,一个是“球被拍卖”。

关键点:中文分词不是把已经存在的边界“找出来”,而是在多个可能的切分里做选择。

jieba 的直觉:词典 + 概率 + 最优路径

原句
所有可切分路径
词典频率 / 统计概率
最可能的一条
南京市长江大桥 候选路径: 1) 南京市 / 长江大桥 2) 南京 / 市长 / 江大桥 3) 南京 / 市 / 长江 / 大桥

jieba 并不是“真正理解”了长江大桥。
它只是依据词典和统计规律,挑出一条更像人类会使用的路径

所以一旦新词很多、领域术语很多、文本风格变了,你就可能需要自定义词典或改策略。

粒度选择,本质上是输入接口选择

字粒度
保守,不怕分错
例:中 / 华 / 人 / 民 / 共 / 和 / 国
好处:对分词错误更鲁棒
风险:语义被切得太碎
词粒度
最常见的默认方案
例:中华人民共和国
好处:解释性强
风险:受分词质量影响很大
子词粒度
现代模型常用
例:中华 / 人民 / 共和国
好处:兼顾稀有词与泛化
风险:可解释性下降

你选择的粒度,决定了模型“看到”的语言单位是什么。

现代模型通常不先删停用词

传统稀疏表示

的、了、是 过于常见
容易淹没主题词
对主题模型 / 检索经常有帮助

BERT / LLM

功能词帮助建句法关系
否定词会改写语义方向
生成任务依赖完整上下文

AI 时代更常见的做法:先保留 token,让模型自己学权重。

不同接口,不同能力

接口 更擅长 代价
TF-IDF 关键词、主题 不看顺序
BERT 语义相似、词义 更慢、更黑箱
LLM + RAG 问答、摘要、解释 更贵,也会幻觉

关键不是步骤多不多,而是 你的任务需要哪种表示能力

Part 3 / 5 从文本到矩阵:
表示的哲学

Bag of Words 的哲学前提:词序不重要

原句 A
人 咬 狗
一个极少见、带冲击力的事件。
原句 B
狗 咬 人
更符合常识的叙述。

在 BoW 里,这两句的词袋向量都是:
{人: 1, 咬: 1, 狗: 1}

也就是说,BoW 默认相信:“出现了什么词” 比 “词怎么排” 更重要。

手工演示:把一段政策文本变成词袋

“今年要扩大就业,稳定预期,支持民营经济发展,推动人工智能与制造业深度融合。”

扩大 就业 稳定 预期 支持 民营经济 发展 人工智能 制造业 融合
计数
就业1
民营经济1
人工智能1
发展1
支持1

一旦你完成这一步,文本就第一次变成了“表格里的行和列”。

TF-IDF:不是所有词都一样重要

词频高,但区分度低

“的”
低权重
“发展”
中等

未必最常见,但更有信息量

“碳中和”
高权重
“算力”
高权重

TF-IDF 在问一个简单问题:
这个词不仅在这篇文档里重要,而且相对其他文档也更能区分它吗?

DTM:文本世界的“电子表格”

文档 就业 人工智能 民营经济 社保 教育
政府工作报告 A 4 2 3 0 1
政府工作报告 B 1 0 1 3 2
地方政策新闻 0 4 0 0 1

行是文档,列是词。每个单元格是出现次数、TF-IDF 权重,或者别的数值表示。
从这一刻开始,文本分析正式接入机器学习的标准接口。

从 DTM 到 ML:你其实已经见过这张表了

原始文本
tokenization / indexing
DTM / TF-IDF
分类 / 聚类 / 主题
回到 lecture04
有监督学习要的就是一张 X 特征矩阵。
DTM 正是在给文本造这张表。
回到 lecture05
主题模型、词向量、检索系统,本质上也都在建立文本表示。
只是表示能力越来越强。

维度灾难的直觉:矩阵极大,但几乎全是 0

100k
文档数
300k
词汇表大小
30B
矩阵总单元格
0.13%
若每篇仅 400 个非零词项,非零占比也只有这么多

这就是为什么文本矩阵常常被称为 稀疏矩阵
它解释了两个现实:
1. 文本特征工程会非常吃内存;
2. 维度控制、稀疏表示和降维技巧会很重要。

Beyond BoW:表示能力是一条连续光谱

Level 1
字符
稳,但碎。
对中文切词错误更鲁棒。
Level 2
解释性好。
依赖分词质量。
Level 3
BoW / TF-IDF
简单、高效、可解释。
忽略顺序与长程依赖。
Level 4
词向量
开始刻画语义接近。
lecture05 已经见过。
Level 5
BERT / LLM
根据上下文动态表示词义。
下一部分专门展开。

表示越强,通常越能保留语义;但解释性、成本和可控性也会一起变化。

Part 4 / 5 BERT / LLM:
上下文表示

BERT 改变了什么?同一个词,不再只有一个向量

上下文 A:苹果 = 公司
苹果发布新品,市场关注它的芯片设计。

在 BERT 里,句子中的“苹果”向量会更靠近
华为、小米、手机、发布会 这一类语境。
发布新品 芯片 市场
上下文 B:苹果 = 水果
这个苹果很甜,适合做水果沙拉。

在 BERT 里,这里的“苹果”会更靠近
香蕉、梨、果汁、甜味 这样的语境。
很甜 水果 沙拉

传统词向量通常给“苹果”一个固定向量。
BERT 的关键跃迁是:同一个词在不同句子里,可以有不同的表示。

BERT 时代:tokenizer 成为输入接口

传统表示时代

人工分词 / 停用词表
词频 / TF-IDF / 短语规则
手工定义特征空间
分词词典 停用词表 n-gram

BERT / LLM 时代

tokenizer 切成字 / 子词单元
自动学习上下文表示
少做一部分手工特征工程
tokenizer max length truncation

AI 时代,最先要问的不是“删哪些词”,而是:
模型的 tokenizer 怎样切、窗口能装多长、领域词会不会被拆坏。
tokenizer 的设计,直接影响表示质量和下游任务。

BERT 的学习直觉:用上下文补全 [MASK]

[CLS] 市民 抱怨 地铁 太 [MASK] 了 [SEP]
tokenize
读上下文
猜 [MASK]
得到表示
关键机制
MLM:把一部分遮住,让模型靠上下文补出来。
关键能力
左右文一起看,更适合理解句子里的词义和角色。
关键产物
每个 token 都得到一个与当前句子绑定的表示。

从 BERT 到任务:一个编码器,多种输出方式

文本
tokenizer + input ids
BERT Encoder
任务头 / 向量
[CLS] 向量
文本分类
情感分析、立场判断、主题判别
逐 token 向量
序列标注
实体识别、关键词抽取、槽位填充
句向量 / pooling
语义检索
相似文本匹配、reranking、去重
句对输入
文本匹配
问答对齐、蕴含判断、相关性排序

BERT vs LLM:不同分工

BERT:更像“读者”

Encoder 为主
双向读上下文
强项:分类、匹配、检索
典型输出:标签、向量、span

LLM:更像“写作者 + 代理”

autoregressive 为主
顺序生成下一个 token
强项:生成、问答、工具调用
典型输出:一段新文本或行动计划

LLM 让文本处理更像系统设计。
真正的关键问题变成了:
怎么 chunk、怎么检索、怎么约束 prompt、怎么做评估与对照实验。

Part 5 / 5 AI 时代的文本研究:
方法选择与评估

Grimmer & Stewart 给文本研究者的四个提醒

1. 先定义研究目标,再选方法
你是在做分类、测量、发现议题,还是做预测?不同问题需要不同表示。
2. 自动方法一定要验证
机器输出看起来“合理”,不代表它真的测到了你关心的概念。
3. 没有一种方法对所有任务都最好
词袋、TF-IDF、BERT、LLM,各有适用边界,不存在万能流水线。
4. 研究者不能把解释责任外包给模型
模型可以帮你压缩文本,但概念界定、理论解释和有效性判断,仍然要由研究者负责。

Grimmer & Stewart (2013), Text as Data.

AI 时代的四个设计点

输入窗口
整篇 / 段落 / 句子 / chunk
多长才不丢语义?
表示层
TF-IDF / BERT / LLM
baseline 和上限分别是什么?
检索层
要不要 RAG?
top-k、rerank 怎么配?
评估层
人工标注 / benchmark / error analysis
失败案例怎么报?

真正会改变结果的,是 窗口切法、表示模型、检索策略和评估标准

三条 AI 路线怎么选?

TF-IDF
标签清楚、解释性要求高时很好用。
适合 baseline、快速分类。
BERT
想抓语义相似和上下文词义时更强。
适合分类、检索、reranking。
LLM + RAG
开放任务、问答和解释生成更灵活。
适合摘要、抽取、代理工作流。

先判断任务、成本、标注条件,再选路线。

中文文本做社科研究:优势很大,陷阱也很实在

为什么中文文本很有价值

政策文件、新闻、公告、平台内容丰富
时间跨度长,适合追踪议题变化
正式文本的话语风格高度制度化
很多研究问题天然就以中文表达出现

但你要小心什么

tokenizer 和领域词表会影响召回与语义匹配
中文 BERT / LLM 的词表覆盖仍然不完全均匀
新词、简称、缩写、口号不断变化
OCR 噪音、繁简转换、同义替换都很常见
政治语境里的委婉表达,常常比字面更重要

中文文本的机会,不只在于“数据多”;
而在于它能让 BERT / LLM 观察到 制度、话语、认知与治理 的细微变化。
真正要做好的,是领域适配、评估集和错误分析。

课堂讨论

如果你要分析政府工作报告里的政策优先级变化:

1. 你会用 TF-IDF baseline、BERT embedding,还是 LLM + RAG?为什么?
2. 如果文本很长,你的 chunking 单位会是句子、段落,还是整篇?
3. 你会怎样验证“模型真的抓到了政策优先级”,而不是只抓到口号频率或生成幻觉?
4. 如果不同模型给出不同结论,你准备怎么比较、报告和解释?

目标
把文本处理升级成“表示、检索与评估”的系统设计。
预告
下节课:文本分类。
从 TF-IDF 到 BERT,机器怎样开始学会“判断”文本。

从 BoW 到 BERT / LLM
关键是选对表示与系统接口

文本之所以难,不是因为它脏,
而是因为它本来就充满歧义、语境和选择。

在 AI 时代,真正重要的是:
选择合适的 tokenizer、embedding、模型、chunking 与评估方式

传统稀疏表示仍然有用,但 BERT 与 LLM 已经把重心推进到
上下文建模、检索增强和系统级设计。

下节课我们继续:从 TF-IDF 到 BERT,机器怎样开始做分类与判断?

lecture07 预告:文本分类 — 从 TF-IDF 到 BERT