跳到主要内容

把资料变成文字(下) —— 扫描件、图、音频、视频

这一章讲三件事: 为什么非文字的东西在这套系统里是「隐形」的、 把它们变成文字有哪几条路、以及这几条路的钱差多少

它在全书链条上的位置:接着第 04 章那条分水岭往下走。 第 04 章判完「文字是字符还是像素」,掉到「像素」那一边的、 以及所有根本不是文字的东西(图、录音、录像),归这一章。

1. 这一章讲什么

三句话:

  1. 换算成一串数的那个模型只吃文字——所以一张图、一段录音在按意思搜里根本不存在;
  2. 把它们变成文字有几条路,而这几条路的差价大到需要在动手前就算清楚: 最极端的一处是每页差 100 倍;
  3. 变完之后有一条纪律贯穿全书:摘要负责被搜到,原件负责被读懂。

2. 顶层全景:一份混排的 PDF 进库

一份 PDF 的一页,上面有三样东西

├── 叙述段落 ──────────────────────────────→ 直接就是文字

├── 一张柱状图 ──[多模态模型写一段描述]───→ 文字

└── 一张收入表 ──[多模态模型写一段摘要]───→ 文字

三样都变成文字之后,一起交给第 02 章那条走查的第 2 步

换算成一串数 → 存库

图说:注意三条路的终点是同一个地方。这一整章干的事,
就是把不是文字的东西挪到这个终点上来。

3. 承重词一:模态转换 —— 不转过来,它就不存在

这一章第一个承重词。一句话先给结论:模态转换就是把非文字的东西(图、表、音、视频) 先变成一段描述它的文字,好让后面那些只吃文字的步骤能处理它。

先看现象:它不是「搜得不准」,是「根本搜不到」

一份季度财报 PDF:
第 3 页有一段话:"…revenue grew steadily through the year…"
第 4 页有一张柱状图:四根柱子,100 / 120 / 140 / 175

用户问:"季度销售趋势是什么样的?"

结果:命中第 3 页那段话。第 4 页那张图,一次都没被考虑过。
不是排名靠后 —— 是它压根不在候选里。

图说:那张图对这套系统来说不是"分数低",是"不存在"。

书把机制写得很直白。先说清里面两个说法:文本嵌入——就是第 02 章那个 「把一块文字换算成一串数」的做法,做这件事的模型就叫文本嵌入模型。

语义——就是「意思」。所以「语义搜索」说的就是「按意思搜」。

于是那句机制是这样的1:

文本嵌入模型只处理文本,所以视觉元素在语义搜索里是「隐形」的,除非先转过来。 解法叫模态转换(modal conversion)。

(「模态」在这里就是「信息的形式」:文字是一种模态,图像是一种,声音是一种。 「多模态模型」就是同时能吃好几种模态的模型。)

转过来之后能换到什么

书给的结果也很具体:问「季度销售趋势」时, 叙述段落和内嵌的表格都能被命中,因为两者现在都以可搜的文本形式存在2

什么时候跳过这一整套

书给了三条反面判据3:

  • 文档纯文字,或者视觉元素只是装饰(公司标志、分隔线、配图);
  • 视觉内容在周围的文字里已经描述过了 —— 表格上面那段话已经把表说清了;
  • 或者你能用一个保住表结构的专门解析(把一份文件按它的格式拆成一个个部件)工具, 走第 04 章那条「让模型写查询语句」的路, 而不是把表转成一段摘要。

第二条最容易被忽略,而它在真实文档里非常常见: 学术论文、财报、技术白皮书里的图表,正文几乎总会解读一遍。 那时候转换是在花钱买重复。

4. 承重词二:文字识别与多模态 —— 一道 100 倍的分水岭

这一章第二个承重词。一句话先给结论:文字识别(OCR)就是「看一张图,把上面的字认出来」 那种老办法;它是一类专门训练的模型,便宜、跑在你自己机器上,但只认字、不认版面。

两条路各是什么

文字识别(OCR)多模态模型
它是什么专门做「图 → 字」这一件事的传统模型那种既能读文字也能看图的大模型
跑在哪可以完全跑在你自己的机器上一般要调外面的接口
认得出什么字 + 版面:标题、项目符号、表格、代码块的原结构都能保住
每页的钱很便宜通常是前者的 100 倍

那个 100 倍是全书最大的一个成本对照

书原话是:多模态接口每页的成本,通常是本地跑 Tesseract 的 100 倍。 规模一大,这个差就实打实了4

一个月要处理 20 000 页扫描件:

本地文字识别 假设每页 0.0002 美元 → 4 美元/月
多模态接口 每页 0.02 美元 → 400 美元/月

图说:这两个单价是为演示编的(书只给了"100 倍"这个倍数),
但 100 倍这个倍数是书给的。要看清的是形状——
在一天几十页的规模上这个差可以忽略,在一个月两万页的规模上它决定预算。

所以它不是二选一,是分诊

书给的做法是按文档类型和处理量把两条路混着用。 它用到一个分类器—— 也就是一个只做「这一份属于哪一类」这种判断的小模型5:

简单的文字型文档走文字识别,复杂的(有表、有图、扫描质量差)走多模态; 用一个文档分类器或者版面分析器自动分诊。

书还给了一张更细的决策表6:

文档类型每月量走哪条
纯文字(普通文档、合同、书、文章)1 000 份以内文字识别 —— 快、免费、本地跑
纯文字10 000 份以上文字识别 —— 规模上更划算
混合内容(文字 + 表 + 图)500 份以内多模态 —— 一遍过,结果稳
混合内容5 000 份以上混合分诊
复杂版面(技术图、手写、混排字体)任何量多模态里最强的那一档
敏感数据不能出网任何量一律本地开源文字识别

最后一行是硬约束,不是取舍。 它和第 03 章第 8 节那条「数据受监管不能出网」是同一条。

还有一条补充:如果你既要版面又不能出网,书说可以在本地托管一个视觉/文档模型 (它点名了两个开源的)7

但这张表还漏了一格,而书自己在最后一章里把它补上了:不分诊。 也就是不判断这份文档是哪一种,一律走贵的那条。 听起来像是把这张表的道理全扔了,可它在一种情形下明显更划算——量小、类型杂、想尽快做出来, 因为分诊本身也是要写代码、要维护的。 那一格长什么样、贵多少、抽出来的东西怎么验,在第 18 章第 7 节。

5. 多模态多买到什么、多付什么

先交代一件实现上的事:图片是怎么发过去的

这件事书的每段多模态代码里都出现,却一次没解释过。

模型的接口收的是文字。可一张图是二进制的,直接塞不进一段文字里。 所以要先把它换成一串纯字符——这个换法叫 base64: 它把任意二进制内容,用 64 个安全字符(大小写字母、数字、加号、斜杠)重新写一遍。

一张 200 KB 的 JPEG
↓ base64 编码
"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ…" ← 约 267 KB 的纯文本

图说:注意它变长了约三分之一 —— 每 3 个字节要用 4 个字符来写。
这一涨,涨的正是第 03 章那笔按长度算的账。

所以「多模态贵」不只贵在单价上,也贵在一张图变成了一大段文字。

多买到的:版面

书说得很具体:它能输出带格式的文本,把标题、项目符号、表格、代码块的原结构保住8

同一页扫描的产品手册

文字识别的输出:
"安装步骤 1 打开包装 2 取出主机 3 连接电源 型号 A-100 重量 2.4kg 功率 60W"
—— 字都对,但"这是标题""这是一个三步列表""这是一张三行的规格表"全没了

多模态的输出:
## 安装步骤
1. 打开包装
2. 取出主机
3. 连接电源

| 型号 | 重量 | 功率 |
|---|---|---|
| A-100 | 2.4kg | 60W |

图说:这段输出是为演示编的。要看清的是形状——
多买到的那样东西,正是第 04 章第 4 节说的「结构」。

而结构能换到什么,第 04 章第 4 节已经讲过:标题能加权、列表能抽问答对。 所以这 100 倍买到的不只是「认得更准」,是下游还能继续用的东西

多付的:它会编

书给的失效方式很直白:在低质量扫描件上,多模态模型可能编造数字、或者漏掉内容9

这是第 01 章那条「它宁可编也不认输」在这一步的具体形态—— 而且它比在回答那一步更危险:回答时编,用户看得出来;抽取时编,那个假数字会被存进库, 之后每一次检索都会把它当真。

书给的两条补救9:

  1. 给出明确的抽取指令 —— 不要说「把这页的内容抽出来」,要说 「从每一行抽取产品名、价格、重量」;
  2. 关键文档用多个模型交叉验证 —— 两个模型抽出来的数不一样,就送人工看。

6. 图片:靠一个角色设定

这一节的机制核心只有一句提示词——也就是你交给模型的那段指示话——而它是整条路的支点。

书给的提示词是10:

"You are an assistant for visually impaired users. Describe the image in detail." (你是一个为视障用户服务的助手。请详细描述这张图片。)

为什么这个角色设定管用: 「给看不见的人描述一张图」这个任务, 天然要求把图里的内容和关系都用话说出来——而不是给一个标题式的概括。 而「内容和关系」正是后面按意思搜要拿去比对的东西。

存进库的是描述,不是原件

书说存的是描述 + 一组标注,标注里包括11:

  • 原文档的路径;
  • 这张图在第几页;
  • 一个指向图片周围那几段文字的链接。
库里那一条长这样:

文字 = "一张柱状图,横轴是 2024 年的四个季度,纵轴是营收(百万美元)。
四根柱子分别为 100、120、140、175,逐季递增,第四季度涨幅最大。"
标注 = { 来源: "FY2024-Q4.pdf", 页码: 4, 周围文字: "第 3 页第 2 段" }
那串数 = [ … 1 536 个 … ] ← 是从上面那段描述算出来的,不是从图算的

图说:这条描述是为演示编的。要看清的是形状——
被检索的是描述,而原图仍然在原处;命中之后要给模型看什么,由你决定。

书自己在第 5 章还会回到这一点:它建议向量库里存文字描述, 那一块被检索到时只把原图交给模型12 —— 这就是下一节那条纪律的另一种说法。

7. 表格摘要,以及全书最该记住的一条纪律

先看书给的那个对照

这是全书最好的一个「为什么原样存不行」的例子13:

一张季度营收表,原样拼成字符串:
"Q1: 100, Q2: 120, Q3: 140"
→ 它的那串数只抓到了"数字"这件事,
抓不到"这是每个季度 20% 的增长"

同一张表,让模型写一段摘要:
"Revenue increased by 20% each quarter, rising from $100M in Q1
to $140M in Q3, indicating strong growth momentum"
→ 抓住了模式、趋势、以及业务含义

用户问:"Which companies show consistent revenue growth?"
→ 摘要那一条匹配得上
→ 原始表格串那一条匹配不上

图说:这两段是书里的原文。要看清的是——
用户问的是一个"趋势"层面的问题,而原始串里根本没有"趋势"这两个字的语义。

什么时候用、什么时候别用

用它别用它
表里是数值,而模式和趋势才是重点(财务结果、绩效指标、时间序列:同一个指标按时间一格一格记下来的那种数据)表本身就是查找型数据(员工名录、产品规格)——第 04 章那条「每行改写成一句话」就够
用户问的是分析性问题,不是查某一格表是大参考数据集——该走第 04 章那条「让模型写查询语句」
这张表的洞察两三句话说得清用户要的是精确的单元格值,不是摘要出来的洞察

出处见14书自己下的权衡是一句话:原始表格文本保住精确值但没有语境; 摘要提供语境但可能漏细节、甚至引入解读错误15

于是有了这条纪律

摘要负责被搜到,原件负责被读懂。

这句话是我们的归纳,不是书里的原话。 但它是书里两处做法的共同形状: 这一节存摘要、检索命中之后仍然可以取回原表;上一节存描述、命中之后把原图交给模型。

它在第 15 章会以书自己的措辞再出现一次: 「最终答案永远要取回完整的原文;摘要和预先算好的值是用来过滤和排序的,不是用来替代原始数据的」—— 而书隔了六章,一次都没点破这两处是同一条。

8. 音频:通用转写缺的三样

转写本身只有一步:调一个接口,把音频文件传过去,拿回一段文字。 书给了三个选项,分界线是数据敏感度和量16:

选项什么时候选
托管的转写接口装好就能用、支持 80 多种语言、不用运维;前提是数据允许发到外面
同一个模型跑在本地音频不能出你的环境;或者量大到接口费超过了自己算的成本
更贵的那一档转写接口准确率更高、标点和格式更好、术语处理更好;代价是每分钟更贵

缺的三样(这一节的重心)

通用转写做「一段录音变成一段文字」很好,但有三样它不做17缺哪一样,决定你要不要换专门的服务:

缺什么什么场景会被它卡死
实时流式(边说边出字,亚秒级延迟)直播字幕、语音助手、对话式应用
说话人分离(谁在什么时候说的)会议纪要和访谈分析的命门 —— 一段没有说话人的会议记录,几乎没法用
自定义词表——你自己交给它一份该认的专有名词清单医疗术语、法律用语、公司名、行话 —— 通用模型会把它们听成别的词

第二条值得展开: 回到第 01 章那张打分表,「会议录音堆着进不了知识库」被打了 4 分, 理由是「质量取决于转写」。而「质量」在会议这个场景里,首先就是这一条: 你得知道那句话是谁说的。 一段「决定下周交付」如果不知道是谁说的,它的价值掉一大半。

9. 视频:一段视频至少产出两条文本

视频是这一章最复杂的一种,因为它是两种模态叠在一起。

五步(这是本章另起的一处走查)

书给的流水线是五步18:

① 切段 把视频切成一段一段(下面第 4 小节讲怎么切)
② 每段存一帧 在每个断点存下当时那一帧画面,并让模型给它写一段描述
③ 每段抽音频 把两个断点之间的声音抽出来存成一个音频文件,再转写成文字
④ 各自换算 图的描述和音频的转写,各自换算成一串数
⑤ 存库 连同"这是第几秒到第几秒"一起存进去

于是:一个视频段至少产出两条文本 —— 音频转写 + 首帧的画面描述。

图说:书那个跑例是一份数据科学入门教程视频。

四种切法

切在哪儿,取决于这段视频的内容是怎么变化的19:

切法适合什么书怎么说
固定间隔(10–30 秒)讲座、演示、节奏均匀的教程实现简单;内容渐变时好用
场景检测(分析画面变化)电影、纪录片、有明显视觉转场的培训片自动识别剪切与淡入淡出
按转写文本切会议、访谈、播客话题转换发生在场景中间,画面不变但话题变了
章节标记(如果有)教育内容、网络研讨会最准,「但实践中你很少碰到有这种标记的内容」

书那个跑例给了两个具体的数:讲者每张幻灯片大约讲 30 秒;而代码演示部分按 10 秒切段20

两种模态谁更重要,也随内容变21: 幻灯演示更吃画面分析(信息在片子上);播客和访谈主要靠音频;动作多的视频要密采画面。

它买到的那样东西:一个能跳到那一刻的链接

这是这一节最实用的一条。 先说清「时间戳」:就是「第几分第几秒」这个记号22:

段级的标注让答案能带上精确的视频时间戳。 用户拿到的不只是答案,还有一个跳到那一刻的深链。

回到第 04 章第 5 节那条:「跳回第 14 页」和「跳回这份 200 页的 PDF」是不同的可核对程度。 视频上这个差更大: 「跳到 17 分 32 秒」和「这个答案出自这段 90 分钟的录像」, 后者等于没给。

一处必须纠正的:书里那段视频代码跑不起来

书那段代码里的两行,一行是新写法、一行是旧写法,两者不能同时成立:

第 1100 行: from moviepy import VideoFileClip ← 这是 2.x 的导入写法
第 1140 行: clip.subclip(timestamp, …) ← 这是 1.x 的方法名

图说:1.x 的导入写法是 from moviepy.editor import …;
而 2.x 已经把这个方法改名了。所以这两行合在一起,装哪个版本都跑不通。

出处见23

补充(不在书里):我们去核了 MoviePy 当前的源码。 它现在定义的方法名是 subclipped,没有 subclip; 而 from moviepy import VideoFileClip 这种导入写法正是 2.x 才有的 (1.x 要写 from moviepy.editor import …)。 2.x 改名的不止这一个,同样改了的还有 resize → resizedcrop → croppedrotate → rotated。 来源:https://raw.githubusercontent.com/Zulko/moviepy/master/moviepy/Clip.pyhttps://raw.githubusercontent.com/Zulko/moviepy/master/docs/getting_started/updating_to_v2.rst (均查阅于 2026-08-29)。

照实说:这一段的流水线设计是对的,但那段代码不能直接抄。

10. 主走查:一份混排 PDF 的一页,查询「季度销售趋势」

这是本章的主走查,前面每个机制都在它上面占一步。 用的是书那条四步流水线24,配一页三种元素的财报。

(「Q1: 100, Q2: 120, Q3: 140」和那段摘要是书里的原文; 下面的页码、块编号、分数都是为演示编的,不是真实数值。)

第 1 步:切分这一页

FY2024.pdf 第 4 页,切出三个元素:

[text] "Revenue grew steadily through the year, supported by
the launch of the new product line in Q2…"
[image] 一张柱状图(四根柱子)
[table] 一张季度营收表

第 2 步:图和表各交给多模态模型,换成文字

[image] → "一张柱状图,横轴是四个季度,纵轴是营收(百万美元)。
四根柱子逐季递增,第四季度涨幅最大。"

[table] → "Revenue increased by 20% each quarter, rising from $100M in Q1
to $140M in Q3, indicating strong growth momentum"

图说:这一步就是第 3 节那个模态转换。转完之后,这一页上再没有非文字的东西。

这一步也是第 5 节那条风险所在的地方: 如果这一页是张糊掉的扫描件, 模型可能把 140 读成 148,而那个 148 会被当作事实存进库。 所以书才要求关键文档交叉验证。

第 3 步:三条文本一起换算成数、存库

库里现在有三条(都来自同一页):

chunk-A 文字 = 那段叙述 标注 = {page: 4, type: "text"}
chunk-B 文字 = 柱状图的描述 标注 = {page: 4, type: "image",
原图: "figs/p4_fig1.png"}
chunk-C 文字 = 表的摘要 标注 = {page: 4, type: "table",
原表: "Q1: 100, Q2: 120, Q3: 140"}

图说:注意 chunk-C 把原表也一起存了。这就是第 7 节那条纪律的落地——
摘要进检索,原件留着备查。

第 4 步:提问,看谁被命中

查询:"季度销售趋势是什么样的?"

chunk-C(表摘要) 0.71 ← 最像。因为摘要里有"increased by 20% each quarter"
chunk-A(叙述段落) 0.64
chunk-B(图的描述) 0.58
──────────
如果第 2 步没做,库里只有 chunk-A 一条,
另外两条根本不存在 —— 这就是第 3 节说的"隐形"。

这三个分数是为演示编的。要看清的是排序:摘要那一条排在原始叙述前面, 因为它把「趋势」这件事明写出来了。

第 5 步:命中之后交给模型什么

交给模型的:
chunk-C 的摘要
+ chunk-C 存着的原表 "Q1: 100, Q2: 120, Q3: 140"
+ chunk-A 的原文

为什么把原表也一起给:
摘要里说"from $100M in Q1 to $140M in Q3" —— 但漏了 Q4 的 175。
如果用户接着问"第四季度是多少",只有原表答得出。

图说:这一步就是"摘要负责被搜到,原件负责被读懂"这句话的字面意思。

11. 作者的判断与证据

说法它是什么
「文本嵌入模型只处理文本,视觉元素是隐形的」是事实,由那个换算模型的输入类型直接决定
「多模态每页贵 100 倍」作者给的数,没有来源、没有测量条件(哪一档模型?多大的页?)。当量级看,别当报价看
多模态能保住版面是事实描述,而且和它的工作方式一致
「低质量扫描件上可能编造数字或漏内容」作者的经验判断,书没给失败率
那张按文档类型 × 量的决策表作者的经验做法。 六行都合理,但每一条阈值(1 000 / 10 000 / 500 / 5 000)都没有来源
「给盲人描述」那个提示词是一个具体做法,而且理由清楚;但书没有比较过别的提示词
表格摘要那个对照(20% 增长)是机制演示,不是测量。书用它说明原理,没有跑过检索实验
转写缺的那三样是产品事实(某个具体转写模型确实不做这三件),会随版本变
视频四种切法与两个时间参数作者的经验做法;30 秒和 10 秒是那个跑例的参数,不是通用建议
「章节标记最准,但实践中你很少碰到」作者的经验陈述,而且这半句坦白很有价值——它挡住了一条看着最优、实际用不上的路

判断(我们的,不是书里的):这一章最值钱的不是那些做法,是那个 100 倍。 因为其余各节的做法在别处也查得到,而**「便宜的老办法和贵的新办法差 100 倍」 这个量级,决定了你到底该不该一上来就全用新办法。** 而这本书是我们见过的少数几本把它写成一个数的。 如果错,会错在: 这个数没有测量条件。 如果你比的是「最便宜那档多模态」和「跑在租来的服务器上的文字识别」,倍数会小很多。 判据是:拿你自己的 100 页,两条路各跑一遍,看账单。

12. 边界与局限

  • 转换质量的评价办法,书给在了另一头。 第 5 节说多模态可能编数字,那怎么知道它编没编? 这里书只说了「交叉验证」,而且没说不一致时该信谁; 真正可执行的那一套在原书第 11 章讲上传 PDF 的那一节—— 拿一张字段清单核形状、做字段存在性与取值范围检查、低置信度的进人工复核队列 (我们放在第 18 章第 7 节)。两处它自己没有连起来;
  • 没有说转换之后怎么切块。 一段视频转写出来 8 000 字,该按第 07 章哪种切法切? 书没接上这一步;
  • 视频那段代码跑不起来(第 9 节讲过);
  • 没有讲增量。 一份 PDF 改了一页,是重跑整份,还是只重跑那一页?全书没讲;
  • 图片描述的质量没有下限保证。 一张复杂的架构图,模型可能只写出「一张流程图」。 书没有讨论这种「描述过于笼统导致检索不到」的失败,而它在技术文档里非常常见。

13. 可带走的

  1. 换算成一串数的那个模型只吃文字,所以图、表、音、视频在按意思搜里是隐形的—— 不是分数低,是不在候选里。先把它们变成文字,这个动作叫模态转换;
  2. 三条跳过它的判据: 纯文字文档、视觉元素只是装饰、或者周围文字已经把它讲清楚了 (第三条最常见,而它意味着转换是在花钱买重复);
  3. 文字识别和多模态每页差 100 倍钱。 前者只认字、能跑在自己机器上; 后者连版面一起认,但要调外面的接口;
  4. 不是二选一,是分诊: 纯文字走文字识别、混合内容走多模态、量大了做自动分诊; 数据不能出网就一律本地开源文字识别(这条是硬约束,不是取舍);
  5. 多模态多买到的是版面(标题、列表、表格、代码块的原结构), 而版面能换到第 04 章说的那些检索动作;
  6. 多模态多付的是「它会在低质量扫描件上编数字」—— 抽取时编比回答时编危险,因为那个假数会被存进库当真。 补救:给明确的抽取指令、关键文档多模型交叉验证;
  7. 给图写描述靠一个角色设定:「你是为视障用户服务的助手,请详细描述这张图片。」 因为「给看不见的人描述」这个任务天然要求把内容和关系说出来;
  8. 摘要负责被搜到,原件负责被读懂(这句话是我们的归纳)—— 存进库的是描述或摘要,原图、原表仍然留着;命中之后取回原件交给模型;
  9. 通用转写缺三样:实时流式、说话人分离、自定义词表。 说话人分离是会议和访谈的命门;
  10. 一段视频至少产出两条文本:音频转写 + 首帧的画面描述。 四种切法里,按转写文本切适合会议(话题转换发生在画面不变的时候);
  11. 段级标注买到的是「跳到 17 分 32 秒」这个链接, 而不是「这个答案出自这段 90 分钟的录像」;
  12. 书里那段视频代码新旧写法混用,跑不起来——流水线设计可以抄,代码不行。

14. 原文地图

主题原书章原文位置
三种转写选项Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:383(搜「Choose based on data sensitivity」)
通用转写缺的三样Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:399(搜「Real-time streaming」) · text/05-ch03-chapter-3-loading-data.txt:401(搜「Speaker diarization」) · text/05-ch03-chapter-3-loading-data.txt:403(搜「Custom vocabularies」)
文字识别三步流程Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:462(搜「Convert documents to PDF format」)
100 倍成本Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:521(搜「100 times more per page」)
混合分诊Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:523(搜「hybrid approach」)
决策表(类型 × 量)Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:575(搜「Decision guide: OCR versus multimodal」)
不能出网又要版面Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:621(搜「locally hosted vision or document model」)
多模态保住版面Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:697(搜「preserving document structure」)
它会编数字Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:715(搜「hallucinate numbers or skip content」)
给盲人描述那个提示词Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:762(搜「visually impaired」)
图片存什么标注Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:737(搜「filepath of the original document」)
CLIP 那条岔路Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:798(搜「same vector space」)
表格摘要那个对照Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:888(搜「Q1: 100, Q2: 120, Q3: 140」) · text/05-ch03-chapter-3-loading-data.txt:890(搜「indicating strong growth momentum」)
什么时候别用摘要Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:903(搜「lookup data」) · text/05-ch03-chapter-3-loading-data.txt:907(搜「exact cell values」)
精确值 vs 语境的权衡Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:909(搜「accuracy versus interpretability」)
混排 PDF 四步Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:927(搜「partition it into text, images, and tables」)
模态转换那句机制Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:1017(搜「invisible to semantic search」) · text/05-ch03-chapter-3-loading-data.txt:1019(搜「modal conversion」)
转完之后图表都能被命中Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:1021(搜「quarterly sales trends」)
什么时候跳过Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:1033(搜「decorative rather than」)
视频五步Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:1059(搜「Partition the video into sections」)
视频代码那两行Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:1100(搜「from moviepy import VideoFileClip」) · text/05-ch03-chapter-3-loading-data.txt:1140(搜「clip.subclip」)
四种切法Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:1154(搜「Fixed intervals」) · text/05-ch03-chapter-3-loading-data.txt:1168(搜「you rarely deal with content that has such markers」)
段级标注 → 深链Chapter 3. Loading Datatext/05-ch03-chapter-3-loading-data.txt:1172(搜「deep link to the relevant video moment」)

Footnotes

  1. 出处:「Chapter 3. Loading Data」第 1017 段(text/05-ch03-chapter-3-loading-data.txt:1017,搜「invisible to semantic search」)与第 1019 段(text/05-ch03-chapter-3-loading-data.txt:1019,搜「modal conversion」)。「模态转换」这个名字是书自己起的,英文原词 modal conversion。

  2. 出处:同章第 1021 段(text/05-ch03-chapter-3-loading-data.txt:1021,搜「quarterly sales trends」)。

  3. 出处:同章第 1033 段(text/05-ch03-chapter-3-loading-data.txt:1033,搜「decorative rather than」)起的三条。

  4. 出处:同章第 521 段(text/05-ch03-chapter-3-loading-data.txt:521,搜「100 times more per page」)。Tesseract 是书点名的那个开源文字识别引擎,见同章第 470 段(text/05-ch03-chapter-3-loading-data.txt:470,搜「most popular open source OCR engine」)。

  5. 出处:同章第 523 段(text/05-ch03-chapter-3-loading-data.txt:523,搜「hybrid approach」)。

  6. 出处:同章第 575 段(text/05-ch03-chapter-3-loading-data.txt:575,搜「Decision guide: OCR versus multimodal」)是表 3-4 的表题,六行分列在其后;「敏感数据不能出网一律本地开源」那一行见第 529 段(text/05-ch03-chapter-3-loading-data.txt:529,搜「data cannot leave your」)。

  7. 出处:同章第 621 段(text/05-ch03-chapter-3-loading-data.txt:621,搜「locally hosted vision or document model」)。书点名的两个是 Llama 3 Vision 和 Qwen-VL。

  8. 出处:同章第 697 段(text/05-ch03-chapter-3-loading-data.txt:697,搜「preserving document structure」)。原文说它能输出 Markdown,把标题、项目符号列表、表格、代码块的原格式反映出来。

  9. 出处:同章第 715 段(text/05-ch03-chapter-3-loading-data.txt:715,搜「hallucinate numbers or skip content」)。两条补救(给明确的抽取指令、多模型交叉验证)也在这一段。 2

  10. 出处:同章第 762 段(text/05-ch03-chapter-3-loading-data.txt:762,搜「visually impaired」)与第 763 段(text/05-ch03-chapter-3-loading-data.txt:763,搜「Describe the image in detail」)。

  11. 出处:同章第 737 段(text/05-ch03-chapter-3-loading-data.txt:737,搜「filepath of the original document」)起的三条。

  12. 出处:「Chapter 5. Embeddings」第 539 段(text/07-ch05-chapter-5-embeddings.txt:539,搜「Store the text descriptions in your vector database」)。那一节讲的是另一条路(让图和文直接进同一个空间),而书在那里明确建议多数场景走本章这一条;完整的一来一回在第 08 章第 8 节。

  13. 出处:「Chapter 3. Loading Data」第 888 段(text/05-ch03-chapter-3-loading-data.txt:888,搜「Q1: 100, Q2: 120, Q3: 140」)与第 890 段(text/05-ch03-chapter-3-loading-data.txt:890,搜「indicating strong growth momentum」);用户那句提问见第 891 段(text/05-ch03-chapter-3-loading-data.txt:891,搜「consistent revenue growth」)。

  14. 出处:同章第 895 段(text/05-ch03-chapter-3-loading-data.txt:895,搜「patterns and trends matter」)起的三条,与第 903 段(text/05-ch03-chapter-3-loading-data.txt:903,搜「lookup data」)起的三条。

  15. 出处:同章第 909 段(text/05-ch03-chapter-3-loading-data.txt:909,搜「accuracy versus interpretability」)。

  16. 出处:同章第 383 段(text/05-ch03-chapter-3-loading-data.txt:383,搜「Choose based on data sensitivity」),三个选项分列在第 387、391、395 段(text/05-ch03-chapter-3-loading-data.txt:387,搜「no infrastructure management」)。书用的那个转写模型叫 Whisper。

  17. 出处:同章第 397 段(text/05-ch03-chapter-3-loading-data.txt:397,搜「lacks features needed for specialized applications」),三条分列在第 399、401、403 段。「说话人分离」的英文是 diarization,书说它是会议纪要和访谈分析的关键。

  18. 出处:同章第 1059 段(text/05-ch03-chapter-3-loading-data.txt:1059,搜「Partition the video into sections」)起的五步。

  19. 出处:同章第 1154 段(text/05-ch03-chapter-3-loading-data.txt:1154,搜「Fixed intervals」)起的四种;最后那句坦白见第 1168 段(text/05-ch03-chapter-3-loading-data.txt:1168,搜「you rarely deal with content that has such markers」)。

  20. 出处:同章第 1111 段(text/05-ch03-chapter-3-loading-data.txt:1111,搜「time_step = 10」)。30 秒那个数见同章第 1089 段(text/05-ch03-chapter-3-loading-data.txt:1089,搜「30 seconds」)。

  21. 出处:同章第 1170 段(text/05-ch03-chapter-3-loading-data.txt:1170,搜「dual-modality approach」)。

  22. 出处:同章第 1172 段(text/05-ch03-chapter-3-loading-data.txt:1172,搜「deep link to the relevant video moment」)。

  23. 出处:同章第 1100 段(text/05-ch03-chapter-3-loading-data.txt:1100,搜「from moviepy import VideoFileClip」)与第 1140 段(text/05-ch03-chapter-3-loading-data.txt:1140,搜「clip.subclip」)。补充(不在书里):MoviePy 当前源码里定义的是 subclipped,没有 subclip;而 from moviepy import … 这种导入写法是 2.x 才有的(1.x 写 from moviepy.editor import …)。来源:https://raw.githubusercontent.com/Zulko/moviepy/master/moviepy/Clip.pyhttps://raw.githubusercontent.com/Zulko/moviepy/master/docs/getting_started/updating_to_v2.rst(均查阅于 2026-08-29)。

  24. 出处:同章第 927 段(text/05-ch03-chapter-3-loading-data.txt:927,搜「partition it into text, images, and tables」)起的四步。