马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
这是 「AI是怎么回事」 系列的第 2 篇。我不停很好奇 AI 到底是怎么工作的,于是花了很长时间去拆这个东西——手机为什么换了发型还能认出你,ChatGPT 答复你的那三秒钟里究竟在算什么,AI 为什么能通过状师考试却会一本端庄地撒谎。这个系列就是我的探索条记,发现了很多故意思的东西,想分享给你。以为不错的话,欢迎分享+关注。
你对 ChatGPT 说"苹果"。
它"明白"的是什么?
不是一个水果的画面,不是咬一口时嘴里的酸甜味,不是秋日果园里的那种香气——
是一串数字。约莫 768 个数字。
上一篇我们聊了 AI 怎么"看"——一张照片在 AI 眼里就是一堆 0 到 255 的数字,它通过层层检测器从中找到边沿、形状、五官,终极"认出"你的脸。
本日聊的标题更让人狐疑:笔墨呢?AI 怎么"读"笔墨?
图片好歹有颜色、有亮度,你可以直觉地明白"用数字表现颜色深浅"。但笔墨?"我"这个字怎么变成数字?"爱"这个字又怎么变成数字?
而且,变成数字之后,AI 怎么知道"猫"和"狗"比"猫"和"汽车"更像?
这篇文章,我想和你一起搞清晰这件事。
AI 看不懂笔墨
先从一个简朴的究竟提及:电脑不认识字。
这话听起来有点希奇——你在电脑上打字,它不是能表现出来吗?
能表现,但那只是"画出来"。电脑知道"这个编号的字符应该表现成什么形状",但它完全不明白这个字是什么意思。
就像你看一个你完全不认识的阿拉伯笔墨母——你能把它抄下来,但你不知道它说的是什么。
上一篇我们创建了一个核心框架:要让 AI 处理处罚任何东西,第一步都是把它变成数字。
图片变成了数字矩阵(每个像素是一个 0 到 255 的数字)。
笔墨也一样——要变成数字。
但"把笔墨变成数字"远没有"把图片变成数字"那么直观。图片的数字化有天然的对应关系:一个像素 = 一个亮度值。笔墨呢?
给每个字编个号?好比"我"= 1,"爱"= 2,"你"= 3?
能编,但没用。由于 1、2、3 这些数字之间有巨细关系——岂非"你"比"我"大?"爱"在"我"和"你"中心?这毫偶然义。
我们须要一种更智慧的方法,把笔墨变成数字,而且这些数字要能反映笔墨的寄义。
但在讲这个"更智慧的方法"之前,我们先要办理一个前置标题:AI 读笔墨的时间,是一个字一个字读的吗?
第一步:把笔墨切成碎片——Token
你大概听说过一个词:Token。
假如你用过 ChatGPT,大概见过如许的提示:"您的对话已高出上下文长度限定"。这里的"长度"就是用 Token 来权衡的。
那 Token 到底是什么?
Token 是 AI 处理处罚笔墨的最小单元。 你可以把它明白为 AI 读笔墨时的"一口"——它不是一个字一个字地读,也不是一个句子一个句子地读,而是一 Token 一 Token 地读。
一个 Token 可以是一个字,也可以是一个词,乃至可以是半个词。
让我用详细例子来分析。
英文的环境:- "Hello world" → ["Hello", " world"] (2 个 Token)"unhappiness" → ["un", "happiness"] (2 个 Token)"ChatGPT is amazing" → ["Chat", "GPT", " is", " amazing"] (4 个 Token)
复制代码 中文的环境:- "我爱学习" → ["我", "爱", "学习"] (3 个 Token)"人工智能" → ["人工", "智能"] (2 个 Token)
复制代码 你大概注意到了——英文单词 "unhappiness" 被拆成了 "un" 和 "happiness" 两个部分,而不是保持完备的一个词。为什么?
这涉及到 AI 分词的方法。ChatGPT 使用的分词方法叫 BPE(Byte Pair Encoding,字节对编码)。这个名字很拗口,但原理不复杂:
想象你有一本厚厚的英文书。你从全部单个字母开始,然后统计哪两个字母最常常连在一起出现——假设是 "t" 和 "h"。于是你把它们归并成一个新的符号 "th"。然后继承找下一个最频仍的组合,好比 "th" 和 "e" 归并成 "the"。云云反复,常见的组合不停归并成更长的"碎片"。
终极的效果是:常见的词会保持完备(好比 "the""is""Hello"),而不常见的词会被拆成几个常见的碎片——就像 "unhappiness" 被拆成 "un"(一个常见的前缀)和 "happiness"(一个常见的词)。
这种计划很智慧。它让 AI 不须要记着天下上全部的词——只须要记着几万个常用的"碎片",就能拼出任何笔墨。好比 GPT-4 的词汇表约莫有 10 万个 Token,用这 10 万个碎片可以表达任何语言的任何笔墨。
你大概还想知道一个实用的数字:英文约莫每 4 个字母算 1 个 Token,而中文约莫每 1-2 个汉字算 1 个 Token(由于汉字在练习数据中出现的频率比英笔墨母低,以是归并的机会更少,切得更碎)。
这意味着什么?GPT-4 的上下文窗口——也就是它一次能"看到"的笔墨总量——是 128,000 个 Token。换算成中文,约莫是 6 万到 10 万个汉字,差不多是一本中篇小说的长度。也就是说,你可以把一整本书喂给它,让它一次性"读完"。
好了,如今 AI 已经把一段笔墨切成了一个个 Token。
但这只是第一步。每个 Token 如今只是一个编号——好比 "Hello" 是编号 9906,"天下" 是编号 8853。
这些编号自己没故意义。编号 9906 和编号 9907 之间没有任何语义关系。
下一个标题是:怎么给每个 Token 赋予"意义"?
第二步:给每个词一串数字——词向量
这就到了本日最关键的概念:词向量(Word Vector,也叫 Word Embedding,"词嵌入")。
"向量"这个词听起来像是高深的数学。别怕,它着实就是一串有序的数字。
好比:这就是一个向量。它有 3 个数字,以是叫"3 维向量"。
词向量,就是用一串数字来代表一个词的寄义。
举个简化的例子。假设我们用 4 个数字来形貌一个词,每个数字代表一个"特性维度":
看到什么规律了吗?
- "国王"和"王后"险些完全一样,唯一的区别是第二个数字(性别)一个是 0.8,一个是 -0.8
- "夫君"和"女人"也一样——唯一的区别照旧性别谁人维度
- "男孩"和"夫君"的告急区别在第三个数字(年岁)
这些数字编码了词的寄义。
固然,我必须立即分析:上面的例子是我为了让你明白而简化的。 真实的词向量没有这么直观。
真实的词向量有两个庞大区别:
第一,维度多得多。 在 2013 年 Google 的 Tomas Mikolov(托马斯·米科洛夫)等人发表的 Word2Vec 模子中(Word2Vec 的意思就是"词到向量"),一个词通常用 100 到 300 个数字来表现。而如今 ChatGPT 使用的模子,一个 Token 的向量维度可以到达 768 个乃至更多。为什么须要这么多?由于人类语言的寄义极其丰富——4 个数字根本不敷用,你须要几百个维度才华捕获一个词的各种眇小寄义。
第二,每个维度没有明白的"标签"。 我刚才给每个数字贴了标签——"皇室水平""性别""年岁""权利"——但真实的词向量里,每个数字代表什么,没人知道。它们是 AI 从海量文本中自己"学"出来的,就像上一篇里说的:边沿检测器的数字不是人类计划的,是电脑从几百万张图片中自己学出来的。词向量也一样——那几百个数字不是人类安排的,是 AI 从几十亿个句子中自己发现的。
你大概会问:假如每个维度代表什么都不知道,那这些数字有什么用?
答案是:固然每个维度的寄义不透明,但数字之间的"关系"是故意义的。
这就引出了词向量最让人惊奇的性子。
"国王" - "夫君" + "女人" = ?
2013 年,Tomas Mikolov 和他在 Google 的同事们在 一篇论文 中展示了一个惊人的发现:
假如你拿"国王"的向量,减去"夫君"的向量,再加上"女人"的向量,得到的效果最靠近的词是——"王后"。- 向量("国王") - 向量("夫君") + 向量("女人") ≈ 向量("王后")
复制代码 让我用前面谁人简化的例子算给你看:- 国王 = [0.9, 0.8, 0.6, 0.9]夫君 = [0.0, 0.8, 0.5, 0.1]女人 = [0.0, -0.8, 0.5, 0.1]国王 - 夫君 + 女人= [0.9, 0.8, 0.6, 0.9]- [0.0, 0.8, 0.5, 0.1]+ [0.0, -0.8, 0.5, 0.1]
复制代码 一个数字一个数字地算:- 第1个数字: 0.9 - 0.0 + 0.0 = 0.9第2个数字: 0.8 - 0.8 + (-0.8) = -0.8第3个数字: 0.6 - 0.5 + 0.5 = 0.6第4个数字: 0.9 - 0.1 + 0.1 = 0.9效果 = [0.9, -0.8, 0.6, 0.9]
复制代码 转头看看我们之前界说的"王后":- 王后 = [0.9, -0.8, 0.6, 0.9]
复制代码 完全一样。
你大概以为这是由于我经心计划了那些数字——简直云云,我的例子是为了直观而构造的。
但真正惊人的是:用真实数据练习出来的、每个维度都没有人为标签的 300 维词向量,也能做到这件事。
Mikolov 团队用约莫 1000 亿个英文单词的 Google 消息数据集 练习了一个 Word2Vec 模子,每个词用 300 个数字表现。他们发现这种"向量算术"在很多类比关系上都建立:- 巴黎 - 法国 + 意大利 ≈ 罗马 (都城关系)更大 - 大 + 小 ≈ 更小 (比力级关系)走路 - 走 + 游 ≈ 游泳 (动作关系)
复制代码 这分析什么?
分析那 300 个"莫名其妙"的数字,居然主动编码了人类语言中的逻辑关系。
- "国王"和"王后"之间的差别,和"夫君"和"女人"之间的差别,被编码成了同一个方向——性别方向
- "巴黎"和"法国"之间的差别,和"罗马"和"意大利"之间的差别,被编码成了同一个方向——"都城"方向
AI 没有被教过"什么是性别""什么是都城"。它只是读了几十亿个句子,发现"国王"和"王后"出如今雷同的上下文里,但"国王"更常和"他"出如今一起,"王后"更常和"她"出如今一起——从而主动学会了"性别"这个维度。
这是我学 AI 过程中第一个"wow moment":一堆数字居然能捕获人类语言的逻辑关系——不是由于有人教它"国王是男性的君主",而是由于它从笔墨的共现模式中,自己发现了"性别"这个概念。
不外,我须要诚实地增补一点:这个经典例子有一个玄妙的细节。在现实盘算中,"国王 - 夫君 + 女人"的效果最靠近的向量着实是"国王"自己(由于你没有减去太多东西)。研究者在展示这个例子时,会把输入的三个词扫除在候选效果之外——扫除它们之后,最靠近的效果才是"王后"。以是更精确的说法是:除了输入词自己之外,效果最靠近的是"王后"。这并不影响核心发现——向量确实编码了语义关系——但科学须要准确。
这些数字是怎么"学"出来的?
你大概在想:这么神奇的向量,是怎么练习出来的?
核心思绪着实和上一篇"让电脑自己学"的逻辑完全一样,只不外换了一个任务:不是让电脑看图猜标签,而是让电脑读笔墨猜上下文。
Word2Vec 的练习方法很奥妙。让我用一个详细例子来表明。
假设 AI 读到如许一句话:Word2Vec 会拿出此中一个词,好比"公园",然后问 AI 一个标题:
"公园"这个词的附近,最大概出现什么词?
精确答案是:"去""散步""天气"——这些都是"公园"附近出现的词。
AI 一开始随机猜,然后和精确答案对比,猜错了就调解——调解什么?调解"公园"这个词对应的那串数字(也就是它的词向量)。
重复几十亿次。
神奇的事变就发生了:
由于"公园"和"花圃"常常出如今相似的上下文中(都可以"去",都能"散步",都和"风景""绿色"有关),以是它们的向量会被调解得很靠近。
而"公园"和"键盘"险些不会出如今相似的上下文中,以是它们的向量会离得很远。
这就是词向量的核心练习逻辑:常常出如今相似上下文中的词,向量就靠近;不在相似上下文中出现的词,向量就阔别。
这个思绪有一个更早的渊源。英国语言学家 J.R. Firth 在 1957 年说过一句闻名的话:
"You shall know a word by the company it keeps."
(你可以通过一个词的"搭档"来相识这个词。)
Word2Vec 做的,就是把这个语言学直觉变成了数学。
Mikolov 团队在 2013 年发表了两篇关键论文:第一篇 《Efficient Estimation of Word Representations in Vector Space》 提出了 Word2Vec 的根本架构;第二篇 《Distributed Representations of Words and Phrases and their Compositionality》 进一步改进了练习方法,并展示了词向量的各种奥妙性子。一年后,斯坦福大学的 Jeffrey Pennington 等人发表了另一个闻名的词向量模子 GloVe(Global Vectors for Word Representation,"全局词向量表现"),用差别的数学方法到达了雷同的效果。
这些工作奠基了 AI 处理处罚语言的根本——把"寄义"变成了"可以盘算的数字"。
怎么判断两个词有多像?——余弦相似度
如今每个词都变成了一串数字。那 AI 怎么判断两个词的意思有多靠近?
最直觉的方法是比巨细——两串数字差得多不多?
但这有一个标题。假设"猫"的向量是 [1, 2, 3],"狗"的向量是 [2, 4, 6]。它们的数字巨细差很多(差了一倍),但方向完全一样——都指向同一个方向。而"寄义相近"在向量空间中,更多地表现为方向雷同,而不是巨细相近。
以是 AI 不比巨细,比方向。
丈量两个向量方向靠近水平的方法叫余弦相似度(Cosine Similarity)。它权衡的是两个向量之间的夹角——夹角越小,方向越靠近,余弦值越大。
余弦相似度的盘算公式并不复杂。让我用一个简朴的例子演示。
假设我们有两个 3 维的词向量:- 猫 = [1, 2, 3]狗 = [2, 3, 4]
复制代码 余弦相似度的盘算分三步:
第一步:对应位置相乘,然后全部加起来(这叫"点积")- 1×2 + 2×3 + 3×4 = 2 + 6 + 12 = 20
复制代码 你有没有以为这个操纵很眼熟?没错——上一篇里 Sobel 算子检测边沿用的就是这个操纵:"对应位置的数字相乘,然后全部加起来"。同一种数学运算,在图像里用来检测边沿,在语言里用来权衡相似度。
第二步:盘算每个向量的"长度"
向量的长度是每个数字的平方加起来再开根号:- 猫的长度 = √(1² + 2² + 3²) = √(1+4+9) = √14 ≈ 3.74狗的长度 = √(2² + 3² + 4²) = √(4+9+16) = √29 ≈ 5.39
复制代码 第三步:点积除以两个长度的乘积- 余弦相似度 = 20 / (3.74 × 5.39) = 20 / 20.16 ≈ 0.99
复制代码 效果是 0.99,非常靠近 1。这意味着"猫"和"狗"的向量方向险些完全同等——它们的语义非常靠近。
余弦相似度的值在 -1 到 1 之间:
- 1 表现方向完全雷同(语义完全相干)
- 0 表现方向垂直(语义无关)
- -1 表现方向完全相反(语义对立)
在现实的 Word2Vec 模子中(用 Google 消息数据练习的 300 维向量),一些范例的余弦相似度约莫是:- "king" 和 "queen" ≈ 0.65 (强相干:都是君主)"cat" 和 "dog" ≈ 0.76 (强相干:都是宠物)"good" 和 "bad" ≈ 0.72 (中等相干:都是评价词,固然寄义相反)"cat" 和 "computer" ≈ 0.13 (弱相干:险些无关)
复制代码 你大概注意到一个风趣的征象:"good"和"bad"的相似度居然不低。这是由于余弦相似度权衡的是语义空间中的方向,而"good"和"bad"固然寄义相反,但它们常常出如今相似的语境中("这部影戏很 good/bad"),以是在向量空间中的方向着实比力靠近。这也提示我们:词向量捕获的是使用模式的相似性,不完全等同于"意思一样"。
这让 ChatGPT 成为大概
词向量看起来是一个很"学术"的发明。但它办理了一个困扰盘算机科学几十年的现实标题。
让我讲一个你肯定有过的体验。
2010 年前后,你在搜索引擎里搜"苹果手机"。搜索效果里混着什么?水果。
为什么?由于其时的搜索引擎用的是关键词匹配——它只是在找"哪些网页里包罗'苹果'这个字"。网页里写的是苹果公司照旧苹果水果?搜索引擎不知道,也不关心。
这就是"没有词向量"的天下。笔墨在盘算机眼里就是一串符号,"苹果" = "苹果",没有任何语义区分。
词向量改变了这统统。
有了词向量,"苹果"不再只是两个汉字——它是一串数字。而且根据上下文的差别,这串数字可以差别:
- 当"苹果"出如今"我吃了一个红红的苹果"中时,它的向量更靠近"橘子""水果""甜"
- 当"苹果"出如今"我买了一部苹果手机"中时,它的向量更靠近"iPhone""三星""科技"
(须要分析的是,最初的 Word2Vec 模子每个词只有一个固定的向量,无法区分同一个词的差别寄义。真正实现"根据上下文天生差别向量"的,是厥后的模子——特别是 2017 年的 Transformer 和 2018 年的 BERT。这些我们背面的文章会专门讲。但词向量打下的根本是不可更换的。)
这个变革带来了"从前"和"如今"的巨大差距:
从前:关键词匹配
- 盘算机只知道"苹果"这个符号
- 搜"苹果手机",全部包罗"苹果"的网页都出来
- 搜"怎么给小狗沐浴",假如某篇文章标题是"怎样帮幼犬干净"——找不到,由于没有一个关键词对得上
如今:语义搜索
- 盘算机知道"苹果手机"和"iPhone"的向量很近
- 盘算机知道"小狗"和"幼犬"的向量很近,"沐浴"和"干净"的向量很近
- 它不再匹配字面笔墨,而是盘算向量之间的隔断——也就是语义之间的隔断
这就是从"字面匹配"到"语义明白"的超过。
ChatGPT 可以大概"明白"你说的话(至少外貌上看起来是如许),正是由于它把你说的每一个 Token 都变成了一串数字——一串编码了丰富语义信息的数字。在这个"数字天下"里,"高兴"和"开心"靠得很近,"快乐"和"伤心"的关系对称地映射着"白天"和"夜晚"的关系,"巴黎"和"法国"之间的隔断便是"东京"和"日本"之间的隔断。
AI 眼中没有笔墨。只有高维空间里的点。
它明白语义的方式,就是盘算点和点之间的隔断。
从 4 维到 768 维:你能想象吗?
前面为了让你直观明白,我用了 4 维的例子。但真实的词向量是 300 维、768 维,乃至更高。
768 维是什么概念?
我们能想象的空间最多到 3 维——长、宽、高。4 维已经超出一样平常直觉了。768 维?
坦白说,没有人能真正"想象" 768 维空间。
但你可以如许明白:每增长一个维度,就多了一个"形貌特性的角度"。
3 维空间里,你只能用 3 个数字形貌一个物体的位置。但假如你要形貌一个词的"寄义"——它是详细的照旧抽象的?是正面的照旧负面的?是人照旧物?是动词照旧名词?和食品有关照旧和科技有关?是正式用语照旧口语?——这些维度很快就高出 3 个了。
768 维意味着 AI 有 768 个差别的"角度"来形貌一个词。这些角度大部分我们无法定名,但它们连合起来,能捕获语言中极其眇小的差别。
一个直觉类比:假如你要向一个从没见过地球的外星人形貌"猫",你可以说"它有四条腿"(1 个维度)、"它是动物"(2 个维度)、"它很小"(3 个维度)……你用的维度越多,形貌越准确。768 个维度,就是用 768 个"特性"来准确定位这个词在语义空间中的位置。
从词向量到 AI 的"语言本领"
让我把本日讲的东西串起来:- 一段笔墨 ↓[切分 Token] "我爱学习" → ["我", "爱", "学习"] ↓[查词向量] "我" → [0.12, -0.34, 0.56, ..., 0.78] (768个数字) "爱" → [0.45, 0.23, -0.67, ..., 0.11] (768个数字) "学习" → [-0.33, 0.89, 0.12, ..., -0.45] (768个数字) ↓[后续处理处罚] AI 在这些数字上做运算,"明白"语义
复制代码
这个流程是全部今世 AI 语言模子——ChatGPT、Claude、Gemini——的出发点。
没有词向量,AI 就没法处理处罚语言。
就像上一篇说的"没有数字矩阵,AI 就没法处理处罚图像"一样。无论 AI 做什么,第一步永世是把输入变成数字。图像的"数字化"是像素矩阵,语言的"数字化"就是词向量。
一句话回顾
AI 眼中的笔墨不是笔墨,是高维空间里的点。
每个词被表现为一串几百个数字,这些数字编码了词的寄义。寄义相近的词,在高维空间里靠得更近;寄义差别的词,离得更远。AI 通过盘算点之间的隔断来"明白"语义——不是真的明白,而是在做准确的数学运算。
"国王 - 夫君 + 女人 = 王后"这个等式告诉我们:AI 从几十亿个句子中,自己发现了人类语言的布局。没有人教它什么是"性别",什么是"都城",什么是"比力级"——它只是读了富足多的笔墨,数字就天然分列出了这些关系。
一个新的标题
如今 AI 能"看"了(图片 = 数字矩阵),也能"读"了(笔墨 = 词向量)。
这两个本领在 2012 年之前就已经存在了——词向量的早期研究可以追溯到 2003 年,边沿检测更是 1968 年就有了。
但直到 2012 年,AI 才突然"变锋利"了。
那一年,一个叫 AlexNet 的步伐参加了一个图像辨认比赛。效果出来的时间,全部人的下巴都掉了下来——它的效果远远高出了全部对手,以至于评委们一度以为他们作弊了。
发生了什么?下一篇,我们来聊这个让整个 AI 范畴天翻地覆的时间。
参考资料
订阅
|