電腦如何理解人類語言? 從 Embedding 說起
電腦如何理解人類語言? 從 Embedding 說起
這支影片用手機相簿搜尋「海邊的日落」作為入口,說明 embedding 如何把文字、圖片或文件轉成可計算的向量座標,讓機器不用只靠字面比對,也能用距離判斷語意相近。影片先對比 one-hot、bag of words 與 TF-IDF 這些早期方法的限制,再回到分布假說,說明「看一個詞跟誰在一起」如何被翻成數學。接著串起 LSA、Bengio 2003 神經語言模型、Mikolov 的 word2vec,以及向量減法如 King - Man + Woman 的經典展示,同時補上 2020 年研究對這個展示的修正。後半段說明固定詞向量無法處理一詞多義,因此轉向 ELMo、BERT 與 Sentence-BERT 這類依上下文現場計算的 embedding。最後,影片把 embedding 放回今天的應用:RAG、向量資料庫、ANN 近似最近鄰搜尋、rerank、Spotify 推薦、OpenAI embedding 價格,以及 Matryoshka embedding 讓維度可縮放的趨勢。
Embedding 的直覺:把意思放到同一張地圖
00:00影片用手機相簿搜尋作為例子:照片沒有被手動標籤成「海邊的日落」,但手機仍能找出來。關鍵不是機器真的讀懂中文,而是文字與照片都被轉成同一張語意地圖上的座標。
在這張地圖上,意思越接近的位置越靠近。所以搜尋、推薦、AI 查資料,都可以被改寫成一個工程問題:不要問『這句話你懂不懂』,而是問『這兩個點離得近不近』。
語意向量早期方法能數字面,卻看不見語意距離
02:56one-hot 把每個詞編成一根只有一格是 1 的長向量,問題是任何兩個詞之間的距離都一樣:貓和狗、貓和星期三、貓和美金在數學上沒有差別。
bag of words 和 TF-IDF 讓工程系統能處理垃圾郵件與搜尋,但影片強調它們仍然是在數詞頻、比字面,不是在理解詞與詞之間的意義關係。
one-hot / TF-IDF分布假說:看一個詞和誰一起出現
04:29影片把 embedding 的思想源頭追到 Firth 與 Harris:要認識一個詞,就看它都跟哪些詞待在一起。即使沒聽過某個新詞,只要它常和『喝』『一整杯』一起出現,人也能猜它大概是飲料。
後來 AI 領域做的事,就是把這句語言學直覺翻成數學:讓模型從大量上下文中學出詞與詞的相對位置。
Distributional Hypothesis從 LSA 到神經語言模型:語意座標開始成形
05:141990 年的 LSA 用線性代數壓縮巨大的詞—文件矩陣,把原本稀疏的表格壓到約 100 個主題維度。影片舉例,car 與 automobile 這類字面不同但語意接近的詞,第一次能在數學上靠近。
2003 年 Bengio 的神經語言模型則改用『看前文猜下一個詞』的訓練任務;詞的座標不是直接手工設計,而是在模型為了猜得準的過程中長出來。不過當時算力不足,想法先於時代。
LSA / Neural LMword2vec 的突破:把分布假說變成可大規模訓練的工具
06:48Mikolov 在 Google 將詞向量訓練簡化到一台桌機也能跑:用 skip-gram / CBOW 類似的任務,反覆從上下文猜中心詞,或從中心詞猜周邊詞。
影片強調,word2vec 的貢獻不只是效果好,而是把計算量壓到夠低;它能在不到一天內從 16 億詞中學出高品質詞向量,開源後快速成為 NLP 標準配備。
word2vec語意有了幾何,但經典神話也要查證
09:31詞向量最迷人的展示,是 King - Man + Woman 會靠近 Queen,巴黎 - 法國 + 義大利會靠近羅馬。影片用這點說明:當意思變成座標,語意關係也能變成方向。
但影片也補上 2020 年研究的修正:King - Man + Woman 最近的點其實可能是 King 本身,Queen 成為答案,是因為標準工具會把輸入過的詞排除。方向存在、關係被學到是真的;但傳播時漂亮的示範中間隔著一行沒被提起的程式碼。
vector arithmetic固定詞向量的終點:上下文才決定這一次的意思
11:17word2vec 給每個詞一個固定座標,但語言不是這樣運作的。bank 在 riverbank 與 bank account 中不是同一個意思;蘋果在發表會與削皮的語境也不同。
ELMo 與 BERT 的轉折,是不再查固定表,而是把整句話丟進模型,從上下文現場算出該詞這一次的座標。這讓 embedding 從靜態詞表走向上下文語意。
ELMo / BERTSentence-BERT:把慢速比對改成先做摘要卡片
12:46BERT 要比較兩句話時,需要把兩句一起讀完再打分數;若 1 萬句兩兩比較,影片引用的估算約要 65 小時。
Sentence-BERT 改成先讓每句話各自產生一個座標,之後只要算座標距離。同樣規模的任務可降到約 5 秒,讓 embedding 從詞的技術變成整段文字的技術。
句向量圖片、文字與文件都能住進同一張地圖
13:45CLIP 同時訓練讀圖片與讀文字的網路,讓成對的圖片與說明文字在地圖上靠近,不成對的被推開。影片指出,這讓以文找圖、以圖找文、相簿搜尋都變成『算距離』。
後面談到 RAG:文件先切成 chunk,每段轉成 embedding 存進向量資料庫;使用者問題也用同一模型轉成座標,再找最近的段落,最後用 rerank 做精排。
CLIP / multimodal今天的爆發:便宜、可搜尋、但換模型要重畫地圖
16:37影片指出,Spotify 早在 2013 年就用 Annoy 做大規模最近鄰搜尋,把歌曲與使用者都放進向量地圖中,推薦清單背後就是找最近的點。
近年 embedding 全面爆發,一部分是因為價格變得非常低,企業可以把多年文件、郵件、會議記錄都轉成座標。代價是:換一代 embedding 模型,舊座標就全部作廢,因為新舊地圖的座標系不相通。
RAG / Vector DBMatryoshka embedding:不是越大越好,而是可伸縮才好
18:22影片最後提到維度數的趨勢:從 LSA 約 100 維、word2vec 300 維,到現代商用模型動輒 3000 多維,看似一路變大。
但 Matryoshka embedding 的想法是訓練時讓重要資訊集中在前幾個維度,需要省成本時可以直接截掉後面維度。影片給出的結論是:這個領域最後學到的不是越大越好,而是可以依成本與效果伸縮才好。
Matryoshka六十幾年來,人類其實只做了一件事:把意思這個看不見的東西,一點一點搬到一張可以計算的地圖上。
重點時間戳索引
- 00:00從手機相簿能找出未標籤的「海邊日落」切入:embedding 的核心是把意思變成數字座標。
- 01:14embedding 把文字變成向量;意思接近的詞或句子,在同一張高維地圖上的位置也會接近。
- 02:56one-hot 編碼讓每個詞都只佔一格,無法表達貓與狗比貓與星期三更接近。
- 03:41bag of words 與 TF-IDF 能用在垃圾郵件、搜尋等任務,但本質上仍是在數詞頻,而不是理解詞義。
- 04:29Firth / Harris 的分布假說指出,認識一個詞要看它與哪些詞一起出現,後來成為 embedding 的語言學基礎。
- 05:14LSA 透過壓縮詞—文件矩陣,第一次讓 car 與 automobile 這類語意相近但字面不同的詞在數學上靠近。
- 06:04Bengio 2003 的神經語言模型透過預測下一個詞,在模型內部長出詞的座標,但當時算力不足。
- 06:48Mikolov 在 Google 將 word2vec 做到又快又好,用桌機在不到一天內從 16 億詞語料學出高品質詞向量。
- 08:36word2vec 早期論文曾被 ICLR 拒絕,之後開源快速擴散,續作十年後獲 NeurIPS Test of Time Award。
- 09:31詞向量的減法展示讓語意關係變成幾何方向,但 2020 年研究指出經典 King-Man+Woman→Queen 示範其實排除了輸入詞。
- 11:17固定詞向量無法處理 bank、蘋果這類一詞多義,因為一個詞在不同句子中應該有不同座標。
- 11:55ELMo 與 BERT 改成依整句上下文現場計算座標,讓同一個詞在不同語境中得到不同向量。
- 12:46BERT 類模型精準但慢;Sentence-BERT 先為每句話產生座標,使 1 萬句相似度比較從約 65 小時降到約 5 秒。
- 13:45CLIP 把圖片與文字放進同一張地圖,讓以文找圖、以圖找文、手機相簿搜尋都變成算距離。
- 14:45RAG 的流程是切 chunk、產生 embedding、存入向量資料庫、用同模型嵌入問題、做 ANN 搜尋,再用 rerank 精排。
- 16:37Spotify 早在 word2vec 同年就用 Annoy 做大規模最近鄰搜尋,推薦系統背後也是把歌曲與使用者放到向量地圖。
- 17:28近年爆發的一個原因是 embedding 價格極低,企業能把多年文件轉成座標;但換模型就要重建整張地圖。
- 18:22Matryoshka embedding 讓重要資訊集中在前幾個維度,可把向量截短以降低儲存成本,同時維持效果。
⚠️ 未確認 / 無法核對項目
- YouTube transcript API 回傳 transcripts disabled;主內容改用 Whisper STT,並以影片描述的參考資料清單輔助專有名詞校正。
- 片尾 20:03 之後 Whisper 出現疑似其他頻道樣板句(明鏡與點點欄目),未納入主文重點。
🎙️ ASR 漂字對照表
| Jam | → | Jim |
| 懂意識 | → | 懂意思 |
| John Lupert First / Faird | → | John Rupert Firth |
| Zellick Harris | → | Zellig Harris |
| Yoshi Benjo | → | Yoshua Bengio |
| Word to Vector / Word2vector / World2Factor | → | word2vec |
| Mikodov | → | Mikolov |
| Near IPS | → | NeurIPS |
| Bird | → | BERT |
| Sentence Bird | → | Sentence-BERT |
| Ilya Saskivar | → | Ilya Sutskever |
| vojager | → | Voyager |
| Metrochka | → | Matryoshka |
| Icon | → | Pinecone(依向量資料庫獨角獸語境判讀) |
📎 原始內容(查證 / AI 追查用,非閱讀主文,點擊展開)
1 00:00:00,000 --> 00:00:06,000 大家好我是Jam 2 00:00:06,000 --> 00:00:07,000 这里是AI Notebook 3 00:00:07,000 --> 00:00:09,000 你拿起手机打开相簿 4 00:00:09,000 --> 00:00:11,000 在搜寻框里打海边的日落 5 00:00:11,000 --> 00:00:12,000 几张照片就跳了出来 6 00:00:12,000 --> 00:00:15,000 可是你从来没有帮这些照片打过任何标签 7 00:00:15,000 --> 00:00:16,000 也没有写过一个字 8 00:00:16,000 --> 00:00:18,000 手机凭什么知道 9 00:00:18,000 --> 00:00:20,000 那几张就是海边的日落 10 00:00:20,000 --> 00:00:23,000 今天我要带你看懂背后那个负责懂意识的零件 11 00:00:23,000 --> 00:00:24,000 它叫embedding 12 00:00:24,000 --> 00:00:25,000 你每一次搜寻 13 00:00:25,000 --> 00:00:26,000 每一次收到推荐 14 00:00:26,000 --> 00:00:28,000 每一次AI帮你查资料 15 00:00:28,000 --> 00:00:29,000 它都在里面 16 00:00:29,000 --> 00:00:31,000 而这整件事的起点 17 00:00:31,000 --> 00:00:34,000 是一位语言学家在1957年写下的一句话 18 00:00:34,000 --> 00:00:36,000 我们先把这件事讲清楚 19 00:00:36,000 --> 00:00:38,000 你的相簿里可能有2万张照片 20 00:00:38,000 --> 00:00:40,000 你没有帮任何一张写过说明 21 00:00:40,000 --> 00:00:41,000 没有分过类 22 00:00:41,000 --> 00:00:43,000 甚至有一半你早就忘记自己拍过 23 00:00:43,000 --> 00:00:45,000 可是你在搜寻框打几个字 24 00:00:45,000 --> 00:00:47,000 机器就能撈出对的那几张 25 00:00:47,000 --> 00:00:49,000 这件事在十几年前是做不到的 26 00:00:49,000 --> 00:00:51,000 那时候的搜寻靠的是比对字面 27 00:00:51,000 --> 00:00:53,000 你的档案名称里有没有这几个字 28 00:00:53,000 --> 00:00:55,000 有就找得到没有就找不到 29 00:00:55,000 --> 00:00:58,000 而你那张照片的档名叫IMG4527 30 00:00:58,000 --> 00:01:00,000 所以它跟海边的日落一个字都没有重叠 31 00:01:00,000 --> 00:01:03,000 所以真正奇怪的地方不是搜寻变快了 32 00:01:03,000 --> 00:01:05,000 而是机器不知道从哪一天开始 33 00:01:05,000 --> 00:01:07,000 好像真的知道海边的日落是什么意思了 34 00:01:07,000 --> 00:01:08,000 它到底怎么知道的 35 00:01:08,000 --> 00:01:10,000 答案不是它读懂的中文 36 00:01:10,000 --> 00:01:12,000 而是有人想到一个很怪的办法 37 00:01:12,000 --> 00:01:14,000 把意思这件事变成了数字 38 00:01:14,000 --> 00:01:16,000 这个办法叫Embedding 39 00:01:16,000 --> 00:01:18,000 中文常常翻成嵌入 40 00:01:18,000 --> 00:01:19,000 不过你先不用管这个名字 41 00:01:19,000 --> 00:01:20,000 你只要记住它做的事情 42 00:01:20,000 --> 00:01:22,000 就是把一段文字变成一串数字 43 00:01:22,000 --> 00:01:23,000 举个例子 44 00:01:23,000 --> 00:01:24,000 你给它猫这个字 45 00:01:24,000 --> 00:01:25,000 它吐回来的是一排小数 46 00:01:25,000 --> 00:01:27,000 可能是300个数字排成一列 47 00:01:27,000 --> 00:01:29,000 这排数字有一个更好懂的讲法 48 00:01:29,000 --> 00:01:31,000 它就是这个词在一张地图上的坐标 49 00:01:31,000 --> 00:01:33,000 你想想我们平常怎么描述一个地点 50 00:01:33,000 --> 00:01:35,000 精度多少维度多少 51 00:01:35,000 --> 00:01:38,000 两个数字就把一座城市盯在地图上了 52 00:01:38,000 --> 00:01:40,000 Embedding做的是同一件事 53 00:01:40,000 --> 00:01:42,000 只是它的地图不是两个方向 54 00:01:42,000 --> 00:01:43,000 而是300个方向 55 00:01:43,000 --> 00:01:45,000 我们把这些方向叫做维度 56 00:01:45,000 --> 00:01:47,000 维度你想成地图上的坐标轴 57 00:01:47,000 --> 00:01:48,000 两个轴画出平面地图 58 00:01:48,000 --> 00:01:50,000 300个轴画出来的 59 00:01:50,000 --> 00:01:51,000 是一张我们看不到 60 00:01:51,000 --> 00:01:52,000 但电脑算得动的地图 61 00:01:52,000 --> 00:01:54,000 这张地图只有一条规矩 62 00:01:54,000 --> 00:01:55,000 意思越接近的东西 63 00:01:55,000 --> 00:01:56,000 位置就排得越近 64 00:01:56,000 --> 00:01:58,000 猫跟狗会住在隔壁 65 00:01:58,000 --> 00:02:01,000 猫跟没积分会住在地图的两端 66 00:02:01,000 --> 00:02:03,000 这排数字在工程上的名字叫向量 67 00:02:03,000 --> 00:02:05,000 你把它当成一个坐标就好 68 00:02:05,000 --> 00:02:08,000 你可能会想把字变成数字有什么了不起 69 00:02:08,000 --> 00:02:10,000 了不起的地方在于 70 00:02:10,000 --> 00:02:12,000 电脑本来就只会算数 71 00:02:12,000 --> 00:02:13,000 他不会读书 72 00:02:13,000 --> 00:02:15,000 你只要判断怎么退货跟翻评流程 73 00:02:15,000 --> 00:02:16,000 是不是同一件事 74 00:02:16,000 --> 00:02:17,000 他做不到 75 00:02:17,000 --> 00:02:19,000 因为这两句话一个字都对不上 76 00:02:19,000 --> 00:02:20,000 可是如果这两句话都变成了坐标 77 00:02:20,000 --> 00:02:21,000 问题就换了一个样子 78 00:02:21,000 --> 00:02:23,000 要问的是这两句话意思一样吗 79 00:02:23,000 --> 00:02:24,000 现在只要问这两个点 80 00:02:24,000 --> 00:02:25,000 离得近不近 81 00:02:25,000 --> 00:02:27,000 前面那个问题需要理解力 82 00:02:27,000 --> 00:02:28,000 后面那个问题只需要减法 83 00:02:28,000 --> 00:02:30,000 这就是embedding真正解决的事情 84 00:02:30,000 --> 00:02:32,000 他把一个机器做不到的问题 85 00:02:32,000 --> 00:02:34,000 换成一个机器做得飞快的问题 86 00:02:34,000 --> 00:02:36,000 从此以后搜寻不再是找字 87 00:02:36,000 --> 00:02:37,000 是找最近的邻居 88 00:02:37,000 --> 00:02:39,000 推荐也不再是猜你喜欢什么 89 00:02:39,000 --> 00:02:42,000 是找出跟你位置最近的那些人在听什么格 90 00:02:42,000 --> 00:02:43,000 你手机相簿那次搜寻 91 00:02:43,000 --> 00:02:44,000 答案也在这里 92 00:02:44,000 --> 00:02:45,000 照片跟你打的那几个字 93 00:02:45,000 --> 00:02:47,000 被放进了同一张地图 94 00:02:47,000 --> 00:02:49,000 机器只是算了一下谁离谁最近 95 00:02:49,000 --> 00:02:50,000 这张地图 96 00:02:50,000 --> 00:02:52,000 就是这支影片接下来要讲的全部 97 00:02:52,000 --> 00:02:54,000 我们要理解这张地图有多不容易 98 00:02:54,000 --> 00:02:56,000 就得先回到还没有地图的年代 99 00:02:56,000 --> 00:02:58,000 最早的做法简单到有点好笑 100 00:02:58,000 --> 00:02:59,000 工程师先做一本字典 101 00:02:59,000 --> 00:03:00,000 把出现过的词全部编号 102 00:03:00,000 --> 00:03:02,000 第一个词编1号 103 00:03:02,000 --> 00:03:03,000 第二个词编2号 104 00:03:03,000 --> 00:03:04,000 一路编到5万 105 00:03:04,000 --> 00:03:06,000 然后每个词用一根很长的柱子表示 106 00:03:06,000 --> 00:03:09,000 柱子上有5万格只有属于自己的那一格 107 00:03:09,000 --> 00:03:10,000 填上1 108 00:03:10,000 --> 00:03:13,000 其他49999格全部是0 109 00:03:13,000 --> 00:03:14,000 这个做法有个名字叫one hot 110 00:03:14,000 --> 00:03:16,000 意思是只有一格是热的 111 00:03:16,000 --> 00:03:17,000 它有一个致命的问题 112 00:03:17,000 --> 00:03:20,000 你去量任何两个词之间的距离 113 00:03:20,000 --> 00:03:21,000 答案永远一样 114 00:03:21,000 --> 00:03:22,000 猫跟狗的距离 115 00:03:22,000 --> 00:03:24,000 等于猫跟没积分的距离 116 00:03:24,000 --> 00:03:26,000 也等于猫跟星期三的距离 117 00:03:26,000 --> 00:03:27,000 在这个世界里 118 00:03:27,000 --> 00:03:30,000 每一个词都孤零零站在自己那一格上 119 00:03:30,000 --> 00:03:32,000 跟其他所有词的远近完全相同 120 00:03:32,000 --> 00:03:33,000 这不是一张地图 121 00:03:33,000 --> 00:03:34,000 这是一片沙漠 122 00:03:34,000 --> 00:03:36,000 每一个点跟每个点都等句 123 00:03:36,000 --> 00:03:38,000 你走到哪里都没有方向感 124 00:03:38,000 --> 00:03:39,000 在这片沙漠里 125 00:03:39,000 --> 00:03:41,000 人们还是做出了能用的东西 126 00:03:41,000 --> 00:03:43,000 最有名的一招叫磁带 127 00:03:43,000 --> 00:03:44,000 英文是bag of words 128 00:03:44,000 --> 00:03:45,000 做法就像把一整篇文章 129 00:03:45,000 --> 00:03:46,000 倒进一个袋子摇一摇 130 00:03:46,000 --> 00:03:47,000 不管顺序 131 00:03:47,000 --> 00:03:49,000 只数每个词出现几次 132 00:03:49,000 --> 00:03:50,000 拿着邮件过滤 133 00:03:50,000 --> 00:03:51,000 就靠这招活了很多年 134 00:03:51,000 --> 00:03:54,000 一封信里中奖跟汇款出现太多词 135 00:03:54,000 --> 00:03:56,000 集齐根本不用懂意思 136 00:03:56,000 --> 00:03:57,000 数数字就能染下来 137 00:03:57,000 --> 00:03:59,000 后来有人再加一层聪明 138 00:03:59,000 --> 00:04:01,000 1972年 139 00:04:01,000 --> 00:04:02,000 剑桥大学一位叫 140 00:04:02,000 --> 00:04:05,000 Karen Spock Jones 的研究者提出一个想法 141 00:04:05,000 --> 00:04:06,000 一个词越少见 142 00:04:06,000 --> 00:04:08,000 他越能代表这篇文章在讲什么 143 00:04:08,000 --> 00:04:09,000 这个字到处都有 144 00:04:09,000 --> 00:04:10,000 所以他什么都没说 145 00:04:10,000 --> 00:04:11,000 那现在也很少出现 146 00:04:11,000 --> 00:04:13,000 一出现就几乎决定的主题 147 00:04:13,000 --> 00:04:15,000 这一招叫TF-IDF 148 00:04:15,000 --> 00:04:16,000 到今天的搜寻引擎 149 00:04:16,000 --> 00:04:17,000 你都还在用 150 00:04:17,000 --> 00:04:18,000 但你有沒有发现 151 00:04:18,000 --> 00:04:20,000 这些方法从头到尾都在做同一件事 152 00:04:20,000 --> 00:04:21,000 他们在数字 153 00:04:21,000 --> 00:04:22,000 不是在懂词 154 00:04:22,000 --> 00:04:24,000 沙漠里的小聪明再多 155 00:04:24,000 --> 00:04:25,000 沙漠还是沙漠 156 00:04:25,000 --> 00:04:27,000 转机不是来自工程师 157 00:04:27,000 --> 00:04:29,000 而是来自一位从来没碰过电脑的语言学家 158 00:04:29,000 --> 00:04:31,000 1957年 159 00:04:31,000 --> 00:04:32,000 英国人John Lupert First 160 00:04:32,000 --> 00:04:34,000 在一篇论文里写下一句话 161 00:04:34,000 --> 00:04:36,000 后来被引用了无数次 162 00:04:36,000 --> 00:04:37,000 他说你要认识一个词 163 00:04:37,000 --> 00:04:39,000 就看他都跟哪些词待在一起 164 00:04:39,000 --> 00:04:41,000 这句话白话一点讲就是 165 00:04:41,000 --> 00:04:44,000 你不用查字典也能猜出一个生字的意思 166 00:04:44,000 --> 00:04:46,000 只要看他前后都跟谁出现 167 00:04:46,000 --> 00:04:49,000 有人跟你说他昨天喝了一整杯马带茶 168 00:04:49,000 --> 00:04:50,000 你就算没听过这个东西 169 00:04:50,000 --> 00:04:52,000 也知道他大概是一种饮料 170 00:04:52,000 --> 00:04:54,000 因为喝跟一整杯这两个邻居 171 00:04:54,000 --> 00:04:55,000 已经把答案写出来了 172 00:04:55,000 --> 00:04:57,000 这个想法在语言学里叫做分布假说 173 00:04:57,000 --> 00:04:59,000 1954年的Zellick Harris 174 00:04:59,000 --> 00:05:01,000 也写过更正式的版本 175 00:05:01,000 --> 00:05:03,000 你注意一下时间 176 00:05:03,000 --> 00:05:04,000 这句话比第一台 177 00:05:04,000 --> 00:05:06,000 跑得动神经网路的电脑还要老 178 00:05:06,000 --> 00:05:08,000 而接下来六十几年 179 00:05:08,000 --> 00:05:09,000 整个AI领域做的事情 180 00:05:09,000 --> 00:05:10,000 某种程度上就是 181 00:05:10,000 --> 00:05:11,000 把这句话翻译成数学 182 00:05:11,000 --> 00:05:14,000 把那句话变成数学的第一次认真尝试 183 00:05:14,000 --> 00:05:16,000 发生在1990年 184 00:05:16,000 --> 00:05:18,000 一群研究者做了一张巨大的表格 185 00:05:18,000 --> 00:05:19,000 买的是每一个词 186 00:05:19,000 --> 00:05:20,000 指的是每一份文件 187 00:05:20,000 --> 00:05:22,000 格子里填的是这个词 188 00:05:22,000 --> 00:05:23,000 在这份文件出现几次 189 00:05:23,000 --> 00:05:25,000 这张表格大得离谱 190 00:05:25,000 --> 00:05:26,000 而且几乎全是空的 191 00:05:26,000 --> 00:05:28,000 他们用一套线性怠数的手法 192 00:05:28,000 --> 00:05:30,000 把这张几万蓝的表格 193 00:05:30,000 --> 00:05:31,000 硬压成100蓝左右 194 00:05:31,000 --> 00:05:34,000 你可以想成把一间堆满杂物的仓库 195 00:05:34,000 --> 00:05:35,000 重新整理 196 00:05:35,000 --> 00:05:36,000 只留下100个抽屉 197 00:05:36,000 --> 00:05:38,000 每个抽屉代表一个大主题 198 00:05:38,000 --> 00:05:40,000 然后把每个词丢进最像他的那几个抽屉里 199 00:05:40,000 --> 00:05:42,000 这个方法叫做潜在语意分析 200 00:05:42,000 --> 00:05:44,000 英文简称LSA 201 00:05:44,000 --> 00:05:46,000 压完之后发生了一件事 202 00:05:46,000 --> 00:05:47,000 Car跟Automobile 203 00:05:47,000 --> 00:05:50,000 这两个几乎不会同时出现在一句话里的词 204 00:05:50,000 --> 00:05:52,000 第一次在数学上靠在一起了 205 00:05:52,000 --> 00:05:54,000 这是人类第一次真的画出语意的坐标 206 00:05:54,000 --> 00:05:58,000 比后面引爆全世界的方法还少了23年 207 00:05:58,000 --> 00:06:00,000 1990年那张表格有个先天的毛病 208 00:06:00,000 --> 00:06:01,000 他是静态的 209 00:06:01,000 --> 00:06:03,000 语料一变就得整个重算 210 00:06:03,000 --> 00:06:04,000 也学不会新的词 211 00:06:04,000 --> 00:06:06,000 真正指出他爱条路的人 212 00:06:06,000 --> 00:06:08,000 是Yoshi Benjo 213 00:06:08,000 --> 00:06:10,000 2003年他跟同事发表了一篇论文 214 00:06:10,000 --> 00:06:12,000 做法完全不一样 215 00:06:12,000 --> 00:06:14,000 他们让一个神经网路去做一件很无聊的事 216 00:06:14,000 --> 00:06:16,000 看前面几个词 217 00:06:16,000 --> 00:06:17,000 猜下一个词是什么 218 00:06:17,000 --> 00:06:18,000 重点在于 219 00:06:18,000 --> 00:06:20,000 这个网路为了猜得准 220 00:06:20,000 --> 00:06:22,000 必须自己在内部长出一套 221 00:06:22,000 --> 00:06:23,000 对每个词的理解 222 00:06:23,000 --> 00:06:25,000 那套理解就是一组坐标 223 00:06:25,000 --> 00:06:27,000 词的坐标不是他们本来要的东西 224 00:06:27,000 --> 00:06:30,000 是这个训练过程顺手长出来的副产品 225 00:06:30,000 --> 00:06:32,000 这就像一个学生为了应付考试拼命读书 226 00:06:32,000 --> 00:06:34,000 考完之后你会发现 227 00:06:34,000 --> 00:06:36,000 他脑子里多出来的不是那几道题目的答案 228 00:06:36,000 --> 00:06:38,000 是一整张学科的地图 229 00:06:38,000 --> 00:06:39,000 这个想法完全正确 230 00:06:39,000 --> 00:06:41,000 问题出在2003年 231 00:06:41,000 --> 00:06:43,000 那时候的电脑跑纵模型慢得让人绝望 232 00:06:43,000 --> 00:06:45,000 词汇表只能开几万个 233 00:06:45,000 --> 00:06:46,000 语料只能用一小块 234 00:06:46,000 --> 00:06:47,000 正确的想法有了 235 00:06:47,000 --> 00:06:48,000 算力还没到 236 00:06:48,000 --> 00:06:50,000 十年之后 237 00:06:50,000 --> 00:06:51,000 补上那块算力的人 238 00:06:51,000 --> 00:06:54,000 是一个没什么人听他说话的年轻研究员 239 00:06:54,000 --> 00:06:55,000 Thomas Mikolov 240 00:06:55,000 --> 00:06:56,000 捷克人 241 00:06:56,000 --> 00:06:58,000 2012年在布伦诺拿到博士 242 00:06:58,000 --> 00:07:01,000 论文题目就是用神经网路做语言模型 243 00:07:01,000 --> 00:07:03,000 他进了Google之后跟同事说 244 00:07:03,000 --> 00:07:05,000 池向量这件事可以做得又快又好 245 00:07:05,000 --> 00:07:06,000 根据他自己后来的回忆 246 00:07:06,000 --> 00:07:07,000 当时没有人认真听 247 00:07:07,000 --> 00:07:09,000 实验室的注意力全都在另一篇 248 00:07:09,000 --> 00:07:11,000 他觉得又复杂又多余的论文上 249 00:07:11,000 --> 00:07:13,000 他决定不再说服任何人 250 00:07:13,000 --> 00:07:14,000 自己动手写 251 00:07:14,000 --> 00:07:15,000 他没有申请重集 252 00:07:15,000 --> 00:07:16,000 也没有排队等机器 253 00:07:16,000 --> 00:07:18,000 就用一台普通的桌上型电脑 254 00:07:18,000 --> 00:07:20,000 几个星期之后结果出来了 255 00:07:20,000 --> 00:07:21,000 他写的那套程式 256 00:07:21,000 --> 00:07:23,000 从16亿个词的语料里 257 00:07:23,000 --> 00:07:25,000 学出高品质的词向量 258 00:07:25,000 --> 00:07:27,000 花了时间不到一天 259 00:07:27,000 --> 00:07:28,000 而Google 260 00:07:28,000 --> 00:07:29,000 内部用好几台机器 261 00:07:29,000 --> 00:07:31,000 训练好几个星期的模型 262 00:07:31,000 --> 00:07:32,000 被他一台桌机的 263 00:07:32,000 --> 00:07:34,000 结果拉开了一整截 264 00:07:34,000 --> 00:07:36,000 这件事的重点不是他多聪明 265 00:07:36,000 --> 00:07:37,000 他证明的是 266 00:07:37,000 --> 00:07:38,000 这条路之所以走不通 267 00:07:38,000 --> 00:07:39,000 不是想法错了 268 00:07:39,000 --> 00:07:41,000 是大家一直把它做得太复杂 269 00:07:41,000 --> 00:07:43,000 他把那套程式命名为 270 00:07:43,000 --> 00:07:44,000 Word to Vector 271 00:07:44,000 --> 00:07:46,000 字面意思就是把词变成向量 272 00:07:46,000 --> 00:07:47,000 他到底怎么学的 273 00:07:47,000 --> 00:07:49,000 做法简单到你会怀疑它为什么有效 274 00:07:49,000 --> 00:07:51,000 你拿一句话出来 275 00:07:51,000 --> 00:07:53,000 今天早上我喝了一杯热咖啡 276 00:07:53,000 --> 00:07:54,000 他把中间那个词遮起来 277 00:07:54,000 --> 00:07:55,000 问模型 278 00:07:55,000 --> 00:07:56,000 前后这几个字 279 00:07:56,000 --> 00:07:58,000 围着的空格应该填什么 280 00:07:58,000 --> 00:07:59,000 或者反过来 281 00:07:59,000 --> 00:08:00,000 给模型一个咖啡 282 00:08:00,000 --> 00:08:01,000 要他猜咖啡旁边 283 00:08:01,000 --> 00:08:03,000 通常会出现哪些词 284 00:08:03,000 --> 00:08:05,000 整份语料就这样一句一句滑过去 285 00:08:05,000 --> 00:08:07,000 猜错了就每条一只坐标 286 00:08:07,000 --> 00:08:08,000 猜对就把坐标留着 287 00:08:08,000 --> 00:08:10,000 滑过几十一个词之后 288 00:08:10,000 --> 00:08:13,000 那些常常被同样的邻居围着的词 289 00:08:13,000 --> 00:08:15,000 位置自然就被拉到一起了 290 00:08:15,000 --> 00:08:16,000 你发现了吗 291 00:08:16,000 --> 00:08:18,000 正是FIRST那句话的机器版本 292 00:08:18,000 --> 00:08:20,000 看一个词跟谁带在一起 293 00:08:20,000 --> 00:08:21,000 就知道它是什么意思 294 00:08:21,000 --> 00:08:22,000 FIRST用嘴巴讲的 295 00:08:22,000 --> 00:08:24,000 Word2vector是用几十亿次猜测 296 00:08:24,000 --> 00:08:26,000 把同一件事做成的坐标 297 00:08:26,000 --> 00:08:28,000 Mikodov真正的功劳 298 00:08:28,000 --> 00:08:30,000 是这个猜测的计算量压到几滴 299 00:08:30,000 --> 00:08:33,000 低到一台桌机一天就能跑完 300 00:08:33,000 --> 00:08:34,000 结果这么好 301 00:08:34,000 --> 00:08:35,000 论文应该一路顺风吧 302 00:08:35,000 --> 00:08:36,000 并没有 303 00:08:36,000 --> 00:08:38,000 2013年1月 304 00:08:38,000 --> 00:08:40,000 他把第一篇Word2vector论文 305 00:08:40,000 --> 00:08:42,000 投到一个叫ICLR的机器学习会议 306 00:08:42,000 --> 00:08:43,000 被拒绝了 307 00:08:43,000 --> 00:08:45,000 这件事最尴尬的地方在于 308 00:08:45,000 --> 00:08:49,000 那一年会议的接收率大约是七成 309 00:08:49,000 --> 00:08:51,000 也就是说十篇里面收七篇 310 00:08:51,000 --> 00:08:53,000 而后来改变整个领域的那一篇 311 00:08:53,000 --> 00:08:56,000 刚好落在被退回来的那三篇里 312 00:08:56,000 --> 00:09:00,000 Mikodov自己在2023年公开讲过这一段 313 00:09:00,000 --> 00:09:01,000 他也提到 314 00:09:01,000 --> 00:09:03,000 Google大约在那年八月批准 315 00:09:03,000 --> 00:09:05,000 把程式码开放出来等审批的那段时间 316 00:09:05,000 --> 00:09:08,000 他还顺手把程式改得更短更快 317 00:09:08,000 --> 00:09:09,000 程式一放出来 318 00:09:09,000 --> 00:09:11,000 事情就不受任何人控制了 319 00:09:11,000 --> 00:09:13,000 全世界的工程师下载训练 320 00:09:13,000 --> 00:09:14,000 接近自己的系统 321 00:09:14,000 --> 00:09:15,000 持像量在两三年之内 322 00:09:15,000 --> 00:09:17,000 变成了自然语言处理的标准配备 323 00:09:17,000 --> 00:09:19,000 至于那篇被拒绝的研究 324 00:09:19,000 --> 00:09:22,000 他的续作在十年后拿下了Near IPS 325 00:09:22,000 --> 00:09:24,000 2023年的时间考验奖 326 00:09:24,000 --> 00:09:27,000 这个奖专门颁给当年没被看懂 327 00:09:27,000 --> 00:09:29,000 但是经得起时间检验的论文 328 00:09:29,000 --> 00:09:31,000 真正让所有人坐直起来的是另外一件事 329 00:09:31,000 --> 00:09:33,000 既然每个词都变成了坐标 330 00:09:33,000 --> 00:09:35,000 那坐标之间的减法 331 00:09:35,000 --> 00:09:36,000 又代表什么 332 00:09:36,000 --> 00:09:37,000 研究团队做的一个实验 333 00:09:37,000 --> 00:09:40,000 他们拿King这个词的坐标 334 00:09:40,000 --> 00:09:41,000 剪掉Man的坐标 335 00:09:41,000 --> 00:09:43,000 再加上Woman的坐标 336 00:09:43,000 --> 00:09:44,000 然后去看落点附近站着谁 337 00:09:44,000 --> 00:09:46,000 K and that's Queen 338 00:09:46,000 --> 00:09:48,000 你把这件事想清楚会有点发毛 339 00:09:48,000 --> 00:09:50,000 没有人教过这个模型什么叫性别 340 00:09:50,000 --> 00:09:52,000 他从头到尾只是在拆下一个词而已 341 00:09:52,000 --> 00:09:54,000 可是意思一旦变成坐标 342 00:09:54,000 --> 00:09:56,000 意识之间的关系就变成了方向 343 00:09:56,000 --> 00:09:58,000 从Man走到Woman的那个方向 344 00:09:58,000 --> 00:10:00,000 跟从King走到Queen的方向 345 00:10:00,000 --> 00:10:02,000 几乎是同一个 346 00:10:02,000 --> 00:10:03,000 同样的道理 347 00:10:03,000 --> 00:10:04,000 巴黎剪掉法国 348 00:10:04,000 --> 00:10:05,000 再加上意大利 349 00:10:05,000 --> 00:10:06,000 落点是罗马 350 00:10:06,000 --> 00:10:08,000 首都这个关系 351 00:10:08,000 --> 00:10:09,000 在地图上也是一个方向 352 00:10:09,000 --> 00:10:10,000 这一刻 353 00:10:10,000 --> 00:10:12,000 语意不再只是谁跟谁比较近 354 00:10:12,000 --> 00:10:13,000 他有了几何 355 00:10:13,000 --> 00:10:15,000 这也是整段历史里最漂亮的画面 356 00:10:15,000 --> 00:10:17,000 一个从来没有人名说过的规则 357 00:10:17,000 --> 00:10:19,000 自己从资料里长得出来 358 00:10:19,000 --> 00:10:21,000 我必须跟你讲一件很少被提起的事 359 00:10:21,000 --> 00:10:23,000 因为它才是这个故事诚实的部分 360 00:10:23,000 --> 00:10:27,000 2020年一组研究者在计算语言学期刊上 361 00:10:27,000 --> 00:10:29,000 发表了一篇论文 362 00:10:29,000 --> 00:10:30,000 标题直接写着 363 00:10:30,000 --> 00:10:31,000 公平比聪动更好 364 00:10:31,000 --> 00:10:33,000 他们回头去验那个著名的等式 365 00:10:33,000 --> 00:10:35,000 发现了一个细节 366 00:10:35,000 --> 00:10:37,000 King Jamman加woman说 367 00:10:37,000 --> 00:10:39,000 离落点最近的那个坐标 368 00:10:39,000 --> 00:10:40,000 其实是King自己 369 00:10:40,000 --> 00:10:41,000 Queen只是第二名 370 00:10:41,000 --> 00:10:43,000 而所有教科书上会给你Queen 371 00:10:43,000 --> 00:10:45,000 是因为标准的工具程式 372 00:10:45,000 --> 00:10:47,000 包含word factor自己附的那一支 373 00:10:47,000 --> 00:10:50,000 预设就会把输入用过的那几个词 374 00:10:50,000 --> 00:10:51,000 从答案里排除掉 375 00:10:51,000 --> 00:10:53,000 你可以说这是合理的工程处理 376 00:10:53,000 --> 00:10:55,000 因为问题本来就不是要他回答King 377 00:10:55,000 --> 00:10:56,000 但你也必须承认 378 00:10:56,000 --> 00:10:58,000 那个让全世界惊呼的示范 379 00:10:58,000 --> 00:10:59,000 是修过图的 380 00:10:59,000 --> 00:11:01,000 方向确实存在 381 00:11:01,000 --> 00:11:02,000 关系确实被学到了 382 00:11:02,000 --> 00:11:03,000 这些都是真的 383 00:11:03,000 --> 00:11:04,000 可是展示出来的那个干净结果 384 00:11:04,000 --> 00:11:05,000 中间隔着一行 385 00:11:05,000 --> 00:11:06,000 没有人提起的程式吗 386 00:11:06,000 --> 00:11:08,000 科学传播最难的地方就在这里 387 00:11:08,000 --> 00:11:10,000 连自己这边的神话 388 00:11:10,000 --> 00:11:11,000 也得拿去查证 389 00:11:11,000 --> 00:11:12,000 魔法之外 390 00:11:12,000 --> 00:11:14,000 word to vector 还有一个更根本的限制 391 00:11:14,000 --> 00:11:15,000 而这个限制 392 00:11:15,000 --> 00:11:17,000 后来把整个领域推向下一个阶段 393 00:11:17,000 --> 00:11:19,000 他给每一个词一个固定的坐标 394 00:11:19,000 --> 00:11:20,000 一辈子就那一个 395 00:11:20,000 --> 00:11:22,000 可是语言不是这样运作的 396 00:11:22,000 --> 00:11:23,000 英文的bank 397 00:11:23,000 --> 00:11:24,000 在riverbank也是河岸 398 00:11:24,000 --> 00:11:26,000 bank account也是银行 399 00:11:26,000 --> 00:11:27,000 中文更明显 400 00:11:27,000 --> 00:11:28,000 苹果发表会的苹果 401 00:11:28,000 --> 00:11:30,000 跟苹果削皮的苹果 402 00:11:30,000 --> 00:11:31,000 是两件完全不同的东西 403 00:11:31,000 --> 00:11:33,000 一个固定坐标要同时代表这两个意思 404 00:11:33,000 --> 00:11:35,000 结果就是他哪一个都不像 405 00:11:35,000 --> 00:11:38,000 只能卡在中间某个很尴尬的位置 406 00:11:38,000 --> 00:11:41,000 就像你在地图上只能给一家连锁店标一个点 407 00:11:41,000 --> 00:11:44,000 可是他在城市的东边跟西边各有一间分店 408 00:11:44,000 --> 00:11:45,000 你标在中间 409 00:11:45,000 --> 00:11:46,000 两边的人都找不到 410 00:11:46,000 --> 00:11:48,000 问题到这里已经很清楚了 411 00:11:48,000 --> 00:11:50,000 一个词的意思不是他自己决定的 412 00:11:50,000 --> 00:11:53,000 是他这一次出现在哪一句话里决定的 413 00:11:53,000 --> 00:11:55,000 查表这个做法走到头了 414 00:11:55,000 --> 00:11:57,000 假法在2018年出现 415 00:11:57,000 --> 00:12:01,000 一群来自艾伦人工智慧研究院跟华盛顿大学的研究者 416 00:12:01,000 --> 00:12:03,000 做了一个模型 417 00:12:03,000 --> 00:12:05,000 名字取字芝麻街的角色 418 00:12:05,000 --> 00:12:06,000 他的想法很干脆 419 00:12:06,000 --> 00:12:07,000 不要再查表了 420 00:12:07,000 --> 00:12:09,000 你要一个词的坐标 421 00:12:09,000 --> 00:12:10,000 就把整句话丢进模型 422 00:12:10,000 --> 00:12:12,000 那模型从头到尾读一遍 423 00:12:12,000 --> 00:12:13,000 再从他的内部状态 424 00:12:13,000 --> 00:12:14,000 把这个词的坐标取出来 425 00:12:14,000 --> 00:12:16,000 同一个bank在两句不同话里 426 00:12:16,000 --> 00:12:18,000 就会拿到两个不同的坐标 427 00:12:18,000 --> 00:12:19,000 这件事的意义很大 428 00:12:19,000 --> 00:12:20,000 坐标从一张固定的表 429 00:12:20,000 --> 00:12:22,000 变成一个现场计算的结果 430 00:12:22,000 --> 00:12:24,000 同一年10月 431 00:12:24,000 --> 00:12:25,000 Google发表了Bird 432 00:12:25,000 --> 00:12:26,000 走的是同一条路 433 00:12:26,000 --> 00:12:27,000 但是更彻底 434 00:12:27,000 --> 00:12:30,000 它让模型在读句子的时候随机遮掉一些词 435 00:12:30,000 --> 00:12:33,000 逼他从左右两边的上下文把答案还原回来 436 00:12:33,000 --> 00:12:38,000 这两篇论文分别拿下了NAACL 2018 年跟 2019 年的最佳论文 437 00:12:38,000 --> 00:12:41,000 NAACL 是自然语言处理最主要的学术会议之一 438 00:12:41,000 --> 00:12:44,000 同一个研究方向连续两年拿下最佳论文 439 00:12:44,000 --> 00:12:45,000 这在学界等于一句话 440 00:12:45,000 --> 00:12:46,000 转折点就在这里 441 00:12:46,000 --> 00:12:49,000 不过Bird 这种做法有一个很现实的问题 442 00:12:49,000 --> 00:12:50,000 他太慢了 443 00:12:50,000 --> 00:12:52,000 Bird 判断两句话像不像 444 00:12:52,000 --> 00:12:54,000 必须把两句话一起胃进去读一遍 445 00:12:54,000 --> 00:12:55,000 读完才给你一个分数 446 00:12:55,000 --> 00:12:57,000 你手上有1万个句子 447 00:12:57,000 --> 00:12:59,000 想找出最相似的那一对 448 00:12:59,000 --> 00:13:01,000 就得把1万个句子两两配对 449 00:13:01,000 --> 00:13:02,000 跑几千万次 450 00:13:02,000 --> 00:13:04,000 2019 年那篇论文算过这个数字 451 00:13:04,000 --> 00:13:06,000 用当时的显示卡 452 00:13:06,000 --> 00:13:08,000 这件事要花大约65个小时 453 00:13:08,000 --> 00:13:10,000 我也在德国的研究者提出了一个改法 454 00:13:10,000 --> 00:13:12,000 叫Sentence Bird 455 00:13:12,000 --> 00:13:14,000 他们改成先让模型单独读每一句话 456 00:13:14,000 --> 00:13:16,000 各自产生一只坐标 457 00:13:16,000 --> 00:13:17,000 之后要比较的时候 458 00:13:17,000 --> 00:13:19,000 只要算坐标之间的距离就好 459 00:13:19,000 --> 00:13:20,000 同样1万句话 460 00:13:20,000 --> 00:13:21,000 同样的准确度 461 00:13:21,000 --> 00:13:24,000 时间从65个小时掉到大约5秒 462 00:13:24,000 --> 00:13:25,000 大约5秒 463 00:13:25,000 --> 00:13:26,000 这个改动的精神 464 00:13:26,000 --> 00:13:27,000 你在生活里见过 465 00:13:27,000 --> 00:13:30,000 一个审稿人如果每次都要把两份文件并排 466 00:13:30,000 --> 00:13:31,000 从头读一遍 467 00:13:31,000 --> 00:13:32,000 他一天读不完几组 468 00:13:32,000 --> 00:13:35,000 但如果他先帮每份文件写一张摘要卡片 469 00:13:35,000 --> 00:13:36,000 只有纸笔卡片 470 00:13:36,000 --> 00:13:38,000 下午就能把整项文件排完 471 00:13:38,000 --> 00:13:39,000 从这一刻起 472 00:13:39,000 --> 00:13:40,000 Embedding 从一个词的技术 473 00:13:40,000 --> 00:13:42,000 变成一整段文字的技术 474 00:13:42,000 --> 00:13:45,000 地图上的居民很快就不只有文字了 475 00:13:45,000 --> 00:13:49,000 2021年OpenAI发表了一个模型叫CLIP 476 00:13:49,000 --> 00:13:50,000 他同时训练两个网路 477 00:13:50,000 --> 00:13:51,000 一个读图片 478 00:13:51,000 --> 00:13:52,000 一个读文字 479 00:13:52,000 --> 00:13:54,000 然后要求他们把真的配在一起的图片跟说明 480 00:13:54,000 --> 00:13:56,000 放到地图上几乎同一个位置 481 00:13:56,000 --> 00:13:58,000 把不成对的推开 482 00:13:58,000 --> 00:14:02,000 他用了网路上四亿组图片跟说明文字来做这件事 483 00:14:02,000 --> 00:14:03,000 训练完之后 484 00:14:03,000 --> 00:14:05,000 一张狗的照片 485 00:14:05,000 --> 00:14:06,000 跟A photo of a dog 486 00:14:06,000 --> 00:14:07,000 这句英文 487 00:14:07,000 --> 00:14:08,000 位置靠得非常近 488 00:14:08,000 --> 00:14:10,000 你想想这代表什么 489 00:14:10,000 --> 00:14:11,000 以图找字 490 00:14:11,000 --> 00:14:12,000 以制造图 491 00:14:12,000 --> 00:14:13,000 全部变成同一件事 492 00:14:13,000 --> 00:14:14,000 算距离 493 00:14:14,000 --> 00:14:16,000 你手机相簿那次搜寻 494 00:14:16,000 --> 00:14:18,000 用的就是这一类技术 495 00:14:18,000 --> 00:14:19,000 你打的那几个字 496 00:14:19,000 --> 00:14:21,000 跟你的照片被放进同一张地图 497 00:14:21,000 --> 00:14:23,000 机器只是找了一下谁离你最近 498 00:14:23,000 --> 00:14:25,000 顺带一提 499 00:14:25,000 --> 00:14:27,000 这篇论文的作者名单里有Ilya Saskivar 500 00:14:27,000 --> 00:14:30,000 2013年World2Factor的第二篇论文 501 00:14:30,000 --> 00:14:32,000 作者名单里也有他 502 00:14:32,000 --> 00:14:34,000 同一个人 503 00:14:34,000 --> 00:14:36,000 横跨了这张地图的两个时代 504 00:14:36,000 --> 00:14:38,000 我们的历史线讲到这里就走完了 505 00:14:38,000 --> 00:14:39,000 接下来我想带你看 506 00:14:39,000 --> 00:14:41,000 这张地图今天长在哪些地方 507 00:14:41,000 --> 00:14:43,000 而最常见的那个地方 508 00:14:43,000 --> 00:14:44,000 你每天都在用 509 00:14:44,000 --> 00:14:45,000 它叫RAG 510 00:14:45,000 --> 00:14:46,000 RAG的意思是 511 00:14:46,000 --> 00:14:48,000 先去查资料 512 00:14:48,000 --> 00:14:50,000 再让AI根据查到的东西回答 513 00:14:50,000 --> 00:14:52,000 所有那些跟你的PDF对话 514 00:14:52,000 --> 00:14:54,000 公司内部知识库问答的产品 515 00:14:54,000 --> 00:14:56,000 底下都是这一条管线 516 00:14:56,000 --> 00:14:57,000 我们一步一步走一遍 517 00:14:57,000 --> 00:14:58,000 第一步 518 00:14:58,000 --> 00:14:59,000 把文件切成一块一块 519 00:14:59,000 --> 00:15:01,000 这个动作叫chunking 520 00:15:01,000 --> 00:15:02,000 一份三把页的手册 521 00:15:02,000 --> 00:15:03,000 不能整份丢进去 522 00:15:03,000 --> 00:15:05,000 工程师会把它切成一段一段 523 00:15:05,000 --> 00:15:07,000 像把一本书做成一张一张索引卡 524 00:15:07,000 --> 00:15:09,000 这里有个要拿捏的地方 525 00:15:09,000 --> 00:15:10,000 卡片切得太小 526 00:15:10,000 --> 00:15:11,000 每一张都眉头眉尾 527 00:15:11,000 --> 00:15:12,000 读的不知道在讲什么 528 00:15:12,000 --> 00:15:13,000 切得太大 529 00:15:13,000 --> 00:15:15,000 一张卡上写了五个主题 530 00:15:15,000 --> 00:15:17,000 那张卡的坐标就会变得很模糊 531 00:15:17,000 --> 00:15:18,000 什么都像一点 532 00:15:18,000 --> 00:15:19,000 什么都不够像 533 00:15:19,000 --> 00:15:20,000 第二步 534 00:15:20,000 --> 00:15:22,000 每一张卡片各自过一次 535 00:15:22,000 --> 00:15:23,000 embedding模型 536 00:15:23,000 --> 00:15:24,000 变成一支坐标 537 00:15:24,000 --> 00:15:26,000 然后全部存进一个专门存坐标的地方 538 00:15:26,000 --> 00:15:28,000 这种资料库叫向量资料库 539 00:15:28,000 --> 00:15:30,000 使用者问问题的时候第三步开始 540 00:15:30,000 --> 00:15:32,000 他打的那一句问题 541 00:15:32,000 --> 00:15:35,000 也要用同一个模型转成一支坐标 542 00:15:35,000 --> 00:15:36,000 这里有一条铁律 543 00:15:36,000 --> 00:15:37,000 一定要是同一个模型 544 00:15:37,000 --> 00:15:39,000 不同模型画出来的地图 545 00:15:39,000 --> 00:15:41,000 坐标系是不通用的 546 00:15:41,000 --> 00:15:43,000 就像两张用不同投影法画的世界地图 547 00:15:43,000 --> 00:15:45,000 经纬都不能混着看 548 00:15:45,000 --> 00:15:46,000 第四步 549 00:15:46,000 --> 00:15:47,000 在几百万只坐标里 550 00:15:47,000 --> 00:15:49,000 找出问题最近的那几只 551 00:15:49,000 --> 00:15:51,000 这件事如果老老实实一个一个比 552 00:15:51,000 --> 00:15:52,000 会慢到不能用 553 00:15:52,000 --> 00:15:55,000 所以实物上用的是近似最近零搜寻 554 00:15:55,000 --> 00:15:57,000 英文简称ANN 555 00:15:57,000 --> 00:15:59,000 他的精神不是问遍全程每一个人 556 00:15:59,000 --> 00:16:01,000 而是先问各区的里长 557 00:16:01,000 --> 00:16:02,000 所定对的社区 558 00:16:02,000 --> 00:16:03,000 再往里面转 559 00:16:03,000 --> 00:16:04,000 牺牲一点点准确度 560 00:16:04,000 --> 00:16:06,000 换来毫秒级的速度 561 00:16:06,000 --> 00:16:08,000 至于怎么判断两支坐标近不近 562 00:16:08,000 --> 00:16:11,000 最常用的方法叫cos 相似度 563 00:16:11,000 --> 00:16:12,000 你把两支坐标想成 564 00:16:12,000 --> 00:16:14,000 从原点射出去的两支箭头 565 00:16:14,000 --> 00:16:15,000 只看他们的夹角 566 00:16:15,000 --> 00:16:16,000 不管谁比较长 567 00:16:16,000 --> 00:16:18,000 同方向就是最像 568 00:16:18,000 --> 00:16:19,000 垂直就是温泉无关 569 00:16:19,000 --> 00:16:20,000 最后一步 570 00:16:20,000 --> 00:16:22,000 捞回来的那几十段还要再塞一次 571 00:16:22,000 --> 00:16:24,000 这个动作叫rerank 572 00:16:24,000 --> 00:16:26,000 他会用另一个比较慢 573 00:16:26,000 --> 00:16:27,000 但是比较准的模型 574 00:16:27,000 --> 00:16:29,000 把问题跟每一段 575 00:16:29,000 --> 00:16:31,000 并排精度一次再打分数 576 00:16:31,000 --> 00:16:33,000 整条线就是海选加面试 577 00:16:33,000 --> 00:16:34,000 embedding负责海选 578 00:16:34,000 --> 00:16:35,000 rank负责面试 579 00:16:35,000 --> 00:16:37,000 这条管线听起来很新 580 00:16:37,000 --> 00:16:39,000 但他其实已经默默运转很多年了 581 00:16:39,000 --> 00:16:41,000 最好的例子是spotify 582 00:16:41,000 --> 00:16:42,000 早在2013年 583 00:16:42,000 --> 00:16:43,000 也就是word to vector 584 00:16:43,000 --> 00:16:44,000 出来的同一年 585 00:16:44,000 --> 00:16:46,000 spotify就开放了一套 586 00:16:46,000 --> 00:16:47,000 自己写的程式库叫annoy 587 00:16:47,000 --> 00:16:49,000 做的正式在几百万支坐标里 588 00:16:49,000 --> 00:16:50,000 快速找出最近的邻居 589 00:16:50,000 --> 00:16:53,000 他们把每一首歌每一个使用者 590 00:16:53,000 --> 00:16:55,000 都变成这张地图上的一个点 591 00:16:55,000 --> 00:16:57,000 你每个星期一收到的那份 592 00:16:57,000 --> 00:16:59,000 Discover Weekly 播放清单 593 00:16:59,000 --> 00:17:01,000 还有你打开首页看到的推荐 594 00:17:01,000 --> 00:17:02,000 背后就是这个动作 595 00:17:02,000 --> 00:17:04,000 找出离你最近的那些点 596 00:17:04,000 --> 00:17:05,000 再看看他们在听什么 597 00:17:05,000 --> 00:17:07,000 这套东西撑了整整十年 598 00:17:07,000 --> 00:17:09,000 2023年 599 00:17:09,000 --> 00:17:11,000 Spotify官方发表了 600 00:17:11,000 --> 00:17:13,000 新一代的程式库叫vojager 601 00:17:13,000 --> 00:17:14,000 换上更新的索引结构 602 00:17:14,000 --> 00:17:17,000 我官方的说法是速度比旧的快了一个量级 603 00:17:17,000 --> 00:17:19,000 我觉得这件事很值得记一下 604 00:17:19,000 --> 00:17:20,000 你以为Embedding是 605 00:17:20,000 --> 00:17:22,000 ChartGPT 红了之后才冒出来的东西 606 00:17:22,000 --> 00:17:24,000 但你的播放清单 607 00:17:24,000 --> 00:17:26,000 早就用它帮你挑了十年的歌 608 00:17:26,000 --> 00:17:28,000 那为什么是这几年才全面爆发 609 00:17:28,000 --> 00:17:29,000 很大一部分原因是价格 610 00:17:29,000 --> 00:17:31,000 今天你叫OpenAI的入门款Embedding模型 611 00:17:31,000 --> 00:17:33,000 帮你处理100万个Token 612 00:17:33,000 --> 00:17:36,000 Token 你就想成模型眼中的一小段文字 613 00:17:36,000 --> 00:17:38,000 大概是一个字到几个字 614 00:17:38,000 --> 00:17:40,000 价格是0.02美元 615 00:17:40,000 --> 00:17:43,000 100万个Token大概是几十本小说的量 616 00:17:43,000 --> 00:17:45,000 花了钱连一块台币都不到 617 00:17:45,000 --> 00:17:48,000 这个价格比较同一家公司的模型生成文字 618 00:17:48,000 --> 00:17:50,000 便宜了好几个数量级 619 00:17:50,000 --> 00:17:51,000 便宜到什么程度呢 620 00:17:51,000 --> 00:17:53,000 一间公司可以把过去十几年 621 00:17:53,000 --> 00:17:56,000 所有的文件邮件会议记录全部跑一遍变成坐标 622 00:17:56,000 --> 00:17:58,000 成本只是一顿午餐 623 00:17:58,000 --> 00:18:02,000 这是为什么向量资料库在2023年突然变成一整个创投赛道 624 00:18:02,000 --> 00:18:04,000 Icon这样的公司 625 00:18:04,000 --> 00:18:06,000 一年之内就拿到了独角兽等级的估值 626 00:18:06,000 --> 00:18:08,000 不过这里有一个很真实的代价要讲 627 00:18:08,000 --> 00:18:10,000 你换一代Embedding模型 628 00:18:10,000 --> 00:18:12,000 旧的坐标就全部作废 629 00:18:12,000 --> 00:18:13,000 因为地图重画了 630 00:18:13,000 --> 00:18:14,000 经纬度对不上 631 00:18:14,000 --> 00:18:16,000 几千万份文件重新跑一次 632 00:18:16,000 --> 00:18:20,000 这是每一间公司换模型的时候都要吞下去的账单 633 00:18:20,000 --> 00:18:22,000 最后我想给你看一条线 634 00:18:22,000 --> 00:18:23,000 它的走向跟直觉相反 635 00:18:23,000 --> 00:18:25,000 1990年那张硬压出来的地图 636 00:18:25,000 --> 00:18:27,000 就摆个坐标轴 637 00:18:27,000 --> 00:18:29,000 Word to Vector用了300个 638 00:18:29,000 --> 00:18:30,000 Paz用到700多个 639 00:18:30,000 --> 00:18:31,000 到了今天 640 00:18:31,000 --> 00:18:34,000 主流的商用模型动辄3000多个坐标轴 641 00:18:34,000 --> 00:18:36,000 看起来就是一路往上涨 642 00:18:36,000 --> 00:18:37,000 越大越好 643 00:18:37,000 --> 00:18:38,000 对吧 644 00:18:38,000 --> 00:18:40,000 结果2022年之后风向变了 645 00:18:40,000 --> 00:18:41,000 有人提出一种训练方法 646 00:18:41,000 --> 00:18:43,000 名字叫Metrochka 647 00:18:43,000 --> 00:18:44,000 就是俄罗斯娃娃 648 00:18:44,000 --> 00:18:46,000 它在训练的时候就规定 649 00:18:46,000 --> 00:18:49,000 坐标前面几个维度要装最重要的资讯 650 00:18:49,000 --> 00:18:50,000 越往后越吃药 651 00:18:50,000 --> 00:18:53,000 你要省钱的时候直接把后面那一节砍掉就好 652 00:18:53,000 --> 00:18:55,000 今天OpenAI的模型让你自己指定要几围 653 00:18:55,000 --> 00:18:57,000 3000多围砍到256围 654 00:18:57,000 --> 00:18:59,000 儲存成本掉了十几倍 655 00:18:59,000 --> 00:19:01,000 效果还是赢过上一代的完整版 656 00:19:01,000 --> 00:19:03,000 所以这个领域最后学到的不是越大越好 657 00:19:03,000 --> 00:19:05,000 是可以伸缩才好 658 00:19:05,000 --> 00:19:08,000 回头看1957年Faird写下那句话的时候 659 00:19:08,000 --> 00:19:10,000 他手上连一台电脑都没有 660 00:19:10,000 --> 00:19:11,000 他说你要认识一个词 661 00:19:11,000 --> 00:19:13,000 就看他都跟哪些词待在一起 662 00:19:13,000 --> 00:19:15,000 六十几年后 663 00:19:15,000 --> 00:19:17,000 这句话变成了一组坐标 664 00:19:17,000 --> 00:19:19,000 藏在你每一次搜寻每一份推荐 665 00:19:19,000 --> 00:19:23,000 还有你相簿里那张没有标签的海边日落背后 666 00:19:23,000 --> 00:19:25,000 我自己整理完这条线最深的感觉是 667 00:19:25,000 --> 00:19:27,000 六十几年来 668 00:19:27,000 --> 00:19:29,000 人类其实只做了一件事 669 00:19:29,000 --> 00:19:31,000 就是把意思这个看不见的东西 670 00:19:31,000 --> 00:19:33,000 一点一点搬到一张可以计算的地图上 671 00:19:33,000 --> 00:19:35,000 从一片谁跟谁都一样远的沙漠 672 00:19:35,000 --> 00:19:37,000 走到你手机里那是不用标签的搜寻 673 00:19:37,000 --> 00:19:39,000 中间隔着一句话 674 00:19:39,000 --> 00:19:41,000 一台桌上型电脑 675 00:19:41,000 --> 00:19:43,000 还有一封巨稿信 676 00:19:43,000 --> 00:19:44,000 最后问你一个问题 677 00:19:44,000 --> 00:19:46,000 如果你手上所有的笔记 678 00:19:46,000 --> 00:19:47,000 照片 679 00:19:47,000 --> 00:19:48,000 聊天记录 680 00:19:48,000 --> 00:19:49,000 全部都变成这张地图上的坐标 681 00:19:49,000 --> 00:19:50,000 你最想拿它来找什么 682 00:19:50,000 --> 00:19:51,000 留言告诉我 683 00:19:51,000 --> 00:19:52,000 喜欢的话订阅AI Notebook 684 00:19:52,000 --> 00:19:53,000 开启通知 685 00:19:53,000 --> 00:19:54,000 我们下次见 686 00:20:03,000 --> 00:20:05,000 请不吝点赞 订阅 687 00:20:05,000 --> 00:20:06,000 转发 打赏支持明镜与点点栏目 688 00:20:06,000 --> 00:20:07,000 请不吝点赞 订阅 689 00:20:07,000 --> 00:20:09,000 请不吝点赞 订阅 690 00:20:09,000 --> 00:20:10,000 转发 打赏支持明镜与点点栏目 691 00:20:10,000 --> 00:20:11,000 请不吝点赞 订阅 692 00:20:11,000 --> 00:20:13,000 请不吝点赞 订阅 693 00:20:13,000 --> 00:20:14,000 转发 打赏支持明镜与点点栏目 694 00:20:14,000 --> 00:20:15,000 请不吝点赞 订阅 695 00:20:15,000 --> 00:20:16,000 转发 打赏支持明镜与点点栏目