# W3_自然語言處理_高宏宇.m4a|長度 02:51:00|model large-v3 on cuda [00:00:00] 有任何疑問或感想,歡迎留言發布,並且記得點讚、訂閱、分享,並且記得點讚、訂閱、分享。 [00:01:21] 這個 [00:01:25] 這個 [00:01:27] 這個 [00:01:31] 這個PBT [00:01:33] 這樣應該 [00:01:37] 這樣可以吧 [00:01:38] 這樣這個畫面 [00:01:39] 好 [00:01:40] 然後 [00:01:41] 跳回那個PBT [00:01:43] 然後 [00:01:44] 這樣 [00:01:45] 好 [00:01:46] 謝謝 [00:02:16] 這也好了 [00:02:17] 工具列了 [00:02:19] 上次什麼還有 [00:02:20] 那個 [00:02:22] 網路有點問題 [00:02:24] 所以我們不要再一下 [00:02:26] 那 [00:02:27] 現在開始 [00:02:28] 現在有streaming [00:02:29] 有 [00:02:30] 那 [00:02:31] 今天呢 [00:02:32] 我們會把這個 [00:02:34] introduction的影片的內容講一下 [00:02:37] 然後 [00:02:38] 會介紹第一個assignment [00:02:41] 第一個assignment [00:02:43] 是會跟 [00:02:44] week2的 [00:02:45] W2的投影片有點關係 [00:02:47] 不過 [00:02:48] 裡面上也是可以做的 [00:02:49] 那我們今天會announce [00:02:51] 這個assignment1的樣子 [00:02:54] 好 [00:02:56] 那 [00:02:57] 剛才看到slide有些問題 [00:03:00] 不過也許等一下我們快下課的時候 [00:03:02] 我們再一起看一起回覆了 [00:03:04] 那我們就接著我們上禮拜 [00:03:07] 提到的這一個部分 [00:03:09] 那 [00:03:10] 上次我們 [00:03:14] 從 [00:03:15] one-hot vector的方式 [00:03:17] 講到vector space model [00:03:18] TFIDF的概念 [00:03:20] 但是我們發現說 [00:03:22] 我們沒辦法讓電腦去比對說 [00:03:25] 字的 [00:03:26] 字的相似度 [00:03:28] 就是要完全一模一樣 [00:03:29] 它才能夠去知道說這是一樣的 [00:03:32] 所以它不太知道 [00:03:34] 貓狗卡車這三個東西的區分 [00:03:37] 所以我們是說 [00:03:38] 我們能不能建構一個表示的方式 [00:03:42] 所謂表示在電腦裡面就是一堆數字 [00:03:45] 你可以想象它就是一個 [00:03:47] 一個array或是一個vector [00:03:49] 我們能不能建構一個表示的方式裡面有 [00:03:53] 含有這個字的一些 [00:03:56] 語義 [00:03:57] 或是它的 [00:03:58] 本身的這種knowledge [00:03:59] 或者是概念在裡面 [00:04:01] 所以 [00:04:02] 為什麼後面我們都叫做這個叫embedding [00:04:05] 所以 [00:04:06] 理解上你可以說 [00:04:07] 我們是有把這個字的concept [00:04:10] embed在這個數字裡面 [00:04:11] 當然我們可以用這個數字來表示這些 [00:04:14] 字詞的意思 [00:04:16] 那 [00:04:17] 雖然這個好像是一個蠻trivial的concept [00:04:19] 但是其實我們是希望說 [00:04:22] 在我的空間裡面 [00:04:24] 我這些東西是 [00:04:26] 能夠一個連續的 [00:04:28] 而且是均勻分佈 [00:04:31] 這件事情你可能 [00:04:32] 現在可能沒有感覺 [00:04:34] 當你在做第一個assignment的時候 [00:04:36] 你做一做就會知道說 [00:04:39] 這個 [00:04:40] 其實 [00:04:42] 不太有用這樣子 [00:04:43] 就是你做出來的東西 [00:04:45] 會有一點問題 [00:04:47] 不是一點問題 [00:04:48] 非常多問題 [00:04:49] 就是說如果把所有的字呢 [00:04:51] 都映射在一個空間裡面 [00:04:53] 那我是希望說像這個例子 [00:04:55] 貓跟狗很接近 [00:04:57] 所以它們的 [00:04:58] 上面這個數字應該 [00:05:00] 應該在算相似度的時候是非常接近 [00:05:02] 所以它的cosine夾角很低 [00:05:04] 這樣子 [00:05:05] 但是當你做完 [00:05:07] 你做photo vector [00:05:08] 或是你自己用 [00:05:10] 這個已經圈好的embedding [00:05:12] 去看你所熟知的字的 [00:05:15] 意義的時候 [00:05:16] 當然你可以發現貓跟狗也許很接近 [00:05:20] 但是你可能可以發現 [00:05:21] 貓附近的向量 [00:05:23] 就是跟它很接近的向量 [00:05:25] 其實不是貓 [00:05:27] 可能是一些跟貓一點關係都沒有的東西 [00:05:31] 那這個東西到底有沒有用 [00:05:33] 能不能拿來做我們 [00:05:35] 讓電腦理解語義的東西 [00:05:37] 所以這個就可以讓你反思 [00:05:40] 當你在做assignment [00:05:41] 我們會問你這些問題 [00:05:43] 就是好像挺怪的這樣子 [00:05:46] 但是的確 [00:05:48] 我們可以做出一個這樣的vector [00:05:50] 去區分貓跟狗跟卡車的差別 [00:05:53] 那 [00:05:55] 所以我們就先來看 [00:05:57] 怎麼至少做出這些概念 [00:05:59] 我可以把它拉開來 [00:06:01] 那這個東西其實一直有發展 [00:06:04] 一直有發展 [00:06:05] 只是到之前 [00:06:07] 我們都希望用統計的方式 [00:06:09] 用去看以前人類的語料 [00:06:11] 去算engram [00:06:13] 給一些sliding window [00:06:14] 算一些co-occurrence的probability [00:06:18] 去算這些東西 [00:06:20] 但是後來發現這個成本相當的高 [00:06:23] 而且 [00:06:25] 效果也不太好 [00:06:28] 那到後來我們就希望說 [00:06:30] 我們不要算probability [00:06:32] 這個我們能不能 [00:06:34] 我們還是based on probability的概念 [00:06:36] 但是我們能不能用訓練 [00:06:39] 所謂訓練的方式 [00:06:41] 大家如果學過機器學習就知道說 [00:06:44] 有training data沒錯 [00:06:46] 但是我們如果用一個model去train [00:06:48] 去看這些training data [00:06:50] 我學到這些模型的闡述 [00:06:53] 其實是有點像是去內化 [00:06:55] 這些訓練資料所帶來的knowledge [00:06:58] 也就是說我們能不能透過模型學習的方式 [00:07:01] 去內化看到的文章 [00:07:04] 然後以後我就可以用這些模型的參數 [00:07:07] 來表示文字的意思 [00:07:10] 所以在2000年後 [00:07:13] 就因為資料變多了嘛 [00:07:15] 然後電腦算力也慢慢的開始增加的時候 [00:07:19] 大家就可以希望就覺得 [00:07:21] 我們可以train這些東西 [00:07:23] 那其實在這個年份 [00:07:24] 大概機器學習慢慢起來 [00:07:26] 就是AI的這個浪潮開始 [00:07:29] 覺得好像有點用的東西慢慢出來了 [00:07:32] 那當然這篇paper其實當然不是唯一的 [00:07:36] 只是說這篇paper其實有點也是觸發說 [00:07:39] 好吧那我們可以用NN的方式來train [00:07:42] 這樣的一個embedding [00:07:45] 來學所謂的文字的feature vector [00:07:49] 那這篇paper我沒有要細講 [00:07:52] 不過這個圖是從paper裡面site出來的 [00:07:55] 你可以想象 [00:07:56] 就跟這個這個長相跟現在的有點像 [00:07:59] 反正就是每一個字的 [00:08:01] 從tablelookup出來的embedding之後呢 [00:08:05] 他去把它做一些 [00:08:07] integration [00:08:09] 看用什麼樣的方式 [00:08:10] 然後最後再去用perplexity的方式 [00:08:13] 去train這樣的一個supervised的model [00:08:15] 然後去得到這樣的embedding的東西 [00:08:18] 這樣的架構其實在很多後面我們提到的 [00:08:21] wall embedding的計算都不外乎是長這樣 [00:08:26] 它的差別就在於是說 [00:08:28] 有些架構會不太一樣一點 [00:08:30] 然後訓練資料怎麼給 [00:08:33] 大概有些差別就會在這裡 [00:08:36] 所以大概從這樣的一個年份開始 [00:08:39] 大家就覺得哇這個很有用 [00:08:41] 我們可以給他資料可以用模型 [00:08:43] 可以訓練出這些東西 [00:08:45] 我們不用再用找一大堆的人去標 [00:08:48] 所謂的wall feature vector [00:08:50] 就是好啊這個動物 [00:08:52] 這個哺乳類 [00:08:53] 第一個feature應該是標yes [00:08:55] 然後什麼什麼什麼 [00:08:56] 我們不用這樣的東西來描述文字太累了 [00:08:59] 這個成本高而且quad也不好這樣子 [00:09:02] 我們就不管 [00:09:04] 反正我就給你這個700多維度的東西 [00:09:07] 你自己去學 [00:09:08] 你自己去學裡面應該要長什麼樣子 [00:09:11] 所以就是也是人類偷懶的一個象徵 [00:09:16] 反正學不會 [00:09:18] 人學不會就讓電腦自己去學 [00:09:20] 好那這一篇當然就是這個 [00:09:23] 為什麼Bengio這麼有名 [00:09:26] 其實大家應該都知道這個人 [00:09:29] 那不過其實你在網路上搜尋Bengio [00:09:32] 可能會搜尋到另外一個 [00:09:35] 因為他們是兄弟黨 [00:09:37] 他的好像這是哥哥 [00:09:40] 好像他的弟弟也是很有名 [00:09:42] 不過他弟弟好像比較多一點 [00:09:44] 在業界一點 [00:09:45] 就是也有做研究 [00:09:47] 但是有些contribution比較在業界 [00:09:49] 所以你可能可以看到Bengio [00:09:52] 然後他們的這個 [00:09:54] 他們的名字是不一樣的 [00:09:56] 但是其實兄弟黨都很有名 [00:09:58] 這樣子 [00:09:59] 然後Bengio大家可能知道說 [00:10:01] 反正他當初跟LeCun跟hinton [00:10:05] 拿到這個Turing Award [00:10:07] 就是一個劃時代的點 [00:10:11] 就是告訴我們說 [00:10:12] 他們這三個人的貢獻 [00:10:14] 就是讓這整個AI起飛的一個這樣的一個trip point [00:10:19] 所以大家如果可以拜讀他的論文 [00:10:24] 其實是多看一下這樣子 [00:10:29] 所以他們是希望用學的方式 [00:10:33] 而不是用統計的方式去計算 [00:10:37] 這樣的過程 [00:10:39] 我放這個圖 [00:10:41] 這個是當年這個2019年 [00:10:45] 所以其實也蠻久的 [00:10:47] 就是他們在拿到 [00:10:49] 拿到Turing Award那一年的AAAI的conference [00:10:54] 那其實我並沒有跟他們合照 [00:10:57] 其實因為他們在討論事情 [00:10:59] 感覺每個人表情都很嚴肅 [00:11:01] 我也不太過好意思過去哈啦這樣子 [00:11:04] 他就是在一個早餐的地方 [00:11:07] 看到他們三個突然覺得背後能量很高 [00:11:11] 這樣子對 [00:11:13] 這個畫面有點小 [00:11:15] 這hinton [00:11:17] 其實hinton蠻喜歡站著 [00:11:19] 我也不知道為什麼 [00:11:20] 之前他在 [00:11:21] 他在一些keynote場合 [00:11:23] 或者是panel場合 [00:11:24] 大家都坐在那邊談 [00:11:25] 然後他就看他自己就站起來 [00:11:27] 他也沒有要幹什麼 [00:11:31] 他就站起來這樣子 [00:11:32] 不過這種厲害人 [00:11:34] 總是有一些不一樣的動作 [00:11:36] 這樣子 [00:11:37] ok好這個 [00:11:39] 這個是 [00:11:40] 所以其實你發現 [00:11:42] 你在paper看到非常有名的人 [00:11:44] 或是這些 [00:11:47] 得過什麼很厲害的獎 [00:11:49] 甚至他們幾個都拿到 [00:11:51] 後面都拿到都沒有獎 [00:11:53] 你就覺得 [00:11:54] 如果你去參加這些會議 [00:11:55] 好像都可以很近距離的接觸到他們 [00:11:59] 這樣子 [00:12:00] 所以這個參加會議也是不錯的 [00:12:05] 好 [00:12:07] 那當然其實這件事情並不是他們想的 [00:12:11] 不是啊 [00:12:12] 應該是說很早以前就有很多這樣的概念下來 [00:12:16] 使得到這樣2000年之後 [00:12:20] 我們覺得說 [00:12:21] 這個其實語言的精神 [00:12:23] 我們可以靠計算的方式來做的 [00:12:26] 但是很早以前其實就有了提這樣語言模型 [00:12:31] language model [00:12:32] 其實以前在做NLP的人 [00:12:34] 不見得一定要用language model [00:12:36] 因為以前language model其實 [00:12:39] 做做理論 [00:12:41] 就是算算紀律這種做做理論 [00:12:43] 論文看起來比較炫一點 [00:12:45] 但是 [00:12:46] 不見得非常的Practical [00:12:48] 但是它其實是有一個很長的發展歷史 [00:12:53] 那這兩位呢 [00:12:54] 其實非常重要 [00:12:57] 尤其在電子領域 [00:12:59] 不見得是資訊 [00:13:01] 像第一個這個Markup [00:13:04] 其實如果你看中文 [00:13:06] 馬可夫練這樣子 [00:13:07] 你有聽過這個Markup Chain這樣的東西 [00:13:10] 如果你做語音的做訊號的 [00:13:12] 你一定會用到他寫的東西 [00:13:15] 這樣子 [00:13:16] 那他非常有名的一個學者 [00:13:21] 那年份非常早 [00:13:24] 那其實他當初是在做language [00:13:29] 這樣的一個想法 [00:13:30] 其實是這樣 [00:13:31] 就是說他有一個故事 [00:13:33] 就是當初大概這個 [00:13:35] 這種年份 [00:13:37] 你可以看看這個年份 [00:13:39] 大概全世界都在幹什麼 [00:13:41] 這樣子 [00:13:42] 其實文明還不是很open [00:13:45] 大家還是在那邊打來打去 [00:13:48] 那大家 [00:13:49] 尤其是宗教 [00:13:51] 宗教對於人的想法 [00:13:53] 人的意念這些事 [00:13:55] 其實是很大的控制力 [00:13:59] 所以有很多 [00:14:01] 他們叫神學家 [00:14:02] 但其實也一般像科學家這樣子 [00:14:04] 這些人就會覺得說 [00:14:05] 有很多的科學的現象 [00:14:07] 什麼都是跟神的旨意有關這樣子 [00:14:11] 所以就會有人說這個文字 [00:14:13] 文字的分佈 [00:14:15] 基本上它就是來自於神告訴我們的一些事情 [00:14:19] 大家如果有興趣可以去看 [00:14:21] Markov當初在做這件事情的背景 [00:14:25] 然後Markov他就覺得怎麼可能 [00:14:28] 這種科學家應該要這個實證的精神 [00:14:32] 所以他就覺得不會是這樣 [00:14:35] 所以他就拿一本書 [00:14:37] 你可以想象那個年代 [00:14:39] 其實沒有什麼電腦 [00:14:40] 沒有什麼calculator這樣子 [00:14:43] 他就拿一本書自己去說 [00:14:45] 他就算字的出現的frequency [00:14:49] 他就去看這個前後字的關係 [00:14:52] 什麼什麼 [00:14:53] 他就做了一大堆統計 [00:14:55] 那統計了多少次 [00:14:59] 你可以去查一下 [00:15:01] 他得到一個規則 [00:15:04] 就是母音跟子音之間 [00:15:07] 出現字的頻率是不一樣的 [00:15:09] 當然你可能看他的結論 [00:15:11] 你會覺得說 [00:15:12] 這好像common sense [00:15:14] 但是呢 [00:15:15] 當你身處在一個 [00:15:17] 大家都會用神的旨意 [00:15:19] 來解釋一些科學現象的時候 [00:15:22] 你很難去想象 [00:15:23] 你要怎麼去做這樣的實驗 [00:15:25] 去得到一個這樣的結論 [00:15:27] 所以你就要回復到 [00:15:30] 當年那個科學家的情境 [00:15:32] 然後說 [00:15:33] 原來他會有這樣的不一樣的想法 [00:15:36] 去做這樣的一個 [00:15:38] 非常耗時間 [00:15:40] 還是用人去count [00:15:41] 所以你可以把這樣的經驗 [00:15:44] 我覺得做研究就是這樣 [00:15:46] 你就要把這樣精神 [00:15:48] 用在你現在在做的東西 [00:15:50] 老師現在沒有神的旨意 [00:15:53] 沒有 [00:15:54] 老師告訴你就是神的旨意 [00:15:56] 然後你就會說 [00:15:57] 老師這個不太對 [00:15:58] 老師都胡亂 [00:16:00] 那你就會自己去思考說 [00:16:02] 可能有什麼不一樣的地方 [00:16:04] 然後你自己就會 [00:16:05] 很苦功的去設計一些實驗 [00:16:07] 很多很厲害的東西 [00:16:09] 就是這樣出來的 [00:16:11] 那大家可能不知道 [00:16:12] 這個母音子音人物 [00:16:14] 這個關係到底有什麼 [00:16:16] 他當時的一個東西 [00:16:18] 其實是假設是 [00:16:20] 我現在我的這種event [00:16:24] 或是我的case [00:16:25] 我要產生的這種訊號 [00:16:27] 或是什麼 [00:16:28] 我的下一步 [00:16:30] 都會depend on我目前的state [00:16:33] 這個state這件事情 [00:16:35] 是一個virtual的東西 [00:16:39] 那我舉一個例子 [00:16:40] 你大概知道 [00:16:41] 這個markov這個概念是 [00:16:44] 做什麼 [00:16:45] 就是以前我們會教的時候 [00:16:47] 會用這樣的例子 [00:16:48] 就是說 [00:16:50] 有一個賭徒 [00:16:52] 就是有一個騙人家錢的賭徒 [00:16:54] 他就拿了一個骰子 [00:16:56] 他有兩個骰子 [00:16:57] 一個是正常的骰子 [00:16:58] 正常骰子 [00:16:59] 骰出的點的機率 [00:17:01] 就是六分之一 [00:17:02] 每個點都是一樣 [00:17:03] 但是有一個特別的骰子 [00:17:05] 骰出六的機率非常高 [00:17:08] 二分之一 [00:17:09] 但是因為它鎖法很好 [00:17:11] 你其實不太知道 [00:17:12] 它什麼時候有對調的 [00:17:14] 這個骰子 [00:17:16] 那這個骰子呢 [00:17:17] 使用這個骰子 [00:17:18] 就是這邊的state [00:17:20] 然後你就跟他賭 [00:17:21] 你跟他賭的時候就發現 [00:17:23] 你怎麼每次都丟出兩點三點這樣 [00:17:25] 然後他每次 [00:17:26] 他丟都是六點這樣子 [00:17:28] 因為你不知道 [00:17:29] 他什麼時候換掉這個骰子 [00:17:32] 那你能做的是 [00:17:33] 你能做 [00:17:34] 你只能觀察說 [00:17:36] 我丟的pattern [00:17:37] 跟他丟的pattern的差異的分佈 [00:17:41] 所以有點像是說 [00:17:43] 這個骰子就是我的hidden state [00:17:46] 那因為我的hidden state不同 [00:17:48] 所以我emint [00:17:50] 我的出去的event [00:17:52] 我丟出去的訊號也會不一樣 [00:17:55] 所以 [00:17:57] 所以我們就可以知道說 [00:17:58] 當我現在看到很多六出現的時候 [00:18:00] 表示它應該有用到它特殊的骰子 [00:18:03] 它的state就從正常的骰子 [00:18:05] 調到特殊的骰子 [00:18:07] 那這個 [00:18:08] 這樣的東西 [00:18:10] 它其實可以用在很多地方 [00:18:13] 比如說以前在做人類的DNA序列的判斷 [00:18:17] 因為人類DNA序列不是很有規則 [00:18:20] 因為中間有很多的mutation [00:18:22] 很多的這種串來串去的 [00:18:24] 但是它會有一些規則來出現 [00:18:27] 比如說C跟G C跟G [00:18:30] 這邊的pattern [00:18:31] 高頻的pattern相當的高 [00:18:33] 但是因為它中間有mutation [00:18:35] 所以它中間可能會插了其他的這些DNA進來 [00:18:40] 但是你可以統計一下說 [00:18:43] 我已經進入到一個C跟G [00:18:46] 發生的頻率比較高的地方 [00:18:48] 那個在生物上是有一些意義 [00:18:51] 所以他們就用這種概念的 [00:18:54] 這種probability的概念 [00:18:56] 去做了很多 [00:18:58] 它其實可以導引出相當多很有用的技術 [00:19:01] 這是markup chain [00:19:03] 但是它研究的東西不只是markup chain [00:19:07] 只是說你可以想像這件事情 [00:19:09] 然後把剛才的骰子這件事情想到 [00:19:13] 這個字的時候 [00:19:14] 你就可以知道說 [00:19:15] 當我們再講一句話 [00:19:17] 下一個字 [00:19:18] 它的出現的機率不是uniform [00:19:23] 不是隨便都會有可能接的上去 [00:19:26] 一定會有些字 [00:19:27] 會跟隨著我前面字的pattern [00:19:30] 而機率比較高 [00:19:32] 那這樣的概念 [00:19:33] 其實跟language model其實是一致的 [00:19:36] 其實就是用這種方式 [00:19:38] 來定義所謂的語言 [00:19:40] 那你可以想像 [00:19:42] 你如果用一般你講的語言 [00:19:44] 來講這件事情的時候 [00:19:46] 你可能感受比較沒那麼高 [00:19:49] 但是你可以回去做一件事情 [00:19:52] 你回去把英文或是中文 [00:19:55] 你透過一個hash function [00:19:57] 不管怎麼樣設計的hash function [00:19:59] 把它轉換成一個怪怪的語言 [00:20:02] 把它轉成一個特殊的symbol [00:20:06] 但是這個mapping [00:20:08] 你可以一開始用比較簡單的mapping [00:20:10] 就是至少是一對一的 [00:20:12] 轉換過去之後 [00:20:15] 你其實就看不懂你在寫什麼 [00:20:17] 因為它就變成一個特殊的symbol [00:20:19] 但是它對應的pattern其實還是一樣 [00:20:23] 那你可以在你完全看不懂 [00:20:26] 那個什麼字的情況下 [00:20:28] 你就可以用這樣的language model [00:20:30] 去了解那句話的意思 [00:20:33] 這樣你就比較有感覺說 [00:20:35] 那我做這件事情到底用意是什麼 [00:20:38] 當然也不是這麼容易 [00:20:40] 也不是這麼容易 [00:20:41] 就是我如果不知道每一個token [00:20:43] 每一個character它的概念的時候 [00:20:45] 其實這個也很難做 [00:20:48] 但是以前在破解一些像什麼希臘文字 [00:20:54] 古埃及文字 [00:20:56] 什麼羅索塔的 [00:20:59] 反正就是那個古文碑文 [00:21:01] 其實也大概用這種方式 [00:21:02] 也是用統計頻率的方式來做這件事情 [00:21:06] OK [00:21:08] 那之後當然這個Chanon呢 [00:21:10] 它其實它年份比較更後面的 [00:21:13] 你可以發現它其實是based on [00:21:16] 這個這樣的markup的精神 [00:21:18] 繼續去做 [00:21:19] 但是Chanon其實有很多貢獻是在於 [00:21:22] 所謂的資訊理論 [00:21:24] 那當然它的意思 [00:21:27] 跟我們後面會講所謂的語言的困惑 [00:21:36] 或者是語言的對應的機率 [00:21:38] 生成的分佈是有一定的道理的 [00:21:42] 那他的想法是說 [00:21:45] 當我的語言 [00:21:47] 我要去產生一個更稀少的字的時候 [00:21:51] 就是比如說 [00:21:52] 我寫出這個字字 [00:21:54] 大家不太會用的 [00:21:56] 這幾乎是我很愛用 [00:21:58] 但是其他一般人來講 [00:22:01] 都不會用到這個字的時候 [00:22:03] 我這個句子所帶有的資訊量是很高的 [00:22:09] 所謂資訊量很高 [00:22:10] 你可以想象 [00:22:12] 你白話一點來講 [00:22:14] 你常常聽到一個人講一堆東西 [00:22:16] 但是好像沒有什麼重點 [00:22:19] 聽的跟沒有聽一樣這樣子 [00:22:21] 那個就是資訊量很低的意思 [00:22:23] 那所謂資訊量很高 [00:22:25] 就是說你聽到那個關鍵字 [00:22:27] 你聽到一個什麼東西 [00:22:28] 就知道他想講什麼 [00:22:30] 那表示那個字所帶來的information [00:22:33] 是很unique [00:22:35] 很獨一無二的 [00:22:36] 這是白話的說法 [00:22:38] 但是他可以用計算的方式來度量說 [00:22:41] 整個東西的information [00:22:43] 整個句子的information [00:22:45] 或者是整個event的information [00:22:47] 我可以用這種方式來度量它的能量 [00:22:50] 用entropy代表能量 [00:22:52] 來看說它的含義 [00:22:57] 所以用這樣的角度 [00:22:59] 我們可以量化一些東西 [00:23:01] 跟我們之後在算 [00:23:03] 甚至在算publicity的時候 [00:23:05] 其實都有點關係 [00:23:07] 這是兩個在language model非常重要的問題 [00:23:11] 這是我一個這樣的學者 [00:23:13] 當然不止 [00:23:14] 當然是不止 [00:23:15] 所以只是說他們因為也比較有名 [00:23:18] 所以就把它放在這裡 [00:23:20] 那這個東西其實 [00:23:22] 剛才講那麼多的過程 [00:23:24] 大家也想象說 [00:23:25] 其實好像得到一個結論 [00:23:28] 就是我現在的字 [00:23:32] 貓狗都會跳 [00:23:34] 會吃會咬這樣 [00:23:35] 但是卡車不會 [00:23:37] 卡車不會吃 [00:23:39] 也不會咬 [00:23:40] 所以 [00:23:41] 這些字的關係 [00:23:42] 共同出現的這種關係 [00:23:44] 其實是有一些現象可循 [00:23:49] 然後相似的字 [00:23:51] 他們其實理論上 [00:23:53] 我可以用這種方式來表示說 [00:23:55] 他們的表示應該一樣 [00:23:57] 但這個representation [00:23:59] 其實可能有點抽象 [00:24:01] 但是你可以想象 [00:24:02] 它有點像你在機器學習 [00:24:04] 做的東西的feature vector [00:24:06] 比如說我要去定義 [00:24:09] 我要去算班上同學的學習 [00:24:11] 表現的時候 [00:24:12] 我會拉出一個feature vector [00:24:14] 說我要用什麼樣數據來描述 [00:24:17] 一個學生的好壞 [00:24:21] 可能是他的出席率 [00:24:23] 或者是他的作業的分數 [00:24:26] 或者是說他可能 [00:24:28] 比如說每天來教室 [00:24:31] 坐的第幾排的位置 [00:24:33] 或是家裡住哪裡什麼 [00:24:35] 我就拉出一個feature vector [00:24:37] 然後這些feature vector [00:24:38] 我就可以用一些訓練的方式 [00:24:40] 來說原來這個出席率 [00:24:42] 其實跟他的學習表現 [00:24:44] 會有一個正比的關係 [00:24:46] 這個feature vector [00:24:47] 你在做機器學習的時候 [00:24:49] 你比較覺得這好像是一個很trivial的東西 [00:24:52] 但是其實它其實就是 [00:24:54] 這個feature vector [00:24:55] 其實就是這一筆資料的一種representation [00:24:58] 就是我用這樣的資料 [00:25:00] 量化資料來描述這一個case [00:25:03] 這一個instance [00:25:04] 我們現在要做的就是說 [00:25:06] 我希望能夠有一個feature vector [00:25:08] 來描述所有的 [00:25:10] 文字所有的token [00:25:12] 所以我們都會用所謂的representation [00:25:16] 來講這件事情 [00:25:18] ok [00:25:19] 那當然我們也希望 [00:25:21] 這個這樣的vector [00:25:25] 我可以透過計算 [00:25:27] 把別的方式去呈現 [00:25:29] 然後我們也希望 [00:25:30] 他這樣的轉換的過程 [00:25:32] 是一個smooth [00:25:34] 所謂smooth的意思是說 [00:25:36] 如果貓長這樣 [00:25:38] 那我如果有一個token [00:25:40] 叫做小貓 [00:25:41] 叫大貓 [00:25:42] 那它的表示是不是要跟貓也很接近 [00:25:47] 是不是可以透過一個轉換的 [00:25:49] 透過變成是一個很平滑的這樣的過程 [00:25:53] 這是目標 [00:25:54] 但是當你做完第一個assignment之後 [00:25:57] 你就發現好像不是這麼一回事 [00:26:00] 就是這個向量貓的旁邊的向量字 [00:26:04] 都不是貓這樣子 [00:26:05] 都不知道是什麼東西 [00:26:07] ok [00:26:08] 那所以 [00:26:10] 如果當你可以把這件事情 [00:26:13] 做得越smooth的時候 [00:26:15] 讓這些量化資料 [00:26:17] 給電腦 [00:26:19] 它越能夠知道這些詞之間的關係 [00:26:22] ok [00:26:24] 那不過我們現在能做的就是 [00:26:26] 好吧 [00:26:27] 那我們就拿人類的語料 [00:26:28] 給讓他知道說 [00:26:29] 這些字啊 [00:26:30] 都在貓狗啊 [00:26:32] 常常出現的字是什麼 [00:26:33] 你可以根據這些關係 [00:26:35] 然後去去算出 [00:26:37] 這個所謂的向量表示 [00:26:39] 就是這個訓練資料的東西 [00:26:41] 其實是會影響到這個representation的東西 [00:26:48] 接下來投影片呢 [00:26:49] 我是有些是用這個 [00:26:51] 當初做VoltoVector [00:26:54] 或是GloVe的一些圖吧 [00:26:56] 那這個其實一進來這個 [00:26:59] 你可能會有點跳 [00:27:00] 就是說好吧 [00:27:01] 如果我們現在已經有一些方法 [00:27:03] 可以讓你算出字的表示 [00:27:05] 透過一個向量算出字的表示 [00:27:08] 然後這些圖呢 [00:27:09] 就是把這些向量呢 [00:27:11] 映射在一個可視化的空間 [00:27:15] 這個現在大家應該都有會 [00:27:17] 看用線性非線性的方式 [00:27:19] 把它map在這個2D的空間中去比對 [00:27:23] 這些字呢 [00:27:25] 你可以看到 [00:27:26] 就是說 [00:27:27] 不同的圖 [00:27:28] 其實是當中paper舉的例子 [00:27:31] 就是這個paper [00:27:32] 其實當初出來之後 [00:27:33] 大家做annualpattern [00:27:35] 其實下巴都有點掉下來 [00:27:37] 這樣子 [00:27:38] 哇 怎麼這麼神奇 [00:27:40] 大家會覺得很神奇這樣子 [00:27:42] 就是映射出來之後呢 [00:27:44] 這是每一個字所對應到的Vector [00:27:51] 所對應到的Vector [00:27:53] 那其實你會發現 [00:27:56] 我們看的並不是 [00:27:58] 字的向量的 [00:28:00] 絕對的向量的東西 [00:28:02] 而是一種對比的關係 [00:28:05] 像它這邊圖 [00:28:06] 常常都有些虛線 [00:28:07] 這些虛線的意思就是說 [00:28:09] 它把這樣一個Touple的關係做出來 [00:28:13] 那比如說 [00:28:16] 最常講的例子就是這個 [00:28:18] 這個man跟woman [00:28:20] 它的關係是這樣 [00:28:22] 然後另外一個Vector [00:28:24] King跟Queen在這裡 [00:28:26] 那你會發現 [00:28:27] 它們之間Touple的relation [00:28:29] 這個relation [00:28:31] 其實是很一致的 [00:28:33] 這個說 [00:28:34] 老師你這講的很牽強 [00:28:36] 我認為是怎樣一致的 [00:28:38] 至少方向斜率有點強 [00:28:41] 然後呢 [00:28:42] 我可以把這樣的Touple的關係 [00:28:44] 也可以對應到 [00:28:45] 其他的這樣的一個Pair [00:28:48] 這樣的一個Pair [00:28:50] 那你會發現這樣的Pair對照起來 [00:28:52] 它好像都是 [00:28:54] 男性跟女性之間的一種 [00:28:56] 對應的關係 [00:28:59] 所以這個就是一個對比關係 [00:29:02] 所以如果我可以用計算方式 [00:29:06] 呈現出這些字的表示 [00:29:09] 然後可以讓它呈現出這樣關係的時候 [00:29:12] 電腦就可以靠著這些計算這些東西 [00:29:14] 就可以知道說 [00:29:16] 原來這個man跟woman [00:29:18] 其實同等於Queen跟King [00:29:20] 這樣的一個關係 [00:29:22] 但是如果你做出來的向量 [00:29:24] 你的Queen在這裡 [00:29:26] King在這裡 [00:29:27] 那可能就是不太對的東西 [00:29:29] 或者是說 [00:29:30] 它其實是一個 [00:29:31] King在這裡 Queen在這裡 [00:29:34] 那意義就不對了 [00:29:36] 然後呈現出這樣的一個圖出來 [00:29:39] 為什麼當初做NLP的人下巴都掉了 [00:29:42] 就是說這實在太厲害了 [00:29:44] 就是我可以靠著計算 [00:29:46] 沒有任何的supervised的Data [00:29:48] 完全靠它做Unsupervised的方式的訓練 [00:29:51] 可以學會這些向量的表示 [00:29:54] 呈現出這樣的relation [00:29:56] 這個非常神奇 [00:29:59] 那我前面一直在問的就是說 [00:30:02] 那這個是相對的關係 [00:30:04] 但是絕對的關係是 [00:30:06] 這樣的Vector的表示 [00:30:08] 比如說 [00:30:09] 這個比如說好 [00:30:10] 國王 [00:30:11] 這個King這個字 [00:30:12] 它附近的向量是不是都跟King有關 [00:30:15] 其實不盡然 [00:30:16] 其實不盡然 [00:30:18] 所以有時候比如說 [00:30:20] 你用這個wall embedding [00:30:22] 去apply在做大語言模型 [00:30:25] 用reg [00:30:26] 然後去算這個token [00:30:28] 然後算相似度 [00:30:29] 然後你想找King [00:30:31] 但是你就會發現你找到King [00:30:33] 都是這個King旁邊的字 [00:30:35] 這些字可能都跟King一點關係都沒有 [00:30:38] 這樣子 [00:30:39] 不過這個當然我們在做reg比對的時候 [00:30:43] 不會用這麼簡單的dense vector在做 [00:30:46] 好 [00:30:47] 這是一個例子 [00:30:48] 所以這樣就是一個對比的過程 [00:30:50] 所以你可以看到這個 [00:30:51] 我可以直接在Vector上 [00:30:53] 直接做operation [00:30:55] 直接做量化的運算 [00:30:57] 我就可以推出是什麼 [00:30:59] 所謂推出就是說 [00:31:01] 當我告訴你這個這樣的關係的時候 [00:31:04] 我給你這個King [00:31:06] 你告訴我一個什麼字 [00:31:08] 然後電腦轉一轉發現 [00:31:10] 嗯 [00:31:11] Queen這樣子 [00:31:12] 這個就是在你們assignment1要做的事情 [00:31:16] 但是你可能會發現 [00:31:18] 你的Queen [00:31:19] 並不會在這個數字的附近的第一個選項 [00:31:24] 也許他可能在前三名的 [00:31:26] 或是什麼 [00:31:27] 所以這個你可以去探討這樣子 [00:31:30] 好 [00:31:32] 另外還有一些關係 [00:31:33] 大家可以看一下 [00:31:34] 或是你自己從這個paper [00:31:35] 他其實有相相當多的這種anology的圖 [00:31:39] 他比如說 [00:31:41] 這個是 [00:31:44] 公司名稱跟CEO [00:31:47] 我記得是人名 [00:31:49] 就是這個公司跟人名之間的relation [00:31:53] 然後還有這種 [00:31:54] 比較語法上的 [00:31:56] 就是原型比較級最高級之間的關係 [00:32:01] 其實當然你會覺得 [00:32:02] 哎 [00:32:03] 還是不是這麼exactly是一樣的pattern [00:32:05] 但是趨勢非常的close [00:32:08] 這個已經相當厲害了 [00:32:10] 就是以現在的角度來看 [00:32:12] 用這麼粗略的計算就可以這樣 [00:32:15] 已經非常厲害了 [00:32:18] 那這個我記得是GrowVac的圖 [00:32:21] 就是說他可以算這種特別的 [00:32:24] 這其實你可能平常也不知道那是什麼字的 [00:32:26] 但是他就是 [00:32:28] 靠著統計上 [00:32:30] 他可以算出這幾個字的vector很接近 [00:32:33] 好 [00:32:35] 所以 [00:32:37] 我們希望我們有一個機制 [00:32:39] 可以靠著 [00:32:41] On Supervise的方式去訓練 [00:32:44] 讓電腦學會這些東西 [00:32:47] 我們今天不要管怎麼學 [00:32:48] 但是你想想看 [00:32:49] 當我學會這些東西的時候 [00:32:51] 電腦厲害了 [00:32:53] 當我要搜尋什麼東西的時候 [00:32:55] 他可以自動幫我語意延伸 [00:32:57] 這樣子 [00:32:59] 但是我覺得現在你們可能會覺得說 [00:33:02] 老師這有什麼了不起 [00:33:04] 大語言模型都會 [00:33:05] 幹嘛看這些東西 [00:33:08] 其實現在會有一些問題 [00:33:10] 其實也是現在教育界常常在困擾的一個問題 [00:33:15] 就是說 [00:33:16] 大語言模型GAI都這麼厲害 [00:33:18] 我們還要教學生寫程式嗎 [00:33:21] 當然要教他做這些判斷 [00:33:25] 甚至你做研究 [00:33:26] 其實你都可以跟AI共同寫 [00:33:29] 共同做了 [00:33:30] 然後 [00:33:31] 其實我不知道作者名字要不要放上 [00:33:33] 或者AI這樣子 [00:33:35] 這件事情一直在發生 [00:33:38] 而且發生的case越來越特別 [00:33:42] 但是你可能要思考一下 [00:33:44] 其實 [00:33:45] 我覺得這個會到一個棒 [00:33:47] 就是說人類 [00:33:48] 就是學生完全沒有任何的contribution [00:33:53] 就是學生唯一的contribution [00:33:56] 就是下plunk這樣子 [00:33:58] 他已經沒有任何的knowledge是 [00:34:01] 大語言模型沒有的部分 [00:34:04] 這部分這樣是有點恐怖 [00:34:06] 這樣是有點恐怖 [00:34:07] 因為 [00:34:08] 我覺得到後來會形成一個close的loop [00:34:11] 這樣子 [00:34:12] 因為大語言模型 [00:34:13] 你沒給他任何的新的想法 [00:34:15] 他就是這樣子而已 [00:34:18] 那 [00:34:19] 所以我常會說 [00:34:20] 你應該去看看說 [00:34:23] 這樣的問題 [00:34:24] 如果不是用LM [00:34:26] 如果不是用這麼大的transformer在做的時候 [00:34:29] 以前人是怎麼做的 [00:34:31] 那為什麼他要這樣做 [00:34:33] 那當時他做遇到什麼問題 [00:34:35] 你才能知道說 [00:34:37] OK [00:34:38] 那我能不能用已經pre-trained好的transformer [00:34:42] pre-trained好的language model [00:34:44] 我可以來這邊做的更好 [00:34:46] 你才會有這種 [00:34:49] 痛點跟solution之間的mapping [00:34:51] 有了這樣的mapping之後 [00:34:53] 你才能自己生出 [00:34:55] 其他的痛點跟solution的mapping [00:34:58] 不然always [00:35:00] 凡事就問AI [00:35:02] 你永遠就是 [00:35:03] 雖然你可以到達一定的表現 [00:35:05] 但是你的表現 [00:35:06] 就會停留在那裡 [00:35:08] 好 [00:35:09] 這邊再舉一些例子 [00:35:10] 就是其實也是paper上 [00:35:12] 舉的這些analogy的例子 [00:35:14] 就是這個是 [00:35:16] 可能 [00:35:18] 像什麼公司的名稱 [00:35:21] 首都的名稱 [00:35:22] 其實都可以對照出來 [00:35:24] 那另外一點更神奇的就是 [00:35:26] 因為他有做不同語言 [00:35:28] 所以 [00:35:29] 英文的分佈 [00:35:31] 這是另外一種語言 [00:35:34] 是西班牙語 [00:35:36] 反正就是另外一種語言的分佈 [00:35:38] 然後這是對應的 [00:35:39] 他的translation [00:35:41] 就是 [00:35:43] 同樣這些字 [00:35:44] 在另外一種語言的 [00:35:45] 這種relation [00:35:47] 所算出來的這種embedding [00:35:49] 其實分佈其實是一樣 [00:35:52] 所以為什麼我們可以做 [00:35:54] 做這個translation [00:35:55] 就是當我看完英文字典之後 [00:35:57] 我就可以去 [00:35:58] 講法文的這樣子 [00:36:00] anyway就是 [00:36:01] 他的mapping [00:36:03] 因為詞的用法 [00:36:04] 不會有太大的改變 [00:36:05] 尤其是 [00:36:06] 同樣語系的 [00:36:08] 應該說同樣語系的 [00:36:10] 這個可能對應到中文 [00:36:12] 或者是其他的不同 [00:36:14] 可能分佈會有點不太一樣 [00:36:16] 這樣子 [00:36:18] 好 [00:36:19] 所以這件事情我們當然是 [00:36:22] 能夠做到這樣 [00:36:23] 其實是我們的目標 [00:36:24] 但的確在 [00:36:25] 在那個年份 [00:36:26] 其實就一大堆人在做 [00:36:28] 然後一直做到一個 [00:36:29] 非常pratical的 [00:36:30] waterbath出來之後 [00:36:31] 有grow back [00:36:32] 有fast text之後 [00:36:33] 大家就覺得這一塊 [00:36:35] 就底定是這個樣子 [00:36:38] 但前期他其實有很多的想法 [00:36:40] 就是說 [00:36:41] 為什麼可以這樣做 [00:36:44] 我要用什麼方式訓練 [00:36:46] 然後我的訓練資料在哪裡 [00:36:48] 什麼什麼 [00:36:49] 這些東西都用 [00:36:51] 以前有很多語言學的想法 [00:36:54] 在做這件事情 [00:36:56] 這句話其實是 [00:36:58] 可能大家也都知道 [00:36:59] 但是他更早的一個 [00:37:02] 其實點或是他的citation [00:37:05] 應該是來自於這個 [00:37:07] 語言學家講的這個東西 [00:37:09] 就是一個字 [00:37:11] 是跟隨著 [00:37:12] 是用他周邊的字 [00:37:15] 所表現出來 [00:37:16] 就這個字的意思 [00:37:17] 你不知道 [00:37:19] 就是有點像 [00:37:20] 你去讀一個英文句子 [00:37:22] 這個字你不知道 [00:37:23] 但是你可以看出 [00:37:24] 前後文在講 [00:37:25] 這個字大概是什麼意思 [00:37:27] 你大概就猜出來這樣子 [00:37:29] 也就是說 [00:37:30] 如果這兩個字 [00:37:31] keg跟dog [00:37:32] 他的周邊的字 [00:37:33] 幾乎都一樣 [00:37:34] 在我眾多語料裡面 [00:37:36] 他們旁邊發生的字都一樣 [00:37:38] 你大概可以猜出 [00:37:39] 他們兩個字的概念是一樣 [00:37:41] 你不會看到一個文章在描述 [00:37:44] 卡車舔他的貓 [00:37:46] 這樣子 [00:37:47] 所以就用這樣的想法 [00:37:49] 我們就 [00:37:50] 那我就知道說 [00:37:51] 我利用這種co-occurrence probability的關係 [00:37:55] 我就可以去 [00:37:57] 能不能讓電腦去學會一個表示 [00:38:00] 這個表示剛好可以hit到 [00:38:02] 這個co-occurrence probability [00:38:04] 所以這個精神 [00:38:06] 就是這樣延伸出來的 [00:38:09] 那在講what-to-vector之前 [00:38:12] 我們來看一下 [00:38:13] 以前我們在做NLP的想法是什麼 [00:38:16] 這件事情其實 [00:38:18] 雖然你說 [00:38:19] 老師現在也不會用LSI [00:38:21] 這個 [00:38:22] 雖然聽起來很炫的技術 [00:38:25] 但是他不pratical [00:38:26] 也不好用 [00:38:27] 也不好算 [00:38:28] 然後算出來也不是那麼準 [00:38:30] 但是你要想想看 [00:38:31] 以前在做這塊的時候 [00:38:33] 其實這個技術是非常炫 [00:38:35] 就是很厲害 [00:38:37] 我可以靠著語料的讀取 [00:38:40] 我不用做監督室學習的資料 [00:38:43] 我就可以Chain這種貓跟狗的關係 [00:38:46] 我就可以Chain出來 [00:38:47] 而不是靠大型的類神經網路去做 [00:38:51] OK [00:38:52] 那精神上也是這樣 [00:38:54] 就是說我的字 [00:38:56] 我用意識的字 [00:38:57] 它旁邊的這個textual context [00:39:01] 或是所謂的co-occurrence的東西 [00:39:04] 其實是很接近 [00:39:06] 其實是很接近的 [00:39:08] 那我們用這個例子 [00:39:12] 這個例子其實是Stanford課的例子 [00:39:15] 然後其實是可以用 [00:39:18] 這一個LSI算出來 [00:39:21] 不過我們資料沒有很多 [00:39:25] 但是你其實是可以算 [00:39:26] 我只是把這個例子來做這樣的解釋 [00:39:29] 就比如說我現在的Corpus有三句 [00:39:33] 三句 [00:39:34] 就是這個 [00:39:36] 這個故意做的這個 [00:39:37] 有一些重複字這樣子 [00:39:40] 然後like後面有不同的like這樣子 [00:39:44] 所以我們就做所謂的co-occurrence [00:39:46] 就是說這個字 [00:39:47] 後面跟隨了哪個字這樣子 [00:39:50] 就是它們兩兩之間有在一起 [00:39:52] 就把它Comp的加一這樣子 [00:39:54] 所以像這邊 [00:39:56] i後面接like這邊出現兩次 [00:39:59] 所以就是2這樣子 [00:40:01] 這是一個對稱的 [00:40:03] 所以要找這樣 [00:40:04] 所以我可以做一個這樣co-occurrence的matrix [00:40:08] 那這個co-occurrence matrix [00:40:09] 跟我們之後等一下有個例子 [00:40:11] 我們用的matrix其實不太一樣 [00:40:14] 我們那邊用的是一個TT matrix [00:40:16] 就是文章中出現哪些字的一個matrix [00:40:20] 但是精神上是一樣的 [00:40:22] 就是我就用這樣的一個matrix做 [00:40:26] SVD [00:40:27] 那SVD我並沒有講SVD [00:40:29] 但是我們等一下會 [00:40:30] 另外的例子會講得更細一點 [00:40:32] 怎麼做這件事情 [00:40:33] 我就想要有一個process [00:40:35] 做矩陣的一個拆解 [00:40:37] 這個拆解完之後 [00:40:39] 我可以再取出重要的這些幾個dimension出來 [00:40:43] 然後再做再把它反制回去這樣子 [00:40:47] 然後反制回去之後 [00:40:49] 我就可以得到每一個字的向量 [00:40:52] 每一個字的向量 [00:40:54] 然後把這個字的向量 [00:40:55] 再把它映射在這個二維空間上 [00:40:58] 我就發現說 [00:40:59] 這個annual p跟deep [00:41:02] 我圈起來意思就是比較 [00:41:04] 因為只有三句 [00:41:05] 只有三句其實很難去講什麼統計 [00:41:07] 但是用這種方式做下來的這個annual p跟deep [00:41:13] 因為它都跟隨在like的後面 [00:41:17] annual p在like的後面 [00:41:19] deep在like的後面 [00:41:21] 所以用這種方式 [00:41:22] 它可以學會這樣的表示 [00:41:25] 就是很接近 [00:41:26] 所以以前這個 [00:41:29] 這個還沒有使用 [00:41:32] 還沒有用到這個 [00:41:34] 這個槍的時候 [00:41:36] 這個是沒有 [00:41:42] 有帶電池嗎 [00:41:53] 就是在你還沒有用nn在做的時候 [00:41:56] 其實你就有辦法 [00:41:58] 靠著這樣的矩陣的學的方式 [00:42:01] 計算的方式 [00:42:03] 你就可以做出這樣字之間的關係 [00:42:06] 所以 [00:42:09] 謝謝 [00:42:10] 希望不會有問題 [00:42:20] 好 [00:42:22] 好 [00:42:23] 這就是LSI它能夠做出的效果 [00:42:26] 好 [00:42:27] 好 [00:42:28] 沒關係 [00:42:31] 為什麼幹擾 [00:42:32] 這個是電 [00:42:50] 這個是電 [00:42:51] 這個是電 [00:42:53] 這個是電 [00:42:54] 這個是電 [00:42:55] 這個是電 [00:42:56] 這個是電 [00:42:59] 這個是電 [00:43:00] 這個是電 [00:43:14] 這個是電 [00:43:15] 這個是電 [00:43:16] 這個是電 [00:43:17] 這個是電 [00:43:18] 這個是電 [00:43:19] 這個是電 [00:43:20] 這個是電 [00:43:21] 這個是電 [00:43:22] 這個是電 [00:43:23] 這個是電 [00:43:24] 這是火 [00:43:26] 這個是電 [00:43:27] 這裡是電 [00:43:28] 這裡是電 [00:43:29] 所以這下面它會,"火えば方ою [00:43:49] 因為有一詞多義 [00:43:51] 沒有出現也不見得是無關 [00:43:53] 因為本來就是一個意識 [00:43:54] 可以用很多種的方式來表示 [00:43:57] 所以這件事情我們來看一下 [00:44:02] 以前是怎麼做的 [00:44:03] 你大概可以知道一下 [00:44:04] 就是參觀一下博物館 [00:44:07] 說以前這些古人用的這樣的技術 [00:44:10] 到底長什麼樣子 [00:44:11] 其實裡面就有一個SVD [00:44:13] 那SVD其實不是這邊才有的東西 [00:44:16] 這個你們在學線性代數就學過 [00:44:18] 所謂矩陣的拆解 [00:44:20] 它可以拆解出現在你整個空間裡面 [00:44:26] 一些重要的代面序的表示 [00:44:28] 就是把它的 [00:44:29] 做出它的對角矩陣這樣子 [00:44:34] 所以anyway [00:44:39] 我沒有要講SVD [00:44:41] 反正就是你有一個拆解 [00:44:42] 一個矩陣的方式 [00:44:43] 它可以用這樣的方式 [00:44:45] 拆解出一個對角矩陣 [00:44:48] 然後我們從那個對角矩陣 [00:44:49] 取出 [00:44:50] 所謂的這個principle的一些dimension [00:44:54] 然後再把它反制回去 [00:44:56] 它的效果就看得出來 [00:44:58] 我們先用一個例子 [00:45:00] 這個例子叫有十篇文章 [00:45:02] 這十篇文章裡面 [00:45:04] 前五篇文章講的是LinuxOS的東西 [00:45:08] 然後後面是講所謂的GNOME [00:45:11] 這些跟LinuxOS一點關係都沒有的東西 [00:45:15] 所以你可以想像是這個兩組不同的文章 [00:45:20] 但是因為會用到一些common的word [00:45:22] 好像這邊LinuxOS有所謂MySQL Database [00:45:26] 但是我們在講這個GNOME的時候 [00:45:29] 也有所謂GNOME Database [00:45:32] 為什麼要特別這樣講 [00:45:33] 就是說 [00:45:35] 這個我們前面一直在講所謂的co-occurrence [00:45:38] 那這個Open Source跟Database共同出現 [00:45:40] 那表示Open Source跟Database這兩個字 [00:45:43] 其實有一定的關係 [00:45:44] 我們才會一起講 [00:45:46] 那這個Linux Software [00:45:48] 然後Release這些東西 [00:45:50] 它一起出現 [00:45:51] 它的關係就會出來 [00:45:54] 然後這邊因為基因體的資料庫 [00:45:57] 叫GNOME Database [00:45:58] 但是GNOME又會跟什麼Dory [00:46:01] 多利養這些東西又會有關係 [00:46:04] 所以我們是不是這個Database [00:46:07] 就會串接基因體的一些字 [00:46:10] 然後也會串接LinuxOS的一些字 [00:46:13] 那我們是不是可以把這些關係拉近這樣子 [00:46:17] OK [00:46:18] 那我們來看一下 [00:46:20] 這十篇文章 [00:46:21] 如果我們做一個叫做TD Matrix [00:46:24] 就是所謂的Term [00:46:27] 就是我認為的關鍵字 [00:46:29] 跟我的Document [00:46:31] 十篇Document [00:46:32] 有出現這個字就比較關號這樣子 [00:46:35] 有點像說我現在就是用這幾個字來描述所有的文章 [00:46:39] 我就可以做出十篇文章的Vector [00:46:42] 那這樣的一個Matrix [00:46:45] 我們用剛才的SVD的方式 [00:46:49] 不過我們先看一下 [00:46:49] 這個矩陣 [00:46:50] 因為就兩組不同講不同的東西 [00:46:54] 那所以你發現前五篇都在講Open Source [00:46:57] 所以這邊都是0 [00:46:58] 那後五篇講Geno [00:47:00] 所以他前面這些Linux的字也都是0 [00:47:03] 所以表示說 [00:47:05] 當我要搜尋這個多利養的時候 [00:47:08] 我絕對不會找到前五篇的東西 [00:47:10] 因為關鍵字都沒有出現 [00:47:13] 不然我們就把這樣的Vector計算剛才那個過程 [00:47:17] 這有點小 [00:47:19] 那這個過程是什麼呢 [00:47:20] 再回到頭 [00:47:21] 這個 [00:47:23] 這個 [00:47:24] 就當我們做出這樣的矩陣之後 [00:47:26] 那每一個每一個Document的Vector [00:47:30] 或者是你橫的看 [00:47:31] 就是每一個字他的表示的方式 [00:47:34] 我們把這樣的一個Matrix做拆解成 [00:47:39] 用SVD拆解成這個三個向量 [00:47:42] 中間這一個是Single-Variant Matrix [00:47:45] 其實是一個對角矩陣 [00:47:47] 這個我想SVD應該 [00:47:49] 大家都都都知道 [00:47:52] 那anyway就是我有一個方式可以做一個這樣拆解 [00:47:56] 但是我們先不管後面這麼多 [00:47:59] 你可以想想看 [00:48:00] 以前你在學線性代數在算SVD的時候 [00:48:03] 有一些方法 [00:48:05] 然後也可以用 [00:48:06] 其實SVD是一個蠻有用的技術 [00:48:09] 甚至在推薦系統什麼都有用 [00:48:12] 也可以用訓練的方式 [00:48:14] 可以用逼近的方式做這些東西 [00:48:17] 好不管怎麼做 [00:48:18] 他其實運算複雜度挺高的 [00:48:22] 所以後面才會用逼近的方式在做 [00:48:25] 那假設假設沒有這些我們要exactly對的東西 [00:48:29] 那我們就是運算SVD運算 [00:48:32] 所以這個你可以想像這個一萬個維度跟一萬個維度矩陣要做SVD [00:48:36] 他的成本有多少 [00:48:38] 做出來之後呢 [00:48:40] 我們把中間這個對角矩陣呢 [00:48:42] 去取所謂的Largest K [00:48:45] 就是從從第一個到到 [00:48:48] N個當我們只舉前K個把它留下來 [00:48:53] 比如說那個對角只只有前K個留下來 [00:48:56] 後面都是0 [00:48:58] 就做出一個新的中間對角矩陣 [00:49:01] 然後再把它乘回去 [00:49:03] 他乘回去就會得到一個新的TT Matrix [00:49:06] 然後你就會發現 [00:49:08] 不太一樣 [00:49:11] 這個這個就是做出來的對角矩陣 [00:49:14] 那我們只留前兩個後面變成0 [00:49:17] 然後再把這一個矩陣呢 [00:49:18] 乘回去剛才 [00:49:20] SVD拆解出來的那個前後的矩陣再乘回去 [00:49:24] 我就可以得到一個新的TT Matrix [00:49:28] 他這個新的TT Matrix [00:49:29] 你可以發現有一些不一樣的地方 [00:49:31] 那我們剛才有highlight說這邊都是0 [00:49:34] 這邊都是0 [00:49:36] 但是他這邊有一點值出現 [00:49:39] 或者是他有一點負的值出現 [00:49:41] 比如說他他可以拉開這個關係 [00:49:44] 或者說把一些關係呢 [00:49:45] 靠著Database這個字 [00:49:47] 把它拉進來這樣子哦 [00:49:50] 就有一些有提到Database [00:49:52] 跨LinuxOS跟GNOME的的的新聞 [00:49:56] 所以靠的是中間這個字 [00:49:58] 你可以很多地方啊 [00:50:00] 你都可以trace說 [00:50:01] 其實有點影響 [00:50:02] 我就靠這個Database去propagate這個concept出去了 [00:50:07] 那這樣意思是說 [00:50:08] 以後搜尋引擎在搜尋這個關鍵字的時候 [00:50:13] 某一篇文章 [00:50:14] 他就不再是一個1號的表示 [00:50:17] 他有一些字 [00:50:18] 但是誒 [00:50:19] 可能本來是0的現在變負的 [00:50:21] 就是我可以把他他的概念拉的更開一點 [00:50:24] 但是有些關係呢 [00:50:26] 像這個D5這一篇呢 [00:50:28] 他其實 [00:50:29] 額 [00:50:30] 這個 [00:50:32] 這邊的概念就出現了 [00:50:33] 他是一個LinuxOS的句子 [00:50:36] 但是呢 [00:50:37] 他這個他就跟多力一樣有點關係 [00:50:40] 雖然你會覺得說老師這樣會不會是有問題 [00:50:43] 當然這個case看起來是有點怪 [00:50:46] 但是如果你的語料更多一點 [00:50:48] 你的關聯co-occurrence更復雜一點的時候 [00:50:52] 你就發現這個LSI做出來的東西其實還不錯 [00:50:56] 還不錯 [00:50:57] 就是在那個年代 [00:50:59] 在沒有這種大模型的年代的時候 [00:51:02] 誒這個技巧其實是非常神乎其技的 [00:51:06] 就是靠著計算 [00:51:08] 我就可以算出字跟字之間的relation [00:51:11] 或是document之間的概念如何延伸 [00:51:16] OK [00:51:20] 那這個方法 [00:51:21] 其實就叫LSA [00:51:24] 就是隱含的語義分析 [00:51:27] 你可以這樣直譯 [00:51:29] 隱含語義分析呢 [00:51:30] 在通常後面都會用在這個做retrieval [00:51:35] 做index [00:51:35] 所以這樣的一個技術 [00:51:37] 我們叫LSI這樣子 [00:51:39] 就是這樣告訴你說 [00:51:40] 以前其實在這些NN沒有出來的時候 [00:51:44] 這些這些word2vector還沒出來之前 [00:51:47] 我們怎麼去拉近貓跟狗的關係 [00:51:50] 其實也是可以靠著貢獻性 [00:51:51] 靠著計算去得到這樣的relation [00:51:54] 這是一個以前做的這樣的東西 [00:51:58] 但是你可以試著去去看 [00:52:00] 想象他的問題 [00:52:02] 因為他最大問題是在拆解那個SVD [00:52:05] 那SVD的運算複雜度是相當的高 [00:52:09] 其實你現在就vibe coding [00:52:11] 或是你直接呼叫python的SVD這樣直接做 [00:52:15] 你就發現做一個十萬維 [00:52:17] 十萬維的電腦就卡在那就做不出來這樣子 [00:52:21] 那你可以想象當我們在做一個大的語料庫的時候 [00:52:26] 我不太可能這樣做 [00:52:27] 因為那個根本拆不出來 [00:52:30] 雖然他有一些逼近的方法 [00:52:32] 成本還是相當的高 [00:52:34] 而且他會有個問題 [00:52:36] 他沒辦法incremental去update [00:52:38] 就是當我多了 [00:52:41] 這個十萬篇文章做完之後 [00:52:44] 當我有一篇新的語料 [00:52:46] 我新的語料可能是講不同domain的 [00:52:48] 以前都沒看過的 [00:52:49] 我要放進去 [00:52:50] 我要重做 [00:52:51] 我沒辦法incremental去做 [00:52:53] 他這個就必須整個core-grants-metrics-update之後 [00:52:56] 再整個重算 [00:52:59] 所以其實有時候一篇paper出來之後 [00:53:02] 後面就會有人去做他的 [00:53:04] 所謂這個我怎麼去update [00:53:07] 怎麼去做incremental的這個增加修剪 [00:53:11] 或是要把一些概念拿掉 [00:53:13] 這種他延伸都會是這個樣子 [00:53:16] 但是用SVD來做其實很難做這件事情 [00:53:18] 好 [00:53:20] 所以後面當然 [00:53:22] 那我們就用學的用算的 [00:53:25] 能夠算多少就算多少 [00:53:27] 不要叫他硬做這麼大的矩陣這樣子 [00:53:31] 所以後面就有這種比較probability的想法 [00:53:34] 其實比較像是language的model的想法 [00:53:38] 就出來了這樣子 [00:53:40] OK我想我們休息一下好了 [00:53:43] 我先看一下slide [00:53:45] 剛剛好像有個問題 [00:53:47] 我們休息10分鐘再回來 [00:53:48] 我們不期待什麼東西 [01:02:56] 我們看一下那個slide上有幾個問題 [01:03:12] 就是說我想ntu庫他當初有一個schedule [01:03:18] 就是什麼加選的時間 [01:03:21] 然後他會批次處理這些前一段加選的這樣子 [01:03:25] 所以可能應該是近期會收到 [01:03:29] 不過anyway就是如果你下週還沒有就再問一下 [01:03:34] 這樣子所以可能應該是近期會收到不過anyway就是如果你下週還沒有就再問一下 [01:03:34] 這樣子因為要開始要寫作業 [01:03:38] 有同學問這個BM25這個那個公式 [01:03:42] 那當初那個式子其實是隻是並沒有要細講每一個東西 [01:03:51] 只是精神上只是告訴你說 [01:03:54] 他就是一個變形的TFIDF這樣子 [01:03:58] 那可能我可以再補充一下上面的一些細節 [01:04:03] 對那不過 [01:04:04] 當初他們做這些東西的概念都是蠻heuristic [01:04:08] 就是經驗法則 [01:04:11] 就是這樣調一調調一調 [01:04:13] 在這樣的計算底下效果不錯這樣子 [01:04:17] OK [01:04:18] 第二個如何決定Vector要幾個維度 [01:04:22] 這個 [01:04:24] 這個你在本來這邊問 [01:04:26] 其實以前 [01:04:28] 以前這個Document Vector基本上就是Vocabulary Size [01:04:33] 但是如果你說要 [01:04:34] 決定Vector [01:04:36] 這個是我們等下做Embedding的時候會講到的 [01:04:41] 當然你會覺得說我是不是Feature越多越好 [01:04:44] 就像我們在做機器學習一樣 [01:04:46] 我就開大一點幾萬維這樣去表示一個東西 [01:04:51] 的確多一點的確有好處了 [01:04:54] 但是一般後來在做這邊的每一個字的Embedding [01:04:58] 其實都不會太多 [01:05:00] 就是了不起到1K [01:05:02] 但是通常也不會到1K [01:05:04] 這個標準的我記得好像是一個7658還是什麼 [01:05:09] 就是大概一個這樣的幾百個數字的維度 [01:05:13] 就可以來表示所有的這樣的概念 [01:05:17] 當然多也有好處 [01:05:19] 只是說多 [01:05:21] 也有做一些實驗就是 [01:05:23] 如果你有興趣 [01:05:24] 可以找一些這樣Paper [01:05:25] 但是一般我們在講我Embedding之後 [01:05:27] 你就發現說到那邊 [01:05:29] 其實大家Default做出來 [01:05:31] 大概就是那個700多個維度 [01:05:33] 嗯 [01:05:34] 那複習從World Vector變成Document Vector [01:05:40] 當然我會講這個差別 [01:05:44] 就是說你發現你用這個World Vector [01:05:46] 都發現它其實還是不對 [01:05:48] 就是做出來的Apple還是那個向量 [01:05:51] 你在講蘋果在講蘋果電腦 [01:05:53] 都還是Apple那個向量 [01:05:55] 所以後面我們才會說 [01:05:57] 所以所謂這種Contactual Vector還是很重要 [01:06:01] 那就是說怎麼把這個字 [01:06:04] 在那個句子的意思學出來 [01:06:07] 學完之後 [01:06:07] 我們會想去看整個句子 [01:06:09] 或是整篇文章的向量 [01:06:11] 這個當然就是更後期在講 [01:06:15] 這個可能到Fur以後 [01:06:17] 才會有這樣的比較合理一點 [01:06:21] 比較Practical的技術去做所謂的Document Vector [01:06:25] 大概是這樣 [01:06:27] 那這個NTU COOL上的作業 [01:06:29] 因為當初其實是Mino過來沒錯 [01:06:31] 但是理論上我們應該是 [01:06:33] 呃還沒有Open了 [01:06:34] 但是第一個Assignment應該是看得到的 [01:06:38] 那我們今天會把一些資訊都把它全部Update一下 [01:06:44] 那可能到時候大家再上去看一下 [01:06:47] 好 [01:06:49] 那我們就回到課程部分 [01:06:56] 在講這個之前 [01:06:58] 可能你會覺得怎麼跳到這個機率 [01:07:00] 這個其實會有點關係 [01:07:02] 就是 [01:07:04] 剛好昨天去開會 [01:07:08] 剛遇到中山大學老師 [01:07:10] 他說我們學校的猴子呢 [01:07:12] 都比研究生還勤勞這樣子 [01:07:14] 就是這個早上七八點就會來辦公室報到這樣子 [01:07:19] 然後傍晚也會來一次這樣子 [01:07:22] 對他們現在真的泛濫 [01:07:24] 就是幾乎就是大家可能看過網路上那個影片 [01:07:28] 他們說那是真的 [01:07:29] 沒錯 [01:07:30] 那個有遇過這樣子 [01:07:33] 嗯 [01:07:33] 嗯 [01:07:33] 嗯 [01:07:34] 嗯 [01:07:34] 嗯 [01:07:34] ,那為什麼要講猴子這件事情 [01:07:36] 那在講這個語料的時候 [01:07:39] 其實大家都會有一個有一個說法叫做無限猴 [01:07:45] 不是無限乘 [01:07:46] 就是無限猴 [01:07:47] 就是你你叫你有一大堆的猴子 [01:07:51] 然後給他們一臺電腦 [01:07:53] 就叫他們在鍵盤上打一堆字 [01:07:56] 這樣子 [01:07:57] 因為你有很多隻猴子 [01:07:58] 這樣子 [01:07:59] 其中一定可以有一隻猴子 [01:08:02] 可以打出這個莎士比亞的 [01:08:04] 文章這樣子 [01:08:05] 哦 [01:08:06] 依照機率的觀點來看是合理 [01:08:09] 哦 [01:08:09] 因為莎士比亞的鉅子 [01:08:11] 哦 [01:08:12] 這個字跟著這個字 [01:08:13] 然後雖然很長嗎 [01:08:15] 一篇文章很長 [01:08:16] 但是那個Property是算了出來的 [01:08:18] 那Property算出來之後呢 [01:08:20] 你只要把期望值變成1 [01:08:23] 就會僱用這麼多隻猴子去打這樣子 [01:08:26] 哦 [01:08:26] 哎 [01:08:26] 就有一隻這個可以變成莎士比亞這樣子 [01:08:30] 哦 [01:08:31] 這這其實大家也是告訴你說人類的文章 [01:08:34] 這樣的字的分佈 [01:08:36] 哎 [01:08:36] 他有一定的機率的演算法是 [01:08:39] 哎 [01:08:39] 哦 [01:08:40] 來這個莎士比亞的字 [01:08:42] 到這邊就會講什麼 [01:08:43] 這樣子 [01:08:44] 哦 [01:08:44] 所以他是有一個pattern [01:08:46] 有一個機率的 [01:08:47] 哦 [01:08:48] 所以如果我們可以學會 [01:08:52] 讓電腦學會說啊 [01:08:53] 你看到這幾個字 [01:08:54] 下一個字應該是什麼 [01:08:56] 以人類的nudge來看 [01:08:58] 他應該是什麼字的時候 [01:09:00] 哎 [01:09:00] 這樣的表示是不是有一點用來呈現 [01:09:04] 這個語言 [01:09:05] 或是每個字的概念的這樣的一個量化的呈現 [01:09:10] 哦 [01:09:10] 所以這個這個年代大家就希望說 [01:09:13] 哎 [01:09:14] 那 [01:09:15] 那我把這個計算的公式寫好之後 [01:09:18] 我就讓電腦去根據人類的文章去學一學 [01:09:24] 哦 [01:09:24] 學完之後 [01:09:25] 他是不是就可以算出哦 [01:09:27] 這個字應該要表示這樣在機率的計算的時候 [01:09:31] 才會是什麼 [01:09:32] 哦 [01:09:32] 才會符合人類的文章的方式啊 [01:09:34] 這樣的分佈哦 [01:09:35] 所以那個年代一堆人在做這件事情哦 [01:09:40] 不過這個這個probability的想法有很多層面 [01:09:44] 或是很多的細緻度 [01:09:46] 那我們來看一下所謂的呃 [01:09:49] 我可以非常單純的啊 [01:09:51] 這個unary language model [01:09:53] 就是字跟字之間是完全獨立的啊 [01:09:56] 就是我看到一個句子哎 [01:09:58] 他其實他這個句子發生的機率就是每個字發生的機率相乘哦 [01:10:02] 那依照機率來看就是 [01:10:04] 字跟字之間是是完全獨立的事件哦 [01:10:07] 但其實這樣文字不是哦 [01:10:10] 至少會長這樣哦 [01:10:11] binary language model [01:10:12] 這個其實已經也非常的陽春了 [01:10:15] 就是我下一個字只跟前一個字有關哦 [01:10:19] 我會再看多一點的字這樣子哦 [01:10:22] 所以我一句一句話出來 [01:10:23] 我要算這句話 [01:10:25] 他到底在人類的語言史上發生的機率 [01:10:29] 我就去算所有人類的文字中 [01:10:33] 這個字 [01:10:34] 後面會跟著這個字的property我算出來 [01:10:37] 然後就把這個property乘出來這樣子哦 [01:10:41] 那這個是binary [01:10:42] 那你可以想象說哎 [01:10:44] 我如果這個更長一點 [01:10:47] 我tri-gram或是4-gram或是更長或是做到n-gram [01:10:50] 那是不是就好像很complete去計算這件事情 [01:10:55] OK所以我們之後再算所謂的perplexity [01:10:58] 其實精神上也是這樣 [01:11:00] 我覺得我看到這些字之後 [01:11:02] 看到你你輸入了這些prong之後 [01:11:06] 這個這個GPT要decode下一個token [01:11:09] 哪一個機率是哪一個字的機率是最高的 [01:11:12] 這樣子哦 [01:11:13] 有點這個味道哦 [01:11:14] 他就我們就是希望能夠可算這個東西是可計算 [01:11:20] 那但是有時候我們說哎 [01:11:22] 那那我要怎麼讓電腦去學這件事情哦 [01:11:26] 那這個是在這個是word2vec當初的paper model [01:11:30] 提到這兩種的 [01:11:33] 就是有點像 [01:11:36] 你可以說哎你是不是像克漏字的學習 [01:11:38] 但是他要給兩種不同的學習的方式哦 [01:11:42] 那大家就知道說先記一下名字 [01:11:45] 一個叫CBOW一個叫Skip-gram [01:11:48] 那CBOW其實是比較有點像克漏字的 [01:11:51] 其實叫continuous break of wall [01:11:53] 就是他其實在算什麼 [01:11:56] 當我這個句子我知道他的前後文 [01:11:59] 我知道前後文的時候 [01:12:02] 我要猜他的center wall [01:12:05] 就是猜他中間那個 [01:12:06] 那個字哦 [01:12:07] 我可以算他property [01:12:09] 就有點像克漏字 [01:12:10] 這是CBOW [01:12:12] 但是一般來講CBOW我們 [01:12:15] 在訓練比較不是那麼直覺 [01:12:17] 然後也比較不容易 [01:12:18] 反向我們會做Skip-gram [01:12:22] 就是我們會當你看到這個字的時候 [01:12:25] 他前面應該長什麼 [01:12:27] 後面應該長什麼 [01:12:28] 這樣子哦 [01:12:29] 就是有各種可能各種可能比較比較克漏字 [01:12:32] 比較像哎 [01:12:33] 你看到這個字的時候 [01:12:35] 你前面 [01:12:36] 聯想到什麼 [01:12:36] 後面聯想到什麼 [01:12:38] 他會去算出這樣的property [01:12:41] 那我們之後會帶那個WV的model [01:12:44] 經驗上就是用這種方式去算的 [01:12:47] 其實有點也像這種BIGRAND的方式 [01:12:51] 就是我給你一個字 [01:12:53] 他下一個字 [01:12:53] 但是我們會看他的co-occurrence周邊的字 [01:12:56] 這樣子 [01:13:00] 所以我們有了語料庫之後 [01:13:02] 根據該Skip-gram [01:13:03] 我們就一個contact window size是1的 [01:13:06] 就是比如說這句話 [01:13:09] 那我從第一個字開始 [01:13:11] contact window是1代表我就接連的一個字 [01:13:16] 那CENTERWALL是折 [01:13:17] 然後我的contact就是CAT [01:13:19] 下一個CENTERWALL是CAT的時候 [01:13:21] 他的contact就是折跟lickit [01:13:24] 就是這樣子 [01:13:26] 就是語料來 [01:13:27] 我就scan一遍 [01:13:28] 我就可以建立出這個TRAINING的WALLPAYER [01:13:32] 有INPUT有OUTPUT [01:13:34] 我那字太美好了 [01:13:35] 就是 [01:13:36] 可以訓練 [01:13:37] 就是我有一個SUPERVISED DATA做這件事情 [01:13:43] 我剛才講這個步驟 [01:13:44] 其實你會覺得很trivial [01:13:47] 但是這個動作其實是一個 [01:13:51] 非常 [01:13:53] 你說有創意嗎 [01:13:54] 或是說一個人類的一個 [01:13:58] 我覺得是一個訓練上的一種巧思 [01:14:02] 就是說 [01:14:03] 當你在記憶學習 [01:14:05] 你只能說 [01:14:05] 老師這個SUPERVISED DATA訓練資料很少 [01:14:09] 每次跟廠商合作 [01:14:10] 他們只標十筆 [01:14:11] 就叫我們做出一個很厲害的模型 [01:14:13] 怎麼可能 [01:14:14] 所以SUPERVISED DATA的多廣跟誇合體 [01:14:18] 會影響模型的能力 [01:14:21] 這大概無用字 [01:14:22] 但是通常絕對你拿不到這麼多 [01:14:26] 尤其是在做大量語料的東西的時候 [01:14:28] 你不帶個人去找語言學家去標說 [01:14:30] 這個字他理論上前後字是不是 [01:14:32] 所以你就要自己設計你的訓練資料 [01:14:37] 那怎麼設計 [01:14:38] 說好吧 [01:14:39] 來找同學一起這樣十個人 [01:14:41] 然後每天都熬夜去標這些 [01:14:44] 其實不用那麼複雜 [01:14:45] 你就自己設計一個方式 [01:14:49] 從UNSUPERVISED的COPUS [01:14:53] 這個概念就很簡單 [01:14:54] 我就看到CONTEXT [01:14:56] 他的前後文應該是什麼 [01:14:59] 我的INPUT看到這個字 [01:15:01] 我的OUTPUT應該是CAT [01:15:02] 我看到CAT的我的OUTPUT應該是THE跟NICKED [01:15:06] 這樣子 [01:15:07] 所以你就可以去寫一個程式 [01:15:09] scan一下 [01:15:10] 這個把維基百科抓下來 [01:15:12] scan一下這個word pair [01:15:16] 那你說我可以做CONTEXT WINDOW SIZE.2 [01:15:20] 我就發現變多了 [01:15:22] 一個字前後兩個字 [01:15:24] 他的PAGE就變多 [01:15:26] 我就可以看更多的東西 [01:15:28] 那自動化的方式 [01:15:30] 產生一個這樣的監督式 [01:15:32] 這樣的學習 [01:15:33] 這其實都是後來 [01:15:35] 一個在NLP非常常用的概念 [01:15:40] 因為我們不太可能去找人 [01:15:42] 去標很多的這樣的訓練資料 [01:15:44] 所以這也是為什麼像TRANSFORMAL [01:15:46] 後來像BIRD這種模型 [01:15:48] 做克漏字 [01:15:50] 做NLM [01:15:51] 做MASKING這種動作 [01:15:52] 其實就是你可以設計一下 [01:15:54] 這種UNSUPERVISED TRAINING的方法 [01:15:57] 使得他可以大量的自己在那邊學 [01:16:00] 你不用人在介入 [01:16:01] 那人 [01:16:02] 唯一要介入就是提供人類所有的knowledge [01:16:05] 這樣子 [01:16:06] 好 [01:16:07] 那這是CONTACT WINDOW.1的 [01:16:09] 當然你會覺得好像就是 [01:16:11] 就是SERUNDING的一個字 [01:16:12] 但是2的時候 [01:16:13] 你可以發現 [01:16:14] 我就SERUNDING兩個字這樣子 [01:16:16] OK [01:16:18] 好 [01:16:19] 我們先看這個圖 [01:16:21] 其實之前有同學問我說 [01:16:22] 如果沒有學過機器學習 [01:16:25] 學這麼個課會不會有點辛苦 [01:16:29] 其實我是覺得還好 [01:16:31] 但是我不知道 [01:16:32] 如果你沒學過機器學習 [01:16:34] 你看這個圖會有什麼感覺 [01:16:37] 可能我不知道你的想象力豐富這樣子 [01:16:41] 的確我不會講NN的東西 [01:16:43] 所以你可能要自己catch一下這些概念 [01:16:48] 那講WATTO VECTOR [01:16:49] 其實我上面擺一個連結 [01:16:51] 這個連結其實我覺得是蠻平易近人 [01:16:55] 就是你可以看懂那裡面的概念 [01:16:59] 我們先來看這件事情 [01:17:01] 他其實WATTO VECTOR是什麼概念呢? [01:17:02] 他其實就是在一個非常簡單的一層hidden layer的NN模型做訓練 [01:17:09] 這樣一層其實你可以想像 [01:17:12] 如果你做過類似人性網路的學習 [01:17:14] 你就知道就兩個矩陣 [01:17:16] 就是這邊的A局的weight跟這邊的A局的weight [01:17:20] 所以我們就是要train出這兩個matrix [01:17:25] 這兩個matrix前面是V [01:17:27] 其實就是我們要的embedding或embedding [01:17:30] 為什麼? [01:17:30] 這個就是我們要的 [01:17:31] 我們之後再講 [01:17:32] 就是這樣你可以想像一個這樣簡單的一層hidden layer [01:17:36] 然後我的input是什麼? [01:17:38] 我的input是我的one-hot的train data [01:17:43] 就是剛才我們的train data長這個樣子 [01:17:46] 就是這個字進來輸出就是這個字 [01:17:50] 這個字進來我們還不知道他什麼概念 [01:17:52] 但是我就給他one-hot [01:17:54] 比如說我們的字典 [01:17:56] 1萬個字 [01:17:57] 那他就是長度1萬的一個one-hot的Vector [01:18:01] 這個one-hot的Vector進來之後 [01:18:03] 假設這個模型已經學好了 [01:18:06] 他就會學會中間這個hidden layer的neuron的表示 [01:18:12] 所以是什麼? [01:18:13] 我如果這邊有300個neuron代表什麼? [01:18:16] 我就用這300個hidden state [01:18:19] 有300個數字 [01:18:20] 300個數字來表示中間我input的這一個one-hot之後 [01:18:25] 他應該要長這300個數字 [01:18:28] 再透過這300個數字呢? [01:18:30] 這300個數字可能就是描述我這個圖的例子 [01:18:34] 是paper的例子 [01:18:35] 就是這個螞蟻 [01:18:37] 就是這個hands [01:18:38] 我用這300個數字來描述這個單字 [01:18:41] 然後這300個數字呢 [01:18:42] 再透過這些combination [01:18:45] 然後去預測他的surrounding text [01:18:50] 他的context是什麼? [01:18:52] 所以比如說剛才的這個cat進來之後 [01:18:56] 我就抓出這300個cat應該表示什麼之後 [01:19:00] 再透過 [01:19:00] 那個combination之後 [01:19:01] 我就能就預測說 [01:19:02] 你的surrounding text應該是the跟decade [01:19:06] 機率要很高 [01:19:07] 其他都要很低這樣子 [01:19:09] 所以如果模型在透過這樣學習 [01:19:13] 他能夠很正確的預測出這個字的surrounding text [01:19:18] 就在那個contact window下surrounding text [01:19:21] 那我們其實是可以claim說 [01:19:24] 這樣的模型學會的這樣的一個表示其實是知道 [01:19:30] 人類的文字的概念 [01:19:33] 這是一個非常strong的假設 [01:19:37] 就是他只是預測他的surrounding text [01:19:40] 但是你說可以預測surrounding text [01:19:43] 那就懂得文字了這樣子 [01:19:45] 這個這邊的一個claim是這個樣子 [01:19:49] 就跟以前 [01:19:50] 以後我們在講transformer之後 [01:19:53] 就知道說原來做完克漏字之後 [01:19:55] 這個birth就可以告訴我們整句的表示是什麼 [01:20:00] 有點像這樣的味道 [01:20:01] 只是當初是一個非常 [01:20:03] 這個當初其實還沒有deep learning [01:20:05] 所以他就是這個一層hidden layer的東西去選 [01:20:09] 那我們當初說這兩個vector [01:20:13] 一個是v的matrix [01:20:15] 一個是u的matrix [01:20:17] 那其實整個模型圈完之後 [01:20:20] 其實你的embedding在哪裡 [01:20:21] 你的embedding就是前面第一個v [01:20:24] 就是你這個第一層的weight的矩陣 [01:20:29] 那個等下 [01:20:30] 你就可以知道這是什麼意思 [01:20:33] 所以在這整個過程 [01:20:34] 這整個過程其實就是 [01:20:36] 我們會有一個機率模型 [01:20:38] 這機率模型就長這樣 [01:20:39] 非常簡單的兩層的這個NN [01:20:43] 然後你會有剛才我們切出來那些trump [01:20:45] 那些word pair [01:20:47] input什麼字output什麼字這樣子 [01:20:49] 然後你現在做模型的參數的學習 [01:20:54] 這邊的學習過程其實就是NN的學習 [01:20:57] 因為你有output data [01:20:59] 你有output data [01:21:00] 你就知道說input什麼應該output什麼 [01:21:02] 所以你可以算出loss [01:21:04] 你可以算出這個NN的loss是什麼 [01:21:07] 然後你就可以去update整個這個參數 [01:21:10] 就是那個uv的參數 [01:21:12] 使得這整個模型圈完之後 [01:21:15] 收斂完之後loss變低了之後 [01:21:17] 它能夠很精確的預測出這個字cat [01:21:21] cat進去之後 [01:21:22] 它能夠預測出這根decade這樣子 [01:21:26] 它其實精神上就是這樣 [01:21:28] 只是說我們現在是用 [01:21:30] 我們的model就是說我看到CenterWall [01:21:33] 我要去預測ContextWall [01:21:36] 所以CenterWall在這裡 [01:21:40] 然後ContextWall在這裡 [01:21:41] 它要能夠predict這樣子 [01:21:44] 所以當然有很多細節 [01:21:48] 包含說我們的VocabularSize一萬 [01:21:51] 我這邊也是VocabularSize一萬 [01:21:53] 就是你要cat要能夠預測 [01:21:56] 所有相對於在這個字典裡面 [01:21:59] 一萬個字的Probability [01:22:01] 那中間這個就是可能可能剛才有同學問的 [01:22:05] 這個WallVector要設多大的這個這一塊 [01:22:09] 那你可以設300 [01:22:11] 當然我記得好像Default是700多的樣子 [01:22:13] anyway就是你可以自己調整 [01:22:16] 我才說老師我錢很多 [01:22:17] 我設一萬好不好 [01:22:19] 可以但是效果不會比較好 [01:22:22] 就是你可以用更大更長的Vector [01:22:25] 來學會這個東西的表示 [01:22:29] 好這個這邊的步驟其實就是 [01:22:32] 把NN的細節再帶一遍 [01:22:35] 我先用例子來講一下 [01:22:38] 就是說好比如說我們進來的字就是這些字 [01:22:42] 我們Vocabular就是這個8個字 [01:22:45] 所以我的一開始One-Hot Vector長度就是8 [01:22:48] 然後就是One-Hot像這個cat就是在第二個字是1這樣子 [01:22:52] 所以我的Input就是一個One-Hot [01:22:55] 而且是VocabularSize的長度這樣的一個Vector [01:22:59] 然後我透過這個V [01:23:01] 我們就假設他已經學完了 [01:23:02] 學完之後我這個V做什麼事情 [01:23:07] 他其實就是存著每一個字的最後的Embedding [01:23:11] 雖然一開始我們不是這樣假設這件事情 [01:23:14] 但是這樣的一箇中間這個Metrics學到了 [01:23:17] 其實因為我這個One-Hot [01:23:19] 我這One-Hot其實就是把中間這一個第二個Row把它提取出來 [01:23:25] 所以當我看到cat的時候 [01:23:27] 我就Output第二個Row [01:23:28] 第二個Row就是cat的最後學到的我Embedding [01:23:32] 這個我Embedding其實你可以想像我們現在在這裡 [01:23:36] 這cat的Vector就是在這300個neuron的數字這樣子 [01:23:40] 這300個neuron的數字cat這是第二層的部分 [01:23:46] cat在後面那一層的Umetrics [01:23:51] Umetrics其實當初這樣寫有點不太對 [01:23:55] 你會覺得這是也是cat的Metrics [01:23:57] 不是他其實是對cat來講的Output Weight [01:24:02] 這什麼意思呢 [01:24:05] 我這邊Highlight這個意思就是 [01:24:08] 這個當初cat進來之後 [01:24:09] 我把這cat的300個數字透過一個 [01:24:15] 你知道NN就是一個Weighted Sound [01:24:17] 就是我一個把這300個數字做一個加權 [01:24:20] 然後從Max之後我就輸出一個值 [01:24:24] 這個值就是Ability的值的Probability [01:24:28] 當然中間有一些neuron來源我就省略了 [01:24:32] 這樣的計算代表什麼 [01:24:34] 就是好吧 [01:24:35] 那意思說我可以根據你當初學會的貓的這300個數字 [01:24:41] 加權一下這是cat的Weight [01:24:45] 這個橘色的箭頭就是cat的Weight [01:24:47] 然後他可以算出說 [01:24:49] 原來cat跟Ability之間的關係就是學這幾個權重 [01:24:55] 那這個U就大了 [01:24:57] 這U就大多了 [01:25:00] 也不是大多 [01:25:01] 其實是一樣 [01:25:01] 因為這邊也是100 [01:25:02] 這邊是10000到300 [01:25:04] 這邊是300到10000這樣子 [01:25:08] 只是說這邊要學的比較複雜一點 [01:25:11] 就是學我這300個值怎麼去輸出每一個字的Probability [01:25:18] 你也不要管他怎麼學 [01:25:19] 反正就是NN [01:25:20] 你只要給他的World Pair Input Output [01:25:23] 他就可以靠著Loss Backpropagation去學會這些Weight [01:25:27] 然後學會這個Weight [01:25:29] 學完Weight的時候 [01:25:31] 我們就把這個Matrix [01:25:32] 拉出來當成是我學會的Weight Embedded [01:25:36] OK [01:25:38] 所以這個過程大概這樣 [01:25:40] 那後面這邊就是在NN學的過程 [01:25:44] 就是你的Input是這樣 [01:25:46] Output是這樣 [01:25:47] 這是你的Training Data [01:25:48] 但是你真正的Forward Pass之後 [01:25:51] 你的Y Head值會長這樣 [01:25:54] 你會做Normalize之後 [01:25:56] 你會發現這個Probability大概是這樣子 [01:25:59] 有高有低 [01:25:59] 有些比較高這樣子 [01:26:00] 有些比較低 [01:26:02] 我想大家都會做 [01:26:03] 就是我們就算一個Cross Entry [01:26:06] 就算我的標準答案這樣 [01:26:08] 跟你算出來的每一個這個所有的這些Logic的這種Probability分佈 [01:26:16] 那我可以算一個Loss [01:26:18] 就是我理論上這個要1 [01:26:20] 你這個Probability怎麼那麼低 [01:26:22] 我就要調整一下 [01:26:23] 我就要Backpropagation回去 [01:26:25] 改變一下我的參數 [01:26:29] 這個參數還有這個參數這樣子 [01:26:31] 這是兩個都是當初的 [01:26:32] NN的參數的東西 [01:26:36] 所以它其實不是DeepLine的東西 [01:26:37] 它其實是一個非常小的模型 [01:26:39] 小的一個以前類神經網路剛開始的長相 [01:26:43] 就是一層Hidden Layer做出來的東西 [01:26:47] 只是靠著這樣學習 [01:26:48] 學到後來發現我們的V-Metrics [01:26:52] 貌似這些Wall-Embedded [01:26:55] OK [01:27:00] 所以我其實都不是用很Homo的東西在講 [01:27:07] 我都是用比較口語的東西在講 [01:27:09] 但是希望你可以去了解說 [01:27:12] 為什麼人家這個一層的NN就可以搞這麼厲害的事情 [01:27:17] 那為什麼這樣的一個Wall-Pair [01:27:19] Context-Wall的學習的過程 [01:27:24] 我就可以學會說 [01:27:25] 原來這個做出來的Metrics [01:27:27] 就是每一個字的Embedded [01:27:30] 然後透過這個字的Embedded [01:27:32] 我再透過這個 [01:27:34] 這有點像字跟字之間的Bullation [01:27:37] 你的Metrics去計算出它的Context的Probability [01:27:43] OK [01:27:45] 這樣算完之後 [01:27:46] 我就可以得到Wall-Embedded [01:27:48] 就不再是One-Hot的東西了這樣子 [01:27:52] OK [01:27:53] 所以我們的第一個Assignment [01:27:56] 你就是要做這件事情 [01:27:59] 那當然你不用自己刻這些模型 [01:28:03] 那你就呼叫這些Package就有現成的模型 [01:28:06] 或者說以後你也不用做這些模型了 [01:28:07] 你也不用自己創建了 [01:28:08] 反正這些現成的套件Wall-Embedded [01:28:11] 雖然也不見得會一直用Wall-Embedded [01:28:14] 反正Wall-Embedded就可以拿人家創建好了 [01:28:17] 然後或我自己再Update一下 [01:28:19] 或我自己創建放Scratch也可以 [01:28:21] 但是精神上就是這樣 [01:28:24] 那我後面有擺兩個 [01:28:29] 一個是GloVe一個是FastText [01:28:32] 當初做這個Wall-to-back出來之後有一些延伸 [01:28:36] Wall-to-back大概是2013年 [01:28:38] 然後GloVe是2013年 [01:28:40] 現在是2014年 [01:28:42] 大佬在這 [01:28:44] Crystal在這 [01:28:45] Stanford [01:28:46] 就是他們其實都跟得很快 [01:28:47] 這些新的東西 [01:28:49] 立刻就把展開所有的研究的問題都出來了這樣子 [01:28:55] 那他的想法是什麼 [01:28:57] 你看到這個Global這個字你就知道 [01:29:00] 原來Wall-to-back的是Local [01:29:02] 它是Global這樣子 [01:29:03] 你可以做這樣的對比 [01:29:05] 的確我們當然剛才的 [01:29:10] 剛才的做康復的這個方式 [01:29:11] Context Window那一塊 [01:29:14] 非常Local [01:29:15] Context Window等於1 [01:29:17] 你說老師我做大一點做到3 [01:29:22] 也蠻Local的這樣子 [01:29:24] 那GloVe他算的是什麼 [01:29:27] 他算的是整體的統計的東西 [01:29:32] 我這邊就擺這幾個字 [01:29:33] 當然如果你有興趣可以去看paper再算的東西 [01:29:37] 所以他多了一點Global的資料之類的 [01:29:40] Global的資料這樣子 [01:29:44] 那 [01:29:45] 其實是 [01:29:46] 蠻可以看的在paper [01:29:49] 那另外一個FastText [01:29:51] 其實 [01:29:53] 當初FastText出來之後 [01:29:56] 大家覺得他應該會是 [01:29:58] 重點 [01:29:59] 因為他有現在的Tokenizer的 [01:30:02] 前型這個雛形的椅子 [01:30:04] 就是 [01:30:05] 他是他有做到Pack Label [01:30:08] 因為其實你做 [01:30:10] 這也會在Assignment 1討論 [01:30:12] 就是說你當你在做這件事情的時候你會發現 [01:30:16] 我一些特殊的字呢 [01:30:18] 我是一些新創的 [01:30:20] 尤其是英文這種 [01:30:21] 常有些奇怪的片語的字 [01:30:24] 以前語料庫沒有 [01:30:25] 學不到他的概念怎麼辦 [01:30:27] 或是常有些醫學上的字是拼湊的 [01:30:31] 拉丁美字那種前後綴的東西拼湊的東西 [01:30:35] 以前沒看過什麼 [01:30:37] 所以FastText其實是有 [01:30:39] 從Categor Label開始做 [01:30:43] 那 [01:30:45] 其實也有一點在做 [01:30:47] n-gram的Sliding [01:30:49] 就是以比如說以中文來講 [01:30:52] 他會做這樣n-gram Sliding [01:30:54] 的確有一些做 [01:30:56] 就是像這幾個如果有機會可以去看 [01:30:59] 但他其實有擺到說 [01:31:02] 中文的Morphology [01:31:05] 就是比如說 [01:31:06] 步驟啊 [01:31:07] 用步驟拆解這樣子 [01:31:09] 不過那個就 [01:31:12] 那學問很大 [01:31:13] 就是說 [01:31:15] 英文我們會做Categor Label [01:31:17] 就是說比如說我會做單 [01:31:18] 單一的字母 [01:31:20] 或是這些前最次比如說IN啊PRE啊 [01:31:23] 或是結尾 [01:31:24] 給了Y的這種的學習 [01:31:27] 但是以中文來講其實很難去 [01:31:30] 做這樣的事啊 [01:31:32] 多半中文可能就是用 [01:31:34] 用比較大一點的n-gram來 [01:31:36] Count這些東西 [01:31:38] 所以其實他可以解決說 [01:31:39] 所謂的Out of Vocabulary的問題 [01:31:42] 就是說他可以靠著雖然也沒看過這個字 [01:31:45] 但他可以拼湊啊 [01:31:47] 他可以拼湊出這個以前叫什麼 [01:31:49] 這個東西叫什麼 [01:31:50] 尤其是醫學醫學很多都可以這樣拼湊出來 [01:31:53] 你會發現醫學字 [01:31:55] 有一些什麼 [01:31:56] 什麼疾病啊症狀啊 [01:31:58] 或是指人體的部位什麼的東西 [01:32:01] 他其實都是拼湊 [01:32:02] 你只要能夠拆解出每個意識 [01:32:04] 意識都蠻接近的 [01:32:06] 他都可以這樣做出來這樣子 [01:32:08] FastText [01:32:09] 現在其實你用套件都可以交出這種 [01:32:13] GloVe FastText的Embedding這樣子 [01:32:17] 所以到底打個好 [01:32:18] 不知道 [01:32:19] 其實 [01:32:20] 各有利弊啊 [01:32:21] 其實你在你的 [01:32:22] 你的不同領域都可以試試看這樣子 [01:32:25] 當然一般來講我們會覺得GloVe比word2vec好 [01:32:29] 這樣子 [01:32:29] 就是 [01:32:31] 某種程度上比較有一些subset superset的關係 [01:32:35] 但是FastText跟GloVe之間的關係 [01:32:38] 倒不一定 [01:32:39] 不一定 [01:32:40] 通常我們 [01:32:42] 以前啊以前就是JLM還沒出來之後 [01:32:44] 以前 [01:32:45] 我們都會他比如說拿這個東西 [01:32:47] 我們自己每一筆在拿自己的Corpus [01:32:51] 再重新圈或是再微調一下這樣子 [01:32:55] 就儘量讓這個OOV的問題降低這樣子 [01:32:59] 那到底什麼怎麼樣去評估我做出來的東西好壞啊 [01:33:03] 有一個dataset叫做Fosting [01:33:05] 這個其實蠻小的 [01:33:07] 這個你看這個數字就知道 [01:33:08] 其實蠻小的 [01:33:09] 它大概就算這些 [01:33:11] 它有一些人工給的 [01:33:13] 這兩個字應該相似度長這樣這樣 [01:33:15] 它就給你一些分數這樣 [01:33:18] 那你自己 [01:33:19] 自己做出 [01:33:20] Embedded之後再去看看我的這兩個字的相似度是不是跟這個很像這樣 [01:33:26] 這個WordSim其實是 [01:33:30] 蠻舊的 [01:33:31] 但是還算是個可以用的啦 [01:33:34] 等下我們會看到 [01:33:35] 這個MTEB這樣子 [01:33:37] 它就更復雜一點了 [01:33:39] 這樣子 [01:33:42] 然後最後這個是 [01:33:43] 這個我們最後 [01:33:46] 其實是這大概是一年前的新聞 [01:33:49] 就是它是一家公司這家公司 [01:33:51] 它其實是 [01:33:52] 做 [01:33:54] Vector Database [01:33:55] 其實你知道有N出來之後 [01:33:57] 大家就發覺其實 [01:33:59] 需要RAG [01:34:00] 需要RAG [01:34:01] 大家就有些公司就去把一堆 [01:34:05] 特殊的語料特殊的資料可能需要授權的資料幹嘛 [01:34:09] 就是這個這個公司說我要這樣服務他就幫 [01:34:12] 這家公司建立所謂的Vector Database [01:34:15] 然後讓他嫁接一些人去提供服務 [01:34:19] 所以 [01:34:20] 有一些公司在做這樣的事情 [01:34:22] 那這是那個公司的 [01:34:24] 技術 [01:34:25] 技術長 [01:34:26] 他講的事情 [01:34:28] 大家可以去看一下這個報道 [01:34:30] 就是他一年前寫的 [01:34:32] 就是他做這個公司的 [01:34:35] 心得 [01:34:36] 其實第一句話對你們蠻重要的 [01:34:39] BM25是一個還是一個很strong的Base Line [01:34:42] 就是 [01:34:44] 還是很有用 [01:34:45] 還是很有用雖然他是一個 [01:34:48] 靠著Sparse [01:34:50] Vector [01:34:51] 簡單的算關鍵字但是他還是有一點權重 [01:34:55] 他有點權重其實 [01:34:57] 就那個效果就會出來 [01:34:59] 那你說 [01:35:00] 老師那他這麼強那我們幹嘛學 [01:35:02] 這種Dense Vector [01:35:04] 幹嘛學所謂的 [01:35:06] Wall Embedding啊 [01:35:07] Sentence Embedding [01:35:09] 的確沒錯啦 [01:35:11] 就是 [01:35:14] 我們做出來的Wall Embedding或是之後提到的Sentence [01:35:18] 或Document Embedding [01:35:19] 的確能夠很 [01:35:21] 比較精確去Capture [01:35:22] 整個句子的意思或是說 [01:35:24] 每個字的動態的表示他能夠抓得到 [01:35:28] 但是你可以想象 [01:35:29] 因為那個向量的表示是 [01:35:33] 整個句子 [01:35:37] 而不是單字的一些概念 [01:35:39] 所以當你 [01:35:40] 你想要找的東西其實就是句子裡面非常重要的關鍵字的概念的時候 [01:35:46] 其實 [01:35:47] 那個 [01:35:49] 通常你的 [01:35:50] 用Sparse的Metrics [01:35:52] 反而效果會比較好 [01:35:54] 比如說我講一句話 [01:35:56] 我今天來上自然語言課程 [01:35:59] 自然語言處理課程 [01:36:00] 然後跟你講一句話我今天去上機器學習課程 [01:36:05] 雖然 [01:36:06] 重點的課不一樣 [01:36:08] 但是你前面的字都一樣啊就是 [01:36:10] 今天跟我然後去上 [01:36:13] 這些都一樣啊 [01:36:14] 那 [01:36:15] 那電腦哪知道你的Highlight是什麼 [01:36:19] 他反正就是把整句話學會一個表示告訴你 [01:36:22] 這學會的表示是什麼 [01:36:23] 其實我們也不知道那個向量是什麼 [01:36:26] 他可能會把說原來是你個人今天做了什麼事 [01:36:30] 只是說那個事情有一個課程在裡面 [01:36:33] 所以你可以想象那個課程其實在整句的Embedding所帶來的含量 [01:36:39] 其實 [01:36:40] 不是 [01:36:42] 不是非常的被凸顯出來 [01:36:44] 雖然你說 [01:36:45] 上了課的課本也不是很重要 [01:36:48] 但是 [01:36:49] 他就會浮掉 [01:36:51] 所以通常我會講模糊就是這樣 [01:36:53] 因為他會跟其他字的概念 [01:36:55] 混在一起 [01:36:56] 所以他的字就他的意義就不是這麼的凸顯 [01:37:01] 所以當你以後如果用一些BERT [01:37:03] 或是你拿LM來當Encode轉換成Sentence Embedding [01:37:08] 或者是Document Embedding的時候 [01:37:10] 你就發現其實 [01:37:12] 那個向量的分佈 [01:37:14] 就違背了我們一開始在講Ombedding的時候 [01:37:17] 我們希望做到 [01:37:19] 就是非常分散 [01:37:21] 非常有鑑別性 [01:37:22] 其實沒有 [01:37:23] 尤其是當你句子越長的時候 [01:37:26] 概念就會 [01:37:27] 概念就會 [01:37:28] 越來越小這樣子 [01:37:29] 這是什麼意思呢 [01:37:31] 就比如說 [01:37:33] 你教員 [01:37:35] 請你把今天的影片輸進去 [01:37:37] 請用一句話來描述老師今天講的重點 [01:37:40] 你覺得他會說什麼 [01:37:43] 然後明天的下禮拜的 [01:37:45] 你再教員去說請用一句話來 [01:37:47] 摘要老師今天講的重點 [01:37:49] 搞不好你發現16周 [01:37:51] 重點都一樣這樣子 [01:37:53] 老師在教NLP這樣子 [01:37:55] OK [01:37:56] 所以當你的句子越長 [01:37:59] 你要講的東西越多的時候 [01:38:01] 你又用同樣的這個 [01:38:04] Embedding Size [01:38:05] 去描述他的時候 [01:38:07] 他的概念就會非常的Centralized [01:38:09] 非常的難以區分 [01:38:12] 所以這個當然就是 [01:38:13] 就是現在用LM當 [01:38:15] Decoder的問題 [01:38:17] 或是說 [01:38:18] 拿LM來當Encode也會有這個問題 [01:38:22] 不過這個就看你自己 [01:38:23] 對這東西體會 [01:38:25] 什麼時候該嫁接什麼樣的東西 [01:38:27] 比較敏感度高 [01:38:29] 所以 [01:38:29] 也不是everything都是拿LM就可以 [01:38:32] 解決掉了 [01:38:34] 後面其實有一些 [01:38:36] 這是他Highlight的一些重點 [01:38:38] 這個MTEB蠻值得看的 [01:38:39] 我不知道我現在點下去 [01:38:41] 我去做啥事 [01:39:05] 做啥事好了 [01:39:13] 把他Tick過來 [01:39:15] 你可以繼續看MTEB [01:39:17] 他其實是一個蠻標準的 [01:39:19] 做Embedding的Benchmark [01:39:21] 然後有分 [01:39:24] 語言 [01:39:25] 有分語言 [01:39:26] 然後有分 [01:39:27] 現在的這種Modality [01:39:29] 或者是說 [01:39:30] 你的任務 [01:39:32] 然後或者是說不同Domain [01:39:34] 比如說Code [01:39:35] 做Code或是什麼 [01:39:38] 其實是一個蠻 [01:39:40] 而且現在也蠻 [01:39:42] 蠻Hard [01:39:43] 也不是說蠻Hard [01:39:44] 就是蠻常被Reference的一個Benchmark的壓縮 [01:39:48] 其實 [01:39:50] 其實做NLP或是做現在AI的人 [01:39:53] 看到Benchmark的壓縮都 [01:39:55] 都會非常興奮 [01:39:57] 這個好多好多 [01:39:58] 然後 [01:39:59] 他搞不好還可以拿來 [01:40:01] 幫你做一些其他事情 [01:40:04] 這個MTEB是 [01:40:05] 蠻值得去看一下 [01:40:07] 那 [01:40:07] 現在如果你自己想做一個非常厲害的Volume Evaluate [01:40:11] 你就會在 [01:40:12] 這些Leaderboard上去跟大家比說 [01:40:14] 這個在 [01:40:15] 某個語言 [01:40:16] 或是某個任務 [01:40:17] 大家做怎麼樣這樣子 [01:40:20] OK [01:40:28] 這樣會跑掉嗎 [01:40:40] 摸個就不要去動他 [01:40:45] 底下幾個重點 [01:40:47] 就是說當然我們現在是 [01:40:49] 做所謂的 [01:40:50] Static Embedding [01:40:51] Waterback GloVe [01:40:52] 就是這個字在哪裡就是這樣的一個向量叫Static [01:40:56] 他擺在哪裡擺在不同的句子 [01:40:58] 還是這樣的意思這樣子 [01:41:00] 那當然這不是我們要的 [01:41:02] 因為這個太死 [01:41:04] 那我們是希望一個比較Contextual Embedding [01:41:06] 那當然之後我們提到BERT就是這樣的概念 [01:41:10] 那這邊其實前面一直沒提到Dimension [01:41:13] 這個就是他們 [01:41:14] 在掙扎的東西 [01:41:16] 我該用768維度還是 [01:41:19] 1000多維度 [01:41:20] 但這邊提到的 [01:41:22] 可能也有跟我們後面要講的 [01:41:25] 這種 [01:41:27] Transformer裡面那個 [01:41:29] 那個Dimension也有點關係 [01:41:31] 不只是單子這個Waterback裡面那個300個Nuron這樣子 [01:41:36] 那 [01:41:37] 這件事其實就有點 [01:41:39] 呼應我剛才講的 [01:41:40] 就是說 [01:41:41] 有時候你覺得相似的 [01:41:43] 相似他其實 [01:41:44] 不見得是相關 [01:41:46] 但這個 [01:41:48] 這句話以前在做 [01:41:50] 資訊檢索 [01:41:51] 也都被探討過了 [01:41:52] 就是 [01:41:53] 算起來很像這個字都有寫得到 [01:41:55] 但是整句話意思完全不一樣這樣子 [01:41:58] 那像這兩句一個是要去買 [01:42:00] 修水龍頭一個是要去 [01:42:02] 如何去買這個 [01:42:04] 廚房的這個水龍頭 [01:42:05] 所以 [01:42:06] 其實整個的Intent都完全不同 [01:42:09] 但是這個字可能 [01:42:11] 他的鑑別度夠 [01:42:13] 所以他其實在整個Embedding的表示 [01:42:15] 跟 [01:42:16] 重要性其實就會凸顯出 [01:42:18] 整個 [01:42:19] 搞不好整個向量其實很接近 [01:42:23] 那 [01:42:24] 到底是不是要做Vector Search [01:42:26] 還是Keyword Search就好 [01:42:28] 其實你看 [01:42:29] 做Vector Database都有這種想法 [01:42:31] 所以 [01:42:32] BM25還是乖乖的用一下這樣子 [01:42:37] 然後Vector Search是 [01:42:40] 對 [01:42:40] 打錯字 [01:42:43] 對打錯字是非常不robust [01:42:46] 他非常sensitive你可以想像我打錯一個字 [01:42:49] 他其實 [01:42:49] 對應到Vector是完全不一樣的 [01:42:51] 那你說 [01:42:52] 老師那我們用這種CharacterBase [01:42:54] 然後Facetest是不是比較好一點 [01:42:58] 可能有對 [01:42:59] 或者說以後我們就 [01:43:01] 做BERT這樣子 [01:43:03] 但是你發現如果 [01:43:05] 如果你發現這個Typo [01:43:07] 其實在 [01:43:08] 意義上 [01:43:09] 就是比如說 [01:43:11] 打錯一個Character [01:43:13] 如果那個看起來 [01:43:14] 或者說那個字不會 [01:43:16] 讓你聯想到其他字 [01:43:17] 可能都還好 [01:43:19] 但是其實很多時候他整個 [01:43:22] 整個 [01:43:22] 向量的空間會跑掉 [01:43:24] 其實 [01:43:27] 第一個assignment你可能做不出這個啦 [01:43:28] 因為你 [01:43:29] 你很難去做句子的embedding [01:43:32] 但是當你 [01:43:33] 你做完BERT之後 [01:43:35] 你可以自己試試看 [01:43:36] 把一個句子 [01:43:37] 改掉一個字 [01:43:38] 或是故意 [01:43:39] 寫錯一個字 [01:43:40] 看他出來的CLS Token [01:43:42] 會長什麼樣子 [01:43:44] 你就可以知道 [01:43:45] 這個人講的事情 [01:43:47] 是對的這樣子 [01:43:49] 然後 [01:43:50] out of domain [01:43:51] 這我們剛剛有提到這個OOV的問題 [01:43:53] 這個縮寫是OOV [01:43:55] 那另外一個是OOD [01:43:58] 這個有點像 [01:43:59] 就是說反正都是沒看過 [01:44:01] 就是我字典裡面找不到 [01:44:03] 跟這個字我看不懂 [01:44:07] 某種程度上以技術來講 [01:44:10] 發生的問題會很像 [01:44:11] 因為都是沒trend過的 [01:44:13] 但是 [01:44:15] 字典沒有的問題很大 [01:44:16] 因為你做了what to better你就發現 [01:44:19] 這個字根本沒有出現 [01:44:21] 他其實就是 [01:44:22] 會有一個tag [01:44:23] unknown的tag [01:44:24] 那unknown的tag基本上在 [01:44:26] 以後在模型上就是一個 [01:44:29] 大家都長的一樣的東西 [01:44:30] 或是一個random的東西 [01:44:33] 當然他也是可以被學的 [01:44:35] 不過 [01:44:36] anyway就是 [01:44:37] 就是一個tone在那裡這樣子 [01:44:40] 那沒看過的字呢 [01:44:42] 就會隨著 [01:44:43] 這個概念 [01:44:44] 你會自己去 [01:44:47] 長出別的意思啊 [01:44:49] 就這個字 [01:44:49] 在這個domain叫這個意思 [01:44:51] 那另外一個domain [01:44:52] 是另外一種意思 [01:44:53] 你的意思會不太一樣 [01:44:55] 他不是unknown [01:44:56] 他可能會 [01:44:57] 會有shift [01:44:58] 會bias之類的 [01:45:00] 其實這個 [01:45:02] 各種可能 [01:45:03] 各種可能 [01:45:04] 但是以技術上來講 [01:45:06] 你面對到的 [01:45:07] 長相會很像 [01:45:10] 這是他去年講的 [01:45:12] 但是這句話我覺得現在 [01:45:14] 不見得這麼的exactly對這樣子 [01:45:17] 因為現在的RAG其實 [01:45:19] 就是這些人越來越強之後 [01:45:22] RAG的 [01:45:23] 需要性 [01:45:26] 有一點 [01:45:27] 不是這麼必要 [01:45:31] 當我沒說 [01:45:33] 就是有時候還是會的 [01:45:35] 就是在一些特定領域 [01:45:37] 還是會這樣子 [01:45:38] 只是說他沒有 [01:45:39] 這個一年前這麼的critical [01:45:41] 就是說這些一定要用RAG來做這樣子 [01:45:44] 你要做RAG [01:45:46] 一定要用IR [01:45:47] 你這邊就逃不掉 [01:45:48] 就是比對 [01:45:49] 就是比對你 [01:45:50] 你的語料的東西 [01:45:51] 因為你沒辦法叫模型重新學這些東西 [01:45:54] 重新看這些東西 [01:45:58] 好 [01:45:59] 這是這個introduction的summary [01:46:01] 就是我們大概勾數一下 [01:46:03] 很快的勾數一下這個 [01:46:05] 這個傳統NLP的SLP這樣子 [01:46:07] 但其實很多細節我們都沒有講這樣子 [01:46:09] 那 [01:46:10] 但是只留下一個 [01:46:12] 很 [01:46:12] 後面會用到的東西 [01:46:14] 我們要怎麼去學字的表示 [01:46:16] 怎麼樣學這個 [01:46:17] 這個讓電腦瞭解這個字的意識 [01:46:20] 用這樣的Valve vector去看 [01:46:21] 帶這樣的概念 [01:46:22] 那我們的 [01:46:24] W2的投影片就會從這個概念繼續接起來這樣子 [01:46:29] 那這也是 [01:46:30] 在做NLP的那個年代大家想 [01:46:32] 知道的 [01:46:33] 東西這樣子 [01:46:36] 好 [01:46:37] 這個 [01:46:37] 第一個部分到這邊 [01:46:39] 那我先秀一下 [01:46:41] 我們的第一個assignment [01:46:43] 其實 [01:46:44] 已經放上去 [01:46:46] 我不知道 [01:46:49] 我又找不到 [01:46:55] PDF [01:47:03] OK [01:47:04] 這樣看得到 [01:47:06] 好 [01:47:06] 其實我們的作業 [01:47:08] 沒有變 [01:47:09] 主題還是一樣這樣子 [01:47:10] 他只是說我們有稍微要求 [01:47:12] 一點東西 [01:47:13] 跟去年不一樣這樣子 [01:47:16] 那 [01:47:17] 對這個可能要再強調一下因為 [01:47:21] 我不知道是Tica辦公室看到我們這門課好像現在人數比以前多 [01:47:26] 我就覺得 [01:47:27] 高老師你應該要嚴格把關一下這樣子 [01:47:30] 對我們 [01:47:32] 這門課的作業難度會稍微比以前稍微再多加一點東西 [01:47:36] 就是讓大家不要 [01:47:38] 好像一句話就把作業做完了這樣子 [01:47:41] 然後重點是我們 [01:47:43] 今年的課會有一個實體的closed-book考試 [01:47:47] 那那個考試其實 [01:47:49] 當然不會 [01:47:51] 不會考作比如說叫你寫出BM25的公式 [01:47:55] 不會這麼低級的題目這樣子 [01:47:57] 但是 [01:47:58] 至少會 [01:47:59] 我覺得可以考出你 [01:48:00] 做這些作業或者是說 [01:48:02] 你在聽這些內容你到底有 [01:48:04] catch到什麼樣的insight [01:48:06] 我覺得 [01:48:07] 那個是要能夠寫出來的這樣子 [01:48:10] 我們來看第1個assignment [01:48:13] 做這個world knowledge [01:48:14] 這個對比 [01:48:16] 其實就是我們剛才那個 [01:48:18] man woman king queen那樣的概念 [01:48:20] 就是做這樣的事情 [01:48:22] 那這個對比的事情呢就是其實當初在做 [01:48:26] 這種thematic或者是學embedding的時候我們 [01:48:29] 最想 [01:48:30] 知道 [01:48:31] 或是說 [01:48:32] 如果 [01:48:33] 我們可以 [01:48:35] 沒辦法知道這種 [01:48:36] 絕對的向量表示 [01:48:37] 至少我們可以知道相對的向量的概念 [01:48:40] 我們可以算得出來的時候 [01:48:42] 有這樣的東西出來的時候對我們來講還蠻有用 [01:48:46] 好 [01:48:47] 那我們這邊呢會有一個 [01:48:50] 這個有點像也不像test [01:48:52] test dataset就是拿這個Google的 [01:48:55] 有一個 [01:48:56] Dataset [01:48:57] world knowledge的Dataset [01:48:58] 那它這Dataset呢 [01:48:59] 有分一些的 [01:49:00] 這些category [01:49:02] 它這個 [01:49:03] 最主要是兩大類的 [01:49:04] 一個是比較 [01:49:06] 語義上的觀念 [01:49:07] 像king queen這種的 [01:49:08] 就是語義上的觀念 [01:49:10] 那有一種是比較synthetic [01:49:13] 語法上就是有什麼 [01:49:14] 形容詞副詞這種的relations [01:49:18] 然後它有定義幾個subcategory [01:49:20] 你下載之後你就可以去看一下這樣子 [01:49:23] 那其實就是要問你給你 [01:49:25] 給你ABC然後你要比較低這樣子 [01:49:28] 其實就是要做這樣一件事情 [01:49:30] 那 [01:49:32] 這是Dataset的長相 [01:49:34] 這是Symmetric的例子 [01:49:35] 它的category有一個Premary [01:49:37] 就是這樣一句話四個字 [01:49:40] 這是Synthetic的 [01:49:42] 的例子 [01:49:43] 就是語法上的東西這樣子 [01:49:46] OK [01:49:48] 然後 [01:49:49] 這也是 [01:49:50] 我們一直在猶豫的啦就是 [01:49:53] 因為實在 [01:49:54] 如果完全沒給你code [01:49:58] 現在其實難度也不高 [01:50:00] 就是 [01:50:00] 我們就把這個 [01:50:03] 這個投影片丟給 [01:50:05] 丟給GPT傢伙幫你寫 [01:50:07] 他自己都寫出來了 [01:50:09] 但是我們還是希望有一個規範 [01:50:11] 有一個規範就希望有一個Template [01:50:13] 你可以照這個做這樣子 [01:50:15] 雖然有Template [01:50:16] 你一樣也是可以Vibe Coding [01:50:19] 那當然你要自己重寫 [01:50:22] 也可以這樣子 [01:50:23] 那這個後面就有一些在 [01:50:26] Colab上的一些例子 [01:50:28] 那 [01:50:28] 這個課程 [01:50:30] 這個作業的資料 [01:50:32] 我們會有另外一段 [01:50:35] 錄影是助教錄的 [01:50:37] 會比較細一點 [01:50:38] 我大概就很簡單的 [01:50:40] 帶一下而已這樣子 [01:50:42] 這是Colab介紹 [01:50:44] 我想如果 [01:50:46] 你應該都用過的話 [01:50:47] 應該都知道 [01:50:49] 那我們 [01:50:50] 這個在Github的 [01:50:53] 上面有這個code [01:50:55] 這個作業的code這樣子 [01:50:57] 那你要先做整個 [01:51:00] 這個Google這個Data的 [01:51:03] 下載這樣子 [01:51:05] 其實code都幫你寫好了啦 [01:51:07] 所以 [01:51:08] 有一點 [01:51:09] 也不像手把手但是 [01:51:11] 就是 [01:51:12] 比較不會那麼無助在做這件事情 [01:51:16] 那 [01:51:17] 那這是Data長這個樣子 [01:51:21] OK [01:51:22] 那 [01:51:23] 怎麼怎麼載Data [01:51:25] 怎麼去做這件事情啊 [01:51:27] 這個都有code [01:51:29] 那 [01:51:30] 這個作業大概會分兩塊 [01:51:32] 一個是 [01:51:33] 程式的部分一個是報告的部分 [01:51:35] 那程式部分我們就會列出幾個to do [01:51:38] 然後有 [01:51:39] 百分比這樣子 [01:51:40] 這個當然以前 [01:51:42] 在同學都會有一些問題說 [01:51:45] 我做到你講這個怎麼被扣分這樣子 [01:51:49] 這個 [01:51:51] 說實在的雖然這個好像 [01:51:54] 蠻像選擇題就一板一眼就是有就有沒有就沒有但是其實還是有一點 [01:52:00] 有一點模糊啊但是就是 [01:52:04] 就像你 [01:52:04] 你考 [01:52:05] 考聯考一樣嘛你作文 [01:52:07] 你沒有得到滿分你總不會說我都有寫啊我這個作文他會寫為什麼我沒有滿分這樣子 [01:52:12] 概念是這樣子 [01:52:13] 所以 [01:52:15] 不要再太去在意啊 [01:52:17] 就是不要去計較說這個分數為什麼你被扣了一分兩分這樣子 [01:52:23] 那 [01:52:24] 你被扣了一分一定是有人 [01:52:26] 有做 [01:52:27] 然後比你好 [01:52:27] 然後拿到滿分這樣子 [01:52:29] 所以 [01:52:30] 這個大概概念是這樣 [01:52:32] 那我們會給你幾個action [01:52:34] 幾個action [01:52:35] 那前面 [01:52:36] 很簡單的有送分題啊然後也有用 [01:52:39] 簡單的 [01:52:40] 已經trend好的model [01:52:43] 已經trend好的embedding來做一些 [01:52:45] 呃 [01:52:46] 呈現啊分析啊預測啊 [01:52:48] 然後後面四個是你自己trend [01:52:51] 拿wikidump的data [01:52:53] 自己trend一個embedding [01:52:55] 然後再做同樣的事情這樣子 [01:52:58] OK [01:52:58] 後面有幾個 [01:53:00] 這個這個檔案有幾個to do的 [01:53:03] sample code [01:53:04] 就是那個temporary [01:53:06] 那 [01:53:08] 這個Gensim呢是一般 [01:53:11] 在做nlp還蠻常用的一個套件 [01:53:14] 這是 [01:53:16] 他有現成的很多做nlp的套件這樣子 [01:53:19] 像這邊你直接可以 [01:53:21] 可以呼叫這growback的model這樣子 [01:53:27] OK [01:53:28] 然後 [01:53:29] 就一步一步啊其實 [01:53:30] 真的很手把手 [01:53:32] 就是 [01:53:33] 就可以這樣子 [01:53:34] 當然有以前有同學問說他沒學過python [01:53:38] 會不會很辛苦 [01:53:41] 可能會有點辛苦 [01:53:42] 如果 [01:53:43] 你用c的想法來想python [01:53:46] 一開始會很不習慣這樣子 [01:53:48] 但是 [01:53:50] 做久了你就會 [01:53:52] 就會 [01:53:53] 就還好 [01:53:54] 我覺得應該還好 [01:53:54] 因為邏輯都差不多 [01:53:57] 那這個是可能 [01:53:59] 畫出來的 [01:54:00] 就是第3個to do [01:54:02] 就是畫出整個 [01:54:03] work vector [01:54:04] 你就是 [01:54:05] 你拿那個 [01:54:06] task的data去把它做 [01:54:09] tsne這樣子 [01:54:11] 當然你說老師tsne不好這樣我要拿別的 [01:54:14] 來做也可以 [01:54:15] 但是至少你要tsne這樣子 [01:54:17] 你可以做別的然後比較這樣子 [01:54:20] 因為它本身 [01:54:22] 就 [01:54:22] 因為降維的東西本身就會有點誤差 [01:54:25] 所以你也可以比較這種 [01:54:27] 降維的方法的差距這樣子 [01:54:30] 然後另外做自己train [01:54:34] 這個是我們有一個wikidump的data [01:54:37] 這是公開的 [01:54:39] 那 [01:54:40] 它長相長這樣 [01:54:42] 那也不要擔心這個 [01:54:44] 怎麼處理 [01:54:44] 其實 [01:54:45] 我們都有幫你處理的這樣子 [01:54:47] 那 [01:54:51] 這個 [01:54:53] 你要自己下載 [01:54:54] 以前會遇到一些問題就是 [01:54:57] 我記得第一年遇到一個問題就是大家載不完了 [01:54:59] 因為 [01:55:00] 好像擺在 [01:55:01] 擺在哪裡 [01:55:02] 然後 [01:55:03] 繫上的頻寬怎麼樣這樣子 [01:55:05] 然後 [01:55:07] 不知道 [01:55:08] 剛來對這邊的網路不是很滿意 [01:55:10] 對 [01:55:11] 因為現在我自己在管網路我就不會講不好這樣子 [01:55:14] 反正 [01:55:15] 就 [01:55:16] 可以改進這樣 [01:55:17] OK [01:55:17] 但是現在應該不會有下載的問題 [01:55:19] 就是 [01:55:22] 我們 [01:55:23] 對 [01:55:23] 你做這個 [01:55:25] Gdown應該都還OK這樣子 [01:55:29] 做下載下來 [01:55:32] 這邊會有一個問題 [01:55:33] 因為我們只叫你sample20%的 [01:55:36] 這個wikidump的data [01:55:38] 那 [01:55:40] 我們的作業的設計都是在你個人的college的運算的quota可以跑得完的 [01:55:46] 我們並沒有叫你做很大量的東西 [01:55:49] 所以以前有同學說老師我college [01:55:52] 根本memory不夠 [01:55:53] 那 [01:55:55] 通常都是你的 [01:55:56] 程式寫法有問題 [01:55:58] 你不要把百分之二的東西做出來 [01:55:59] 你不要把百分之二的東西做出來 [01:55:59] 你不要把百分之百的wikidump都載入 [01:56:00] 你不要把百分之百的wikidump都載入 [01:56:01] 然後自己再選百分之二 [01:56:03] 那個好像就是因為這樣常常就是跑不前 [01:56:07] anyway你就是叫自己有一些比較有效率的寫法這樣子 [01:56:12] 這個是 [01:56:13] 後面的兩個to do就是叫你用 [01:56:16] 現成的模型 [01:56:18] 去做這樣子 [01:56:20] 你要拿這個data去train [01:56:23] 當然這邊並沒有到 [01:56:25] 這邊是前處理 [01:56:27] 怎麼train這個water vector [01:56:29] 並沒有太多的 [01:56:32] 條件或是限制 [01:56:35] 也就是說 [01:56:36] 你可以自己有一些變形 [01:56:38] 也可以自己有一些 [01:56:40] 看看 [01:56:41] 我這樣給他亂搞一下 [01:56:44] 你可以自己做這樣的事情 [01:56:47] ok [01:56:48] 然後train完之後 [01:56:49] 就把所有tutu做完 [01:56:51] 然後寫這個報告 [01:56:53] 報告佔45% [01:56:55] 這個報告其實 [01:56:58] 為什麼要分 [01:56:59] 這麼細呢 [01:57:00] 就是 [01:57:01] 因為報告太發散了 [01:57:03] 我們總要給大家一些方向 [01:57:05] 方向就是 [01:57:06] 你至少minimum requirement [01:57:08] 至少要能夠做這些要能夠寫這些回答這些 [01:57:13] 當然這有點像是 [01:57:15] 幫你把要餵給AI的prong都寫好了 [01:57:18] ok就把這個丟給 [01:57:20] AI他就幫你寫 [01:57:22] 但是 [01:57:23] 我希望 [01:57:25] 就是雖然其實我們是 [01:57:27] 允許啦 [01:57:28] 其實也沒有辦法進來 [01:57:29] 就大家可以用AI來輔助 [01:57:32] 但是你一定要消化你 [01:57:35] 這個AI做了哪些事情 [01:57:37] 他的實驗的分析是什麼 [01:57:40] 甚至呢我們這邊 [01:57:41] 今年多了一個是希望你能夠把你的 [01:57:44] 額外的 [01:57:45] 實驗的code [01:57:46] 都放上去 [01:57:48] 我不知道是放連結嗎 [01:57:50] 就放 [01:57:51] notebook連結這樣子 [01:57:54] 對就是 [01:57:55] 因為以前會發生一些事情啊就是 [01:57:59] 你就把這些 [01:58:00] 丟進 [01:58:01] 丟進AI然後他就告訴你說啊這個 [01:58:03] 做wall embedding [01:58:05] 容易遇到什麼什麼什麼 [01:58:07] 然後 [01:58:08] 那有些人又多問了一些什麼然後就做出一些漂亮的分析圖 [01:58:12] 但是我根本不知道他有沒有做這個實驗 [01:58:15] 當然你要做這個實驗你一樣可以把coding去做沒錯但是至少 [01:58:20] 你會更深入一點 [01:58:22] 你會跟AI互動更多一點 [01:58:24] 然後你會 [01:58:25] 知道 [01:58:26] AI到底幫你做什麼 [01:58:28] 我 [01:58:29] 我是希望你能夠這個過程能夠更 [01:58:32] 更多亂一點然後你可以知道 [01:58:34] 哦原來我跑這個 [01:58:37] 我給他的不同的參數不同的想法或是甚至語料我給他少一點 [01:58:41] 或是我們剛才討論的OOV的問題 [01:58:44] 你做做看 [01:58:45] 也許就 [01:58:46] 就你可以看出一些東西 [01:58:50] 當然你也可以問問AI說這個我要得高分 [01:58:53] 我要做什麼實驗這樣 [01:58:55] 也許你就 [01:58:57] 寫了一個 [01:58:58] 100頁的報告這樣子 [01:59:03] 每次講這個我都想到一個以前小時候看到漫畫那個叫做天才兒童 [01:59:07] 他們是一個小學生 [01:59:09] 那小學生的 [01:59:11] 的那個 [01:59:13] 運動會呢越野障礙就是 [01:59:16] 不同 [01:59:17] 不同 [01:59:18] 不同年級的考試體 [01:59:20] 這樣子我就從小一小二講一直這樣越野障礙這樣一直 [01:59:24] 他們到最後一關是什麼 [01:59:26] 就是寫博士論文 [01:59:28] 就是什麼用印度文寫出印度的未來農業的發展這樣 [01:59:32] 我就看到那些 [01:59:33] 漫畫看起來很有趣 [01:59:35] 小學生在那邊寫 [01:59:36] 寫這些論文這樣子 [01:59:38] 就是他可以很深入啊就是在這個作業其實也可以很深入就是 [01:59:42] 你也可以去探討一些東西 [01:59:45] 甚至 [01:59:46] 越搞越大就把剛才的MTEB的DataSet拿來 [01:59:50] 去跑跑看這樣子 [01:59:52] 就是 [01:59:53] 我們會有一個Range會有一些Range在這邊 [01:59:57] 希望還是可以拉開來看的 [01:59:58] 大家的插曲這樣子 [02:00:00] 那只是說因為人數有點多所以我們還是有一些格式要求 [02:00:05] 就一定要照這個格式要求 [02:00:07] 那我們 [02:00:08] 因為 [02:00:10] 中間有一些部分還是會用AI來做簡單的review [02:00:14] 所以你如果不符合這個規格 [02:00:17] 其實很容易就沒有分數 [02:00:18] 那 [02:00:19] 這個我們都有寫在這上面 [02:00:21] 那 [02:00:22] 當然 [02:00:24] 這個比較麻煩的就是 [02:00:28] 超習 [02:00:29] 那當然同學會說我們有討論啊 [02:00:32] 討論 [02:00:33] 但討論總要寫的時候要分開寫對不對至少 [02:00:38] Prong也改一下吧 [02:00:39] 就是報告也不要長得一模一樣這樣子 [02:00:42] 心得也不要一模一樣 [02:00:45] 討論只是技術的討論 [02:00:46] 心得討論 [02:00:48] 對不對你總要有點差距 [02:00:50] 就是 [02:00:51] 不要這麼像 [02:00:53] 其實 [02:00:56] 就不要太像了 [02:00:57] 因為 [02:00:58] 因為以前真的發生過 [02:00:59] 幾乎一樣 [02:01:00] 這個不是OK [02:01:02] 那不是 [02:01:03] 這個其實我們為了要 [02:01:06] 讓有些同學不得已被人家抄 [02:01:08] 我們 [02:01:09] 給他一個條件是你被抄你一樣是0分這樣 [02:01:12] 所以你就可以跟同學說 [02:01:14] 不行 [02:01:14] 你這樣太危險了 [02:01:17] 我們是 [02:01:19] 兩份一樣全都是0分這樣子 [02:01:21] 所以 [02:01:23] 這麼簡單的作業就不要再抄了這樣子 [02:01:25] OK這大概是作業我們已經放上去 [02:01:28] 然後 [02:01:29] 我們的作業就是今天announce [02:01:32] 我們就三週的時間 [02:01:33] 三週的時間其實時間很夠啦 [02:01:36] 但是 [02:01:37] 學生通常是最後一週寫 [02:01:39] 如果你最後一週再開始寫 [02:01:41] 會有一點趕 [02:01:42] 會有點趕 [02:01:43] 那 [02:01:44] 那不過就看你自己的程度這樣 [02:01:46] 如果 [02:01:46] 有些人覺得這很簡單 [02:01:48] 那其實 [02:01:50] 他的 [02:01:51] loading沒有到太多 [02:01:52] 但是如果你要寫出一個好的報告多一點分析 [02:01:56] 是的確要花一些時間 [02:01:58] 好 [02:02:00] 這是我們的assignment 1 [02:02:01] 那 [02:02:02] 大家如果還有問題呢 [02:02:03] 可以在slido上問 [02:02:05] 那我們先休息一下 [02:02:06] 我們10分鐘後再回來 [02:12:42] 我們繼續上課 [02:12:43] 那slido有人問一些作業的絞交跟格式跟能不能做一些修改的問題 [02:12:49] 那 [02:12:49] 這部分細節我可能就請助教再回一下 [02:12:52] 因為 [02:12:53] 我們就有一個規範這樣子 [02:12:54] 那 [02:12:56] 對 [02:12:57] 我們會同意一下 [02:12:58] 就怎麼去 [02:12:59] 絞交這樣子 [02:13:01] 好 [02:13:03] 那我們來看一下 [02:13:05] 這個W2的部分的投影片 [02:13:07] 那其實是有點延續我們Language Model接下來的東西 [02:13:11] 然後 [02:13:12] 我們會帶一下說這個 [02:13:16] 用訓練的方式 [02:13:18] 我們看W2Vector是一個很簡單的一個2 layer的一個NN嘛 [02:13:23] 那我們能不能有聰明一點的模型 [02:13:25] 像大家所知啊STM的東西 [02:13:28] 他們當時的想法到底是什麼 [02:13:32] 好 [02:13:33] 那其實這前面的開場比較像是還是讓大家自己要先反思一下做這件事情 [02:13:39] 就是 [02:13:41] 不要太 [02:13:42] follow這種本來教科書上的想法說我們現在要 [02:13:47] 要train模型 [02:13:49] 要用這種比較 [02:13:51] sequential的model [02:13:53] 所以要用RNL STM [02:13:55] 你就要 [02:13:56] 就 [02:13:58] 知道 [02:13:59] 他是這樣做但是你可能要先知道為什麼 [02:14:02] 這時候到底是發生什麼事為什麼需要這個 [02:14:06] 然後為什麼 [02:14:08] 這個方法是可以解決這個問題的 [02:14:11] 我覺得 [02:14:11] 多往這樣的回去想像 [02:14:14] 你比較可以知道這個 [02:14:16] 這個問題跟solution之間的matching [02:14:20] 好 [02:14:21] 那 [02:14:23] OK [02:14:25] 前面這一頁講的我覺得比較像是說 [02:14:28] 當你 [02:14:29] 你未來學到這些AI 學到這些技術的時候其實你 [02:14:33] 面對一個真實的 [02:14:34] 場域 [02:14:36] 其實你並沒有人告訴你SOP [02:14:38] 沒有人告訴你說這時候要怎麼樣 [02:14:40] 雖然現在好像也 [02:14:41] 幾乎 [02:14:43] 大家的起手式SOP都 [02:14:45] 都蠻接近的反正就是 [02:14:47] 就是LM先做一波這樣子 [02:14:49] 就先 [02:14:50] 丟進去呼叫一下或是API跑一下 [02:14:53] 看他到底做的好不好這樣子能夠用agent的方式做就做 [02:14:58] 做掉這樣子 [02:15:00] 現在要自己finetune [02:15:02] 或是說做LoRA或是 [02:15:04] 做什麼reg [02:15:06] 我覺得比例有點降低了慢慢減少 [02:15:09] 因為現在的pondation model越來越強 [02:15:13] 不過可能 [02:15:14] 有些問題 [02:15:15] 你要思考一下說 [02:15:18] 我 [02:15:19] 我是一個 [02:15:21] 有supervised [02:15:22] 額外supervised data [02:15:24] 還是怎麼樣 [02:15:26] 我這樣的應用以前這樣的應用 [02:15:29] 做問答的 [02:15:30] 做新聞分類的 [02:15:32] 或是做 [02:15:33] 使用者的 [02:15:34] 意圖的分類的 [02:15:36] 我其實100以前的做法就是標註 [02:15:39] 用人類的知識標註一些資料然後硬券模型瞭解這些標註的資料 [02:15:45] 只要你的訓練資料跟未來資料的分佈是一樣的話 [02:15:50] 那就OK解決掉問題 [02:15:52] 但是 [02:15:53] 常常就是 [02:15:54] 不太一樣 [02:15:55] 或是說你trend模型不是這麼align到你的 [02:15:59] trending的data這樣子 [02:16:02] OK [02:16:03] 那 [02:16:04] �但是我們現在面對到的就是 [02:16:06] 那其實我們可能會更常遇到的是沒有 [02:16:10] 沒有trendingdata [02:16:11] 就像我前面trend那個 [02:16:13] 這個embedding一樣 [02:16:14] 其實是沒有trendingdata的 [02:16:15] 你就要自己想像 [02:16:17] 我的unsupervised的trending要怎麼做 [02:16:20] 我要自己設計trendingdata還是 [02:16:22] 用 [02:16:23] 什麼樣不同的任務 [02:16:25] 來訓練這個模型 [02:16:26] 會 [02:16:27] 別的任務這樣子 [02:16:30] 所以這個跟學習跟你自己在解決問題的測試 [02:16:34] 這個也會有點關係的 [02:16:36] 那我想 [02:16:39] 我們這邊 [02:16:40] 這一章其實前面會從language model開始帶 [02:16:43] 所以才會說跟 [02:16:45] 第一章的後面overlap是有的這樣子 [02:16:49] 那 [02:16:50] 其實你要想說 [02:16:51] 我們剛才講那些算那些機率啊 [02:16:54] 算那些東西 [02:16:55] 到底他的 [02:16:56] 他當時的 [02:16:57] 痛點是什麼 [02:16:58] 為什麼要去算那些property [02:17:01] 所以有點像是說如果我要做一個 [02:17:04] 問答 [02:17:05] 就是一句話後面接著一句話 [02:17:08] 或者是要叫電腦自己去寫出一個文章 [02:17:12] 或是要跟我聊天 [02:17:14] 那他不就是有一個input要輸出一個output嗎 [02:17:18] 就是我是 [02:17:20] 要能夠去生成 [02:17:22] 這個句子的東西 [02:17:24] 所以 [02:17:24] 這個language model的想法這種property的想法才會在那個時候就 [02:17:29] 大家覺得 [02:17:30] 應該要做這些事情 [02:17:31] NLP應該要做這樣的事情 [02:17:34] 這個圖就是我們 [02:17:35] 今天前面有講到的 [02:17:36] 就是有用到的部分 [02:17:38] language model我想 [02:17:40] 這個 [02:17:41] 這是 [02:17:42] 簡單的例子 [02:17:43] 就是query log [02:17:44] 就是前面的 [02:17:46] 前面的字詞不一樣後面 [02:17:49] 產生的東西的排序就不同這樣子 [02:17:53] 雖然Google的這個資料其實是來自於query log [02:17:57] 不見得是俗而語調 [02:17:59] 但是其實也很接近這樣子 [02:18:02] 當然 [02:18:03] 這個前面我們算那個語言模型算property的 [02:18:08] 其實你可以自己做 [02:18:09] 你可以自己拿這個這是周杰倫的歌詞來做 [02:18:12] 然後可以算property [02:18:15] 但是 [02:18:16] 語料庫沒那麼多 [02:18:18] 如果你只拿單一的歌曲的語料來做的時候其實 [02:18:22] 很難算出一些 [02:18:23] 很好的分佈這樣子 [02:18:26] 基本上他就是follow language model的想法在做這樣一件事情 [02:18:31] 那比較 [02:18:32] 從以前的角度來看 [02:18:33] 從我們 [02:18:35] 我有大量語料庫的角度 [02:18:37] 我在算這些東西的時候 [02:18:39] 以前我們會用所謂的n-gram的方式 [02:18:42] 那n-gram其實你常看到這個n-gram其實就是 [02:18:46] 我有 [02:18:47] n個字所形成的 [02:18:50] 一個片段 [02:18:51] 那 [02:18:52] 這個東西以前在做 [02:18:54] IR或是在做簡單的NLP其實 [02:18:57] 其實大家都會 [02:18:58] 標準這個好你是用1-gram [02:19:00] 5-gram [02:19:00] 3-gram [02:19:01] 或者說你真的做到n-gram [02:19:03] 其實不太會做到n-gram [02:19:06] 除非是這個 [02:19:07] 這個像Google [02:19:08] 當初他們在做搜尋引擎的時候其實是基本上是n-gram的index [02:19:13] 然後他們也release一個 [02:19:16] 其實當初Google有release一個n-gram的dataset [02:19:19] 這個dataset一release出來這個當初做資訊檢索的如獲至寶 [02:19:24] 因為他其實就是從 [02:19:26] 語料庫裡面去 [02:19:27] 切出那個 [02:19:29] 比如說四字詞的這樣的一個 [02:19:32] 統計分佈 [02:19:33] 有了統計分佈其實你拿那個來做斷字系統 [02:19:37] 就非常好用 [02:19:39] 因為 [02:19:40] 出現頻率很高就是應該要在一起 [02:19:45] 那這個名詞就是1-gram [02:19:47] 或是叫uni-gram [02:19:48] 它就是單字詞 [02:19:50] 就這個bi-gram tri-gram這樣子 [02:19:53] OK [02:19:54] 那 [02:19:55] 如果一篇文章 [02:19:56] 我說我們是用n-gram來 [02:19:59] 做index [02:20:00] 或是說 [02:20:01] 我們是用n-gram來 [02:20:02] 表示這篇文章 [02:20:03] 其實它的概念 [02:20:06] 是從 [02:20:06] 1 [02:20:07] 到 [02:20:08] 長度為n [02:20:09] 就是文章 [02:20:10] 100個字 [02:20:11] 那這個n就是100這樣子 [02:20:13] 所以它會 [02:20:15] sliding window是1的 [02:20:17] scan一遍有這麼多token [02:20:19] 2的 [02:20:20] 再scan一遍也有這麼多不同的字這樣子 [02:20:23] 所以你可以想像這個n-gram一出來之後那個我的片段我這些 [02:20:27] 這些gram會非常的多樣這樣子 [02:20:29] 當然有一些會重複沒錯 [02:20:31] 尤其是一些常見的字會重複 [02:20:33] 但是就是用這種方式來表示 [02:20:36] 因為我們根本不知道使用者想找的是 [02:20:39] 什麼樣的表示 [02:20:40] 就是 [02:20:42] 這個 [02:20:42] 有些很長的概念但是有些很短它也有代表同樣的意義 [02:20:48] OK [02:20:49] 因為這樣的pattern [02:20:51] 這樣的組合 [02:20:52] 其實它都有它的 [02:20:54] 特殊的意義就像我前面講那個莎士比亞的pattern一樣 [02:20:59] 無限猴的例子 [02:21:01] 那我這邊在用這個例子 [02:21:03] 這是一個 [02:21:04] 叫做linguistic signature [02:21:08] 就是 [02:21:08] 語言學上的這種 [02:21:11] 特徵或者是簽名的概念 [02:21:14] 這個是 [02:21:15] 當做一個故事啊這個這應該大家都認識吧 [02:21:18] 寫哈利波特的作者 [02:21:20] J.K Rowling [02:21:22] 那 [02:21:22] 這個人 [02:21:24] 有誰知道這個人是誰 [02:21:31] 對我們應該要 [02:21:33] 鼓勵線上的我們要做一個問答這樣子 [02:21:36] 然後立刻 [02:21:37] 不過你們大家立刻 [02:21:38] 搜尋一下Google就知道了 [02:21:39] 這個其實是一個假的虛名 [02:21:44] 就是J.K Rowling當初他自己偽造的一個另外一個作者 [02:21:48] 另外一個筆名這樣子 [02:21:51] 那 [02:21:52] 就是 [02:21:54] 就是這樣啊這個 [02:21:55] 他其實非常厲害J.K Rowling [02:21:58] 得了很多獎 [02:21:59] 他寫了哈利波特這樣 [02:22:02] 後來他覺得 [02:22:04] 大家都把他 [02:22:06] 捧得太高這樣子所以他覺得這個 [02:22:09] 已經沒有什麼挑戰的意義 [02:22:10] 所以他就 [02:22:11] 另外再用這個筆名 [02:22:13] 自己去投稿 [02:22:15] 寫了一個 [02:22:16] 小說 [02:22:17] 去投稿這樣子 [02:22:19] 然後瞬間這個 [02:22:21] 這個譯文界炸裂 [02:22:23] 哇這個人非常厲害啊這個年輕的這個作家 [02:22:27] 寫這個 [02:22:29] 這個文筆之好這樣這樣然後就得了什麼獎 [02:22:33] 然後 [02:22:36] 然後後來呢 [02:22:37] 其實這個故事可能要再看一下 [02:22:39] 有點忘記是他自己承認 [02:22:41] J.K Rowling自己承認說那個就是我這樣子 [02:22:44] 還是說因為後來就有人去分析啊因為大家覺得說怎麼可能那麼厲害這樣 [02:22:50] 就像你突然會發現說 [02:22:51] 某一個 [02:22:52] 某一個網路也不知道是誰的突然寫了一大堆的natural paper這樣子 [02:22:57] 他也不知道是來自哪個學校 [02:22:59] 就覺得很怪這樣不太可能會發生這種事 [02:23:02] 所以就會有人去分析說啊那這個人到底 [02:23:05] 是什麼就做了 [02:23:07] 去去 [02:23:09] 這個這個是一個學者啊就做了一個用這個軟體去分析 [02:23:13] 整個的 [02:23:14] 就是拿這兩本小說 [02:23:17] 去分析各種各式各樣子 [02:23:19] 包含是說 [02:23:20] 四字詞的分佈 [02:23:22] 然後還有整個最常用的字的頻率 [02:23:26] 然後這個forens啊就是 [02:23:29] 習慣用哪些字的這樣的一個長度的分佈啊 [02:23:33] 然後跟pairwise的出現的頻率之類的 [02:23:37] 哦 [02:23:39] 然後就用這個分佈發現這兩本小說 [02:23:43] 相似度相當的高 [02:23:45] 相當的高 [02:23:46] 所以 [02:23:47] 所以 [02:23:48] 後來就 [02:23:49] 就 [02:23:49] 就很浪費這樣子 [02:23:51] 當然我不知道是他自己 [02:23:52] 自己先承認還是這個人先抓他出來這樣子 [02:23:56] 但是 [02:23:57] 其實他也沒做什麼錯事啊 [02:23:58] 只是說 [02:23:59] 他去 [02:24:01] 這個已經有點像現在很資深的教授但是他也去參加那個年輕教授的獎項那種感覺這樣子 [02:24:07] 就是有點那個降維打擊的感覺這樣子 [02:24:09] 但是 [02:24:10] 但是 [02:24:11] 你可以發現就是說其實可以用統計上語法 [02:24:15] 語法學上的統計的東西 [02:24:17] 就可以 [02:24:18] 知道一個人的風格 [02:24:20] 這個跟其實昨天 [02:24:22] 在國科會討論是說 [02:24:24] 我們要不要用AI來抓這個 [02:24:28] 國科會計劃 [02:24:29] 撰稿的東西 [02:24:30] 或者是說拿AI來detect [02:24:32] 審國科會計劃人的 [02:24:35] 評論是不是用AI寫的 [02:24:37] 這件事當然其實在 [02:24:39] 在 [02:24:40] 現在的paper review的 [02:24:42] 整個society都已經非常吵得非常嚴重 [02:24:46] 因為像 [02:24:47] 像 [02:24:47] 這個今年ICML就有抓那個paper review是用AI做的 [02:24:53] 那個 [02:24:53] 那個 [02:24:54] 懲罰很重 [02:24:55] 直接你的paper都被累卷 [02:24:58] 那這件事當然其實 [02:24:59] 很難去避免 [02:25:00] 說實在的因為現在paper實在太多要review要看那麼多的東西不太容易 [02:25:05] 大家都還是會用AI輔助 [02:25:07] 但是我想大多數人 [02:25:09] 可能都還是會自己去消化一下那些內容 [02:25:12] 只是說有些人在寫paper或者是審paper的時候可能都用AI [02:25:17] 那 [02:25:18] 現在其實也有一些工具 [02:25:20] 之後我們可能會提到 [02:25:21] 像什麼 [02:25:22] 什麼GPT ISO或者是什麼東西 [02:25:25] 他就會告訴你說 [02:25:26] 這個東西pattern出來之後 [02:25:29] 其實他跟 [02:25:30] 他其實用模型去算 [02:25:32] 模型去算說用模型去看這篇文章 [02:25:35] 他的perplexity是多少 [02:25:36] 這是最 [02:25:37] 最陽春的辯論 [02:25:39] 這個方式這樣子 [02:25:40] 他就可以知道說這個跟這個GPT寫出來的很像風格很像這樣子 [02:25:46] 那其實呢 [02:25:47] 這個只要你研究過大語言模型就知道說這個太容易了我就改幾個字 [02:25:53] 甚至有學生很厲害就是 [02:25:55] 故意寫一個錯字這樣子 [02:25:57] 因為他知道AI不會寫錯字 [02:26:00] 他故意寫一個type這樣子 [02:26:01] 然後老師看到type就說這是你自己寫的 [02:26:04] 只有那個type是自己寫的 [02:26:06] 其他都是AI寫的這樣子 [02:26:09] 他只要用這種方式他就可以破壞這整個分佈 [02:26:13] 那這樣整個算出來的機率或是所謂的perplexity [02:26:16] 就會拉高 [02:26:18] 拉高之後人家就會覺得這不是AI做的這樣子 [02:26:21] 所以像 [02:26:23] 像各位如果寫論文都會用 [02:26:25] 圖書館的turn in去 [02:26:27] 去檢查那個 [02:26:28] 重複的比例 [02:26:31] 那turn in現在有提供AI的功能這樣子 [02:26:34] 就是讓你去判斷你的論文是不是AI寫這樣子 [02:26:37] 好像一年要 [02:26:39] 賣學校 [02:26:40] 好幾十萬 [02:26:41] 這樣子 [02:26:41] 我就覺得 [02:26:43] 不賴 [02:26:44] 就是根本做不到這樣子 [02:26:45] 你隨便給個數字 [02:26:47] 而且老師說 [02:26:48] 就算他真的很準他也沒有辦法百分之百去判斷 [02:26:52] 這件事情 [02:26:54] 只要他有 [02:26:54] 落差 [02:26:55] 只要他的準確率不是百分之百 [02:26:57] 我們就很難用這個數字去駕馭說 [02:27:00] 你是用AI寫的 [02:27:02] 他等下 [02:27:03] 真的錯殺了怎麼辦 [02:27:05] 所以那一塊其實現在其實是 [02:27:08] 不見得是 [02:27:09] 會被拿來當成一個評估的一個機制 [02:27:13] 不過其實你可以發現這是很久以前的 [02:27:15] 這個其實當初用這種簡單的統計 [02:27:17] 就可以判斷說這個作者 [02:27:20] 他的風格 [02:27:21] 其實是一致的 [02:27:25] 那我們剛才看到這些公式算條件機率 [02:27:28] 算code 這些東西 [02:27:30] 其實你大概可以算算 [02:27:31] 這種你只要有一個語料庫進來 [02:27:34] 你就可以去算這些東西 [02:27:36] 去算這些 probability [02:27:38] 這是一個 [02:27:39] 我記得是什麼 [02:27:40] 就是我們教科書上的例子 [02:27:42] 他就是有一個語料庫 [02:27:43] 這個語料庫應該是找不到 [02:27:45] 他就去算說 [02:27:46] 這個Bigrand count [02:27:49] Bigrand count [02:27:50] 就是 [02:27:52] 一起 [02:27:53] 有點像co-occurrence的關係 [02:27:55] 所以I後面跟want [02:27:58] 然後這個want後面跟to [02:28:00] 這個量很多這樣子 [02:28:02] 但這個字要我覺得 [02:28:03] 不是a balance [02:28:04] 就是這個count出來的這個字 [02:28:08] 那你說如果我要自己算這些字 [02:28:10] 那這些東西怎麼做 [02:28:11] 就是得自己 [02:28:12] biblicoding一下 [02:28:13] 然後 [02:28:14] 叫 [02:28:15] Agent [02:28:16] 自己去抓個一萬篇文章算一算 [02:28:18] 你就可以做這樣的例子出來 [02:28:21] 然後呢通常會做一些事情 [02:28:23] 算做條件機率的話會做這件事情 [02:28:26] 會做smooth行 [02:28:27] 就是說 [02:28:28] 因為 [02:28:28] 機率其實不管你是 [02:28:30] 你是Bigrand或是Unigrand [02:28:33] 其實機率都是相乘 [02:28:36] 機率都是相乘 [02:28:38] 你如果前面機率很高然後突然有 [02:28:40] 有一個 [02:28:41] 像這種0的 [02:28:42] 像這種0的 [02:28:43] 那這0代表什麼 [02:28:45] 0代表是說 [02:28:46] to [02:28:47] 在你的語料庫裡面 [02:28:48] to後面不會跟want [02:28:50] 就是非常肯定的告訴模型說 [02:28:54] to後面 [02:28:55] 不會出現want [02:28:56] 他就會告訴你機率是0 [02:29:00] 所以你不管前面機率再高 [02:29:02] 算一算 算到這邊 0 [02:29:04] 那 [02:29:05] 機率相乘就是0這樣子 [02:29:06] 所以 [02:29:07] 通常不會這樣做 [02:29:08] 除非你說 [02:29:10] 我已經看完人類所有的文獻 [02:29:12] 他就是不會相比 [02:29:14] 這樣所以在這裡 [02:29:15] 但因為我們通常語料不會很多嘛 [02:29:18] 所以我們要避免這種files [02:29:20] 所以我們會加一些這種 [02:29:22] 這種noise [02:29:23] 或是小小的noise [02:29:24] 最簡單就是加1 [02:29:26] 就把所有a大家都會出現過一次 [02:29:28] 加1在機率的計算上你會發現normalize之後 [02:29:32] 他會有一點子但是值很小 [02:29:35] 值很小 [02:29:36] 值很小的好處是 [02:29:38] 雖然乘起來 [02:29:39] 會整個下降沒錯 [02:29:40] 但是他不會變成0 [02:29:42] 不會變成0就有機會了 [02:29:44] 就有機會了 [02:29:45] 比如說 [02:29:48] 我說我們這學習四個作業 [02:29:51] 我們的期末分數是四個作業相乘這樣子 [02:29:54] 然後取logan normalize [02:29:56] 那你說那我有一次沒交 最後就是0 [02:29:59] 對不對 [02:29:59] 那如果用相加就不會有這個問題 [02:30:02] 不過anyway [02:30:03] 機率的做法我們常常會做一點這樣子的動作 [02:30:08] 好 [02:30:09] 這是 [02:30:10] 算出來的probability [02:30:11] 其實你可以再更延伸一點 [02:30:13] 你可以再去說 [02:30:14] 那我 [02:30:16] 算出這些co-occurrence的關係的時候 [02:30:19] 我們在 [02:30:20] W1的後面頭一面不是告訴你說那我就可以算這種Bigrant的 [02:30:24] language model就是 [02:30:26] 我去算這一句 [02:30:27] 這個字加這個字 [02:30:29] 再這個字再這個字 [02:30:30] 然後我就可以把這個條件機率把它乘在一起 [02:30:33] 就是i want to eat什麼 [02:30:35] 然後我就可以把這個i後面接1的機率多少 [02:30:39] want後面接2的機率是多少 [02:30:40] 那我就可以一路的去算下來去算出 [02:30:44] 最後它的輸出 [02:30:45] 的probability是什麼 [02:30:48] 你就可以去做這樣的事情 [02:30:50] 那就是條件機率的計算 [02:30:52] 那這個 [02:30:53] 就是很基本 [02:30:55] 所以 [02:30:55] 當你想做 [02:30:57] 這句話 [02:30:58] 後面 [02:30:59] lat [02:31:00] 後面會跟著 [02:31:02] 的一個probability [02:31:03] 那你就去算這個count [02:31:05] 在你的語料庫這個出現次數 [02:31:08] 後面 [02:31:09] 接著這個lat [02:31:10] 後面接著的count [02:31:12] 你這樣一除 [02:31:13] 就可以算出這個probability [02:31:16] 當然你也可以把它拆解 [02:31:18] 你也可以把它拆解 [02:31:19] 因為 [02:31:20] 你在算這個時候 [02:31:21] 你的語料庫 [02:31:23] 沒有出現 [02:31:23] 或只出現一次的時候 [02:31:25] 就沒辦法算 [02:31:26] 所以你可以把它拆解 [02:31:28] 說我就是兩兩 [02:31:30] 然後去預測 [02:31:31] 下一個字 [02:31:34] 所以它會 [02:31:35] 跟 [02:31:35] 就我們剛才 [02:31:36] 前面 [02:31:37] 第一張 [02:31:38] 舉的那個例子 [02:31:39] 我就可以兩兩然後去看 [02:31:41] 最後我這樣預測這個字之前 [02:31:45] 到底我累積下來的這個兩兩的probability到底長什麼樣子 [02:31:50] 我就可以再去predict [02:31:51] 我下一個字的probability [02:31:54] 但是基本概念 [02:31:55] 所以 [02:31:56] 你大概可以想像說 [02:31:57] 那我的語料庫如果 [02:31:59] 不夠 [02:32:00] 或者是沒看過字的時候 [02:32:03] 我需要做一些怎麼樣調整 [02:32:05] 這個以前在做這種 [02:32:06] probability-based的時候的作法 [02:32:09] 都要探討的部分 [02:32:13] OK [02:32:14] 這個 [02:32:15] 這個就是 [02:32:15] 剛才講的如果是一個 [02:32:17] 這樣的我只看 [02:32:20] 字跟字 [02:32:21] 單一的關係的時候 [02:32:23] 我先看第一個字的probability [02:32:25] 然後第二個字呢 [02:32:26] 第一個字發生之後 [02:32:28] 第二個字的probability [02:32:30] 接下來 [02:32:31] 它這邊更復雜 [02:32:32] 我就是從 [02:32:33] 第一個字第二個字發生之後 [02:32:35] 第三個字發生probability [02:32:37] 那你可以把這個公式展開了 [02:32:39] 那分母就是 [02:32:41] 兩個字 [02:32:42] 然後分子就是三個字 [02:32:43] 所以 [02:32:44] 你的Corpus裡面有統計這n grand count的時候 [02:32:48] 你就可以算所有的東西 [02:32:50] 但是你會發現 [02:32:51] 你這個東西其實它的 [02:32:53] 它出現次數就越少 [02:32:55] 因為那麼多字 [02:32:56] 那就可能只出現一兩次的時候 [02:32:59] 你這個 [02:33:00] 的 [02:33:01] 影響到前面的東西 [02:33:02] 要 [02:33:03] 看要怎麼去調整這樣 [02:33:05] 但不同的 [02:33:06] 文獻的分佈其實你會做不同的調整 [02:33:09] 這是n grand的model [02:33:11] 做這樣的事情 [02:33:12] 但是如果簡化一點 [02:33:14] 不要這麼麻煩 [02:33:15] 這個實在太難搞 [02:33:17] 那我們就做bigrand的model [02:33:19] bigrand就是我現在這個字呢 [02:33:21] 只會跟前一個字有關 [02:33:23] 所以我在算probability的時候 [02:33:25] 只看前一個字是什麼 [02:33:26] 前一個字是什麼 [02:33:28] 那你說這個 [02:33:29] 這個應該 [02:33:31] 不work [02:33:31] 但是以前就是這樣 [02:33:33] 這樣就很厲害這樣子 [02:33:35] 更不用想去做這些事情 [02:33:37] 不是它不好算 [02:33:39] 因為你 [02:33:39] 根本沒辦法統計這些 [02:33:41] 這個東西其實是 [02:33:43] 很有bias的probability [02:33:44] 因為你的corpus很少這樣子 [02:33:50] 好 [02:33:51] 那這邊就比較一個formal的定義 [02:33:53] 就是雖然大家都提到有大語的模型 [02:33:56] 那language model在教科書上 [02:33:59] 這是一個很古老的turn [02:34:01] 其實我們以前 [02:34:02] 尤其是如果你是 [02:34:05] 不是你是 [02:34:06] 老師是從這個 [02:34:08] 做搜尋語行開始進入NLP的這個年代 [02:34:10] 其實也算是半入期 [02:34:12] 因為以前做NLP的人其實 [02:34:14] 跟做搜尋的NLP的人是 [02:34:17] 想法手法是不太一樣 [02:34:19] 那不見得會用language model [02:34:22] 就是以前 [02:34:24] 如果NLP是用language model來做的時候就覺得 [02:34:27] 腦袋就浮現幾個字 [02:34:29] 它是做比較理論的這樣子 [02:34:31] 因為就要算一堆的機率 [02:34:33] 就要在那邊計率 [02:34:34] 玩來玩去這樣子 [02:34:36] 當然paper是比較好寫的 [02:34:39] 教科書上的講法就是這樣子的 [02:34:42] 就是 [02:34:43] 我有一個model [02:34:45] 就是一個架構 [02:34:46] 一個可 [02:34:48] 重現 [02:34:48] 可度量 [02:34:50] 可計算的方式 [02:34:52] 他可以去assign這個字的 [02:34:56] 這個一串字的priority [02:34:59] 叫做language model [02:35:01] 那這件事情當然你覺得我講這句話 [02:35:03] 只要是人聽得懂的話 [02:35:06] 他的機率就會很高 [02:35:07] 因為就是符合人類的語言的priority [02:35:12] 但是我如果現在 [02:35:13] 可能有些人 [02:35:15] 你會發現 [02:35:16] 有些人在做 [02:35:18] 做那個病人 [02:35:19] 就是那種 [02:35:20] 比如說是 [02:35:21] 語言障礙的 [02:35:23] 或是那種生病的中風 [02:35:26] 過後的那種語言 [02:35:27] 他其實他的pattern [02:35:29] 會跟 [02:35:30] 一般的 [02:35:32] 人類的語言trade model不太一樣 [02:35:34] 因為他可能會中斷 [02:35:36] 或者是有一些語助詞的東西 [02:35:39] 會出現 [02:35:40] 或是他的片語的 [02:35:42] 他腦部受損之後 [02:35:44] 他有一些的concept會不見 [02:35:46] 所以他用的詞彙會變少 [02:35:48] 那那個東西兜出來的model [02:35:50] 就會跟你正常人的model又不一樣 [02:35:53] 所以 [02:35:54] 其實你可以想像 [02:35:56] 反正我就是based on原來的語料庫 [02:35:58] 做出來這樣的一個分佈 [02:36:02] 所以他就可以幫助 [02:36:03] 我去assign說 [02:36:05] 這句話到底是不是人說的這樣子 [02:36:08] 是不是符合我們現在想看的language [02:36:11] 所以 [02:36:12] 你可以想像當你把中文 [02:36:15] 或是英文 [02:36:17] 就像我剛才講的h [02:36:19] 把h成一些symbol不一樣的symbol [02:36:22] 雖然你看不懂 [02:36:24] 但是因為是一對一的mapping [02:36:26] 你在算這perplexity的時候 [02:36:28] 其實他也跟人類的languagemodel是一樣的 [02:36:31] 這是你看不懂 [02:36:32] 這是最簡單的編碼 [02:36:34] 密碼就是這樣做的 [02:36:36] 但是一對一啊所以很容易被破解就是這樣 [02:36:42] 標準上來講我們應該要做到angry [02:36:46] 就像剛才這個 [02:36:49] 因為這個字會跟前面的字都有關係這樣子 [02:36:53] 所以這個就很難算 [02:36:55] 你一定要有語料 [02:36:56] 然後你要大量的 [02:36:58] 這個 [02:37:00] 統計上的計算這樣子 [02:37:02] 但是後來發現這個實在太難 [02:37:04] 不好算也沒那麼多資料這樣子 [02:37:07] 所以就 [02:37:07] 好吧 [02:37:08] 那我們就不要統計就學 [02:37:11] 就是 [02:37:12] 在你有限的資料裡面 [02:37:14] 去學會一些東西 [02:37:16] 那這個東西你會覺得 [02:37:18] 這個都做不好了 [02:37:20] 他能學得起來嗎 [02:37:22] 這個就跟你們在做機器學習一樣 [02:37:24] 就是 [02:37:25] 你怎麼可能用那幾筆資料 [02:37:28] 比如說班上同學 [02:37:30] 學習表現 [02:37:32] 我就拿這50筆資料 [02:37:34] 我就可以Chain一個model [02:37:36] 這個model [02:37:39] 就可以預測以後班上同學的表現 [02:37:42] 就是如果這個model非常準 [02:37:45] 就可以預測說 [02:37:47] 上完三個禮拜我就可以知道說 [02:37:49] 這位同學你應該會被Done掉這樣子 [02:37:52] 現在其實都有這樣的東西 [02:37:54] 尤其是做HR [02:37:56] 其實 [02:37:57] 大家可能都不知道現在 [02:37:59] 現在的 [02:38:01] 大公司在面試的時候 [02:38:02] 其實都有AI在輔助 [02:38:05] 都有AI在輔助 [02:38:07] 不要不是說AI會問你問題 [02:38:09] 然後你要答 [02:38:10] 他們會統計 [02:38:12] 你回答的字 [02:38:14] 的分佈 [02:38:16] 然後他們會 [02:38:17] 以前有一個Database [02:38:19] 會知道說 [02:38:20] 以後表現好的人 [02:38:22] 當初在面試的時候都會提到什麼樣的關鍵字 [02:38:27] 當然不是 [02:38:28] 不是嘴炮那種關鍵字 [02:38:29] 而是他可能會 [02:38:31] 講到一些技術啊 [02:38:32] 講到一些 [02:38:33] 非常深入的關鍵字 [02:38:35] 就是同樣的問題底下以前那些 [02:38:38] 進公司表現很好的這些回答的語料 [02:38:42] 他們都統計 [02:38:43] 所以大家可以看看你這次回答 [02:38:45] 雖然聽起來好像還回答不錯 [02:38:47] 但是發現 [02:38:49] 你的 [02:38:50] 用語 [02:38:51] 跟以前那些 [02:38:53] 沒進來的 [02:38:53] 或是進來之後後來被fire的 [02:38:56] 都很像 [02:38:57] 那你可能就不會被考慮這樣子 [02:38:59] 所以這個東西其實現在都有在使用 [02:39:02] 所以 [02:39:04] 對所以 [02:39:05] 好好回答 [02:39:08] 只是說你當然會覺得他們有BIOS [02:39:11] 因為以前的 [02:39:12] 進去表現 [02:39:13] 很好的 [02:39:14] 講這些話並不代表沒有 [02:39:16] 沒有講的 [02:39:17] 人就表現不好 [02:39:18] 因為training data本來就有 [02:39:21] 這種 [02:39:22] 不足的問題 [02:39:24] 但是我們還是希望說我們有一個模型 [02:39:27] 只要為了資料夠多一點的時候 [02:39:29] 他可以學會這件事情 [02:39:31] 因為 [02:39:32] 這也是 [02:39:34] 必經之路嘛因為沒辦法做這件事只好做這樣 [02:39:38] 好 [02:39:39] 那我們今天就看到這一個這個 [02:39:41] 這個其實非常重要就是 [02:39:43] 這個字本身就是困惑的意識 [02:39:46] 那 [02:39:46] 他 [02:39:47] 他實際計算什麼 [02:39:49] 其實就是我們剛才在算這些東西啊 [02:39:52] 你會發現 [02:39:53] 如果 [02:39:54] 你把 [02:39:55] 成人的講話的pattern [02:39:58] 訓練出這樣的一個分佈 [02:40:00] 然後呢你把一個小朋友講話的pattern [02:40:04] 去算這個機率 [02:40:05] 他機率就很低 [02:40:06] 因為成人不會這樣講 [02:40:09] 就是 [02:40:12] 第一個小朋友可能很喜歡講那個連字詞 [02:40:16] 同樣的這個字 [02:40:17] 吃飯飯 [02:40:19] 就是類似就會講 [02:40:20] 但是你不會跟你同學說我去吃飯飯 [02:40:23] 這個pattern就不一樣 [02:40:25] 所以你在算這個機率的時候 [02:40:28] 某些人就傻了 [02:40:29] 你怎麼會變成講這種話 [02:40:31] 他就不瞭解你第2個飯的意思到底是 [02:40:34] 所以他就困惑這樣子 [02:40:36] 所以這個概念是這樣 [02:40:38] 那他其實計算上基本上就在算這個 [02:40:41] 這個字 [02:40:42] 你看到這些字 [02:40:43] 然後 [02:40:44] 接下來發現這個字 [02:40:45] probability的一個 [02:40:47] 可能性 [02:40:49] 所以困惑度越高表示說 [02:40:51] 你講了 [02:40:52] 你講了一句我以前沒聽過的話 [02:40:55] 那就是機率很低的意思 [02:40:57] 所以這個機率很低的意思 [02:40:59] 那他導述 [02:41:00] 你的困惑度就會高這樣子 [02:41:02] 所以當然他 [02:41:06] 看你要不要normalize [02:41:07] 他其實有時候是非常高的 [02:41:10] 因為實在太困惑了 [02:41:12] 你可能 [02:41:12] 出車禍我不知道在講什麼這樣子 [02:41:15] 有可能是這就是一般的講法 [02:41:18] 就是沒問題 [02:41:19] 機率是1這樣子 [02:41:21] 當然有時候我們會normalize到一定的範圍內這樣子 [02:41:25] 這perplexity其實是用來度量很多 [02:41:28] 由於是現在大語言模型的一個 [02:41:30] 很重要的工具 [02:41:32] 因為其實你可以想像他其實就是去看說 [02:41:35] 我勸完之後這個模型如果叫他講話 [02:41:39] 他講的話 [02:41:40] 跟人講的話其實是一致的 [02:41:42] 那表示我模型有trend [02:41:44] 但是如果你哪一天說 [02:41:46] 老師說要fintune [02:41:47] 那我就拿我們資料去fintune [02:41:49] 那fintune完之後呢 [02:41:50] 好像可以講我們 [02:41:52] 希望他講的話 [02:41:53] 但是 [02:41:54] 他一般的人話講得哩哩答答這樣子 [02:41:57] 所以你會發現 [02:41:59] 你再去算你fintune後的模型 [02:42:02] 他的perplexity [02:42:03] 會變很高就是他在decode的時候他的困惑 [02:42:07] 很高就是他不知道這時候要輸出什麼token [02:42:11] 他就 [02:42:13] 你的fintune過程就把他以前的 [02:42:17] 學會的東西都破壞掉的時候 [02:42:19] 他的perplexity會升高 [02:42:21] 所以我們通常會衡量fintune的好壞 [02:42:24] 其實perplexity是一個很 [02:42:26] 很好的一個指標 [02:42:28] 就說 [02:42:29] 你當然會 [02:42:30] 升高是 [02:42:31] 很有可能因為你 [02:42:33] 你的資料跟當初的 [02:42:35] Pretrend的LM的Pretrend資料比是差很多的 [02:42:39] 你只用少量資料來微調 [02:42:41] 當然模型有點會被你搞爛是一定的 [02:42:44] 但是你不要掉太離譜 [02:42:47] 你不要掉太離譜 [02:42:48] 所以 [02:42:49] 為什麼你常看到paper去看說 [02:42:52] 尤其是fintune的東西 [02:42:54] 去做尤其是做深層任務的fintune的研究的時候他會去度量 [02:42:58] perplexity就是我tune完之後 [02:43:01] 他至少還是講人話 [02:43:02] 他至少還是講 [02:43:03] 我們看得懂的東西這樣子 [02:43:05] 然後計算部分就是這樣這個東西其實在一般有用的訓練其實也是 [02:43:11] 訓練的過程也是一個 [02:43:13] 有些可能會把它當成是一個 [02:43:16] loss的逼近的一個指標在做這件事情 [02:43:20] 所以這個 [02:43:23] 你大概知道他其實就是去 [02:43:25] 去看我對我這個language model [02:43:28] 的 [02:43:29] 跟我現在要match的那個language之間的align的程度有多少 [02:43:35] OK [02:43:36] 但是通常你不會自己算 [02:43:37] 這個現在 [02:43:39] 這個直接呼叫直接告訴你這樣 [02:43:41] 所以有很多研究都會用這個 [02:43:45] 就是尤其是看 [02:43:47] 比如說大語言模型的幻覺的時候 [02:43:50] 因為大語言模型其實還是為自己心虛吧 [02:43:52] 就是他這個不太懂 [02:43:55] 所以他的perplexity在decode的時候會升高 [02:43:58] in general [02:44:00] 其實有時候他 [02:44:01] 他信心度很高但都是錯的也有 [02:44:04] 但是有時候通常他不太有把握或是他 [02:44:07] 開始已經不知道在幹什麼的時候他這部分的信心度會拉高 [02:44:11] 所以這個就是一個指標 [02:44:12] 你可以去算perplexity [02:44:14] 這只是one of的一個指標這樣子 [02:44:19] OK [02:44:20] 好 [02:44:20] 那這個就我剛才提到一些意義就是他其實是用來度量 [02:44:25] 非不確定性的就是我現在在看這句話的時候跟我以前的model的align程度 [02:44:31] 其實不太一致的 [02:44:33] 那也是來評估我現在做 [02:44:36] 這個模型的表現尤其是像我去fine tune或者是說 [02:44:41] 我現在要去 [02:44:41] 去做什麼任務的時候 [02:44:43] 其實他到底 [02:44:44] 對自己的信心度有多少 [02:44:47] 那當然也有是一個compression [02:44:49] 因為 [02:44:51] 為什麼提到compression [02:44:52] 因為model本身 [02:44:54] 你可以想象人類這麼大的語料庫 [02:44:57] 我只要用 [02:44:58] 7個billion [02:45:00] 幾個billion也算蠻多的就是我只要用幾個billion參數 [02:45:05] 我就可以讓他完全的去decode出人類說的文章 [02:45:09] 這某種程度上已經是一種 [02:45:11] 一種壓縮的過程 [02:45:12] 就是把人類的nudge完全壓縮在這整個參數的表示裡面 [02:45:18] 所以壓的好的 [02:45:19] 他perplexity會低壓 [02:45:21] 因為表示沒有問題 [02:45:22] 表示沒有arrow [02:45:23] 但是壓的不好的就是 [02:45:25] 他decode回去 [02:45:27] 就很像你們圖片在 [02:45:29] 解回原來圖片的時候 [02:45:31] 發現就模糊了 [02:45:32] 或者是 [02:45:33] 那個就是 [02:45:34] 這個壓縮的效率不好 [02:45:36] 這樣子 [02:45:38] 這個大概是perplexity的一些特性的 [02:45:41] 然後 [02:45:41] 那 [02:45:43] 那我們能不能用perplexity來 [02:45:45] 判斷 [02:45:46] 你們寫的作業是不是AI寫的 [02:45:48] 其實現在有很多detect AI的工具 [02:45:51] 就是去算perplexity [02:45:53] 就是這個沒錯這就是我寫的這樣子 [02:45:56] 我信心度很高我沒有困惑我認得出我寫的東西這樣子 [02:46:00] 所以這件事情是 [02:46:04] 現在detect的模型的或是系統 [02:46:08] 都是朝這個方向來做 [02:46:10] 但是你可以想象 [02:46:11] 你可以回去自己試 [02:46:12] 反正這裡你也可以算出來 [02:46:14] 你可以在這個 [02:46:15] detect的東西 [02:46:18] AI自己做出來你叫他自己判斷 [02:46:20] 他可能會判斷90多 [02:46:22] 但是你把一個字的改掉 [02:46:24] 或是把一個字對掉或是 [02:46:26] 給decode就下降這樣子 [02:46:28] 所以那個都很容易去調控這樣子 [02:46:32] 好 [02:46:33] 我們今天就先上到這 [02:46:40] OK並不適合沒有沒有 [02:46:42] 沒錯有一點這個味道 [02:46:44] 其實也不是頂大的差距說實在 [02:46:48] 是 [02:46:50] 努力的差距 [02:46:54] 應該這樣講其實 [02:46:57] 等你去學會其實學習deep learning的 [02:47:00] 之後你再回過頭來看 [02:47:02] 就不覺得 [02:47:05] 這個gap是有的 [02:47:07] 因為 [02:47:08] 說實在的現在這些code [02:47:11] 我們並沒有叫你去寫出detail的training的東西 [02:47:14] 但是的確你 [02:47:16] 你要有訓練過的經驗 [02:47:18] 不然你在寫第1個作業時候 [02:47:21] 會有點辛苦沒錯 [02:47:22] 因為你根本不知道模型的訓練是什麼這樣子 [02:47:26] 那當然我在CBUS裡面的確也有提到說 [02:47:30] 最好還是要有基礎學習跟深入學習的基礎 [02:47:34] 只是說我沒有把它列為很hard的requirement [02:47:38] 原因就是說 [02:47:40] 我覺得這些東西其實是很容易可以catch up的 [02:47:44] 對 [02:47:46] 這不是這跟頂大沒有關係 [02:47:49] 這個頂大的學生也 [02:47:50] 都很廢 [02:47:51] 大家也都是這樣學過來的這樣子 [02:47:54] 而且 [02:47:55] 其實有很多人會 [02:47:56] 會訓練模型會跑deep learning [02:47:59] 其實他並沒有懂這些東西 [02:48:01] 但是他會寫package [02:48:02] 他會 [02:48:02] 他至少run過那個套件 [02:48:04] 其實就是這樣而已 [02:48:05] 他並沒有懂 [02:48:06] 更多這樣子 [02:48:09] 在Colab上平均要執行多少時間合理 [02:48:13] 我也許 [02:48:14] 可以請助教提供一下他們以前的經驗這樣子 [02:48:18] 如果有跑過的 [02:48:22] 對我們可以列一下這個時間這樣子 [02:48:25] 對具體截止日期就是從今天開始公佈三週後這樣子 [02:48:30] 我作業大概都是這樣的一個時程 [02:48:33] 其實都是來得及 [02:48:36] 考試會著重作業跟上課內容 [02:48:41] 目前的課程沒錯對都比較 [02:48:44] 講故事 [02:48:46] 所以 [02:48:46] 因為他本身我並沒有用什麼教科書 [02:48:49] 所以他並沒有太多的step by step的技術的東西 [02:48:53] 對的確 [02:48:55] 可能會有很大部分是從作業 [02:48:58] 你做的過程 [02:48:59] 跟你的insight [02:49:01] 跟有一些 [02:49:02] 一些你 [02:49:03] 一定會做過就瞭解的細節去著手 [02:49:07] 不太會去考 [02:49:09] 只能舉例不太會去考叫你算BM25這樣子 [02:49:13] 這種東西這樣子 [02:49:14] 對我們會有一個考試是 [02:49:17] 會排在應該是14周 [02:49:20] 對我在這兩個禮拜會確認 [02:49:25] 我是寫mid-term的但是其實是比較在期末 [02:49:28] 所以應該是14周的時候 [02:49:35] 好 [02:49:43] 好吧這個你應該下載就看得到了 [02:49:47] 是吧 [02:49:49] requirement [02:49:53] 因為 [02:49:55] 除了Gensim的問題 [02:49:57] 另外其他的 [02:50:00] ok好你們再回復好了 [02:50:04] Gensim [02:50:04] 他還有在維護嗎 [02:50:06] Gensim [02:50:06] 去年的時候有沒捐 [02:50:08] 可是現在好像不捐 [02:50:09] 所以這個會在 [02:50:10] 發佈到下 [02:50:11] ok好 [02:50:13] 對因為這些公司有些 [02:50:15] Gensim應該是還有但是有些你會發現有些套件你怎麼一直沒在更新或是 [02:50:20] 或是其實你有更別的選項 [02:50:23] 更新的選項 [02:50:26] 好我想就這樣了當然 [02:50:29] 對 [02:50:30] 我是覺得 [02:50:32] 有我們有 [02:50:33] 這個code template其實是還好 [02:50:35] 還好 [02:50:37] 當然有時候如果你沒有這些基礎壓力可能真的會大一點這樣 [02:50:40] 不過我想就自己 [02:50:41] 自己判斷這樣子 [02:50:44] 好 [02:50:45] 沒有其他問題我們今天就上到這邊我們下課