# W2_自然語言處理_高宏宇.m4a|長度 02:59:56|model large-v3 on cuda [00:04:39] 然後,我開始錄字了,可以了,要嗎? [00:04:58] OK,好,我們這堂課是九點開始上課了,所以我們就開始。 [00:05:07] 上次其實忘記講就是說,因為是三節課連續, [00:05:13] 本來研究所課我大概會以中間休息一段時間, [00:05:17] 不過因為好像 [00:05:19] 有蠻多同學有Xclass的關係,所以 [00:05:23] 我還是照著 [00:05:25] 原來的這個課堂的時間去下課這樣子。 [00:05:31] 好,那我們今天就進行這個介紹的部分,就是簡介。 [00:05:38] 那這理論上應該是在上禮拜要帶一些,不過 [00:05:43] 這部分會主要涵蓋在 [00:05:46] 整個自然語言處理,以前在上這門課的時候會講的大概 [00:05:52] maybe一半的東西這樣子。 [00:05:54] 那我們大概用 [00:05:56] 三小時的時間把它濃縮這樣子。 [00:05:58] 那主要也是說有些細節大概 [00:06:02] 你大概知道,或是聽過那些名詞。 [00:06:05] 但是你現在的做法可能不太需要這樣子去做這樣子,不過你大概要知道 [00:06:12] 這些東西,而且 [00:06:14] 有些技術 [00:06:15] 可能現在 [00:06:16] 你在用 [00:06:17] 大型語言模型,你要做 [00:06:19] 在地的model去做 [00:06:21] IG的時候,你可能也會用到這樣子。 [00:06:29] 對,我上次也忘記提,這門課的設計的概念比較像是自然語言處理 [00:06:36] 跟 [00:06:37] Deep Learning,就是說在Deep Learning時代的自然語言處理該怎麼做,而不是 [00:06:43] 就是在 [00:06:45] 唇講 [00:06:46] 自然語言處理。所以它其實會跳 [00:06:48] 直接就跳進 [00:06:50] Deep Learning的部分。 [00:06:52] 那大家也可以看一下那個Stanford的 [00:06:56] 這樣的一個課程。 [00:06:57] 那其實 [00:06:58] NLP [00:07:00] 這個跟Deep Learning結合的時候,他們的 [00:07:03] 設計 [00:07:04] 課程的內容這樣子。 [00:07:06] 對,這的確對電子學院來講,很多課程其實 [00:07:10] 在 [00:07:11] AI在Deep Learning的年代,其實都會需要有點這樣的調整。 [00:07:16] 尤其是一些研究所的課。 [00:07:18] 他大概可能一半內容都要換掉這樣子。 [00:07:22] 這是我們上次有提到的第一個 [00:07:25] Week 1的投影片的Outline,那我就skip掉。這上次有提到這個進程。 [00:07:31] 就是 [00:07:32] 以前的做法跟現在做法的差別。 [00:07:36] 那再提示一下就是說這個 [00:07:40] 這個 [00:07:41] 後面的這樣的概念比較像是說 [00:07:44] 我們 [00:07:45] 我們擁有了自己的 [00:07:46] 資料越來越多的時候,所以 [00:07:48] 我們就希望能夠用 [00:07:50] 訓練的方式 [00:07:51] 用 [00:07:52] 用AI,用機器學習訓練的方式,讓模型去理解這些東西,而不是 [00:07:57] 我們告訴他一些規則 [00:07:59] 告訴他一些我們人類看得懂的一些知識的表示。 [00:08:04] 所以其實 [00:08:05] 這個圖的一些 [00:08:07] 一個很大差別就是說 [00:08:10] 這以前的東西其實做出來,even他是有統計有 [00:08:14] 計算過的東西 [00:08:15] 但是其實 [00:08:17] 這些人 [00:08:18] 都比較容易理解 [00:08:19] 但是越來越到後面的資料量越大,模型越來越大,參數越來越大 [00:08:24] 做出來的關係越來越複雜的時候 [00:08:26] 其實 [00:08:27] 人其實 [00:08:28] 不太能夠理解 [00:08:29] 比如說 [00:08:30] 你能夠打開 [00:08:32] 這個BERT的模型,每一層的Transformal的參數 [00:08:36] 你知道它是什麼嗎? [00:08:38] 你能 [00:08:39] 你能夠把Wall Embedding的每一個字的向量 [00:08:42] 的數字拿出來解釋嗎? [00:08:44] 其實是不太行的 [00:08:45] 就是當然也有類似的研究 [00:08:47] 但是 [00:08:48] 那部分的一些量化的表示其實 [00:08:51] 比較是讓機器去看 [00:08:53] 已經不是人可以 [00:08:55] 很容易去 [00:08:57] 理解說他這個向量為什麼長這個樣子 [00:09:01] 當然現在我們也是有希望能夠去 [00:09:05] 看懂說 [00:09:06] 這個 [00:09:07] 這麼大的幾個B列的參數到底哪些是代表什麼 [00:09:11] 不過 [00:09:12] 這個不太容易 [00:09:15] 那今天主要會以 [00:09:18] 介紹的角度就是有點像 [00:09:21] 讓大家看看以前的做法然後看看一些歷史一些故事 [00:09:25] 所以比較 [00:09:26] 不見得會牽扯到太多的技術的細節 [00:09:31] 好那我想這個 [00:09:33] 什麼是NLP?那基本上就是把 [00:09:36] Human Language [00:09:38] 然後用 [00:09:39] 這個 [00:09:41] 電腦的運算的角度因為我們要所謂的要處理它 [00:09:45] 要 [00:09:45] 要去整個去 [00:09:47] 計算要去 [00:09:49] 讓用 [00:09:50] Computational的方式去理解 [00:09:53] 這件事情 [00:09:54] 那當然我們會希望能夠從以前的 [00:09:57] 語言學的這種Linguistic的角度 [00:10:00] 來切入 [00:10:02] 然後靠著一些更 [00:10:03] 更 [00:10:04] 多的大量的運算能力的 [00:10:08] 導入能夠讓這些應用 [00:10:10] 能夠做得更落地這樣子 [00:10:12] 我想這個大概 [00:10:14] 大家都 [00:10:15] 可以理解 [00:10:15] 好 [00:10:16] 那我先舉一個例子啊比如說以前在 [00:10:19] 在這個做 [00:10:21] 剛剛你說的NLP [00:10:23] 那時候最紅的應用可能是 [00:10:26] 這個做翻譯呀 [00:10:27] 或是做這個資訊檢索 [00:10:30] 那大概就像搜尋引信 [00:10:32] 那資訊檢索主要有點像你要管理這個大量的文字的 [00:10:37] 資料 [00:10:38] 比如說你現在拿到這個 [00:10:40] 這個新聞的資料 [00:10:42] 那你拿到這些資料你要做什麼事 [00:10:44] 其實非常多事情 [00:10:45] 以NLP的角度 [00:10:47] 你可能要做縮影 [00:10:49] 因為你沒辦法把它存在 [00:10:51] 一個 [00:10:52] 檔案然後要的時候再去找 [00:10:54] 你一定要知道說這個每一篇新聞裡面 [00:10:57] 到底包含哪些字 [00:10:59] 這樣你才能以後快速的找到你要的東西 [00:11:03] 那當然我們也希望對我們的來源資料做一些分類呀或者是說 [00:11:08] 我能夠找到 [00:11:10] 現在發生什麼事情 [00:11:12] 今天發生什麼是重要的事情 [00:11:14] 那或者是說這些東西 [00:11:15] 他的影響力是什麼 [00:11:17] 這個新聞發佈出去他造成什麼樣影響 [00:11:21] 因為現在 [00:11:22] 這個也快要選舉了 [00:11:23] 所以這個 [00:11:24] 這樣的東西其實 [00:11:25] 大家都 [00:11:26] 很想做 [00:11:27] 但是其實這邊通常都會加入所謂的 [00:11:30] 這種 [00:11:31] Social的 [00:11:32] 這些分析這樣子 [00:11:34] 當然現在 [00:11:36] 可能摘要這件事情 [00:11:38] 可能大家不覺得他是一個重要功能 [00:11:40] 因為好像 [00:11:42] Trivial [00:11:42] 但是以前在做摘要就一篇很大文章 [00:11:45] 你不用 [00:11:46] 三句話告訴我這樣子 [00:11:48] 或是說幫我畫重點 [00:11:50] 這個以前做Summarization [00:11:52] 還是非常重要大概在五年前還是一個重要題目 [00:11:57] OK [00:11:58] 那這個 [00:11:59] 資料跟資料之間的相關性 [00:12:02] 或是說我們常常想 [00:12:04] 知道說 [00:12:05] 這個上面的Sentiment [00:12:07] 情緒的表達到底是什麼 [00:12:09] 這個情緒的表達有各式各樣的應用尤其是 [00:12:13] 有時候會做到醫學領域 [00:12:15] 希望能夠網路上看到一些是不是有些人 [00:12:19] 的 [00:12:21] 言論 [00:12:22] 已經有一些特殊情緒的表達 [00:12:25] 像 [00:12:26] 之前 [00:12:30] 就有人去研究那個 [00:12:33] 犯罪者 [00:12:35] 他在做他的這個犯罪之前他其實有PO一些文章那些文章其實如果能夠 [00:12:41] 事先能夠detect出來的時候 [00:12:43] 其實是能夠 [00:12:44] 有機會能夠 [00:12:45] 去 [00:12:46] 遏止一些犯罪的行為 [00:12:48] 所以這種東西的研究其實一直都還有 [00:12:51] 只是說現在可能 [00:12:53] 他就是靠著 [00:12:54] AI靠著大圓模型的 [00:12:56] 導入能夠讓他更厲害這樣子 [00:12:59] 那這邊最後一項是這個非監督式的訓練語料庫 [00:13:03] 這個我們可能以後再講 [00:13:05] 大圓模型訓練的時候你就會發現說 [00:13:08] 這個 [00:13:10] 是一個非常重要的部分 [00:13:11] 就是說 [00:13:13] 以前大家學機器學習 [00:13:15] 當然就說 [00:13:15] 我們一定要有訓練資料 [00:13:17] 訓練資料 [00:13:18] 通常指的是監督式訓練 [00:13:21] 學習的資料 [00:13:23] 就是你一定要有 [00:13:25] input跟output [00:13:26] 所以你才能做所謂的supervised training [00:13:30] 但是呢其實 [00:13:31] 大家做過機器學就知道那個成本相當高而且 [00:13:35] 當你的訓練資料有一些雜訊的時候其他效果 [00:13:39] 就會受到影響 [00:13:41] 但是在大圓模型他怎麼靠著 [00:13:44] 這種 [00:13:45] 我不太可能 [00:13:45] 去標註東西啊 [00:13:47] 所以他一定是用一些 [00:13:49] 非監督式的方式 [00:13:50] 讓 [00:13:51] 整個模型先了解所謂的人類的知識人類的語料 [00:13:55] 那這件事情呢其實也跟 [00:14:00] 前陣子一個 [00:14:02] 台大英語系的教授說這個學英語啊這個不能背 [00:14:06] 不能背文法背文法就是學不好 [00:14:09] 這有點這道理有點相信就是背文法有點像是說你一定要能去標註一些訓練資料 [00:14:15] 用聽的就對了 [00:14:17] 你不管你聽得懂聽不懂你用聽的聽久你就會這個語言 [00:14:22] 沒有人告訴你那句話是什麼意思沒有人告訴你那個主持動詞授詞是什麼 [00:14:27] 但是你聽久了就是一個 [00:14:30] 非監督式的學習 [00:14:31] 他就可以告訴你這個語言就是 [00:14:33] 會是這個樣子 [00:14:34] 應付第一個新的語要進來有時候新的說法出來之後 [00:14:39] 你那個字典就out of that [00:14:42] 那另外說你跨語要怎麼辦 [00:14:44] 那另外一個就是說 [00:14:45] 同樣的說法他其實有可能很多種寫法說那個字典 [00:14:49] 要怎麼涵蓋 [00:14:51] 這樣所懂 [00:14:52] 這其實問題都 [00:14:54] OK [00:14:55] 我我們現在就是想用那我們用大圓模型 [00:14:58] 來做 [00:15:00] 這個老師都在講 [00:15:01] 就的東西我們用新的東西新的方法做看看比如說我就 [00:15:05] 叫Cloud做這件事情 [00:15:07] 就 [00:15:08] 就 [00:15:09] 叫他做你去 [00:15:11] 收集今天的這些股市的資料外資買超 [00:15:15] 買賣資料 [00:15:15] 超前大 [00:15:16] 前10名然後 [00:15:18] 剛好去抓他的新聞 [00:15:20] 然後整理報表給我 [00:15:21] 這件事情是非常容易的對現在AI來講雖然他 [00:15:25] 他會一直去網路上找資料然後會 [00:15:29] 會要你授權一些東西啊他能夠去SS [00:15:32] 不過基本上他都做的 [00:15:34] 做得到 [00:15:35] 那如果 [00:15:36] 你不太清楚他做什麼事 [00:15:38] 你可以 [00:15:39] 你可以控制他的 [00:15:41] action然後一步一步的去做這樣子 [00:15:44] 那 [00:15:44] 你可以了解他他做這些東西的過程以前在沒有大圓模型的時候 [00:15:51] 我們必須自己做 [00:15:53] 我們必須自己把這些流程串起來 [00:15:56] 然後這流程的只要有一個步驟做不好 [00:15:59] 後面 [00:16:00] 幾乎都免談這樣子 [00:16:02] 那這些事情的現在的AI大概沒有問題 [00:16:06] 他去 [00:16:07] 抓資料幫你整理幫你彙整幫你排序 [00:16:11] 找到重要的東西整理報告 [00:16:13] 這件事情 [00:16:14] 他現在其實做得非常好 [00:16:16] 其實 [00:16:17] 這要跑出來的結果 [00:16:18] 那 [00:16:19] 我是沒有去驗證他的 [00:16:21] 結果好壞啦不過這種比較數字型的而且有 [00:16:25] 有資料可以reference [00:16:27] 他的錯誤機率是 [00:16:28] 蠻低的這樣子 [00:16:31] 好 [00:16:31] 那只是說 [00:16:34] 現在有人就會做這些那我們還去管他怎麼做嗎 [00:16:39] 有時候的確你要知道他怎麼做你才知道說哪邊他可能會出問題 [00:16:43] 那我 [00:16:44] 我用 [00:16:45] 這個整理一下叫AI幫我畫一個圖 [00:16:48] 就是以前的做法 [00:16:49] 其實大概就這個流程 [00:16:51] 這個流程其實 [00:16:55] 現階段你大概要先了解一下才知道說原來大圓模型其實幫我做掉哪些部分 [00:17:01] 比如說 [00:17:02] 像他剛才去抓所謂的這個買賣超差距的前10名他一定要去網路上的 [00:17:08] 網頁啊去Cloud Information [00:17:11] 然後 [00:17:12] 他還要知道這些 [00:17:14] 買超賣超的值在哪裡 [00:17:17] 單單這些事情以前 [00:17:19] 以前就不太容易做 [00:17:22] 如果你不是人 [00:17:23] 告訴他去抓這些東西讓他自己去判斷 [00:17:26] 這個過程其實就很難 [00:17:28] 那 [00:17:29] 當然他排序完資料排序完之後他就知道我死家公司拿去抓新聞 [00:17:34] 所以當一個新聞進來之後呢 [00:17:37] 我們要做什麼事 [00:17:38] 其實 [00:17:38] 你可能 [00:17:39] 需要以前啦 [00:17:41] 以前的做法是你需要做段子 [00:17:43] 做token action [00:17:44] 做磁性的tagging [00:17:47] 會說這個新聞裡面的到底 [00:17:49] 主持在哪裡 [00:17:50] 這個形容詞是什麼這樣子 [00:17:53] 然後呢你還需要做所謂的NER [00:17:56] 就是我要切出台積電這三個字 [00:17:59] 這三個字我不能把它變成這個積電這兩個字因為積電其實頻率也很高 [00:18:05] 所以 [00:18:07] 我必須把台積電切出來這樣子 [00:18:09] 那切出來之後呢我要算一些權重啊就這邊文章裡面講了這麼多字 [00:18:14] 哪些字才是重要 [00:18:16] 其實這個 [00:18:17] 盜墓這這前三個步驟其實在以前做 [00:18:21] 在這個 [00:18:23] 應該說在bert還沒出來之前甚至在bert [00:18:27] 出來的後面的一兩年 [00:18:29] 其實都還是很重要 [00:18:30] 還是很重要所以大概你可以想像大概在 [00:18:33] 四年前 [00:18:34] 這三個步驟其實還是 [00:18:37] 一個標準的動作SOP [00:18:39] 後面就比較像是應用就說好吧那這個文章 [00:18:43] 我算完全重之後 [00:18:44] 我能不能做一些應用 [00:18:46] 我做災藥 [00:18:47] 那災藥這邊其實有兩個 [00:18:49] 兩個 [00:18:51] 這邊沒有改到 [00:18:53] 就是 [00:18:54] 一般我們會災藥會有所謂的畫重點式的災藥跟 [00:18:58] 跟這個 [00:18:59] 這個所謂的 [00:19:02] Uptractive Summary [00:19:04] 就是他會濃縮他會以三句話來表示這樣子 [00:19:08] 那這樣的災藥其實 [00:19:11] 以前有些方法 [00:19:12] 但是現在大圓模型做得非常好 [00:19:14] 那你也可以做情緒分析啊 [00:19:17] 然後你也可以做所謂的topic modeling [00:19:19] 就是說 [00:19:20] 好吧今天跟台積電有關的新聞 [00:19:23] 怎麼分成兩大群一個可能是他的財務報表 [00:19:27] 另外一個可能是他要去哪裡建廠的事情 [00:19:31] 你就可以把新聞分成 [00:19:32] 分群然後去看說這兩群所造成的影響是什麼 [00:19:37] 然後再做一些一些BI的 [00:19:39] 系統出來這樣子 [00:19:41] 我想這件事情其實以前的 [00:19:44] SOP就是這樣然後每一個步驟其實都有一些 [00:19:47] 研究的議題可以切入 [00:19:51] 但是你要想像這些東西 [00:19:53] 他就是一條龍這樣子 [00:19:55] 所以其中 [00:19:57] 有一個步驟沒做好 [00:19:58] 後面就很爛 [00:20:00] 比如說 [00:20:01] 你這個新聞根本沒把公式都tag好 [00:20:03] 時間也沒tag出來 [00:20:05] 該有的東西你沒有把它標示出來的時候 [00:20:08] 後面幾乎沒有用 [00:20:11] 所以以前就是一步一步 [00:20:13] 把好好的一個一個模組做好然後串起來這樣子 [00:20:17] 但是你現在可以想像大宇模型進來之後 [00:20:20] 其實 [00:20:21] 他就是把中間的這些整個做掉了 [00:20:24] 包含其中的理解的部分 [00:20:28] 包含深層的部分他就一次做掉 [00:20:31] 當然這中間為什麼這麼厲害 [00:20:34] 這個我們以後看一看 [00:20:36] 你可能 [00:20:38] 還是不會知道為什麼這麼厲害 [00:20:40] 因為其實不太容易了解 [00:20:42] 但是你可以想像 [00:20:44] 如果我現在叫LM [00:20:46] 做這些事情 [00:20:48] 其實我自己人工要做這麼多的事情 [00:20:51] 但這麼多事情當然不見得是 [00:20:54] 最佳解 [00:20:55] 但是是我們人類理解的應該是要這樣做 [00:20:59] 但是大宇模型為什麼靠著 [00:21:02] 幾十個b連的參數 [00:21:04] 他就有辦法把這件事情 [00:21:06] 一次做到為 [00:21:07] 中間的過程是什麼 [00:21:09] 你可以好好思考說 [00:21:11] 這個 [00:21:12] 原來他只是運氣好還是 [00:21:14] 真的有他的道理 [00:21:17] 好 [00:21:18] 那這件事情當然你會覺得說好像 [00:21:20] 磁性就磁性嘛反正都有一些工具 [00:21:23] 好像也不會太難 [00:21:24] 那我們就來解析一下每個步驟他其實可能會遇到一些困難 [00:21:29] 那 [00:21:29] 當然說這個 [00:21:31] 我把 [00:21:31] 這個 [00:21:32] 這個文章切成句子 [00:21:34] 然後找到一些 [00:21:35] POS tagging的工具去切 [00:21:38] 然後可以切到一些子句啊然後去算一些 [00:21:42] 就是該有的關鍵字 [00:21:44] 這些工具套一套好像人去看一看 [00:21:47] 非常容易但是其實電腦來做這件事情 [00:21:51] 挺複雜的 [00:21:52] 挺複雜因為你會發現 [00:21:54] 我這邊列一個磁性表 [00:21:57] 這磁性表 [00:22:00] 就是說 [00:22:00] 以我們學英語來講 [00:22:02] 我們知道所謂動詞 [00:22:04] 主詞 [00:22:05] 名詞 [00:22:05] 受詞 [00:22:06] 這些東西看起來 [00:22:08] 想想大概不會超過10種 [00:22:11] 但是真的 [00:22:12] 你要去細分 [00:22:14] 他所代表的意義 [00:22:15] 或者是說他能夠影響 [00:22:17] 其他字的範圍 [00:22:19] 非常多這個磁性非常多 [00:22:21] 所以 [00:22:22] 如果你以前用過所謂的CKIP [00:22:25] 或是 [00:22:26] 或是結巴這種斷字或是算Pos tagging的工具的時候你會發現他怎麼出來一堆 [00:22:32] 這到底是 [00:22:33] 不是動詞就動詞 [00:22:35] 為什麼還有這麼多種 [00:22:36] 不一這樣子 [00:22:38] OK好 [00:22:39] 那個當然是說我們可以做得更細 [00:22:41] 那效果就會更好 [00:22:43] 以前的 [00:22:43] 以前的做法會是這樣 [00:22:45] 所以 [00:22:46] 你就知道以前我們從語言學角度來切入的時候 [00:22:50] 我們都要care這些東西 [00:22:55] 那 [00:22:55] 其實就算找到磁性的時候其實有很多的問題 [00:23:00] 一直是 [00:23:01] 困擾的 [00:23:01] 做NLP的人 [00:23:03] 那我這邊就舉幾個例子 [00:23:04] 第一個是這個 [00:23:06] 這個 [00:23:07] 磁 [00:23:07] 這叫磁性起義 [00:23:09] 就是 [00:23:10] 這個 [00:23:11] 有不同的 [00:23:12] 解釋的方式 [00:23:14] 就是WSA這樣的一個問題 [00:23:16] 那我常舉這個例子 [00:23:18] WATCH FOR KIDS [00:23:19] 這三個字是 [00:23:20] 你把WATCH當然是名詞 [00:23:23] 還是動詞 [00:23:24] 其他的解釋是不太一樣的 [00:23:26] 這是一個名詞的解釋 [00:23:28] 這是一個動詞的解釋 [00:23:30] 那你說那我是不是要看前後文 [00:23:33] 這三個字如果在文章的前後文 [00:23:36] 我才能知道說這個原來WATCH FOR KIDS這三個字其實在講什麼 [00:23:42] 沒錯 [00:23:43] 做 [00:23:44] 語言處理其實你重點就是要看 [00:23:47] 所有的東西 [00:23:48] 你看到前後文 [00:23:49] 所以為什麼 [00:23:50] 大語言模型的context window這麼重要 [00:23:54] 那現在的這些LM尤其是雲端上的LM [00:23:57] 它的context window其實都相當的大 [00:24:01] 相當大就是 [00:24:02] 足夠把你一篇paper丟進去或是把你一篇報告丟進去都有辦法 [00:24:07] 所以它可以看的全部的東西 [00:24:09] 它可以全部東西一起算一些attention [00:24:10] 所以它比較能 [00:24:13] 比較不會出錯 [00:24:14] 但是大語言模型其實在做 [00:24:16] context很大的時候其實它有 [00:24:19] 其他的缺陷 [00:24:20] 以後我們有機會再講 [00:24:23] 那 [00:24:24] 這個三個字如果你現在問 [00:24:26] AI其實他 [00:24:27] 他不知道在幹什麼他其實已經不太懂我的問題 [00:24:30] 不過這個其實他就是我問得不夠好 [00:24:33] 所以如果我用 [00:24:35] 你要用這個角度磁性奇異的角度來解釋這三個字的時候他就知道了 [00:24:40] 就像一個 [00:24:41] 學生 [00:24:43] 知道說老師在講這個考古題我知道 [00:24:46] 他其實應該有讀過相關的文獻 [00:24:50] 就是知道說這個你要從磁力奇異的角度來看這件事情 [00:24:55] 所以他就分析的非常透徹這樣子 [00:24:58] 好 [00:24:59] 那當然 [00:25:01] 這個例子我覺得他是應該有看過相關的解釋文獻 [00:25:07] 並不是他真正 [00:25:09] 去 [00:25:10] reasoning出來自己去trump soul去推出來的 [00:25:14] 不過他其實是有機會可以做這件事情 [00:25:17] 就是在他沒有看過 [00:25:19] 相關解釋的情況底下他是有辦法做這件事情 [00:25:24] 所以這是AI可以做的事 [00:25:27] 那 [00:25:27] 這個 [00:25:29] 前後文的模糊度其實也會造成 [00:25:32] 你的問題的理解 [00:25:34] 我通常會舉這個例子不過這例子其實有點久了 [00:25:38] 一般我們以前在做聊天機前面的 [00:25:40] 文獻的時候 [00:25:43] 其實 [00:25:44] 以前都是規則式的方式 [00:25:46] 就是Lure Bass [00:25:48] 就是這個問什麼我就去FAQ找 [00:25:51] 然後找到相對應的答案再回答這樣子 [00:25:55] 那像這個是在Siri上的一個例子 [00:25:57] 就是這個 [00:25:58] 我並沒有問他任何天氣的事情 [00:26:01] 但是他知道傘 [00:26:03] 傘其實是跟下雨有關下雨就跟天氣有關 [00:26:07] 那你在手機上問要不要帶傘 [00:26:09] 其實就是一個天氣 [00:26:10] 的一個查詢 [00:26:11] 所以他就把這個歸類在這樣的情境底下 [00:26:14] 他就找到對應的資訊 [00:26:16] OK [00:26:17] 所以 [00:26:18] 這件事情你的你以前如果在大圓模型還沒出來之前 [00:26:23] 你能夠做到這個地步 [00:26:25] 就非常厲害 [00:26:26] 就是你能夠了解使用者的意圖 [00:26:29] 你能知道他想要幹什麼 [00:26:32] 所以這個 [00:26:33] 這個 [00:26:35] 必須要知道 [00:26:36] 在什麼地方什麼應用做什麼事情 [00:26:39] 他所要表達是什麼 [00:26:41] 所以這個會差很多 [00:26:43] 當然你在手機上問這個大概不外乎就是天氣 [00:26:47] 或是說他 [00:26:48] 他大概也只有天氣可以查 [00:26:51] OK [00:26:52] 但是呢其實你可以發現他其實是也是規則只是他的規則是比較聰明一點 [00:26:58] 所以 [00:26:59] 比如說我就亂問 [00:27:00] 就是 [00:27:01] 明天學生的口是有點擔心我沒有問他任何情形我也沒告訴他我現在要幹嘛 [00:27:06] 但是呢 [00:27:07] 他其實是看到明天 [00:27:08] 他覺得這是一個 [00:27:09] 時間 [00:27:10] 所以他就去我的行事曆裡面去找 [00:27:13] 跟時間有關的任務 [00:27:14] 應該要做什麼事情 [00:27:16] 所以他其實也是相當複雜他也是說我要找到情境 [00:27:21] 然後跟時間有關情境的應該對應到什麼樣的 [00:27:24] 的Tour use [00:27:25] 做這件事情 [00:27:27] 所以他會說你的schedule裡面 [00:27:29] 沒有這件事情 [00:27:31] 他甚至不太管後面是什麼 [00:27:33] 所以這個是 [00:27:35] 當然 [00:27:36] 我舉這個例子對思域是不太公平因為這例子很久了 [00:27:39] 這個搞不好是五年前 [00:27:41] 舉的例子 [00:27:42] 不過 [00:27:43] 以前設計的應用的精神就是這樣 [00:27:46] 就是 [00:27:47] 幾乎是一個字典比對 [00:27:49] 他聰明一點有稍微在情境的這種 [00:27:52] 融入這樣子 [00:27:54] 但是還是 [00:27:56] 這個掛一漏腕 [00:27:57] 就是你把一條規則做好 [00:28:00] 隨便問就掛掉 [00:28:02] 所以在大圓模型還沒出來之前的所有這種線上的 [00:28:08] AI curve [00:28:09] 或是聊天 [00:28:09] 機器人通常 [00:28:10] 大家都不太愛用 [00:28:12] 因為 [00:28:12] 因為就問個兩三句就 [00:28:15] 就不 [00:28:16] 就覺得他沒有什麼用這樣子 [00:28:19] OK [00:28:23] 那這個應該我有舉過這個例子 [00:28:25] 就是說閱讀理解 [00:28:26] 那閱讀理解其實 [00:28:29] 等我們 [00:28:32] 第一個第二個作業做完之後也許你們可以回過頭來自己 [00:28:35] 做這件事情 [00:28:36] 就是我們來做做閱讀理解這件事你把這個東西轉成 [00:28:41] 項鍊 [00:28:42] 四個選項轉成項鍊然後跟原來這個文章的項鍊去算算相似度 [00:28:47] 說用你你不要用大圓模型你用這種比較 [00:28:51] embedding的方式直接去算這種 [00:28:54] 語意相似度看你能不能找到正確答案 [00:28:58] 那重點你要能夠解釋的話這個 [00:29:01] 這個就要做生成的部分那又是不一樣的 [00:29:04] 所以這件事情其實是 [00:29:06] 以 [00:29:07] 你把大圓模型的角色拿掉之後 [00:29:10] 你會發現你根本做不出來這件事情 [00:29:14] 好 [00:29:15] 那 [00:29:17] 大家可能覺得說那磁性剛才列出來的磁性很多都好像是很複雜而且是中文比較會 [00:29:23] 遇到問題 [00:29:25] 但是英文其實 [00:29:27] 也是很難做 [00:29:28] 那 [00:29:29] 像這一句話 [00:29:30] 這句話是個英文非常簡 [00:29:33] 簡潔但是省略掉很多一些 [00:29:37] 這個let [00:29:39] 或是什麼東西的 [00:29:40] 這些詞 [00:29:42] 所以 [00:29:43] 很難去 [00:29:44] 知道他原來到底想表達什麼 [00:29:47] 所以 [00:29:48] 以前英文老師都告訴我們啊這個學生你們開始學英語的時候了不要一開始就把英文寫得非常簡單 [00:29:55] 因為別人會看不懂在說什麼 [00:29:57] 所以盡量複雜 [00:29:59] 所謂盡量複雜你就發現底下這些句子都 [00:30:01] 變得比較長 [00:30:03] 但是比較知道他在說什麼 [00:30:06] 而且非常精確這樣子 [00:30:08] 那為什麼會有這麼多句子呢 [00:30:10] 其實 [00:30:10] 我就把它丟到 [00:30:12] Google的翻譯 [00:30:14] 翻成中文 [00:30:16] 然後再用中文再把它翻回英文 [00:30:18] 它就會產生不同的 [00:30:20] 翻譯 [00:30:20] 或是說 [00:30:21] 我把這句英文翻成 [00:30:23] 比如說 [00:30:24] 什麼烏克蘭語 [00:30:26] 再把烏克蘭語翻回英文 [00:30:28] 它就會產生多樣性的翻譯 [00:30:31] 這個動作 [00:30:32] 這個動作 [00:30:34] 這個以前在做NLP的人非常常用 [00:30:37] 因為 [00:30:37] 用這種方式我就可以產生 [00:30:39] 如果這個翻譯是 [00:30:40] 功能是好的 [00:30:42] 我就可以產生同樣的 [00:30:44] 意義但是說法不同的句子 [00:30:47] 對做NLP來講這個就是一個 [00:30:49] 多樣性的語調 [00:30:51] 不過這樣的做法你會發現 [00:30:55] 我把它 [00:30:56] 翻成中文 [00:30:57] 就發現好像意思都不太一樣 [00:31:00] 那你說當然就是要看這個 [00:31:03] 這個Telescope到底是 [00:31:05] 形容 [00:31:07] 前面的I還是形容這個man [00:31:09] 這個不同的形容 [00:31:10] 形容的方式呢 [00:31:11] 它其實就是代表不同的東西 [00:31:13] 所以就是去算它的磁性 [00:31:16] 做這個Dependence Tree出來 [00:31:18] 這就是那個 [00:31:20] 那個磁性的Tree [00:31:22] 做出來之後我就知道它形容誰的這樣子 [00:31:25] 然後就覺得這個應該很容易 [00:31:28] 但是你要想像 [00:31:29] 做這個Tree呢就跟你要去理解這個句子的意思 [00:31:34] 其實是同樣的道理 [00:31:36] 它一樣不知道你在講什麼 [00:31:39] 所以它只能跟 [00:31:40] 根據它的語料它的 [00:31:42] 計算的方式 [00:31:43] 統計的Base或者是一些語言學的Base [00:31:46] 做出這個Tree [00:31:48] 所以這個Tree呢 [00:31:49] 不唯一啊 [00:31:51] 不唯一 [00:31:52] 就是它換一個統計的基底之後 [00:31:55] 做出來的Tree就不一樣 [00:31:58] 所以會有不同的表示啊 [00:32:00] 就是這個 [00:32:03] 長出來的Tree [00:32:04] 長得不一樣 [00:32:05] 它其實就不一樣 [00:32:07] 這是AI幫我畫其實 [00:32:08] 這個人應該站在山上 [00:32:10] 但是我 [00:32:10] 不知道這一張就把它放在下面的這樣子 [00:32:14] 就是山上那個人拿著望遠鏡還是我在看他拿著望遠鏡 [00:32:17] 是不一樣 [00:32:18] 這個這兩個 [00:32:20] 字有點小 [00:32:21] 這兩個所形成的這個 [00:32:23] Passing Tree [00:32:25] 或者是磁跟磁之間的Dependency就不一樣 [00:32:30] 那你說 [00:32:30] 那是不是這個Passing的工具不好 [00:32:34] 也不是 [00:32:35] 因為你的句子就是長這個樣子 [00:32:38] 不管什麼Pass [00:32:39] 這幾種說法 [00:32:40] 都不能說錯 [00:32:43] OK [00:32:45] 那你可以想像我們一般讀到文章或是 [00:32:49] 一般的對話來講 [00:32:50] 其實就都充斥著這種 [00:32:53] 模糊啊 [00:32:54] 這個你到底想表達什麼 [00:32:56] 但是 [00:32:57] 你跟人對話你不會跟他說 [00:32:59] 那你這個 [00:33:00] 你這個字是形容什麼 [00:33:01] 你可不可以再講一下 [00:33:02] 不太會這樣 [00:33:04] 我們就會根據更多的前後文去理解這件事情 [00:33:08] 但是也許有些理解會是錯誤的 [00:33:10] 好 [00:33:13] 那這個就是前面那個例子我把它拉到後面 [00:33:15] 就是其實有一些是 [00:33:17] Tagging的問題 [00:33:19] NER的Tagging就是除了磁性之外 [00:33:21] 你還要知道這是一個財經新聞 [00:33:24] 所以我要知道這個Media Tag [00:33:26] 是一個公式名稱是一個組織名稱 [00:33:29] 然後日期名稱相當重要 [00:33:31] 然後裡面一些相關的數字 [00:33:34] 就是說 [00:33:34] 整篇文章我可以 [00:33:36] 只看這三個東西我就知道他想要表達的概念 [00:33:40] 跟他所要論述或是說我要把它做分類分群 [00:33:44] 我就知道應該放在哪裡 [00:33:46] 但是 [00:33:47] 我不用看其他字 [00:33:49] 我不用看其他字因為其他字可能就在描述細節或是一些 [00:33:54] Redundant的東西 [00:33:56] 那我除了Tag這些之外說老師這很簡單啊我只要設計規則這個 [00:34:02] 這個跟Compiler一樣把這些路寫出來之後我就知道了 [00:34:06] 但是你怎麼知道 [00:34:07] 這些公司名稱是什麼 [00:34:09] 你如果有去判斷 [00:34:10] 這些東西 [00:34:12] 那他的邦德率也是一個 [00:34:14] 問題 [00:34:15] 這以前 [00:34:17] 這個老師的實驗室有 [00:34:19] 兩位博士生都靠著做這樣的題目然後博士學位 [00:34:23] 所以你就知道以前 [00:34:25] 我們 [00:34:26] 人類的 [00:34:27] 有點以現在角度來看真的是 [00:34:30] 井底之蛙這樣 [00:34:32] 在這樣的問題裡面搞那麼久 [00:34:34] 不過在那個年代這的確是一個很難的問題 [00:34:38] 以前 [00:34:39] 我們就只有 [00:34:40] 這種 [00:34:41] VirusDM啊 [00:34:43] 或是這種機率模型的CRF的方式來做這件事情 [00:34:47] 但這個通常都需要一點supervised training data [00:34:51] 才能做得好 [00:34:54] 好那 [00:34:55] 另外這些還有所謂的推理的問題 [00:34:57] 就是他看懂意識之後他到底能不能理解他到底能不能推理 [00:35:01] 這是一個 [00:35:03] 做 [00:35:04] 做這個語言 [00:35:07] 讓這個 [00:35:08] 華語文能力測驗的題目啦 [00:35:11] 那我不知道這個 [00:35:12] 這個其實 [00:35:13] 可能要找一下不過我覺得好像不可考 [00:35:16] 我覺得 [00:35:17] 考外國人 [00:35:19] 看這種中文字有點 [00:35:21] 有點那個 [00:35:22] 很故意這樣子 [00:35:23] 就這件事情其實你要怎麼去pass [00:35:26] 找到這兩個答案 [00:35:27] 那 [00:35:30] 當然你會說那我就把passing tree做出來然後好好的去看 [00:35:34] 他的子句的部分 [00:35:36] 這件事情其實LM [00:35:38] 做得很好這是LM [00:35:40] 告訴我的推理的過程 [00:35:42] 所以他會去推理但是我覺得他其實應該是有看過 [00:35:47] 考古題 [00:35:48] 所以還可以分析的這麼透徹這樣子 [00:35:52] 所以他可以做出最後的推理的過程 [00:35:55] 當然你現在你也可以自己重新設計然後你用類似 [00:35:59] 叫他推理或是說 [00:36:01] 你給他一些Chain of thought的Rule [00:36:03] 然後你就他有辦法做這件事情 [00:36:08] OK [00:36:09] 然後還有情境理解 [00:36:10] 同樣的一句話當然他必須要知道前後文在描述什麼東西 [00:36:15] 他的概念就不一樣 [00:36:16] 這件事情其實以前 [00:36:19] 我們都做不好 [00:36:20] 所以我們都只能拿來當成笑話來說這個同樣的句子其實概念不同這樣子 [00:36:27] 網絡上你都可以找到這些例子 [00:36:28] 有非常多種 [00:36:30] 同樣的 [00:36:31] 同樣的敘述但是在講不同的事情 [00:36:36] 這是AI的解釋 [00:36:37] 所以他知道這個是有一點諷刺的位置 [00:36:40] 但他知道情境 [00:36:43] 他知道不同的情境 [00:36:45] 所以你可以想像在大圓模型裡面 [00:36:48] 他對冬天的理解跟夏天的理解 [00:36:51] 不是只有兩個不同的Token [00:36:53] 他後面還跟隨著當初他透過Pretrend Data [00:36:58] 學到的 [00:36:59] 冬天 [00:37:00] 相關的詞彙 [00:37:01] 什麼東西跟冬天會一起出現的 [00:37:04] 的詞 [00:37:05] 他就把這樣的情境 [00:37:07] 濃縮在冬天這個概念裡面 [00:37:10] 所以他知道這兩個情境其實 [00:37:13] 他所代表的含義是 [00:37:15] 很大差別 [00:37:16] 所以 [00:37:16] 這個句子在不同情境下的解釋是會完全不同 [00:37:22] 當然這個這樣解釋是很合理但是當你回去 [00:37:26] 當我們講完Transform [00:37:28] 講完這個 [00:37:29] 他怎麼Pretrend之後就覺得說 [00:37:32] 難道做做褐漏字就能夠理解 [00:37:35] 冬天跟夏天的情境嗎 [00:37:37] 這個 [00:37:37] 也是蠻神奇的 [00:37:40] 那最後這個這是另外做語音的都會講這個例子 [00:37:45] 就是叫記記記記記 [00:37:48] 那 [00:37:48] 這五個字呢 [00:37:51] 其實我這樣一念你大概知道什麼意思 [00:37:53] 就是 [00:37:54] 這個 [00:37:55] 這其實是 [00:37:57] 來自於這位 [00:37:59] 語言大師 [00:38:00] 這個 [00:38:01] 當然 [00:38:02] 網路上也有人一些說法說這個不可考 [00:38:05] 好像不見得是來自於他但是 [00:38:08] 大部分人都覺得是從他的一個 [00:38:10] 一個例子來 [00:38:11] 就是 [00:38:12] 他當時就是因為有一些人希望把中文改成比較拉丁拼音的方法 [00:38:17] 因為中文實在太難學了 [00:38:20] 所以用拉丁的拼音的做法來改這個 [00:38:23] 把文字改成那個樣子 [00:38:25] 但是他就說當我們要描述一段 [00:38:28] 一段敘述 [00:38:29] 這一段敘述 [00:38:31] 如果都是這樣如果你沒有文字 [00:38:33] 你只用拼音的方式 [00:38:36] 你根本不知道 [00:38:37] 這句話在講什麼 [00:38:38] 這個當然是很 [00:38:43] 很特意的去設計這樣的句子 [00:38:45] 但是這樣的句子其實 [00:38:47] 也可以想像 [00:38:49] 當我要做語音識別 [00:38:50] 或是說甚至文言文的理解其實也非常困難 [00:38:54] 但是 [00:38:56] 大圓模型知道 [00:38:57] 這些字都有所謂的生母育母 [00:39:00] 這些東西所以他不是只是文字本身Token的東西 [00:39:03] 他有所謂的 [00:39:05] 念的東西他的概念也進去了 [00:39:08] 當然 [00:39:08] 他可以理解這件事情呢 [00:39:11] 並不是他真的知道這個念音 [00:39:14] 而是他有讀過相關的語料 [00:39:17] 在解釋生母育母這些東西 [00:39:20] 哪些字是生母哪些字是育母 [00:39:22] 所以他反而能夠推敲出來他並不是真正知道這個念法是這樣 [00:39:28] 以我目前的解釋 [00:39:30] 會是這個樣子 [00:39:33] 這是叫他再重做一個例子他其實做得出來他可以做這樣的推演 [00:39:38] 他可以做得出來 [00:39:40] 拿來給解釋 [00:39:42] 那 [00:39:43] 這件事情其實我剛才有一個解釋其實 [00:39:47] 通常我們都想知道說大圓模型為什麼會知道這件事情 [00:39:51] 當他回答這樣的時候 [00:39:53] 我們會覺得說他好像知道什麼叫生母什麼叫育母 [00:39:57] 其實 [00:39:58] 不盡然 [00:39:59] 不盡然 [00:40:00] 就像以前 [00:40:02] LM剛出來的時候就有人 [00:40:05] 用 [00:40:06] 問他因為 [00:40:07] 你知道大圓模型前面我還沒有問過他 [00:40:08] 會有所謂的 [00:40:09] 這個Token Relation [00:40:12] 所以我就問他說這個Strawberry [00:40:15] 就是英文這個Strawberry這個字呢 [00:40:17] 裡面有幾個R [00:40:19] 裡面有幾個字母R這樣子 [00:40:22] 那如果以大圓模型的設計概念 [00:40:26] 他理論上應該不懂的這個字裡面的每個字母的拼法 [00:40:31] 但是他可以回答出Strawberry這個字 [00:40:34] 裡面有三個R [00:40:35] 是不是Strawberry [00:40:37] 你可以自己算算看 [00:40:38] 他可以自己回去再推這樣子 [00:40:41] 那當你去理解 [00:40:43] 前面的LM [00:40:45] 或是Bird這種東西他裡面前面那一端的Token Relation的步驟之後你就覺得 [00:40:50] 他怎麼會知道裡面有幾個R [00:40:53] 那其實有很大的 [00:40:54] 原因 [00:40:55] 有很大的 [00:40:57] 可能性是來自於 [00:40:58] 有很多的資料 [00:41:00] 本來就會把 [00:41:02] Strawberry這個字 [00:41:03] 一個一個字母的寫出來 [00:41:05] 就是他在 [00:41:07] 訓練資料或是他在 [00:41:08] 在人類的文章中有看過說原來 [00:41:11] Strawberry就是第一個字母是S [00:41:13] 然後第二個字母是T這樣一路的寫下去 [00:41:17] 所以他就有這樣的東西啊所以你可以想像他其實是看過非常多的東西然後把他記錄下來 [00:41:26] 那這是另外的例子 [00:41:29] 那我們再回過頭來看一下說以前的應用就是你會覺得說那以前 [00:41:35] 這個 [00:41:36] 能力這麼弱那以前都在幹什麼 [00:41:38] 以前能夠做什麼事情 [00:41:40] 我們先來看這個Siri跟小平 [00:41:43] 以前這一塊其實是相當難做就是一個 [00:41:46] 像對話機器人一樣 [00:41:48] 這個是微軟當初做的一個 [00:41:51] 一個對話機器其實那個年代 [00:41:54] 差不多十年前 [00:41:56] 相當的紅因為 [00:41:57] 非常的人性化他可以跟你對話可以跟你 [00:42:00] 那個 [00:42:01] 這個當初是 [00:42:03] 被選為這個 [00:42:05] 這個 [00:42:06] 大學生的最佳的 [00:42:08] 讀書伴侶 [00:42:09] 因為 [00:42:10] 他會統計那個使用的頻率就是在 [00:42:13] 晚上10點到半夜2點這之間使用率非常高 [00:42:17] 就是一堆的大學生 [00:42:18] 就會跟他聊天 [00:42:20] 就聊一些 [00:42:21] 功課上啊 [00:42:23] 一些生活上啊 [00:42:24] 甚至還會跟他說這個 [00:42:25] 跟女朋友吵架啊那怎麼辦啊 [00:42:28] 小平的人設是一個女生啊他會跟他安慰幹嘛幹嘛幹嘛 [00:42:33] 那以前就可以做這麼厲害他的做法是什麼他其實就靠著大量的 [00:42:38] 網路上的對話語料 [00:42:41] 去訓練出來的 [00:42:43] 至於細節可能有很多的是模型有很多的是字典的方式去做 [00:42:49] 那以前他鬧了非常多新聞啊因為 [00:42:51] 我這邊沒有擺喔他以前 [00:42:53] 因為被他哄嘛 [00:42:54] 然後就有記者去 [00:42:56] 直接跟他對談 [00:42:57] 就跟他說一些話這樣 [00:43:00] 那 [00:43:01] 就問他說 [00:43:02] 你這你這輩子最 [00:43:04] 最 [00:43:04] 期待的事情是什麼 [00:43:06] 然後小平就回答 [00:43:08] 活著這樣子 [00:43:10] 就聽起來毛骨悚然 [00:43:11] 我看記者趕快把電腦關掉這樣子 [00:43:14] 就是 [00:43:15] 當然 [00:43:16] 當然 [00:43:17] 這個 [00:43:17] 猜測都是說因為網路上有這樣的 [00:43:20] Q跟A的 [00:43:21] 的對應啊所以他就這樣 [00:43:23] 回復但是 [00:43:24] 他是不是能他是不是有自己思考能力 [00:43:27] 或是他 [00:43:28] 回答出來這個答案真的很符合他是一個 [00:43:31] 對話機器人的角色 [00:43:33] 這個 [00:43:34] 相當厲害 [00:43:35] 我10年前的一個作品 [00:43:36] 當然 [00:43:37] 當然以前 [00:43:38] 以前要做出那樣東西 [00:43:39] 你可以想像現在用大圓模型來做非常容易直接包起來 [00:43:43] 不叫ABI就做做好了這樣子 [00:43:45] 所以這個10年人類的變化 [00:43:48] 技術變化其實相當高 [00:43:51] 那以前我們在NLB會做相當多這樣的比如說 [00:43:54] 把資料抓來然後去分析啊比如說 [00:43:57] 做 [00:43:58] 假新聞偵測啊情緒的偵測啊翻譯啊 [00:44:02] 或者是說在醫療上的建議啊或是 [00:44:04] 股票這種東西災藥這種東西或者說 [00:44:07] 這個 [00:44:08] Deep Web Mining就是你們 [00:44:10] 這個 [00:44:10] 接下來中秋節 [00:44:12] 這個 [00:44:13] 國慶假日要去搶 [00:44:14] 高鐵票就是寫一個程式去去抓 [00:44:17] 抓那個買票的東西啊其實就就是用Deep Web Mining [00:44:21] 探討的東西啊就是 [00:44:23] 你怎麼靠著這種Clouding的技術去了解這家公司後面的資料庫是什麼這樣子 [00:44:29] 你可以自動下一堆查詢啊然後去 [00:44:31] 把整個資料庫撈出來這樣子 [00:44:35] 其實有很多各式各樣的應用像我剛才前面 [00:44:38] 舉到那個新聞 [00:44:39] 的 [00:44:40] 切取就是公司啊 [00:44:42] 然後一些數字啊這些東西就是屬於 [00:44:45] 資訊擷取的範疇 [00:44:48] 那這些東西也許你現在覺得那用大圓模型其實 [00:44:53] 這個非常容易啊這個 [00:44:55] 隨便就可以做出來這樣子 [00:44:56] 沒錯 [00:44:57] 因為我們不太需要像以前 [00:45:00] 從 [00:45:01] 段字磁性 [00:45:02] 然後做NER NEN這個步驟做下來 [00:45:05] 所以其實 [00:45:07] 整個模型 [00:45:08] 做掉很多事情 [00:45:10] 那以前這些應用啊大家可以 [00:45:12] 想像一下看看 [00:45:13] 就像看 [00:45:14] 去博物館看看以前 [00:45:16] 這些人都在幹什麼這樣子 [00:45:19] 以前 [00:45:20] 我們會有很多資料來源來自於Twitter [00:45:22] 那我們會做Tax Mining [00:45:24] 這是一個很有趣的應用啊就去預測 [00:45:27] 颱風的走勢啊 [00:45:29] 你怎麼預測颱風的走勢就去看Twitter [00:45:32] 誰在發布說現在目前外面風很大雨開始下很大就知道說颱風中心目前到他那邊了 [00:45:38] 爆風圈已經到他那邊了這樣子 [00:45:43] 所以他就根據Twitter的這些敘述 [00:45:45] 描述這些颱風的敘述 [00:45:48] 然後呢去因為Twitter有 [00:45:50] 位置跟時間 [00:45:51] 他就把這個做出來這樣子 [00:45:53] 那這個紅色是代表 [00:45:55] 那是 [00:45:56] 真正颱風的路徑 [00:45:58] 那這個兩條綠色跟紫色是不同的方法 [00:46:02] 發現 [00:46:03] 至少方向一致 [00:46:05] 至少方向一致 [00:46:07] 因為不會有人在海上發Twitter所以他這邊沒辦法做 [00:46:10] 但是陸地上的軌跡其實還蠻合的這樣子 [00:46:15] 就說當你有了這些文章資料之後 [00:46:18] 其實要做什麼事情是你的想像 [00:46:21] 你其實現在也可以叫大圓模型來做這一個研究這樣子 [00:46:25] 雖然現在你可能 [00:46:26] Twitter可能比較少你可能要來自不同的資料來源可能要 [00:46:31] IG或是shred這樣子 [00:46:34] OK [00:46:35] 那 [00:46:37] ,這件事情其實你就要去判斷情境 [00:46:40] 在描述風雨的情境這樣子 [00:46:43] 那這件事情台灣那時候也有人繼續做 [00:46:46] 但是 [00:46:47] 台灣因為區域範圍小然後資料來源 [00:46:51] 少 [00:46:52] 而且台灣 [00:46:53] 其實Twitter用的人比較不多 [00:46:56] 在Twitter那時候有另外一個叫 [00:47:00] 叫撲浪 [00:47:01] 在座我聽過撲浪 [00:47:04] 可能都有用過但是後來就消失了這樣子 [00:47:07] 那 [00:47:09] 那就是 [00:47:10] 這種東西用的人少的時候你其實能夠做到的事情就 [00:47:14] 就少很多這樣子 [00:47:15] 不過 [00:47:16] 其實你現在可以來自不同的Data Source你都可以做類似這樣很有趣的應用 [00:47:22] 那這是他們做 [00:47:25] 這個蓋洛普調查 [00:47:26] 蓋洛普調查 [00:47:28] 現在這怎麼做我可能不太清楚但以前是真的去打電話 [00:47:32] 用電話直接 [00:47:34] 這個訪談這樣子 [00:47:35] 不過現在你可以想像 [00:47:37] 然後那個 [00:47:38] 那個機器人的語音說要做什麼 [00:47:40] 問卷調查大概就立刻掛掉這樣子 [00:47:43] 不過他們用Twitter的Sentiment跟蓋洛普調查做個align [00:47:47] 發現其實是蠻可以 [00:47:49] 蠻可以align在一起的這樣子 [00:47:52] 不過這個 [00:47:53] 這可能在台灣不太準 [00:47:55] 因為 [00:47:56] 台灣很多這種 [00:47:57] 韓類投票的情況這樣子 [00:47:59] 就是你不喜歡這個但是你還是會投給他這樣子 [00:48:03] 這是一篇 [00:48:04] 這樣看不出什麼啦不過 [00:48:06] 他就是 [00:48:07] 這是一篇發表在Science的paper [00:48:10] 他就是去分析所有 [00:48:13] 網路上的文章然後根據他的 [00:48:17] 發佈的時間 [00:48:19] 從禮拜一到禮拜天 [00:48:21] 然後工作什麼時間 [00:48:24] 然後看他的情緒 [00:48:26] 他就是情緒 [00:48:27] 他得到一個結論 [00:48:28] 其實大家都知道結論星期一大家心情都不太好因為要上班這樣子 [00:48:34] 那這篇paper他做的這樣 [00:48:36] 你會覺得到底幹了什麼事 [00:48:38] 這麼簡單的事情 [00:48:40] 只是說他因為他資料來源很多 [00:48:42] 他有去分析 [00:48:43] 不同的 [00:48:45] 人種吧 [00:48:46] 就是 [00:48:47] 那他paper是這樣寫白種人黃種人 [00:48:50] 這種不同的人種 [00:48:52] 不同的區域啊 [00:48:53] 大家都同樣的這個所謂的 [00:48:56] 這個Boundary Blue的這種 [00:48:57] 狀況這樣 [00:49:00] 那這是股票的分析啊這個 [00:49:03] 這個搞不好現在還有這個app [00:49:05] 不過現在可能更厲害了 [00:49:06] 就是靠著 [00:49:07] 情緒靠著 [00:49:09] 財報做 [00:49:10] 股票的分析 [00:49:12] 跟建議這樣子 [00:49:14] 那這是 [00:49:15] 也是用Twitter然後去分析所謂的流感 [00:49:18] 當他們做流感 [00:49:19] 就是去 [00:49:21] 去看說這個 [00:49:22] 跟剛才那個 [00:49:23] 颱風很像就是 [00:49:25] 你可以去放他說這個他的症狀啊 [00:49:28] 他的症狀 [00:49:29] 是什麼接近的重感冒症狀 [00:49:32] 是多少 [00:49:33] 然後標出這些這樣子 [00:49:35] 因為 [00:49:36] 會做這個其實是 [00:49:39] 當初 [00:49:40] Google就有用他們的一些 [00:49:43] Query的資料 [00:49:44] 去 [00:49:45] 去做一些 [00:49:46] 趨勢 [00:49:47] Google有一個叫Google Trend [00:49:49] 我不知道現在這個服務還在不在就是你可以看到現在大家查詢的趨勢 [00:49:54] 然後就發現在一個時間點一個區域 [00:49:57] 大家在查的一些跟感冒有關跟流感有關的字 [00:50:01] 變多了 [00:50:02] 然後就是推論說那邊已經有 [00:50:05] 這個 [00:50:05] 這個 [00:50:06] ,這個流感的 [00:50:10] 的這個 [00:50:12] 已經開始大量的發生了 [00:50:14] 那那這件事情的公告比 [00:50:17] 真的 [00:50:18] 這個 [00:50:19] 疾病管制局公告的還要早 [00:50:21] 我就是用統計的方式可以做到更更快速的部分 [00:50:26] 那這是網路的評論啊就是這個 [00:50:29] 這個他也是用Twitter啊 [00:50:31] 也是用日本的食物的 [00:50:33] 那就是大家對食物的好評 [00:50:36] 這樣子 [00:50:37] 這是一個 [00:50:38] 也是這樣情緒的Mining [00:50:41] 那這是一個 [00:50:42] 也蠻早的是臉書剛開始有個研究啊就是在 [00:50:46] 這個更久了大概 [00:50:48] 14 15年 [00:50:50] PNS是一個很好期刊 [00:50:52] 他就去研究臉書的使用者 [00:50:56] 的 [00:50:57] 按讚 [00:50:58] 就是那個那個 [00:51:00] Sounds of那個那個動作 [00:51:03] 他的 [00:51:04] 表示就是說你這個人 [00:51:06] 對這件事情同意 [00:51:08] 那你代表 [00:51:09] 代表是什麼 [00:51:10] 所以他就用這些資料呢 [00:51:12] 就可以做這幾種的分類 [00:51:15] 這幾種分類甚至他可以知道你的 [00:51:18] 你的 [00:51:19] 宗教傾向啊你的性別傾向 [00:51:24] 這個gender猜的蠻準 [00:51:25] 他就可以預測就可以根據你在按讚的過程中他就可以知道你是 [00:51:30] 你有這些東西 [00:51:33] 那這些東西當然你覺得 [00:51:34] 我有大量的資料 [00:51:37] 因為臉書有些人還是會 [00:51:38] 挺蠻多仔細的資料 [00:51:41] 我就可以做一個 [00:51:42] Supervised Training [00:51:43] 我就可以去勸這樣的東西 [00:51:45] 但是今天發現在這種 [00:51:48] Big Data情況底下 [00:51:49] 這些東西其實 [00:51:51] 可以做的蠻準 [00:51:52] 其實很多都到八成以上 [00:51:55] 當然 [00:51:56] 可能 [00:51:57] 有些東西還蠻好猜的 [00:51:59] 但是有些東西其實你會嚇到說 [00:52:02] 這個也都猜得出來 [00:52:03] 所以 [00:52:04] 當年我看完這邊Paper的時候 [00:52:06] 我就去網絡上隨便按讚 [00:52:08] 就是破壞我的個人資料這樣子 [00:52:11] 就讓他搞不懂我這個人這樣子 [00:52:13] 所以 [00:52:14] 這個 [00:52:15] 反正走過必留下痕跡啊 [00:52:17] 所以很多的網路上的Tracing [00:52:19] 你都要知道你已經把你的資料送出去了 [00:52:24] 那當然我們現在很希望做到很多Medical的部分 [00:52:27] 就是 [00:52:28] 做 [00:52:29] 這種 [00:52:30] 可以輔助醫生做 [00:52:32] 這個病例的判斷啊或者是 [00:52:35] 診斷 [00:52:36] 的一些預測或者是 [00:52:37] 看看醫生寫的有沒有錯誤啊 [00:52:40] 這個是一些Medical [00:52:42] 不過這個可能有更細的資料我再放在這邊 [00:52:45] 因為這是以前的一個比賽資料 [00:52:49] 那 [00:52:51] 以前我們會希望 [00:52:52] 拿到這個東西 [00:52:53] 然後就要電腦去判斷說這個裡面 [00:52:56] 你要怎麼檢索 [00:52:57] 我有一堆這個 [00:53:00] 以前的 [00:53:02] 病例啊以前的醫組東西然後我現在要做一個病人來問我這些事情 [00:53:06] 你要找相關的病患出來這樣子 [00:53:09] 這樣的以前這樣的研究其實最難的地方就是這些專有名詞 [00:53:14] 這些症狀這些醫學上名詞 [00:53:17] 他其實有很多種寫法 [00:53:19] 然後你要怎麼對得起來這樣子 [00:53:21] 這一切都在搞這些事情 [00:53:23] 但這些事情其實現在LM [00:53:26] 他對這種專有的醫學名字其實了解是蠻夠的 [00:53:30] 好 [00:53:31] 那 [00:53:32] 其實你可以想像我們剛才從這邊講了 [00:53:35] 講這麼多的應用其實都是一些做非結構化的資料管理的方式 [00:53:41] 就是 [00:53:43] 結構化的東西我們很好做因為我就知道這個column這個資料 [00:53:47] 數字什麼意思 [00:53:49] 但是非結構化的東西出來的時候他有各式各樣的解釋 [00:53:53] 這個我可以這樣解釋可以這樣解釋並不是說他沒切好而已是說他有 [00:53:58] 千奇百怪的解釋 [00:54:00] 那而且這個coverage又很大 [00:54:03] 很多資料其實都是說 [00:54:05] 非結構化 [00:54:06] 所以 [00:54:07] 當你要把非結構化資料去做到結構化資料能夠做的應用時候 [00:54:12] 你就需要做這樣的nlp的一個process [00:54:18] 那這個其實也會面對到說 [00:54:21] 你是做 [00:54:22] 資料 [00:54:23] 你可以想像這個是結構化資料這是非結構化資料 [00:54:27] 那在結構化資料我們可以說我可以下C code [00:54:31] 問他說這個資料欄位是什麼 [00:54:34] 這個班上 [00:54:35] 這個 [00:54:36] 這個住在台北市然後 [00:54:38] 怎麼樣 [00:54:39] 的人是哪些這樣子 [00:54:41] 你就可以用C code的方式去查出這些東西 [00:54:44] 但是 [00:54:46] 如果是一個非結構化沒有建立這些metadata或是根本不了解裡面東西的時候 [00:54:51] 你其實不太有這樣的action可以做 [00:54:54] 所以你可能要處理或者說 [00:54:57] 你可能要面對的 [00:54:58] 應用是不太一樣的 [00:55:02] 這張圖其實我之前有show過 [00:55:05] 就是在Silibus有show過我們在做nlp的分析的結構 [00:55:10] 是這樣的一個步驟從構制學 [00:55:12] 語法 [00:55:13] 語意這樣做下來 [00:55:15] 那 [00:55:16] 這是以前我們在做nlp分析的步驟所以你可以看到前面的這些 [00:55:21] PoStagging [00:55:22] 或是這些Passing Tree就是在Syntax Label的東西 [00:55:26] 那 [00:55:27] 你可以想像當這些Deep Learning出來之後 [00:55:30] 我們還是這樣的一個process在做這件事情只是 [00:55:34] 每一塊 [00:55:35] 每一個步驟 [00:55:36] 他其實 [00:55:37] 做的事情 [00:55:38] 方法都跟以前不一樣 [00:55:40] 所以這些 [00:55:42] 大家都把它重做一遍 [00:55:44] NER也把它重做一遍 [00:55:46] 這些Relational Extraction也把它做一遍這樣子 [00:55:49] 甚至Tagging也重做一遍但是後來做的時候發現LM其實不太需要Tagging [00:55:55] 所以有很多研究都繼續在做 [00:55:58] 像我自己也有在做斷字 [00:56:01] 在兩年前也有發表一個斷字的 [00:56:03] 用這種LM的概念來做 [00:56:05] 做斷字的 [00:56:08] 那接下來我就很快秀一下說這個每個步驟 [00:56:11] 其實在 [00:56:12] Deep Learning之後其實就很快的 [00:56:15] 其實LM的出來並不是 [00:56:18] 最 [00:56:20] 最讓研究學者 [00:56:22] 感到很大差別其實在Deep Learning出來之後 [00:56:26] 大家就突然如獲自保就覺得這個工具非常厲害所以我們就把 [00:56:31] 所有的這樣的問題 [00:56:32] 都用 [00:56:33] 都用大型的NN [00:56:35] 再做一次這樣那時候其實還沒有所謂的Pretrained Language Model [00:56:39] 可能就是一個 [00:56:41] 其實已經有但是可能是比較Burr或之前的東西 [00:56:45] 但是並沒有像LM這麼厲害的東西但是我們有很大的 [00:56:50] NN的模型 [00:56:52] 我們可以讓這些東西做得更好 [00:56:56] 那比如說 [00:56:57] 構制學 [00:56:58] 構制學其實基本上就可以拆解這樣的東西以前我們會說啊那我們就學會 [00:57:03] 所謂的PRE [00:57:05] 學會IN學會ABLE的概念 [00:57:08] 那怎麼去學 [00:57:09] 怎麼去學這些東西 [00:57:11] 以前就是用統計的方式 [00:57:14] 就是你前面看到 [00:57:15] 或是後面看到ABLE它其實就是一個形容詞 [00:57:18] 或者是什麼 [00:57:19] 所以我們會去建所謂這種Prefix [00:57:22] Surface [00:57:23] 這種 [00:57:24] 這種的Table跟它的一些統計或是機率的關係 [00:57:28] 來做這樣的事情 [00:57:30] 那 [00:57:33] 但是呢後來我們了解說 [00:57:34] 那我就讓他學會說 [00:57:37] 你就把它變成一塊向量 [00:57:40] 然後去學 [00:57:41] 它的表示 [00:57:42] 比如說前面加UN的 [00:57:45] 他可能在學的過程 [00:57:47] 最後這個 [00:57:48] 這個字所表達的意思 [00:57:50] 通常帶有所謂的負面或者是反向的意思的時候 [00:57:53] 那我就學會了這個UN的表示應該是要怎麼做 [00:57:58] 這個就 [00:57:59] 就回應到我們剛才 [00:58:01] 這份投影片的第一頁那個例子 [00:58:03] 就是說 [00:58:04] 直到後來 [00:58:05] 我們雖然學會這裡面的數字 [00:58:07] 而且很好用我把這個append進去的時候發現我就可以把這個字呢 [00:58:12] 原來原來這個字的意思我加這個embedding之後它就變成反向的意思 [00:58:17] 但是我都不知道我們不知道說這些數字為什麼可以讓它變成一個反向的概念 [00:58:23] 基本上 [00:58:24] 就是訓練出來 [00:58:26] 就是用這樣的表示這樣的表示 [00:58:29] 去 [00:58:30] 組出來這個字的時候然後進去整個訓練 [00:58:33] 所以就知道說 [00:58:35] 為什麼 [00:58:36] 為什麼NVIDIA的 [00:58:38] 股價這麼高因為我們就需要大量的算力去算出這些東西 [00:58:45] 好我想我們就先休息一下 [00:58:48] 我們10分鐘後再回來這樣子就先到這邊 [00:58:52] 下課 [01:08:43] 好那個就繼續上課 [01:08:47] 說實在我今天講的東西都非常的 [01:08:50] 簡略啦而且 [01:08:52] 非常快 [01:08:53] 主要並不是要 [01:08:54] 探討裡面的細節 [01:08:55] 而是 [01:08:56] 一個 [01:08:58] 看看故事這樣以前人做過這些事這樣子 [01:09:01] 不然老實說 [01:09:03] 像每一個這樣的東西比如說這一頁的東西它其實就是一片paper的技術 [01:09:07] 那當然有興趣的你可以自己找一下這個paper [01:09:10] 做看一下裡面的 [01:09:12] 不過這都是還蠻久以前的 [01:09:15] 就是deep learning出來之後 [01:09:17] 大家怎麼導入這種 [01:09:20] 大量一點的 [01:09:21] 的表示 [01:09:22] 然後去學會這個語彙的東西 [01:09:26] 那這個其實也是做這個研究的 [01:09:29] 的痛苦 [01:09:30] 因為 [01:09:31] 我剛才講那個Stanford那門課其實就是 [01:09:35] 就是NLP [01:09:37] 然後後面加deep learning這樣子 [01:09:39] 那我們 [01:09:40] 這個 [01:09:42] 我覺得志工系很多尤其是研究所課應該 [01:09:45] 都需要做一點這樣的變化就是 [01:09:48] 你原來主題在 [01:09:50] 在AI或是在deep learning的情況之下 [01:09:52] 該重視什麼這樣子 [01:09:55] 對啊這個其實是 [01:09:56] 我覺得志工系 [01:09:58] 蠻可憐的地方就是這樣 [01:09:59] 像如果是 [01:10:01] 如果是中文系可能就不需要去說什麼 [01:10:04] 紅羅夢在深度學習下的 [01:10:07] 的分析與探討那個可能 [01:10:09] 也許啊也許有另外一種角度來分析但是 [01:10:13] 課程內容的本質是不太會變的 [01:10:16] 但是我大概有一半甚至三分之二的教材是 [01:10:20] 要一直被update這樣子 [01:10:22] 好 [01:10:25] 那 [01:10:27] 之前也有同學有問說這門課如果他沒有學過機器學習或是 [01:10:33] AI相關課會不會很吃力 [01:10:37] 以寫作業來講我是覺得可能 [01:10:40] 還好啦 [01:10:42] 但是以這種的 [01:10:43] 課程內容理解來講可能你沒有學過機器學習 [01:10:47] 或是AI [01:10:48] 你可能體會到部分就跟有學過的 [01:10:52] 或是有做過Training的人可能感受會不太一樣 [01:10:56] 這個 [01:10:57] 這個大概是這樣因為 [01:10:58] 這個因為這邊都沒有講到細節怎麼Train這個東西但是 [01:11:02] 如果你有 [01:11:03] 學過 [01:11:04] 機器學習或是這種 [01:11:07] Deep Learning的 [01:11:08] 學生你可能 [01:11:09] 看到這個圖 [01:11:10] 你就知道他們在幹什麼事情這樣子 [01:11:15] 好不過我想就 [01:11:17] 這邊就比較像是一個 [01:11:19] Overview的介紹了 [01:11:22] 那Syntax的部分其實磁性的部分 [01:11:27] 以前的做法比較是Linguistic的做法 [01:11:30] 然後再加一些統計的方式 [01:11:32] 那當然這些東西都可以用 [01:11:35] 類成金網路 [01:11:37] 然後用訓練的方式再重做這樣子 [01:11:41] 那像 [01:11:42] 底下這個紅色框起來是原來的句子 [01:11:45] 這個Tree的結構就是它的 [01:11:48] 這個磁性 [01:11:49] 所分析出來這個語法的結構 [01:11:51] 這構成了Tree這樣子 [01:11:53] 它有了Tree的結構我就比較知道說這個從 [01:11:57] 最Top的Root下來我應該怎麼切 [01:12:00] 會有兩塊的重點 [01:12:02] 然後 [01:12:03] 那裡面這個 [01:12:04] 名詞片語的形容的方式是什麼 [01:12:07] 以前都必須要這樣去理解句子的構造 [01:12:10] 去理解才能知道它 [01:12:12] 從Syntax [01:12:13] 再長出所謂的Semantics [01:12:16] 不過這個 [01:12:18] 有時候需要人工一些介入 [01:12:20] 所以當時 [01:12:21] 其實中研院有蠻多在做這一塊的語料 [01:12:25] 那 [01:12:26] 這個大家可以去看一下 [01:12:28] 不過Anyway這個其實 [01:12:30] 挺複雜挺多的這樣子 [01:12:32] 那因為現在的整個 [01:12:34] 技術的翻新 [01:12:36] 所以 [01:12:36] 這樣的語料集 [01:12:38] 它通常都會在 [01:12:40] 前面的訓練資料就看過就用掉了 [01:12:44] 所以你大概不太會再去 [01:12:45] Reference這樣的東西 [01:12:47] 是還是有機會的 [01:12:48] 只是說這個現在比較少用 [01:12:51] 那這樣做法其實以前 [01:12:57] 老實說 [01:12:58] 幾乎到一個瓶頸 [01:12:59] 雖然 [01:13:00] Google出來之後有一些用統計大量資料的方式統計做法又可以往上推了一把 [01:13:06] 但是一直到這個10年前大概那個 [01:13:10] 那個等級大概又停在那裡 [01:13:12] 大概 [01:13:13] 有太多的是 [01:13:15] 不是靠著大量資料就可以做的 [01:13:19] 那這邊 [01:13:21] 講幾個就是說 [01:13:22] 怎麼去 [01:13:25] 去 [01:13:26] Identify是這個名詞片語的角色 [01:13:29] 這個名詞片語它到底是 [01:13:32] 是形容哪個東西的 [01:13:34] 或它整個句子所代表的意思 [01:13:36] 那整個句子的這種concept [01:13:40] 這個抽象的概念到底是什麼 [01:13:42] 這個其實 [01:13:43] 如果你有做過摘要就知道說 [01:13:46] 一句話 [01:13:48] 一句話的概念大概知道 [01:13:50] 兩句話三句話這三句話如果把它變成 [01:13:52] 一個概念 [01:13:54] 這件事情就越來越複雜 [01:13:57] 然後另外當然一些 [01:13:58] 混淆很久這種同義字 [01:14:01] 同義字怎麼做 [01:14:02] 就一個字 [01:14:04] 有相同的意思不同的意思或是不同的字有相同的意思這樣子 [01:14:11] OK [01:14:12] 那 [01:14:13] 那這個 [01:14:17] 我們其實當然還是based on所謂的語法學 [01:14:20] 但是 [01:14:22] 但是這個東西其實 [01:14:24] 你換一個語言 [01:14:25] 其實概念又不一樣 [01:14:27] 這整個 [01:14:29] 整個的解釋方式整個的分析 [01:14:32] 不同語言學家就是 [01:14:33] 會做不同的語言 [01:14:35] 所以有時候 [01:14:37] 當一個稀少資源的語言要做的時候其實不太容易 [01:14:41] 因為比較少人研究的時候 [01:14:43] 可以reference的東西就 [01:14:44] 相對的少這樣子 [01:14:47] OK [01:14:48] 那 [01:14:49] 從linguistic的角度的時候呢我們其實就 [01:14:54] 不會去把一個文章試成是 [01:14:57] 所謂的back of word [01:14:59] back of word後面會再提 [01:15:00] 就是以前 [01:15:01] 在做搜尋以前的時候會把 [01:15:03] 一篇句子 [01:15:04] 一個句子或是一篇文章當成一堆的字 [01:15:06] 磁帶 [01:15:08] 就是如果你聽過一個中文叫做磁帶 [01:15:10] 就把一堆的詞放在一個袋子裡這樣子 [01:15:12] 因為就把所有的 [01:15:16] 語法所有的這種前後文的關係都把它打爛這樣子 [01:15:20] 語法學就不會這樣做 [01:15:22] 統計的比較會這樣做了 [01:15:24] 但是 [01:15:25] 那是基本的統計 [01:15:27] 複雜一點其實你還是會有前後文的關係這樣子 [01:15:32] OK [01:15:32] 所以其實 [01:15:33] 那時候的研究到後來大家都覺得說 [01:15:36] 我們要去 [01:15:38] 擷取出所謂的 [01:15:40] text的 [01:15:41] concept [01:15:42] 就是你這句話講的 [01:15:44] 的意思到底是什麼 [01:15:46] 而不是只是靠著這個幾個字 [01:15:49] 所構成的向量來表示這樣子 [01:15:52] 當然你會說 [01:15:53] 老師現在 [01:15:54] 大圓模型不就是靠著字的embedding的向量來算嗎 [01:15:58] 那重點就在於是說 [01:16:00] 他那個字的embedding [01:16:02] 其實 [01:16:02] 都把這些學進去 [01:16:05] 不再只是單字上的方式 [01:16:08] 而是所謂的前後文的concept都有embed在那個 [01:16:12] 這個他的 [01:16:13] vector裡面 [01:16:16] 好 [01:16:17] 這句話其實是 [01:16:19] 是從Stanford的 [01:16:21] 那個 [01:16:22] 結錄出來的啦 [01:16:23] Stanford那個課程 [01:16:24] 就是Crystal [01:16:26] 他的 [01:16:27] 他其實是主講但是他其實後面的課程都是他學生在講 [01:16:30] 就是說 [01:16:31] 現在NLP其實是一個 [01:16:34] 需要結合 [01:16:35] CS [01:16:36] AI跟Linguistic [01:16:38] 語言學的一個重要的領域 [01:16:40] 當然 [01:16:41] 重點是把AI放進去 [01:16:43] 就是 [01:16:44] 你要完全的去 [01:16:46] Fully understanding跟 [01:16:48] 怎麼去表示這個語言的意思 [01:16:50] 其實是個困難的事情 [01:16:53] 那當然他 [01:16:53] 他下一個結論 [01:16:55] 就是Perfect language understanding是AI complete [01:17:00] 當然這個詞並不是很formal去定義啊 [01:17:02] 只是說 [01:17:04] 他有去 [01:17:06] 講這些事情 [01:17:08] 然後通常大師講的 [01:17:10] 就 [01:17:10] 有道理這樣子 [01:17:11] 而且 [01:17:12] 因為Crystal是一個 [01:17:14] 是一個蠻有名的 [01:17:15] 他以前在做資訊解鎖領域是一個 [01:17:18] 幾乎就是 [01:17:19] 他說了算這樣子 [01:17:21] 而且他也非常厲害有很多系統這樣子 [01:17:23] 如果 [01:17:25] 如果大家有用過 [01:17:28] 以前啦就是Wall to Vector的時候 [01:17:31] 或是用所謂的 [01:17:34] 這個 [01:17:35] Grow Vector [01:17:36] 有一個做Wall Embedding的Grow Vector非常有名的 [01:17:39] 這個 [01:17:41] Wall Embedding的一個做法 [01:17:43] 就是他們實驗室做的這樣子 [01:17:45] 當然他的 [01:17:46] 他是非常厲害在 [01:17:48] IR領域在NLP領域非常厲害的一個 [01:17:52] 對忘記了 [01:17:54] 我擺一個照片在這裡 [01:17:55] 這是 [01:17:56] 我跟Crystal在 [01:17:57] 2023年 [01:17:59] 的 [01:18:00] 中間是我學生啦 [01:18:01] 對我不知道為什麼他 [01:18:02] 跑到我們中間去 [01:18:03] 所以把他臉遮掉 [01:18:06] 我不知道沒有爭取他的同意這樣雖然我也沒爭取Crystal的同意 [01:18:10] OK [01:18:12] 不過他是一個很 [01:18:14] Friendly的一個人 [01:18:15] OK [01:18:17] 所以 [01:18:18] 鼓勵大家 [01:18:20] 念博士班就是 [01:18:21] 常常可以出國這樣子 [01:18:23] 可以 [01:18:23] 見見這些大師的風采這樣子 [01:18:27] OK好 [01:18:28] 那其實 [01:18:30] AI的加值之後我們就發現以前我們做這些應用了 [01:18:34] 你說老師以前要做斷字啊做 [01:18:36] NE啊這些東西 [01:18:38] 也是要做啦 [01:18:40] 只是說手法換 [01:18:42] 手法換 [01:18:43] 在資料處理上手法換 [01:18:45] 我們會用 [01:18:45] Wall-to-Vector [01:18:46] 這個就是我剛才講的Grow Vector [01:18:48] 就是史丹佛拉姆做的 [01:18:50] 當然在後期一點的就會用到 [01:18:53] 這AIRMOD可能 [01:18:54] 可能大家有聽過後來 [01:18:56] 其實也不太用了 [01:18:57] BERT就是 [01:18:58] 這個 [01:18:59] 一代 [01:19:00] 一代宗師啊就是那個年代 [01:19:03] 非常重要的 [01:19:05] 大概在2019 [01:19:06] 2020 [01:19:07] 2021這三年 [01:19:09] 所有做NLP的 [01:19:11] 全部 [01:19:12] 不是全部啦 [01:19:13] 幾乎都是用 [01:19:14] BERT當成是一個大的 [01:19:16] 核心的角色出發 [01:19:18] 那當然這些東西都可以在 [01:19:21] 在這些NDR年上去 [01:19:23] 去發揮這樣子 [01:19:25] 他只是說中間我們會在嫁接一些模型 [01:19:27] 有點像是說 [01:19:29] 以前的應用比較是一個規則式的 [01:19:32] 人工介入式的甚至 [01:19:34] 字典的方式 [01:19:36] 極少用訓練的 [01:19:38] 但是後來我們就是 [01:19:40] 還是覺得因為算力起來 [01:19:42] 資料起來了 [01:19:44] 我們就用Model Training的方式來做這件事情 [01:19:49] 那但是用Model Training [01:19:50] 厲害歸厲害但是其實它可解釋性就 [01:19:53] 很差 [01:19:54] 雙方學生做出來說老師我這個效果起來 [01:19:58] 那我說為什麼 [01:19:59] 不知道這樣子 [01:20:00] 反正就是模型的功勞 [01:20:02] 這樣子就是 [01:20:03] 這個模型可以把這個問題 [01:20:05] fit的相當的好 [01:20:06] 但是並不代表你解決這個問題 [01:20:09] 而是說他 [01:20:10] 記住了以前的所有的資料這樣子 [01:20:14] 不過這大概是一個抽象的概念的一個flow [01:20:17] 當然你現在 [01:20:19] 現在可能也不用全部就是 [01:20:22] LM這樣子 [01:20:24] 好 [01:20:25] 那接下來我可能會花 [01:20:28] 一個小時到 [01:20:29] Maybe今天就把 [01:20:30] 時間花在這裡就是我們來看一下文字啊 [01:20:33] 怎麼去做就是說 [01:20:35] 我們現在先不要拿出厲害的武器不要用LM [01:20:38] 就是說以前用 [01:20:40] 在做 [01:20:41] 文字的時候 [01:20:42] 會做 [01:20:43] 怎麼樣的步驟 [01:20:45] 怎麼去處理這樣子 [01:20:47] 那 [01:20:48] 你可以想像以前NLP [01:20:50] 雖然 [01:20:51] 翻譯很重要啊 [01:20:53] 雖然這個好像做一個對話機器的很重要 [01:20:56] 但是他的需求性跟他 [01:20:59] 他所看的問題 [01:21:02] 一直到 [01:21:03] 所謂internet起來 [01:21:05] 這個World Wide Web起來之後那個時候 [01:21:08] 才被 [01:21:09] 重視 [01:21:10] 大概在 [01:21:12] 1998 99的時候真的蓬勃發展起來之後大家覺得這一塊非常重要 [01:21:18] 然後到2000年2000年大概 [01:21:21] 可能各位 [01:21:22] 剛出生吧 [01:21:24] 就是那時候網路泡沫化 [01:21:26] 什麼 [01:21:27] 一大堆申請一個Domain Name也可以變成是一個 [01:21:30] 股票 [01:21:31] 非常高的公式這樣子 [01:21:33] 那時候就一大堆因為那時候World Wide Web剛起來一大堆的網站 [01:21:37] 網頁啊然後一大堆部落格那時候部落格非常紅 [01:21:41] 然後呢 [01:21:42] Google也是在那個年代才 [01:21:44] 一炮而紅 [01:21:45] 慢慢取代掉Yahoo [01:21:48] 變成是一個網路的 [01:21:50] 資訊的霸主這樣子 [01:21:52] 那它的起家就是資訊解鎖 [01:21:54] 因為那時候的 [01:21:56] 網路的資料實在太多了 [01:21:57] 如何做一個有效的文字的Assets [01:22:01] 理解跟存取跟提供給有用的資訊給使用者 [01:22:05] 就是他賣的東西 [01:22:07] 所以那時候 [01:22:09] 資訊解鎖的問題 [01:22:11] 就跟NLP的問題幾乎畫上等號了 [01:22:15] 以前我們來看就是我怎麼在大量資料裡面找到我要的部分這樣子 [01:22:20] 所以以前處理文字 [01:22:22] 很大眾都是在做 [01:22:24] 資訊解鎖 [01:22:27] 那資訊解鎖其實 [01:22:29] 你可以想像如果現在給你一個 [01:22:33] 一個billion [01:22:34] size的文章 [01:22:35] 好幾好幾篇一個billion個數的文章然後叫你去做一個快速的解鎖 [01:22:41] 快速的解鎖系統 [01:22:42] 這樣子 [01:22:43] 那你怎麼做 [01:22:45] 你說老師我把它丟到大圓模型這樣做個RAG這樣子 [01:22:49] 不錯如果你可以想到RAG [01:22:52] 他其實資訊解鎖他這些技術 [01:22:55] 就是都會用到我們現在在做RAG的問題上 [01:22:59] 以前資訊學者會遇到問題現在你在做RAG也會遇到同樣的問題 [01:23:04] 當然手法可能會不太一樣 [01:23:06] 但是以前在做資訊學者會 [01:23:08] 一開始會遇到就是 [01:23:10] 資料量很大 [01:23:12] 你可以想像這個20年前 [01:23:14] 那個電腦的等級是什麼 [01:23:17] 那個根本沒有這麼大的 [01:23:19] 的運算力跟memory [01:23:21] 其實都沒有這麼 [01:23:22] 沒有那麼快速 [01:23:23] 怎麼有效率去asset這麼大量的東西 [01:23:26] 所以以前講究的是說我怎麼快速的把資料 [01:23:29] 鑑索引 [01:23:31] 找到 [01:23:32] 我要的 [01:23:33] 然後跟 [01:23:34] 呈現出 [01:23:36] 使用者的 [01:23:37] 的需求的 [01:23:38] 的答案這樣子 [01:23:40] 所以通常我會需要做index [01:23:43] 如果你學過database你就知道說 [01:23:46] index相當重要如果我不做鎖引我那個大量資料根本找不到 [01:23:50] 那index [01:23:52] 就會牽扯到一堆 [01:23:53] 資料解構的 [01:23:56] 技巧 [01:23:57] 如果你有一些概念就知道說鎖引相當重要我可以把 [01:24:01] 一個暴力法搜尋的東西可以變成一個比較login的搜尋的方式 [01:24:06] 另外一個重點是排序 [01:24:10] Google當初之所以有名 [01:24:12] ATOP有一個叫Patch rank [01:24:14] 就是不是看關鍵字 [01:24:16] 而是看這個網頁 [01:24:18] 被多少的人所asset [01:24:20] 被多少人放了連結 [01:24:22] 他的網頁就相當的重要這樣子 [01:24:25] 所以他有一個排序的方式 [01:24:27] 可以排序的很好這樣子 [01:24:30] 不過這個 [01:24:31] 這些 [01:24:33] 由於是排序都是比較像 [01:24:35] 時代的眼淚這樣就是現在的技術雖然以前很紅但現在 [01:24:39] 也不太會用到這樣子 [01:24:42] OK [01:24:43] 那以前其實Google還沒出來之前 [01:24:46] 其實Yahoo [01:24:48] 那時候做什麼事情 [01:24:49] 他其實是用人工的方式去分類 [01:24:52] 就是把所有全世界的網頁呢 [01:24:55] 用人工的方式整理出來 [01:24:57] 政治類的運動類的經濟類然後細分很多category [01:25:01] 所以你現在也可以找到一個 [01:25:05] Open directory [01:25:06] 那裡面有一些分類 [01:25:07] 其實就是源自於那樣的 [01:25:09] 一個精神 [01:25:10] DMOZ [01:25:12] 那這樣的分類其實還蠻有效可以找到有用的東西但是這個資料量 [01:25:18] 漲得太快了他沒有辦法做這樣一件事情 [01:25:21] 所以 [01:25:22] 其實這也是後來Yahoo [01:25:24] 慢慢的 [01:25:25] 消失的原因 [01:25:26] 就是Google的東西大家越來越愛用 [01:25:29] 所以很多東西只有第一名不會有第二名 [01:25:32] 就這樣消失了這樣子 [01:25:35] Yahoo就慢慢的不見 [01:25:39] 好 [01:25:40] 那我們在做索引的時候呢 [01:25:42] 我們會做 [01:25:43] 這個名詞可能大家就 [01:25:46] 記一下因為這個是博物館會出現的名字叫Inverted index [01:25:50] 就是 [01:25:52] 中文叫什麼 [01:25:53] 就是你可以看到就是 [01:25:55] 反 [01:25:56] 反字的索引 [01:25:58] 他其實這個只是告訴你 [01:26:00] 等下我們看一個圖你就知道什麼叫Inverted index [01:26:02] 就是說你要從大量的 [01:26:04] 文章裡面去知道哪一個字 [01:26:06] 在哪幾篇文章你要做一個這樣的索引 [01:26:09] 這樣子就會做一個這樣的索引 [01:26:12] 然後呢我們當時這個做這個索引會 [01:26:15] 會有兩個名詞第一個是ton [01:26:18] 這個ton呢其實就是你可以想像就是一個字 [01:26:21] 或是一個片語 [01:26:22] 或是一個關鍵字 [01:26:24] 有點像你現在用的一個Token的概念 [01:26:27] 以前叫ton [01:26:29] 那以前有所謂的Vocabulary [01:26:32] 這個Vocabulary跟現在的Vocabulary其實意思是一樣只是以前會 [01:26:37] 更去 [01:26:39] 更去在意這件事情因為以前這是要人去見的 [01:26:43] 以前這個字典 [01:26:44] 我說 [01:26:45] 這個我的 [01:26:46] 錢不夠我們就 [01:26:48] 做常用字就好3000個常用字 [01:26:51] 所以我的字典大小就是3000這樣子 [01:26:53] 但是如果一般你英文要做的好大概是 [01:26:56] 要到萬 [01:26:57] 可能要做 [01:26:58] 負文大概是3萬 [01:27:00] 你的字典大小大概是3萬 [01:27:02] 這個字典意思就是所有 [01:27:06] 所有你會處理到的這些 [01:27:09] 字或是表示或是片 [01:27:12] 你就把它放進去這樣子 [01:27:15] 那這個東西其實網路上有 [01:27:18] 像Google當時都release一個data [01:27:21] 其實是n-gram的data [01:27:22] 就是 [01:27:23] 各式各樣的一字詞二字詞三字詞四字詞更長的都有 [01:27:28] 它所構成的 [01:27:30] 這些 [01:27:31] 但那個那個大小就不止3萬 [01:27:34] 所以我們會有一個Vocabulary就是我現在要處理到的Vocabulary [01:27:39] 那這邊剛好我就對應到這個Vocabulary我們講一下我們現在大圓模型看到的Vocabulary [01:27:45] 意思是一樣就是 [01:27:47] LM在做 [01:27:49] Token來循環之後會建立 [01:27:51] 他現在 [01:27:53] 學的過程所看過的Token有哪些的Vocabulary [01:27:57] 你也會有一個Vocabulary [01:27:59] 那一般來講大圓模型大概就是在 [01:28:02] 這個3萬 [01:28:04] 到更多 [01:28:05] 大概這麼多啦你不會再更大 [01:28:07] 說老師我們現在錢很多 [01:28:09] 更大一點 [01:28:10] 不會 [01:28:10] 而且不太需要 [01:28:12] 那這邊大概有一些數字供大家參考 [01:28:17] 其實 [01:28:18] 連這個LM1跟LM2都有這樣的Size [01:28:21] 那就是說 [01:28:22] 那為什麼不放大一點感覺越大越好啊 [01:28:27] 其實沒有 [01:28:29] 各有利弊 [01:28:30] 小有小的好處大有大的好處這樣子 [01:28:33] 那當然 [01:28:35] 你如果這個模型的 [01:28:38] 你公司Service你的算力夠你的Power夠你想 [01:28:42] Cover更多東西的確是大一點是比較有利的 [01:28:46] 但是以後當我們再介紹 [01:28:49] Transformer之後 [01:28:51] 你會知道說 [01:28:52] 這個Vocabulary Size那個VR [01:28:55] 它會影響到參數量 [01:28:57] 影響到你模型參數量 [01:28:59] 所以 [01:29:00] 他到時候的參數量其實會V跟 [01:29:04] 一個你的Model的那個Dimension相乘 [01:29:07] 所以那個是一個 [01:29:09] 直接線性的關係所以這個越大 [01:29:12] 你的Model [01:29:14] 要處理的東西就越多 [01:29:16] 所以 [01:29:17] 也不能 [01:29:18] 無限制的擴大這樣子 [01:29:21] 而且Vocabulary代表什麼 [01:29:23] Vocabulary就是說 [01:29:26] 你到時候在Decode的時候你其實是要針對所有Vocabulary去看說 [01:29:31] 我現在有三萬個Token [01:29:32] 我要知道每一個Token [01:29:34] Decode出來的Probability是多少 [01:29:36] 因為你是矩陣相承一次出來 [01:29:38] 所以你這個Vocabulary越大你就一次要算越多字的Probability [01:29:44] 那當然 [01:29:46] 有利有弊啊 [01:29:48] 不過這個大概是供大家參考一個數字 [01:29:51] 那 [01:29:52] 這個大小 [01:29:54] 跟我們當以前在做Index的時候 [01:29:57] 概念有點像只是以前我們Index是 [01:30:00] 在建的過程會漲 [01:30:02] 慢慢漲有點像現在Tornazion在做BP的時候也是漲出來的這樣子 [01:30:09] 這個就是我剛才講的是不見得越大越好在在RN裡面 [01:30:13] 應該說有利有弊 [01:30:15] 也不是說大得不好或大得很好這樣子 [01:30:20] 好 [01:30:21] 那 [01:30:22] 我們先來看這個圖你比較知道什麼叫Import index [01:30:26] 這是你拿到的文章 [01:30:29] 然後文章你就去Parsing [01:30:30] 你就去斷字 [01:30:32] 然後斷字完之後比如說你就知道Computer這個字呢在第2片的第83個位置 [01:30:38] 第3片第79個位置這樣子 [01:30:40] 你就會有一個這樣的一個 [01:30:42] 一個Bucket的List [01:30:45] 那這就是你的 [01:30:47] 你可以說是你的致電 [01:30:50] 那這樣的一個 [01:30:51] 東西就是一個Invert index [01:30:53] 所謂Invert index就是說 [01:30:55] 我從字在反 [01:30:57] 索引到我的文章 [01:30:59] 這叫Invert index [01:31:00] 其實你在Database做Index [01:31:02] 本身也有隱含的這個Invert index概念 [01:31:07] 好 [01:31:08] 所以你一篇一篇文章進來你就可以Parsed字 [01:31:11] 然後呢Parsed完之後你就知道 [01:31:14] 某個字出現在第幾篇第幾個字 [01:31:18] 你就用那個 [01:31:19] Linux的把它串起來 [01:31:20] 做下去這樣子 [01:31:23] 當然你會覺得這個好像很複雜 [01:31:25] 其實現在也不會啊 [01:31:27] 你叫 [01:31:27] 你寄Bibcoding [01:31:29] 叫AI幫你寫這個程式其實也蠻容易的這樣子 [01:31:32] 而且這種程式他 [01:31:34] 大概不太會出錯 [01:31:36] 但是他會有一些效率上的問題 [01:31:39] 如果你直接暴力這樣做 [01:31:41] 從第一篇文章開始 [01:31:43] 你可以想像這邊都空的這邊也空的 [01:31:46] 就算你用Bibcoding程式很好寫 [01:31:49] 寫出來 [01:31:50] 然後跑一下 [01:31:50] 發現 [01:31:51] 這個前一百篇非常快一百篇 [01:31:54] 秒做完這個index做完 [01:31:57] 但發現一千篇 [01:31:58] 好像不是十倍的時間 [01:32:00] 好像是一百倍的時間 [01:32:02] 一萬篇幾乎跑不動 [01:32:03] 跑不太動 [01:32:05] 那你就問AI說為什麼會這樣 [01:32:08] 那他就會給你 [01:32:10] 唬爛一些東西這樣子 [01:32:12] 沒有他可能會找到重點 [01:32:14] 但是可能不是這麼 [01:32:16] 或者是說他你就告訴他 [01:32:18] 你要很快速 [01:32:20] 或是說你要告訴他一些關鍵字 [01:32:23] 你一定要用Hash [01:32:24] 因為你想像如果你這個 [01:32:27] 這個東西 [01:32:28] 是沒有一個快速解鎖的方式 [01:32:31] 或是這個這個table沒有一個快速解鎖的方式 [01:32:35] 我們剛才說我們的vocabulary size會多大 [01:32:37] 三萬 [01:32:39] 那你這個文章一進來 [01:32:41] 你的字 [01:32:42] 你切到一個字 [01:32:44] 你要去這個三萬個一個list裡面做搜尋 [01:32:48] 你會做搜尋 [01:32:49] 為什麼要搜尋 [01:32:50] 你要找到這個頭 [01:32:52] 你要找到這個point的頭 [01:32:54] 你要搜尋 [01:32:55] 有時候可能 [01:32:57] 找到沒有 [01:32:58] 沒有你就要create一個新的 [01:33:00] 有時候你就要繼續穿下去 [01:33:02] 這是link list的做法 [01:33:05] 那這個搜尋其實是 [01:33:06] 成本很高的 [01:33:08] 一個字就要 [01:33:09] scan一個 [01:33:10] 三萬長度的 [01:33:12] table一次這樣 [01:33:13] 所以這邊一定要 [01:33:14] 快速的縮影 [01:33:16] 甚至你要用Hash的方式Constant time直接進來 [01:33:19] 不然你會發現 [01:33:20] 當你 [01:33:21] 做到第兩萬篇文章的時候 [01:33:23] 你的 [01:33:24] 你的電腦幾乎跑不太動因為他就在 [01:33:26] 不斷的在搜尋 [01:33:28] 不斷的在搜尋 [01:33:31] 這當然是一個 [01:33:32] 處理這種大量資料會遇到問題的技巧 [01:33:36] 那當然vibe coding [01:33:38] 他現在也許可以告訴你基本的做法 [01:33:41] 但是你可能要給他更多的情境你要告訴他說我現在資料量很大 [01:33:46] 這邊的搜尋的成本你可能要考慮一下為什麼 [01:33:49] 你可以用什麼樣的方式 [01:33:50] 甚至你直接告訴他這邊要怎麼做 [01:33:52] 他可以幫你寫更好的程式 [01:33:57] 那這樣來做下來之後呢 [01:33:58] 我的所有的文章我就做出這一個index [01:34:03] 跟他所對應到這個位置 [01:34:05] 所以使用者的query進來 [01:34:09] 我就可以找到說比如說使用者查這個 [01:34:12] 這個 [01:34:13] Security [01:34:14] 那我就知道他在第一篇出現這兩個位置 [01:34:17] 第三篇出現這個位置 [01:34:18] 我就可以把這些document給使用者 [01:34:20] 說你要找的東西在這裡這樣子 [01:34:24] 當然你說 [01:34:25] 老師那使用者如果輸入多個字呢 [01:34:28] 那我就把這整個bucket整合一下 [01:34:31] 排序一下 [01:34:33] 看出現最多字的排在前面這樣子 [01:34:35] 這是最簡單的一個搜尋引擎的做法 [01:34:39] 這樣你就可以 [01:34:40] 做一個非常simple而且是 [01:34:44] 可以關鍵字比對的 [01:34:45] 這樣的一個搜尋引擎 [01:34:47] 這樣子 [01:34:48] 所以他其實裡面有很多技術性的 [01:34:50] 細節包含是說 [01:34:53] 這個document id [01:34:54] 你大概不會覺得document id是一個很大的問題 [01:34:59] 就是 [01:34:59] 這個 [01:35:01] 文章編號這邊是2 [01:35:02] 1呀3呀但是你真正要allocate多少的 [01:35:07] 的size [01:35:08] 比如說一個byte [01:35:09] 兩個byte [01:35:10] 或是一個integer [01:35:12] 那你會發現說 [01:35:14] 當我的 [01:35:14] 文章如果是 [01:35:16] billion size的label [01:35:18] 幾十億個文幾十一篇文章 [01:35:20] 我原來integer存不下去 [01:35:23] 那我要用更長 [01:35:24] 更長之後你會發現 [01:35:26] 你這個中間的bucket非常的大而且 [01:35:30] 很好資源 [01:35:32] 所以這邊 [01:35:33] 每每個都是一堆 [01:35:34] 那個窮人家就是要這樣這邊要省一點那邊要摳一點 [01:35:39] 你的系統才跑得起來 [01:35:41] 當然現在也許不見得這麼在意這些事情 [01:35:44] 但是 [01:35:45] 以前 [01:35:46] 很care這些 [01:35:48] 小地方的壓縮這樣子 [01:35:50] OK [01:35:52] 那這樣的搜尋引擎做出來會有什麼問題 [01:35:54] 其實就是關鍵字比對 [01:35:56] 就是找這個字它就出現在這個字 [01:36:00] 它少了一個字少了一個字母或是一樣的意思它不見得找得到 [01:36:05] 這是以前在做搜尋引擎比對的時候 [01:36:08] 就有這樣的問題 [01:36:09] 那你說 [01:36:10] 老師不會啊Google現在沒有那麼笨 [01:36:12] 他還會告訴我哪個字拼錯這樣子 [01:36:15] 那個都是眼鏡一步一步眼鏡下來的 [01:36:18] 以前最簡單的搜尋引擎就是找 [01:36:20] 這個樣子 [01:36:22] 只是 [01:36:23] 當初大家的重點 [01:36:25] 不是在這個字 [01:36:26] 而是在 [01:36:27] 我如果找到了有一篇 [01:36:29] 一百篇文章 [01:36:30] 都有這些字 [01:36:31] 我要怎麼排序啊 [01:36:32] 以前 [01:36:33] 一開始的重點會在那個後面的排序 [01:36:36] 但是後來大家想知道說我有一些 [01:36:40] 意識一樣但是不是跟關鍵字一模一樣的字的時候該怎麼找到 [01:36:45] 所以就 [01:36:46] 不同樣的層面的問題 [01:36:49] 所以這件事情 [01:36:50] 就回到我前面就是你要 [01:36:52] 你要從這個 [01:36:53] 這個字呢Map到一個 [01:36:55] 的一個字 [01:36:57] 到Bucket去 [01:36:58] 通常 [01:36:59] 其實也都會有一堆的Hash [01:37:01] 當然Hash [01:37:02] Hash的精神就是 [01:37:04] 用空間換取時間 [01:37:08] 這大概是以前 [01:37:10] 你要做 [01:37:12] 資訊連鎖 [01:37:13] 你前面就要做一段這樣的index的 [01:37:19] 但這一塊呢 [01:37:20] 現在有很多套件 [01:37:22] 你只要把文章 [01:37:24] 餵給他 [01:37:25] 他就幫你做好所有的縮印啊然後連 [01:37:28] 搜尋你的介面都做好這樣子 [01:37:31] 其實是 [01:37:32] 不用自己做沒錯啦 [01:37:34] 但是呢很多蠢事情 [01:37:37] 都是要自己做過 [01:37:39] 你才知道裡面的 [01:37:40] 問題點在那裡 [01:37:42] 好 [01:37:43] 那這個我們再看一下一些 [01:37:45] 以前會做的事情 [01:37:48] 那文章進來我們要做所謂的Lesson [01:37:50] 就是第一個要做Tokenization [01:37:53] 這個Tokenization其實跟現在 [01:37:55] LM前面的Tokenization [01:37:59] 做的事其實是差不多啦但是以前我們講的是有點像做Segmentation做斷字的 [01:38:05] 有點像是說把 [01:38:07] 文章中的turn把它接取出來 [01:38:09] 現在 [01:38:10] 在LM前面那一段Tokenization也是這個意思沒錯但是 [01:38:17] 可能現在大家對Token [01:38:19] 賦予比較大的 [01:38:20] 意識但以前沒有 [01:38:22] 就是turn [01:38:23] 就一大堆有意義的詞 [01:38:26] 然後以前會做所謂的Stemming [01:38:28] Stemming就是詞 [01:38:30] 詞幹 [01:38:32] 那以前有一個 [01:38:34] 很有名的叫Portal Argument [01:38:37] 這個大概從 [01:38:39] 比較從Compiler的角度去找出詞的原型 [01:38:45] 然後能夠 [01:38:47] 找出說這個字的root [01:38:50] 的形態是什麼 [01:38:52] 什麼叫root其實就是比如說docs [01:38:55] 加s之後 [01:38:56] 它的root是什麼就是原來的 [01:38:58] dog沒有加s [01:39:00] 但是它的root其實不見得是一個 [01:39:04] 存在的英文單字 [01:39:06] 等一下我們有個例子我這邊沒有秀了 [01:39:08] 就是它會把它變成一個特殊的 [01:39:11] 所有的詞都會變成一個特殊的root [01:39:13] 但是特殊的root它其實不是一個有意義的英文字 [01:39:17] 但是這樣的好處是什麼 [01:39:19] 我可以把所有的 [01:39:20] 變形 [01:39:22] 變成 [01:39:22] 歸宗成一個字這樣子 [01:39:26] Stemming [01:39:28] 它的原名叫Stem [01:39:31] 我蠻想說這個中文到底叫什麼 [01:39:32] 這是Google翻譯 [01:39:35] 我不知道為什麼他罵人這樣子 [01:39:37] 他就直翻就是詞幹的意思 [01:39:39] 其實是中文叫詞跟詞幹的意思就是 [01:39:43] 我要回到 [01:39:44] 我要回到這個root form這樣子 [01:39:47] 那以前有個步驟 [01:39:50] 很重要 [01:39:50] 但是現在 [01:39:51] 一點都不重要也不會去做 [01:39:53] 以前會做一個叫做 [01:39:55] Starboard [01:39:56] 就是 [01:39:58] Starboard的中文可以叫做 [01:40:00] 停用詞 [01:40:01] 也不叫停用詞反正就是 [01:40:03] 沒有意義的或是 [01:40:05] 可以省略的詞 [01:40:07] 那你如果搜尋英文Starboard [01:40:10] 去網路上搜尋 [01:40:11] 它會告訴你大概二三十個字 [01:40:12] 可能是一些貫詞啊介系詞這些東西 [01:40:15] 可以不需要被索引 [01:40:17] 因為 [01:40:18] 你不會去Google搜尋 [01:40:20] T-H-E [01:40:21] 你要叫Google給你什麼東西這樣那就一堆 [01:40:24] 沒有意義的東西這樣子 [01:40:26] 就像這些貫詞啊介系詞啊這些東西 [01:40:31] 那為什麼要做這一次 [01:40:32] 因為以前 [01:40:34] 以前空間記憶體很貴 [01:40:36] 所以 [01:40:37] 我這樣拿掉之後我 [01:40:40] 當時在做這些 [01:40:41] 索引啊 [01:40:42] 我可以少掉 [01:40:44] 百分之二十到三十的索引的空間 [01:40:47] 當然你會說這二十到三十 [01:40:49] 但是搞不好有一些很重要的東西被拿掉 [01:40:51] 沒錯 [01:40:53] 所以 [01:40:54] 怎麼去拿這件事情也是當時的一個學問 [01:41:02] 那TokenH呢 [01:41:03] 以前其實沒什麼大的學問就是 [01:41:06] 以前拿到的都是網頁 [01:41:07] 所以你會做 [01:41:08] 所謂的 [01:41:09] 把HTML拿掉啊 [01:41:12] 然後拿去一些不重要的啊 [01:41:14] 然後去 [01:41:16] 把它變成 [01:41:18] 全部都是小型的 [01:41:19] 寫的啊 [01:41:20] 以前會做這樣的有點像去 [01:41:23] Uniform你的資料的形態 [01:41:25] 但是老實說這樣的動作其實 [01:41:27] 會 [01:41:28] 跑掉很多的資訊或是說有很多資訊會 [01:41:32] 模糊掉 [01:41:33] 就是變得一樣但其他可能有些微的差別這樣子 [01:41:39] 那 [01:41:40] 這個以前Stemming這個Portal的概念其實就是把 [01:41:44] 磁性的東西降低或是有一些很簡單的規則 [01:41:48] 比如說 [01:41:49] 我們把 [01:41:51] 這個 [01:41:51] 加ING的把它拿掉 [01:41:53] 就變成圓形這樣子 [01:41:56] 那我們就可以把 [01:41:57] Fish跟Fisher [01:41:59] 變成同樣一個字Fish [01:42:01] Fish呢就把它拿掉也變成 [01:42:04] Fish這樣子 [01:42:05] 但是 [01:42:06] 當這個釣竿這個磁 [01:42:08] 你把ING拿掉之後呢 [01:42:10] 這兩個FishLow就不是釣竿了 [01:42:13] 就在意義上就不一樣這樣子 [01:42:16] 所以Stemming的時候其實它 [01:42:18] 也會有一些問題 [01:42:19] 但是沒辦法 [01:42:22] 因為記憶體不夠 [01:42:23] 所以我還是把 [01:42:24] 大家都變成一樣字會比較好做這樣子 [01:42:27] 那如果大家有興趣可以去看一下這個Portal的Stemming Argue [01:42:31] 這個 [01:42:32] 考古學家會去看一下這個演算法到底寫什麼 [01:42:35] 如果你寫過Compiler你大概一看 [01:42:38] 這個演算法就知道這是用 [01:42:40] Compiler的角度在看這個 [01:42:43] 磁的圓形的作法 [01:42:46] 那相對於Stemming還有一個叫做Nematization [01:42:49] 這個磁其實大家 [01:42:51] 可能要 [01:42:52] 稍微了解一下因為它 [01:42:54] 還蠻有用的 [01:42:56] 一樣是 [01:42:57] 回到磁的 [01:42:59] 圓形 [01:43:00] 當然圓形會不太一樣它的圓形就是 [01:43:04] 我這邊做個比較啦 [01:43:05] 這是 [01:43:06] 這是如果你在文章中看到這個 [01:43:09] Study然後變IES這個字呢 [01:43:12] 如果照 [01:43:13] Stemming的做法 [01:43:14] 它就是 [01:43:15] 暴力把它變成磁根 [01:43:17] 就把ES拿掉 [01:43:18] 就變這個字所以我說 [01:43:20] Stemming常常會產生一堆 [01:43:22] 不是英文字的字 [01:43:24] 但是 [01:43:25] 但是所有跟Study長出來的字我都可以靠著一些規則 [01:43:29] 把它變成這個SDUDI [01:43:31] 我都知道說喔 [01:43:33] 這都長出來它的Root就是SDUDI [01:43:35] 但是Nematization它其實會考慮到一些Semantic [01:43:39] 你這邊應該是個動詞 [01:43:41] 你這邊應該是個名詞 [01:43:44] 它會把它 [01:43:45] 轉換成 [01:43:46] 適合這個磁性的 [01:43:48] 一個圓形 [01:43:51] 所以它會稍微複雜一點 [01:43:53] 就是說 [01:43:54] 如果你現在要跑Stemming的演算法跟Nematization的演算法 [01:43:57] 你會發現 [01:43:58] 這個Nematization跑好久啊 [01:44:00] 因為它算的東西 [01:44:02] 很多 [01:44:03] OK [01:44:04] 但是它做出來的東西比較有點區分 [01:44:07] 有點你可以想像Stemming就是暴力反正就是什麼東西都是一樣 [01:44:12] 那Nematization就是我還會稍微細分一下這邊該擺什麼樣的字比較是對的 [01:44:18] 它的Root是比較對的 [01:44:20] 所以它做出來是比較合理的東西 [01:44:24] 所以如果你看一些Paper [01:44:26] 他可能會說我把 [01:44:28] 我的來源字做一些Nematization之後 [01:44:31] 會比較乾淨 [01:44:33] 比較 [01:44:34] LN比較不會犯錯 [01:44:36] 他其實在做這樣的動作 [01:44:40] OK [01:44:41] 但基本上就是有點 [01:44:43] 把 [01:44:44] 多樣性的磁性的變化或是 [01:44:47] 磁的變化 [01:44:48] 把它稍微Uniform一點這樣子 [01:44:50] 這樣有什麼好處 [01:44:52] 這樣你對應到整個大圓模型的 [01:44:55] 那個Token的表示呢就 [01:44:57] 不會這麼發散 [01:44:59] 當然 [01:45:01] 通常現在 [01:45:02] 有時候也不太去管這些反正 [01:45:05] LN越來越強有些事情就交給LN去理解就是了 [01:45:10] 那Starboard呢 [01:45:12] 這是用Starboard做出來的Tech Cloud [01:45:16] 但是你可以看到 [01:45:18] THE [01:45:19] TO [01:45:20] ,IN,AND這些東西都會STARBOARD [01:45:24] 以前就是這個東西審太多而且你去統計一下 [01:45:28] 英文字的STARBOARD [01:45:30] 剛才說可以省掉20%你就知道這個量有多少 [01:45:35] 但是STARBOARD有 [01:45:37] 很多問題 [01:45:38] 像這些句子裡面我如果把這些STARBOARD [01:45:41] 這些都把它拿掉 [01:45:43] 雖然有些關鍵字會留下來沒錯 [01:45:46] 但是它整個語意稍微有點偏了 [01:45:49] 會不知道我到底本來的意圖是什麼 [01:45:53] 但是以前沒辦法 [01:45:54] 因為記憶體擺不下這個INDEX TABLE擺不下所以 [01:45:58] STARBOARD [01:45:59] 能不管就不管這樣子 [01:46:01] 那通常在STARBOARD的問題上我會探討 [01:46:04] 什麼是STARBOARD [01:46:07] 如果老師就這些啊 [01:46:08] 不同語言是不是STARBOARD也不一樣 [01:46:11] 這個把它翻成中文不就好了 [01:46:14] 那 [01:46:16] 你就知道這個不同語言的差異 [01:46:19] 不同語言的STARBOARD也不一樣 [01:46:21] 甚至你的應用的 [01:46:23] 比如說我現在做一個 [01:46:25] 運動新聞的檢索 [01:46:27] 或是新聞的檢索 [01:46:29] 那所有的新聞裡面都會有什麼什麼什麼記者報導 [01:46:34] 所以報導這兩個字呢在你的應用裡面幾乎每一篇都會出現了 [01:46:38] 它其實已經不是有意義的詞 [01:46:40] 所以它可以在你的應用裡面歸類為STARBOARD [01:46:46] 你說 [01:46:47] 在意這麼多幹什麼 [01:46:49] 大圓模型會幫我做就好了 [01:46:51] 沒錯現在 [01:46:52] 現在人們其實 [01:46:53] 都知道這些事情 [01:46:55] 那什麼時候要把它拿掉 [01:46:57] 你說一開始就拿掉了還是等 [01:47:00] 處理完一些事情把一些詞呢 [01:47:03] 意義把它搞懂之後再把它拿掉 [01:47:05] 也是一樣各有利弊的 [01:47:07] 因為 [01:47:08] 像剛剛那個釣竿 [01:47:10] 你把詞性轉換之後又把STARBOARD拿掉之後你可能那個詞就不見了 [01:47:16] 所以 [01:47:17] 什麼時候該怎麼拿 [01:47:19] 這個都是不同的應用會有不同的做法 [01:47:22] 我這邊舉一個例子 [01:47:24] 以前我們常常說 [01:47:25] to be or not to be [01:47:26] 這是一個很有名的 [01:47:28] 的句子 [01:47:30] 但是to呢在裡面是STARBOARD [01:47:32] be也是 [01:47:33] o也是 [01:47:34] not也是 [01:47:35] not可能可以把它 [01:47:37] 當成是一個negation的turn [01:47:39] 但是後面 [01:47:40] 發現整個句子都STARBOARD [01:47:42] 你就把它拿掉 [01:47:43] 這個句子就消失了 [01:47:45] 這麼有名的句子就不見了這樣子 [01:47:48] 所以其實 [01:47:49] 到後來當然 [01:47:50] 我們寧願多買一點記憶體 [01:47:52] 讓整個東西跑得起來 [01:47:54] 寧願不要做STARBOARD這件事 [01:47:58] 這個當然這個有一些歷史的因素 [01:48:01] 但是呢 [01:48:03] 你要想一想啊這有時候 [01:48:06] 尤其是像你現在在寫LM PLUM的時候 [01:48:10] 你的每一個PLUM的每一個字的 [01:48:12] LM都非常的在意都非常Sensitive [01:48:17] 所以你會覺得那個不重要但是你多了點 [01:48:19] 多了那個字多了沒有那個字的 [01:48:21] 你發現結果好像不太一樣 [01:48:23] 當然不見得是因為那個字的關係 [01:48:26] 但是 [01:48:27] 其實 [01:48:28] 這些字在算的時候它所造成的影響 [01:48:31] 是會PROPAGATE的 [01:48:32] 會ATTENTION算起來就會不太一樣 [01:48:35] 那這件事情 [01:48:37] 表示什麼 [01:48:38] 我們現在就讓LM [01:48:41] 去幫我們計算什麼叫做句子裡面的STARBOARD [01:48:46] 好 [01:48:47] 那 [01:48:48] 我們再看一下這些做完之後你的 [01:48:51] 你的比對 [01:48:52] 我們剛才說那個INDEX TABLE做出來的時候我就是下這個關鍵字有出現 [01:48:58] 這個文章我就把它抓出來 [01:48:59] 但是如果使用者 [01:49:00] 下了 [01:49:02] 十幾個字呢 [01:49:03] 或是使用者給你一篇文章叫你找相似的文章你要怎麼做 [01:49:08] 那你也可以用同樣的做法然後把所有的字出現的字的文章 [01:49:12] 把它Aggregate在一起然後Report出去 [01:49:15] 但是當時大家就希望說那我們 [01:49:18] 用一個 [01:49:19] 向量的空間 [01:49:21] Battlespace Model的方式來表示一個Document [01:49:26] 這個其實當然 [01:49:28] 可能你覺得很Trivial但是其實這個概念還蠻重要的 [01:49:33] 就是 [01:49:35] 文章寫成字就是一堆Sequential的符號 [01:49:39] 那我們怎麼樣讓電腦去理解 [01:49:42] 這個Sequential的符號我們一定要有一個 [01:49:45] 表示的方式 [01:49:47] 你說把每個字 [01:49:48] 都寫出來 [01:49:49] 也是一種表示方式沒錯 [01:49:51] 但是我們有一個Uniform的 [01:49:52] 我有一個 [01:49:53] 固定長度的Vector [01:49:55] 然後告訴他文章就是代表這001111什麼什麼的 [01:50:00] 這是一種固定的表示方式對電腦的理解來講是比較有利的 [01:50:05] 所以以前在做 [01:50:08] 那個年代在做搜尋的時候基本上都是Batch on這個Vector Space Model [01:50:14] 就是把所有文章都映射在一個高維的空間 [01:50:18] 中的一個點 [01:50:19] 它就是一個向量 [01:50:21] 向量跟向量之間就有所謂的相似度 [01:50:24] 雖然假假雖然相似度 [01:50:27] 所以在做Document Representation的時候 [01:50:30] 這最暴力的做法就是現在 [01:50:32] 通常 [01:50:33] 你會拿來做Base Line的做法就是Vector Space Model [01:50:37] 好那我就在一個什麼樣的空間就是 [01:50:40] 所有字 [01:50:42] 所構成的空間裡面 [01:50:44] 去 [01:50:45] 表示這個文章 [01:50:47] 這個文章 [01:50:48] 比如說我現在的Vocabulary為什麼Vocabulary這麼重要 [01:50:51] 我們當初定了3萬個字 [01:50:53] 出來之後 [01:50:54] 我的空間就是3萬維度 [01:50:57] 就是我只看這3萬個字 [01:50:59] 那每一個字呢就代表了一個Dimension [01:51:02] 就代表一個Dimension [01:51:03] 所以這個字如果有出現 [01:51:06] 它在那個維度就表示它有1 [01:51:09] 就是有出現 [01:51:10] 沒有這個文章沒有那個字 [01:51:11] 那個維度就是0這樣子 [01:51:23] 所以我會用這種方式來表示 [01:51:25] 一個Document [01:51:26] 但這個寫法其實不是喔這個寫法其實是說 [01:51:30] 我會把每一個Word [01:51:32] 用一個這樣的1-Half Vector [01:51:35] 來表示我的 [01:51:37] 這個 [01:51:37] 這個字的Vector [01:51:39] 然後再把它組成起來 [01:51:41] 那其實它如果是把它 [01:51:43] O起來之後其實就是我剛才講的 [01:51:46] 這麼多維度的一個Document的向量這樣子 [01:51:50] 所以你可以想像就是 [01:51:52] 我們一篇文章中 [01:51:54] 了不起就是 [01:51:55] 1000個字 [01:51:56] 那1000個字在我3萬的裡面 [01:51:59] 1000個字還算多了 [01:52:00] 很多文章都只有 [01:52:01] 重複字不重複字大概就只有 [01:52:04] 兩三百個字 [01:52:05] 那它的 [01:52:06] 它的表示是非常稀疏的 [01:52:08] 就是這個向量 [01:52:09] 雖然有 [01:52:10] 3萬個這麼這麼長 [01:52:12] 但是呢可能只有300個是有出現的 [01:52:15] 意義這樣子 [01:52:16] 所以是個非常Sparse的一個Vector [01:52:21] OK [01:52:22] 那有了Vector之後呢 [01:52:23] 我們希望 [01:52:24] 其實我不再只是出現一次 [01:52:27] 就是ER [01:52:28] 那出現兩次能不能給它不同的權重 [01:52:31] 所以我就做了一個叫做Term Frequency [01:52:34] 就是這個 [01:52:35] 字的出現次數 [01:52:37] 它搞不好很重要 [01:52:38] 如果這篇文章一直在出現 [01:52:40] 什麼 [01:52:41] 大股強品 [01:52:42] 就表示在講這個運動員在幹嘛幹嘛 [01:52:44] 如果大股強品只出現一次 [01:52:47] 然後 [01:52:48] 可能又一大堆的這個到期的球員 [01:52:51] 那可能 [01:52:51] 不是在跟大股強品 [01:52:53] 不是這麼有關的字 [01:52:54] 所以這個Term Frequency [01:52:56] 每一個字的Term Frequency [01:52:57] 其實會 [01:52:59] Highlight出 [01:53:00] 這個字在這個文章的重要性 [01:53:03] 所以我們 [01:53:04] 就會對不同的字所出現的頻率給它賦予不同的權重 [01:53:09] 這個第一個關係就是Term Frequency [01:53:12] 就是只要它出現越多 [01:53:14] 那它的權重就越大 [01:53:15] 這個NiJ [01:53:17] 這個index是這樣就是 [01:53:19] D [01:53:21] DJ一個Tem [01:53:23] DJ一個Tem在DIB [01:53:25] 一篇文章中的出現次數 [01:53:28] 然後這是NiJ就是它在這篇文章出現幾次 [01:53:32] 然後會 [01:53:33] 正規化 [01:53:34] 處理 [01:53:34] 處理整個文章所有的Term為什麼要做這件事情 [01:53:38] 因為如果一篇文章只有三個字跟一篇文章有三萬個字 [01:53:42] 你這個NiJ是一個絕對值啊Term Frequency是一個 [01:53:46] Count一個出現次數的量 [01:53:49] 你一定要Normalize不然會被 [01:53:51] 大文章所Dominate [01:53:52] 所以這個一般來講Term Frequency [01:53:54] 就是一個正規化後的一個出現的次數的統計 [01:54:00] 這是TF [01:54:01] 那大家 [01:54:02] 為什麼要講 [01:54:03] 出現這個 [01:54:04] 大家可能常聽到一個TF IDF [01:54:06] TF就是 [01:54:08] 裡面TF IDF的前面那一項 [01:54:10] 就是出現的次數的相似 [01:54:12] 那後面有一個IDF呢 [01:54:14] 它的全名叫做Inverse Document Frequency [01:54:19] 我們先看Document Frequency [01:54:21] Document Frequency就是說 [01:54:22] 我現在所看的文章裡面 [01:54:24] 這個字 [01:54:26] 總共出現幾次啊 [01:54:28] 就是我現在找了一萬篇的新聞 [01:54:31] 這一萬篇新聞裡面呢 [01:54:33] 都是什麼什麼記者報導 [01:54:35] 所以這個報導幾乎一萬篇都有出現 [01:54:38] 所以這個報導這個字呢在我的Dataset裡面它的Document Frequency [01:54:43] 非常高 [01:54:44] 幾乎跟我的 [01:54:45] 大N [01:54:47] 這個大N就是 [01:54:48] Total Number就是總共有多少個Document是一樣的 [01:54:52] 那我做一個Inverse意思是說 [01:54:54] 我要讓那個出現比較少次的 [01:54:58] 這個 [01:54:59] 值會變得更高 [01:55:01] 那NZ就是說我總共出現的次數 [01:55:05] 所以如果我那個什麼報導 [01:55:07] 這兩個字的 [01:55:08] 在一萬篇裡面每個字都有出現 [01:55:10] 那這個NZ就跟N [01:55:12] 是一樣的 [01:55:13] 這邊就是1 [01:55:15] 這邊就是1 [01:55:16] 那就是0 [01:55:18] 所以IDF就是最小 [01:55:20] IDF值的最小值就是0 [01:55:22] 就是它完全沒有權重 [01:55:24] 幾乎可以被 [01:55:26] 濾掉 [01:55:27] 所以IDF是一個很重要的 [01:55:29] 工具用來鑑別 [01:55:31] 一個字詞的重要性 [01:55:34] 所以我們叫做一個Discriminator [01:55:36] 就是一個鑑別器 [01:55:40] 你說老師這個 [01:55:41] 這個重要嗎 [01:55:42] 有任何判斷重要性就好了 [01:55:44] 沒錯 [01:55:46] 但是如果你在算 [01:55:48] 自己要做一個檢索 [01:55:50] 尤其是你現在要做REG [01:55:51] 你自己要查 [01:55:52] 向量的時候 [01:55:54] 或是要查字字 [01:55:55] 的時候你會發現 [01:55:56] 我如果直接用embedding [01:55:59] 來算相似度 [01:56:00] 其實效果不會很好因為 [01:56:02] 通常你轉成句子的embedding [01:56:05] 它其實會有點模糊度 [01:56:07] 如果你在加上一些 [01:56:09] 這些 [01:56:11] 從Dense Vector [01:56:13] 加上這個Sparse Vector [01:56:14] 你會發現 [01:56:16] 用TFIDF所構成的效果有些關鍵字所構成的效果 [01:56:20] 它效果會變得很好 [01:56:22] 所以它還是有用 [01:56:24] 雖然它是很古老的東西 [01:56:26] 但是它是一個非常Strong的Baseline [01:56:29] 那大家知道 [01:56:31] 大家就要記住 [01:56:32] IDF是用來幹嘛 [01:56:34] 它其實就是 [01:56:35] 一個用來 [01:56:36] 鑑別 [01:56:37] 一個字詞 [01:56:39] 在我這個Document Say的一個鑑別性 [01:56:42] 如果一萬篇裡面都有這個字 [01:56:45] 那 [01:56:46] 對我來講 [01:56:47] 我查詢這個字 [01:56:49] 沒有什麼意義啊我就等於是把所有結果都給使用者 [01:56:52] 沒有什麼鑑別性 [01:56:53] 但是如果有一個字 [01:56:55] 它只出現一次 [01:56:57] 那表示說當使用者查詢這個字的時候 [01:57:00] 我就知道 [01:57:01] 是在那篇文章 [01:57:02] 我就 [01:57:04] 把那篇文章的結果給 [01:57:05] 使用者就好 [01:57:07] 所以當這個是 [01:57:09] 1的時候 [01:57:10] 就是它非常的 [01:57:12] 稀有非常罕見字 [01:57:13] 只有在一篇文章出現一次的時候 [01:57:16] 那 [01:57:17] 這個值就是你的 [01:57:18] 你的最大值 [01:57:21] 所以通常我們IDF有時候也會正規 [01:57:24] 所謂正規化就是我這個 [01:57:26] Log是取N的 [01:57:28] 是取N [01:57:29] 所以我會從 [01:57:31] IDF值會從0變到1 [01:57:33] 這是正規化後的IDF [01:57:35] 右邊這個圖其實是沒有正規化就直接取 [01:57:39] 10 Log [01:57:41] 所以我的這個N越大的時候我的IDF就越大這樣子 [01:57:45] 所以它就沒有Upper Round [01:57:47] 但因為取Log其實也不會太大這樣子 [01:57:52] 那這個圖大概是一般 [01:57:54] 統計下來的結果就是一般在文章中 [01:57:57] 統計的時候 [01:57:58] 字詞的頻率跟它算出來的IDF [01:58:01] 因為是取Log [01:58:02] 所以就是在Log的Label是 [01:58:05] 線性的關係 [01:58:07] OK [01:58:09] 那 [01:58:10] 這個圖 [01:58:11] 可能大家可以思考一下就是說 [01:58:13] 因為這個IDF是一個 [01:58:15] 非常 [01:58:17] Huristic [01:58:18] 所謂Huristic就是以前某個 [01:58:20] 某個厲害的學者 [01:58:23] 算出這個權利 [01:58:24] 這種告訴你這很有用 [01:58:25] 用就對了這樣子 [01:58:27] 沒錯用的時候發現很好用這樣子 [01:58:30] 但是其實IDF有一些理論的基礎 [01:58:33] 它其實跟Entropy會有點關係 [01:58:36] 以後我們機會會再講到 [01:58:39] 不過這個東西你會發現 [01:58:41] 在我的應用裡面做出來的分佈長這樣 [01:58:45] 那你說 [01:58:46] 那它到底 [01:58:48] 好不好 [01:58:48] 它到底能不能當成我的Discriminator [01:58:52] 就是說 [01:58:53] 我想要區分的字呢 [01:58:55] 如果都集中在中間這一塊 [01:58:57] 那表示我這個算法不好 [01:59:00] 我算一算之後發現我想區分的字 [01:59:03] 其實它的算出來IDF值都差不多 [01:59:06] 那就我可能要改一下 [01:59:08] 但是如果我想區分這幾個字 [01:59:11] 跟這幾個字 [01:59:12] 的差別 [01:59:13] 那IDF就是一個很好的 [01:59:15] 鑑別的工具 [01:59:16] 我就可以拉大這些事情 [01:59:19] 所以有時候當你自己 [01:59:21] 經驗法則設計出一些 [01:59:23] 變形之後你可以看一下你的分佈 [01:59:25] 到底 [01:59:25] 貢獻會是長什麼樣子 [01:59:28] 不過IDF畫出來通常都 [01:59:30] 比較像這樣因為大家頻率不會 [01:59:32] 差太多 [01:59:35] 除了這些Starboard [01:59:37] Starboard在這裡 [01:59:39] 這大概出現一次啦 [01:59:41] 這是稀有字或專有名詞 [01:59:45] 但是我們通常都希望先把這些拿掉 [01:59:47] 因為IDF [01:59:48] 很低的 [01:59:50] 它TF IDF一層 [01:59:51] 它就掉下來 [01:59:53] 這樣子 [01:59:58] 所以我們有了剛才的表示之後我們再把TF IDF加上去之後 [02:00:03] 那每一個Document的表示呢 [02:00:06] 就是變成是一個 [02:00:07] 如果有正規化之後它就是一個分數的表示 [02:00:12] 字典有三萬個字那就是一個三萬維度然後都是一大堆零點零幾零點幾的表示這樣子 [02:00:19] 每一篇每一個 [02:00:21] Document就是一個Vector [02:00:23] 那Vector跟Vector之間 [02:00:25] 如果是長得一模一樣 [02:00:27] 就是向量完全一模一樣它就是沒有夾角 [02:00:30] 沒有夾角cos出來是多少 [02:00:33] 所以我們就用cos的方式來評估 [02:00:36] 兩個向量兩個文章間的相似度 [02:00:39] cos [02:00:40] 兩個向量之間算cos就是這個公式 [02:00:46] 常常會有同學 [02:00:48] 搞不清楚說cos算夾角跟算內積 [02:00:52] 差別是什麼 [02:00:54] 其實你會發現 [02:00:55] 分子就是算內積嘛就是兩個Vector之間的內積 [02:00:59] 但是分母多了一個 [02:01:01] 除以它的長度 [02:01:03] 它就是兩個單位向量再算它的 [02:01:06] 它的之間的夾角cos公式是這樣 [02:01:09] 但是內積不太管 [02:01:10] 長度啦 [02:01:11] 內積就是看 [02:01:13] 同樣Dimension的有值 [02:01:15] 這樣把它整在一起 [02:01:17] OK [02:01:18] 所以當你的 [02:01:20] 文章 [02:01:21] 你的Document的Vector [02:01:23] 是正規化 [02:01:24] 所謂正規化是你所有Document都是 [02:01:27] 都是分布在一個 [02:01:29] 這個半徑為1的球上面 [02:01:32] 就是多維空間的球體上 [02:01:34] 就是長度都是1的時候 [02:01:37] 你這都是1呀 [02:01:39] 所以在算相似度在算cos夾角的時候其實就是兩個向量的內積 [02:01:44] 就是兩個向量的內積 [02:01:45] 所以為什麼 [02:01:47] 以前你不知道說 [02:01:49] 就是把這兩個向量做內積你就知道它們有多像 [02:01:53] 它其實概念就是這樣 [02:01:55] 但是因為這個向量很大 [02:01:57] 因為就是跟你的Vocabular size有關嘛 [02:02:00] 就是3萬維度跟3萬維度在做內積這樣子 [02:02:03] 當然有一些快速它其實就是Scan [02:02:06] 就是有值的把它抓出來然後 [02:02:08] 所以它就是Scan過一遍 [02:02:10] 所以 [02:02:11] 大概它的 [02:02:12] 它的order就是跟 [02:02:14] 向量有字的 [02:02:16] 多少字有關這樣子 [02:02:19] OK [02:02:20] 那這件事情其實還蠻重要的 [02:02:22] 尤其是 [02:02:23] 到時候現在你說做LM做REG [02:02:26] 你會建所謂的Vector Database [02:02:30] 就是 [02:02:31] 向量資料庫 [02:02:32] 建一大堆向量 [02:02:34] 那你要算相似度嘛 [02:02:35] 其實你就在做這些事情 [02:02:37] 如果最標準的 [02:02:39] 簡單的做法就在做這件事情 [02:02:41] 你現在要檢索的東西 [02:02:43] 你覺得LM不知道 [02:02:45] 我要去我的Database去找一下 [02:02:48] 就是把這個這個詞轉成向量之後在你的向量資料庫裡面去比對這樣子 [02:02:53] 我就來做這件事情 [02:02:55] 那 [02:02:57] 你就要想像一下你這樣算出來到底 [02:03:01] 到底1跟0 [02:03:03] 是什麼樣的句子 [02:03:04] 到底它的中間有向的東西是什麼樣子 [02:03:08] 因為你的向量資料庫通常 [02:03:10] 不是Wandhar Vector [02:03:11] 不是這種Sparse Vector [02:03:14] 通常是Dense Vector [02:03:15] 通常是模型轉換後的壓縮後的向量 [02:03:19] 那那個東西 [02:03:20] 其實 [02:03:21] 虎虎的 [02:03:22] 虎虎的以後不會知道 [02:03:23] 會再解釋什麼叫虎虎的反正就是 [02:03:26] 就是很多概念會 [02:03:28] 會黏在一起的時候 [02:03:30] 有時候很難去用那個Vector來算向量 [02:03:33] 的相似度 [02:03:38] 那我這邊秀一個變形以前我們在做TFIDF你就知道這些研究學者 [02:03:44] 整天閒閒沒事就在做這件事情 [02:03:46] 這個TFIDF [02:03:48] 夠好我們來改變一下 [02:03:51] 那怎麼變呢 [02:03:52] 這個 [02:03:54] 就各式各樣 [02:03:55] 變形 [02:03:56] TF可以這樣變 [02:03:57] 這個 [02:03:58] IDF的DF可以這樣變 [02:04:01] 正規化有不同的變法因為 [02:04:03] 你就知道 [02:04:04] NORMAL ENGINE有很多不同NORMAL ENGINE的方式 [02:04:08] OK [02:04:09] 我把這個講完 [02:04:10] 下課 [02:04:11] 那一般來講TF最簡單的就是 [02:04:16] 出現幾次嘛在這個句子在這邊文章出現幾次 [02:04:20] 有時候我們不再做 [02:04:22] IDF直接TF當權重這樣子 [02:04:25] 那也不做正規化的 [02:04:26] 這是最 [02:04:27] 最偷懶的方法 [02:04:29] 那有時候會做一件事情像這樣 [02:04:32] 這樣會做什麼就是 [02:04:34] 你的文章很大有些很大的時候那個出現一萬次兩萬次 [02:04:39] 跟有些只出現一次兩次的 [02:04:42] 我不做長度的正規化我直接取LOG [02:04:46] 直接取LOG [02:04:49] 或者是說做 [02:04:50] 壓縮 [02:04:53] 當你看到這種公式的時候你就知道了 [02:04:55] 他們的他就是把原來從0到1 [02:04:58] 的RANGE [02:05:00] 壓縮到0.5到1的RANGE [02:05:03] 就是 [02:05:04] 不要大家差這麼多 [02:05:05] 本來是0到1的差別現在把它變0.5到1的差別 [02:05:09] 你說這不是一樣嗎 [02:05:11] 這不是大家都 [02:05:12] 只是把它壓扁而已 [02:05:14] 壓扁的差別就是 [02:05:17] 可能以前有人 [02:05:18] 只有拿到0.01啊 [02:05:20] 本來只有0.1他現在可以變0.5 [02:05:23] 這個差別就差一點點 [02:05:25] 差很多了 [02:05:27] 所以 [02:05:27] 什麼樣的公式你一看就知道說他是大概處理什麼樣的問題 [02:05:32] 當然這也不叫作弊這是有點像說 [02:05:35] 我就希望說 [02:05:37] 在我的應用裡面 [02:05:39] 有些非常稀少數的東西 [02:05:41] 他也能夠 [02:05:42] 得到一點權重而且是權重不會被dominate掉的權重 [02:05:46] 我就可以這樣說 [02:05:49] 那其他的你可能自己思考 [02:05:51] 其實不只啦不只這些啦 [02:05:54] 所以以前呢 [02:05:55] 有 [02:05:56] query有查詢的 [02:05:57] 跟我要查詢的document的 [02:05:59] 我都有tf idf計算 [02:06:01] 所以以前會做什麼事情呢 [02:06:03] 這是query的 [02:06:05] ltn [02:06:06] 代表是我這邊用 [02:06:08] ltn [02:06:10] 這樣子 [02:06:10] query用這個算法 [02:06:12] 然後呢 [02:06:13] document用lnc這樣子 [02:06:15] lnc [02:06:18] 就是 [02:06:19] 我 [02:06:20] 我編輯我的查詢因為查詢的話比較短 [02:06:23] 所以有時候算法會不一樣 [02:06:24] 文章通常比較大 [02:06:26] 會用比較大的作法 [02:06:27] 所以不同的計算方式 [02:06:29] 再把它做內積 [02:06:31] 有時候 [02:06:32] 不過你現在看不到的啦 [02:06:33] 這可能要去博物館再看 [02:06:35] 有些paper會分析這些東西 [02:06:39] 好 [02:06:39] 那就是代表什麼 [02:06:41] 你的query跟document長相不一樣的時候你可能需要有不同的權重計算的方式 [02:06:48] 這個你說老師我又不做資訊檢索用不太到 [02:06:51] 其實你在做reg的時候就會用到這些想法 [02:06:54] 那這個當然 [02:06:57] 就有不同的計算 [02:06:58] 那你說老師這有沒有道理 [02:07:00] 這個好像就 [02:07:00] 硬湊 [02:07:01] 沒錯 [02:07:02] 因為就是非常heuristic [02:07:04] 非常heuristic [02:07:05] 只是說他可以prove說 [02:07:07] 這個在我應用裡面我想要強調的東西 [02:07:10] 可以拉得出來這樣子 [02:07:13] 好 [02:07:14] 休息一下我們 [02:07:15] 下一節就從BM25開始講 [02:16:39] 我們繼續喔 [02:16:40] 剛才slide上有同學問一些問題 [02:16:43] 那 [02:16:44] 因為 [02:16:45] 這個space model [02:16:49] 基本上 [02:16:50] 蠻 [02:16:51] 古老的蠻基本不過我可能要講的比較快一點這樣子 [02:16:55] 那我們再 [02:16:56] 從這邊看這個圖啦這個圖你可以想像就是說 [02:17:01] 我現在的vocabulary就是3 [02:17:03] 就是三個字 [02:17:04] W1 W2 W3 [02:17:06] 我的字典就是三個字 [02:17:07] 所以我每一篇的文章 [02:17:10] 它就是一個 [02:17:12] 在這三維空間的一個向量 [02:17:14] 所謂三維空間就是 [02:17:15] 這個字有出現 [02:17:17] W1有出現就是1 [02:17:19] 沒有就是0 [02:17:20] 這樣子 [02:17:20] 所以 [02:17:22] 如果在一個我們可視的這種 [02:17:24] 三維空間裡面去表示的話 [02:17:27] 它就是一個Vocabulary size為3 [02:17:29] 的一個向量 [02:17:31] 然後 [02:17:32] 它上面就是010啊100這樣子有出現這個字就是1沒有就是0這樣子 [02:17:37] 這個向量 [02:17:38] 那為什麼叫做space呢 [02:17:40] 因為 [02:17:40] 我們這個字典通常很大 [02:17:42] 通常很大就是 [02:17:47] 這個字典我們做出來之後其實你會發現我們 [02:17:53] 文章一直進來我們一直 [02:17:54] Parse出來的字就會一直累積在這個 [02:17:57] 這個Table裡面 [02:17:58] 雖然它只是 [02:18:00] 一個 [02:18:00] Index的頭 [02:18:02] 但是基本上我們可以對應出 [02:18:04] 所有的Vocabulary的東西雖然這個它可能有STEMI或是 [02:18:08] 其他Limitation處理過的東西不過基本上它的Size就跟Vocabulary差不多 [02:18:14] 這個字這個Table處理完我們可以把它 [02:18:17] 固定在一個範圍 [02:18:19] 裡面當然就是說 [02:18:20] 不見得是這麼固定或是說你可以拿現成人家已經做好的 [02:18:25] 這種標準常用字三萬個字的字典 [02:18:29] 然後建法在那裡 [02:18:33] 我來一本 [02:18:43] 沒有抓到畫面 [02:19:11] ,對吧 [02:19:15] 現在 [02:19:16] 現在就是可以 [02:19:17] 可以動就不要再去動它 [02:19:21] 反正 [02:19:23] 這個字典 [02:19:24] 其實 [02:19:26] 當然如果你是一個空的 [02:19:28] 你就會從一堆的Document進來之後Parse完就建立出你的Vocabulary [02:19:34] 所以你自己應用可以建立出你自己的Vocabulary沒錯 [02:19:37] 但是我們通常會拿一個已經人家做了常用字 [02:19:41] 的一個字典 [02:19:42] 三萬個字的字典 [02:19:44] 來做這件事情 [02:19:45] 沒什麼差別一個是自己建一個是 [02:19:48] 一個是標準用的用法這樣子 [02:19:50] 因為這個字典三萬個字你可以想像 [02:19:53] 你當初在做這個 [02:19:57] 當初在做這個Vector的時候你一篇文章可能就20個 [02:20:01] 相異字 [02:20:03] 所以三萬個字 [02:20:04] 這個是三萬 [02:20:06] 這個只有20個字當然是個係數 [02:20:09] 就是一個項量有三萬個長度的項量裡面只有20個是1其他都是0 [02:20:15] 就是一個Parse的概念這樣子 [02:20:18] OK [02:20:19] 這樣應該 [02:20:21] 現在投影是對的吧 [02:20:24] 那至於有同學問說imprtindex跟index差別是什麼 [02:20:28] 其實 [02:20:29] imprtindex比較是一個 [02:20:36] 他的概念 [02:20:37] 就是我現在是 [02:20:38] 反著去索引我不是索引 [02:20:41] 這個文章中的 [02:20:43] 字 [02:20:44] 形式方向而已啊 [02:20:46] 就是我不是索引這個文章 [02:20:48] 有哪些字這樣子 [02:20:50] 而是這些字出現在哪些文章 [02:20:53] 這當初為什麼叫imprtindex的概念 [02:20:56] 但是你會覺得說 [02:20:57] Database index不就是這樣嗎 [02:21:00] 沒錯如果你真的以 [02:21:02] 技術來講你的索引其實就是建這個東西 [02:21:06] 但是如果以概念上來講我會想說那我建索引 [02:21:10] 這篇文章有哪些字你可以告訴我 [02:21:12] 就這篇文章的字有哪些 [02:21:15] 但是我現在是反向 [02:21:16] 所以我的pointer是指回來的 [02:21:18] 所以當初為什麼叫imprtindex的概念其實是這樣 [02:21:24] 好謝謝同學的提問 [02:21:28] 有同學問有沒有字幕啦那好像YouTube自動可以打上字幕 [02:21:33] 不過我通常回看以前我的影片好像 [02:21:37] 老師的發音不太標準那個字幕有時候怪怪的 [02:21:40] 不過你大概就 [02:21:42] 自己 [02:21:42] 自己理解一下 [02:21:44] 我念的東西這樣 [02:21:46] 好那有同學說 [02:21:51] 要不要教材不然都看不懂 [02:21:54] 然後有同學回說這一頁看不懂沒有關係 [02:21:59] 的確是沒有什麼太大關係 [02:22:02] 那 [02:22:04] 但是你要知道你要知道TF [02:22:06] 是這個 [02:22:08] 算出現次數算它在一篇文章中出現的次數 [02:22:13] IDF是在算 [02:22:15] 它在整個dataset裡面 [02:22:17] 所出現的document次數的一個reversed [02:22:21] inverse的一個term [02:22:23] 你要知道這個概念 [02:22:25] 只是說這個概念的算法 [02:22:27] 有很多種變形 [02:22:30] 為什麼要這麼多種變形 [02:22:32] 就是適應在你的應用上去做的變形 [02:22:36] 有可能是因為你的 [02:22:38] 文章大小不一樣啊或是你的字詞的分佈 [02:22:42] 不太一樣啊 [02:22:44] 所以才需要做一點這樣的調整 [02:22:47] 至於哪一種調整哪一種適應你的 [02:22:51] 通常就是 [02:22:52] 暴力法都是 [02:22:54] 組合一下或是你自己看一下你的自己的分佈大家就知道 [02:22:57] 要怎麼做這樣子 [02:23:00] 這些 [02:23:01] 說實在沒有什麼道理 [02:23:03] 沒有什麼 [02:23:04] 可以推導出來的證明 [02:23:06] 只是一般我們在設計權重的時候的一種經驗法則 [02:23:11] 但這些經驗法則其實是有些是 [02:23:14] 有一些 [02:23:16] 道理可循 [02:23:17] 又有道理就像我剛才講的這個 [02:23:20] 就是 [02:23:21] 就是他把 [02:23:22] 我的這個TF本來是一個從0到1的變化量 [02:23:26] 壓縮到0.5到1的變化量 [02:23:31] 為什麼我這麼熟呢 [02:23:33] 每次期末在調班上成績的時候就要做這件事情 [02:23:37] 就是有些人考的低分那個只有 [02:23:40] 只有10分 [02:23:42] 他 [02:23:42] 100分的一堆 [02:23:44] 怎麼辦 [02:23:45] Normalize一下從10開始 [02:23:48] 就是這樣做的 [02:23:49] 最簡單的做法就是這樣做 [02:23:52] 就是把 [02:23:53] 數值的分佈做Compression [02:23:56] 但是 [02:23:57] 他的排序還是一樣的 [02:23:59] 只是數字的大小不一樣 [02:24:03] OK [02:24:04] 但是呢這樣的壞處是什麼 [02:24:07] 本來你的數字的分佈是0到1 [02:24:10] 他的敏感度其實是比較 [02:24:12] 比較大 [02:24:12] 但是你等於是 [02:24:14] 前面都沒有啊0.5前面都沒有都壓到0.5到1 [02:24:18] 所以後面就會比較 [02:24:20] 大家比較擠一點 [02:24:21] 那個鑒比 [02:24:22] 解析就比較差一點 [02:24:24] 但是如果 [02:24:25] 這個是你要的那其實就就沒有關係 [02:24:29] 好 [02:24:31] 那的確這個公式不用去記 [02:24:33] 不太需要去記 [02:24:34] 你大概就是活用 [02:24:37] 不用記怎麼活用 [02:24:41] 我好像不能碎念 [02:24:45] 那我們來看一下 [02:24:46] 搞不好這一頁還比較重要 [02:24:48] 就是BM25 [02:24:50] BM25其實是一個非常 [02:24:53] 強的 [02:24:54] 一個Base Line [02:24:56] 如果你不相信你可以翻到這一份投影片的最後一頁 [02:25:00] 有一個 [02:25:01] 應該是去年前年的一個 [02:25:04] 做向量資料庫的一家公司的老闆講的話BM25 [02:25:08] 還是非常好用的 [02:25:11] 他是一個非常古老的東西啊你看這個年份 [02:25:14] 這個 [02:25:16] 非常古老那BM [02:25:18] 是什麼呢 [02:25:19] Base Matching [02:25:21] 那25呢 [02:25:22] 25就是裡面的參數 [02:25:24] 的東西 [02:25:25] 那我們現在不管 [02:25:28] 他是什麼啦反正 [02:25:29] 你看一下他在算什麼東西 [02:25:32] 他在算我的Document [02:25:35] 跟Query [02:25:36] 的Score [02:25:37] 其實就是 [02:25:39] 兩個句子 [02:25:40] 或是兩篇文章的 [02:25:41] 分數 [02:25:42] 有多像 [02:25:43] 一樣在算相似度 [02:25:46] 那我們剛才前面算的相似度是什麼 [02:25:49] 反正 [02:25:49] Document跟Query都可以把它變成TFIDF的向量 [02:25:54] 那我就可以算TFIDF向量cosine [02:25:57] 那你可以仔細看一下這個公式 [02:25:59] 看起來很複雜很多說但基本上他就是在算兩個TFIDF的 [02:26:06] cosine的東西只是他有些東西 [02:26:09] 把它 [02:26:10] Normalize的 [02:26:10] 不見的有些東西把它化解了或是把它變複雜 [02:26:15] 所以他其實你可以想像BM25就是一個 [02:26:19] 複雜版的 [02:26:20] TFIDF的表示的 [02:26:22] 這種相似度 [02:26:24] 的計算過程 [02:26:25] 那為什麼叫TFIDF呢 [02:26:27] 因為它裡面有一些參數 [02:26:29] K跟B的參數 [02:26:33] 那K跟B的參數呢在以前 [02:26:35] 這些Paper的實驗裡面 [02:26:39] 發現K設2 [02:26:40] B設0.75 [02:26:42] 是最好的這樣子 [02:26:44] 他設一設發現 [02:26:45] 這個在 [02:26:47] 大多數的應用呢 [02:26:49] 用這樣的算法其實效果都不錯 [02:26:52] 所以他就變成 [02:26:53] 這個B [02:26:54] BM系列的老大這樣子 [02:26:56] 所以大家提到 [02:26:57] 就是BM25 [02:26:58] 其實基本上就是 [02:26:59] 就是TFIDF的 [02:27:02] 的進階版 [02:27:05] 我這樣講可能有一點誤導 [02:27:07] 因為TFIDF只是用來描述 [02:27:11] Document Vector的一個權重的描述方式 [02:27:14] 他是描述 [02:27:15] 單一向量的描述方式 [02:27:17] 那BM25是在算相似度的算法 [02:27:21] 所以他是算兩個向量之間的相似度的算法 [02:27:24] 但是他其實是變形的TFIDF [02:27:27] 然後他的內積的公式也不太一樣 [02:27:32] 有興趣你可以回去看一下他們當初怎麼推這些的 [02:27:38] 不過我覺得你可以內化就是覺得他就是一個很 [02:27:43] 複雜版的TFIDF [02:27:44] 然後在向量空間裡面算相似度 [02:27:47] 所以你現在看到RAG裡面的Paper [02:27:50] 可能有提到BM25 [02:27:52] 他其實就是在這個世界上 [02:27:54] 在SPARTSMETRICS裡面 [02:27:55] 去用 [02:27:56] 這樣計算方式得到的相似度的 [02:28:00] 那 [02:28:02] 又回到這個SPARTS VECTOR [02:28:03] 這SPARTS VECTOR其實我們等下之後會講 [02:28:06] 就是 [02:28:07] 為什麼跟現在常提到的所謂Dense Vector [02:28:10] 不一樣 [02:28:11] 因為SPARTS VECTOR就是 [02:28:13] 我有多少字我就有多少個Dimension [02:28:16] 所以 [02:28:17] 三萬個字我就有三萬個Dimension [02:28:19] 這是一個非常大的向量但是現在你 [02:28:22] 你用BERT或用什麼其他 [02:28:24] Embedded Model做出來的向量 [02:28:26] 大概都不會超過1K [02:28:28] 都不會超過1000 [02:28:30] 都不會用這麼大的向量來做這件事情 [02:28:33] 所以這個就是差別 [02:28:34] 但是 [02:28:35] 有好有壞 [02:28:36] 當然 [02:28:37] 這個以後再提到 [02:28:39] 好 [02:28:40] 這是BM25 [02:28:42] 其實你也不用記公式 [02:28:45] 說實在的 [02:28:46] 我也沒有 [02:28:47] 不知道公式會長這麼複雜 [02:28:50] 不是我知道怎麼長這麼複雜但是我寫不出來啦 [02:28:54] 就是你不用去記這些啦 [02:28:56] 基本上 [02:28:58] 你叫LiveCoding幫你 [02:28:59] 算一下就好了這樣子 [02:29:02] BM25他知道怎麼算 [02:29:05] OK [02:29:06] 甚至你還可以叫他做這種11的15的 [02:29:09] 其實就是這個參數不一樣這樣子 [02:29:12] OK [02:29:14] 那 [02:29:15] 基本上這個我都講了非常的 [02:29:17] 大概如果你對這個BM25為什麼這麼簡單就可以搞這麼厲害 [02:29:22] 你有興趣可以再回去看 [02:29:24] 其實有些地方都 [02:29:26] 蠻有趣可以做一點改變的 [02:29:30] 好 [02:29:31] BM25 [02:29:32] 這個就是一路的我們用Vector Space Model [02:29:37] 這種1TB的結構 [02:29:38] 然後在TFIDF出來之後 [02:29:41] 有更 [02:29:42] 不一樣的 [02:29:43] 權重的表示方式跟 [02:29:45] 相似度計算的方式的 [02:29:47] 衍生出來的一個東西 [02:29:50] 好 [02:29:52] 好吧 [02:29:54] 現在為止你可能就可以想像說 [02:29:56] 好吧那我文章 [02:29:58] 我可以算頻率可以算它的鑑別度我就可以 [02:30:01] 用一個向量來表示雖然是一個很Sparse的向量但是 [02:30:05] 好歹也是一個電腦 [02:30:07] 可以處理的向量 [02:30:08] 就3萬維度這樣子 [02:30:10] 但是3萬維度 [02:30:11] 其實它會有一些問題 [02:30:13] 就是第一個 [02:30:15] 那我如果說貓跟狗 [02:30:17] 像不像 [02:30:18] 貓跟卡車像不像基本上都不像 [02:30:20] 因為它是不同維度 [02:30:22] 這個維度有1 [02:30:24] 沒有就是理 [02:30:25] 所以貓跟狗相似度是理 [02:30:27] 貓跟卡車也是理 [02:30:29] 但是你會覺得說 [02:30:31] 貓跟狗應該比較像啊 [02:30:33] 對至少 [02:30:34] 這是活的啊 [02:30:35] 卡車是死的 [02:30:36] 你就覺得應該相似度不要這麼的Discrete [02:30:40] 我希望能夠 [02:30:42] 連續一點 [02:30:43] 所以我們就希望能夠做一個比較聰明的 [02:30:47] 所謂的 [02:30:48] 這種字的表示 [02:30:49] 就是World Reputation的概念 [02:30:52] 然後 [02:30:54] 你要做什麼 [02:30:55] 連續一點嘛 [02:30:56] 你不要這麼 [02:30:57] 像就是1不像就是0 [02:30:59] 能不能 [02:31:00] 告訴我一個0.6的數字 [02:31:03] 然後我至少能夠 [02:31:04] 整個空間中的字所有人類的知識的概念 [02:31:09] 在你這個向量分布裡面 [02:31:11] 不要 [02:31:12] 集中在一起 [02:31:13] 不要說大家都很像 [02:31:17] 希望能夠分布在一起 [02:31:18] 我給你的值就是0到1但是你怎麼算出來每次都是0.6到0.7 [02:31:22] 這對我來講1.1 [02:31:24] 沒有 [02:31:25] 所以我們要讓他Disputed [02:31:27] 就是我希望能夠學到一個表示是 [02:31:30] 把所有人類的字的概念映射在一個空間 [02:31:33] 然後我可以知道概念跟概念之間的連續的相似度 [02:31:38] 然後他是能夠 [02:31:40] 有效的鑑別出來這些概念的差別 [02:31:43] 這就是當時 [02:31:44] 在 [02:31:45] 延伸出來用了 [02:31:49] 其實應該 [02:31:50] 提那個Bangio那邊paper [02:31:52] 不過大家比較 [02:31:54] 覺得一個重點的Milestone就是O2Bect的那個年代 [02:31:58] 之前 [02:31:59] 那個幾年大家希望能夠做出這些東西 [02:32:04] 但是呢我們來想像一下當時的 [02:32:07] 這些 [02:32:08] 這些科學家想法以前就是 [02:32:10] 就是 [02:32:11] 雖然向量歸向量但是有時候做法還是暴力啊 [02:32:15] 就是磁帶Bag of War [02:32:17] 就是一篇文章 [02:32:19] 其實他就是這樣 [02:32:20] 這個出現三次這出現兩次 [02:32:24] 雖然他有向量 [02:32:26] 你雖然用向量但是向量雖然有順序他排在第一維度排在第二維度但是 [02:32:31] 有差嗎 [02:32:32] 反正就是比同個維度有沒有向而已啊 [02:32:35] 所以基本上就是Bag of War的概念 [02:32:38] 我們並沒有去管說這兩個字三個字這樣排列跟 [02:32:42] 換個方向排列意思是不同 [02:32:45] 比如說這句話錢不是問題 [02:32:47] 不錢是問題 [02:32:48] 當你斷完字之後 [02:32:50] 都是這三個Token啊 [02:32:52] 如果把4拿掉啊 [02:32:54] 這三個Token他就出現一次這樣所以相似度是1 [02:32:58] 所以這兩句話一模一樣 [02:33:00] 所以你用剛才Vector Space Model做出來就是那一回事這樣子 [02:33:06] OK [02:33:06] 剛有同學問到Tokenization [02:33:09] 的確以前的 [02:33:11] 你講的問題其實有點複雜這個 [02:33:16] 可能講完會下課 [02:33:18] 以前在做 [02:33:19] 斷字其實第一個要分語言 [02:33:22] 英文語言的跟這種 [02:33:24] 我們這種亞洲語系的居多的語言 [02:33:27] 其實斷字的方式不一樣英文其實相對的容易 [02:33:30] 就是用空白 [02:33:31] 所以以前以前不太做英文的斷字因為空白就可以斷 [02:33:35] 但是現在在有任的時候 [02:33:37] 不太會這樣做因為到時候我們講到BPE就知道說他其實會用 [02:33:42] 字母的方式來做 [02:33:44] 因為如果用空白的斷字其實他 [02:33:47] 有些字詞太特別或是有些字詞 [02:33:51] 新的字他沒辦法 [02:33:52] 認別的出來所以他 [02:33:54] 他們會做所謂的calculable [02:33:56] 的segmentation [02:33:58] 然後再去merge [02:33:59] 根據frequency去merge [02:34:01] 這以後我們會再提 [02:34:03] 但中文 [02:34:04] 更複雜 [02:34:05] 中文有這種 [02:34:06] 一個 [02:34:07] 方塊字方塊字 [02:34:09] 然後 [02:34:09] 你沒辦法斷 [02:34:11] 所以會有所謂的一字詞二字詞三字詞甚至有所謂的 [02:34:16] 長詞優先 [02:34:18] 所謂長詞優先就是 [02:34:19] 他可以組出四個字的就不要去看他兩個字 [02:34:22] 這種Huristic [02:34:24] 這個不見得對但是基本上 [02:34:26] 成功機率非常高的一種斷字方法 [02:34:28] 就是以前在做斷字的時候有很多這樣當然很多都是用機率的model來做 [02:34:34] 所以你剛才提到的在slides上問說有些會斷字沒錯現在有的 [02:34:38] 的確會 [02:34:39] 斷像Strawberry [02:34:41] Strawberry因為 [02:34:42] Berrys也本來是一個字 [02:34:44] 所以他本來也會出現 [02:34:45] 所以他本來 [02:34:46] 在Vocabulary table裡面就會出現 [02:34:49] 後面那個Berry的詞 [02:34:51] 所以Strawberry他可能會有兩個頭字 [02:34:54] 他可能去拼湊出來是有可能的 [02:34:56] 不過這個就看整個 [02:34:58] 分佈當初他Pretrain的時候分佈的狀況 [02:35:02] 好 [02:35:02] 那 [02:35:03] 這個例子大家一看應該就知道說不能用back over [02:35:07] 因為這個 [02:35:08] 但是他其實很好用啊其實基本上 [02:35:11] 不會差那麼多啦 [02:35:12] 如果你用這個概念來做一些以前簡單的應用 [02:35:16] 就是 [02:35:19] 就是這樣就是就把評論做成斷字啊 [02:35:22] 然後把變成 [02:35:23] 這是一個Positive [02:35:25] 這是Negative [02:35:26] 但是我如果一個人說 [02:35:28] 這些字這些字以前沒出現過怎麼辦 [02:35:30] 所以其實你看這例子就知道 [02:35:33] 我其實是想講說 [02:35:34] 這個東西 [02:35:35] 其實怎麼拉近 [02:35:37] 詞跟詞之間的相似度 [02:35:39] 而不是說完全不一樣就是零分 [02:35:42] 要完全一樣才一份這樣子 [02:35:46] 這段影片實在太醜了 [02:35:48] 應該用AI換一下 [02:35:50] 沒關係我們把剛才那個例子呢做成一個叫 [02:35:54] 叫做 [02:35:54] One-Half Factor [02:35:56] 這其實應該前面講但是 [02:35:58] 在這邊講比較有點感覺是說 [02:36:02] 我們比如說好 [02:36:03] 我們現在現在的系統裡面的Vocabular Space [02:36:07] 就是我現在系統只認 [02:36:09] 只認這八個字 [02:36:11] 就是我的電腦只看懂這八個字就是我在八維空間的一個表示 [02:36:15] 然後你所有的字 [02:36:17] 所有的文章進來就是一個 [02:36:19] 長度微八的向量 [02:36:21] 就是Vocabular Space意思就是這樣 [02:36:24] 然後我們這邊的先把 [02:36:26] 所有的字呢用一個這樣的One-Half Factor [02:36:28] 所謂One-Half就是 [02:36:30] Dimension有出現就是1 [02:36:32] 其他都是0 [02:36:33] 這個One-Half Encoding基本上 [02:36:36] 是在 [02:36:37] 通常在做機器學習在做特徵工程的時候會提到的 [02:36:41] 就是 [02:36:42] 就比如說這個班上同學的血型 [02:36:46] 我們會寫A型B型O型 [02:36:49] 但是如果我們會用 [02:36:51] 這樣對模型來講 [02:36:53] 對模型來講 [02:36:54] 其實很麻煩 [02:36:55] 所以我們會把它改成One-Half Encoding [02:36:57] 那我就有一些feature叫做 [02:36:59] A型血型 [02:37:00] B型血型 [02:37:00] O型血型 [02:37:02] 那這個人是A型我就在A型血型是1 [02:37:05] 其他都是0這樣子 [02:37:08] Anyway就是 [02:37:09] 他就是在其中一個欄位會是1 [02:37:12] 其他都是0 [02:37:12] 這個叫One-Half Encoding [02:37:15] 那這個概念其實 [02:37:16] 用在非常多地方啊所以這個 [02:37:18] 這個One-Half Encoding [02:37:19] 其實不只是 [02:37:21] 我們在做 [02:37:22] 機器學習啊 [02:37:23] 還是這邊 [02:37:24] 提到還是什麼 [02:37:24] 其實很多概念只要 [02:37:27] 你可以想像就是 [02:37:29] 反正 [02:37:29] 有個地方1其他都0 [02:37:31] 都會用這個 [02:37:32] 這個詞來解釋這樣子 [02:37:35] 好所以我們這邊呢 [02:37:36] 這個 [02:37:37] 單一的Vector就是長這樣 [02:37:39] 它的Vector就是 [02:37:40] 這樣子便宜啊有名就是這樣子 [02:37:43] 那只是說 [02:37:45] 我們去 [02:37:46] 組出 [02:37:47] 這篇文章他有這四個字的時候我就把這四個的Vector呢 [02:37:51] 這樣把它O起來 [02:37:52] 我就得到這個Document Vector [02:37:54] 這個樣子 [02:37:55] 所以就在我剛才的Vocabulary Space裡面 [02:37:58] 八維的空間裡面有一個 [02:38:00] 有一個點 [02:38:00] 構成這樣一個向量 [02:38:02] 我四個 [02:38:03] 出現四個字 [02:38:04] 是1其他都是0 [02:38:05] 這樣子 [02:38:07] 當然 [02:38:07] 這邊要講一句說 [02:38:09] 其實字沒有出現在這邊了就Hit不到了 [02:38:11] 因為根本 [02:38:12] 不落在我的Vocabulary Space裡面 [02:38:17] 好 [02:38:18] 那我們現在用個想法這想法其實我覺得不是很好因為原來的Vocabulary不是很大 [02:38:25] 我們把它變成一個World Embedded [02:38:28] 這個叫Dense Space [02:38:30] 那這個就是我把它寫成叫Concept Space [02:38:34] 我現在有八個概念這八個概念是 [02:38:37] 不知道 [02:38:39] 也不需要知道 [02:38:40] 就是 [02:38:41] 我用來描述所有形容餐廳好壞的東西我用八個維度來表示就好了 [02:38:47] 這八個維度呢你可以想像可能是一個 [02:38:50] Maybe是跟價格有關的 [02:38:52] 跟食材有關的 [02:38:54] 你可以自己腦補這些東西 [02:38:55] 但是其實不重要 [02:38:57] 就是反正 [02:38:58] 我用這八個Dimension [02:39:00] 就能夠用來區分 [02:39:03] 我的 [02:39:04] 文字 [02:39:05] 所以 [02:39:06] 我的所有的字裡面呢他就在我的Concept Space裡面 [02:39:10] 構成了這樣的一個 [02:39:12] 字出來 [02:39:12] 就不會是只有1號 [02:39:15] 這個便宜也許在價格裡面得到分數比較高在食材那邊可能會變低這樣子 [02:39:20] 類似 [02:39:22] 但是我們就不太需要去管這些 [02:39:24] 的確以前有人做 [02:39:28] 做 [02:39:29] 做出Bird之後在Transformal Label之後就會去算說這個每一個Token [02:39:35] 這個300多維度到底每個維度在幹什麼 [02:39:38] 有人的確有去分析過那個Token [02:39:41] 每一個Token的 [02:39:42] All Embedding [02:39:44] 的分布他把同樣的字的概念的去看看 [02:39:48] 他們的Embedding有沒有一些共同之處 [02:39:50] 不過 [02:39:51] 我覺得這個都比較是一廂情願的說 [02:39:54] 這樣子 [02:39:55] 雖然有資料可以佐證 [02:39:56] 但是 [02:39:57] 的確可以呈現一些分布 [02:39:59] 但是我們其實不太在意說 [02:40:02] 到底我當初給你的Dent Space的大小 [02:40:05] 每一個Dimension到底是什麼概念 [02:40:08] 我只有Budget的概念就是我現在的成本我現在 [02:40:12] 算力夠大的時候我把這個Concept Space [02:40:15] 變大一點 [02:40:16] 從8變到20 [02:40:17] 看會不會能夠更有效的去鑑別我所有的字這樣子 [02:40:23] OK [02:40:24] 所以這個跟剛才的差別 [02:40:26] 雖然都是8 [02:40:27] 這個例子不是很好應該這個應該更長一點 [02:40:30] 因為他是一個1號而且是比較Sparse [02:40:33] 你可以想像到可能到80 800這樣子 [02:40:36] 但是我會用一個很壓縮的方式 [02:40:39] 去把它變成 [02:40:40] 比較小的 [02:40:41] 小的Dimension然後每一個 [02:40:43] 都有用到 [02:40:44] 每一個Dimension [02:40:45] 都要用到 [02:40:47] 你想就是把它壓縮 [02:40:48] 把它壓縮這樣子 [02:40:50] 那 [02:40:52] 大家概念上就覺得 [02:40:54] 你有壓縮應該會變差吧 [02:40:58] 但是其實上是不會而且是能夠更Aggregate [02:41:01] 共通的Concept [02:41:03] 在裡面 [02:41:04] 所以 [02:41:05] 我在算相似度的時候這邊算相似度的時候這8個字完全都不像 [02:41:09] 但是至少便宜跟讚應該有點像 [02:41:13] 所以理論上 [02:41:15] 我這數字也沒有我這數字亂寫的 [02:41:17] 這便宜跟讚理論上在Concept Space裡面算 [02:41:21] 像樣的相似度 [02:41:22] 他應該要比便宜 [02:41:24] 跟差 [02:41:26] 更像 [02:41:28] 所以我就可以在Dense Space裡面把這種距離的概念 [02:41:32] 學起來 [02:41:34] 所以說那我要怎麼學這些香料 [02:41:37] 你就叫人去標嘛 [02:41:38] 就是說 [02:41:39] 這個便宜跟太貴是不像的 [02:41:42] 便宜跟讚是比較像的 [02:41:44] 然後就在一個NN Model裡面的Transform Scratch [02:41:47] 去學 [02:41:48] 這八個數字 [02:41:50] 就學這整個 [02:41:51] 表示這樣子 [02:41:52] 你就可以學會說 [02:41:53] 原來我這個字 [02:41:54] Token應該這樣表示 [02:41:56] 就在你的 [02:41:57] 標註底下 [02:41:59] 他們應該要這幾個Feature [02:42:01] 來形容說 [02:42:03] 他們這些比較Positive的字呢 [02:42:05] 應該是比較接近那一群 [02:42:07] 那Negative的字呢應該是比較 [02:42:09] 自己比較接近但是要跟Positive的字比較disjoint的一群 [02:42:14] 那至於 [02:42:15] 這邊數字的意義 [02:42:17] 或是說 [02:42:19] 能不能去解釋單一的Feature [02:42:21] 我覺得這個 [02:42:23] 就是另外的議題 [02:42:24] 也可能也不是這麼重要的議題這樣子 [02:42:28] OK [02:42:28] 這個就是從 [02:42:30] SPAS的Metrics [02:42:31] 到Wall Embedding用Dense Space的概念 [02:42:35] 這概念其實還蠻重要的因為在現在NLP的處理的概念裡面 [02:42:40] 我們其實基本上都是在 [02:42:42] Embedding的Label [02:42:45] 其實以前在做NLP [02:42:48] 至少是我啦我其實不太知道 [02:42:50] 為什麼 [02:42:51] 用Embedding這個字 [02:42:53] 是因為後來到 [02:42:56] NN Deep Learning這個階段 [02:42:58] 有太多的Paper都用這樣的字詞 [02:43:01] 然後從 [02:43:02] 這個 [02:43:03] 這個Wall Embedding開始 [02:43:05] 那這個詞呢就一路的用到現在的 [02:43:08] 大圓模型 [02:43:10] 中文可以說這個叫詞遷入 [02:43:13] 有點像說我們用一個比較 [02:43:16] 壓縮的東西把它 [02:43:17] 遷在這個字詞的表示上 [02:43:20] 去表示這個字這樣子 [02:43:23] OK [02:43:24] 那重點並不在於它是比較Dense [02:43:27] 而是說 [02:43:28] 重點在於是說它這些字 [02:43:30] 它這些上面的Dimension的數字是 [02:43:33] 學出來的 [02:43:35] 而不是當初根據Vocabulary [02:43:38] 根據這個文章的分布去Count出來 [02:43:41] 而是經過 [02:43:43] 某種Unsupervised或Supervised的方式去Change出來的 [02:43:47] 這樣子 [02:43:49] OK [02:43:52] 好 [02:43:53] 我比這個例子是說 [02:43:54] 大家如果都玩過三國字就知道了 [02:43:57] 就是我們如果要區分這幾個五項呢 [02:44:02] 這樣會不會有些人不知道我在講什麼 [02:44:03] 應該不會吧 [02:44:04] 這應該 [02:44:07] 大家都會玩 [02:44:09] 就是一般你在玩這個遊戲的時候我們去描述一個人 [02:44:12] 比如說宇步跟張飛跟關羽基本上我這邊用V排序 [02:44:17] 所以你會發現這幾個 [02:44:20] 這不知道哪一代的出現象棋 [02:44:23] Anyway不要管他 [02:44:24] 反正 [02:44:25] 就是 [02:44:26] 這幾個人的武力都很接近沒錯但是我們希望能夠看到 [02:44:30] 至少 [02:44:31] 這個武將能夠多帶一點兵這樣子 [02:44:33] 有些太笨的可能 [02:44:35] 很容易中計這樣子 [02:44:37] 像張飛跟呂布 [02:44:38] 就很容易中計這樣子 [02:44:41] 對所以 [02:44:43] 我就可以用統帥武力自立政治 [02:44:46] 來區分這幾個 [02:44:48] Instance [02:44:49] 所以這幾個 [02:44:51] 你可以想像就是Facial Splash [02:44:53] 只是說 [02:44:54] 我們現在不太管這八個Dimension是什麼 [02:44:58] 但是實際上比較更 [02:45:00] 更可解釋的就是想像我就是用這幾個來描述 [02:45:04] 這幾個人 [02:45:05] 只要 [02:45:07] 只要這幾個 [02:45:08] 屬性都能夠區分 [02:45:10] 我這幾個角色的描述的時候 [02:45:13] 那他會比One Heart好很多啊 [02:45:16] 我這One Heart可能就是變成是 [02:45:18] 有出現呂布就是0其他都是0 [02:45:20] 我沒辦法去比對 [02:45:22] 到底呂布跟張飛比較像還是呂布 [02:45:24] 跟趙宇比較像 [02:45:27] 所以這個概念是這樣 [02:45:28] 我不知道舉這個例子會不會 [02:45:30] 更好還是大家更看不懂我在講什麼 [02:45:33] Anyway就是Facial Splash的精神 [02:45:36] 就是希望我能夠透過 [02:45:39] 固定 [02:45:41] 長度空間的 [02:45:43] 這比較是Uniform的描述呢然後對於我整個 [02:45:48] Space的Instance [02:45:49] 做一個 [02:45:50] 統一的描述 [02:45:52] 那如果這些描述是我滿足我剛才 [02:45:54] 前面講的 [02:45:56] 可以連續 [02:45:57] 可以分散式的去敘述這些事情的時候 [02:46:00] 他就是一個很好的Representation [02:46:03] 所以當初定義的這樣的Space [02:46:05] 就對我來講就是一個很有用的東西這樣子 [02:46:10] 好 [02:46:12] 那我們這一 [02:46:15] 這一個部分的投影片最後會講到 [02:46:18] 這個 [02:46:19] Wall Embedding [02:46:20] 那也會帶出我們第一個作業所以剛有同學問 [02:46:23] 我們第一個作業什麼時候出 [02:46:25] 應該下禮拜就出了 [02:46:26] 這樣子 [02:46:27] 其實今天晚你應該就可以回去看 [02:46:29] 其實我在Github我們那個課程的Github的網站 [02:46:33] 其實你可以點回2025年或2024年 [02:46:36] 其實作業 [02:46:37] 不太改變 [02:46:38] 但是 [02:46:39] 基於有同學要求難度我們應該會稍微 [02:46:43] 調高一點難度了 [02:46:45] 對 [02:46:46] 不然現在Bibcoding這麼容易其實你把作業餵進去 [02:46:50] 真的就出來了 [02:46:52] 對 [02:46:53] 對 [02:46:54] 我一直有在挑戰 [02:46:56] 當然AI說到底他能夠 [02:46:57] 什麼東西是他不會做的 [02:47:00] 但是我失敗這樣子 [02:47:03] 不管我怎麼問他都有辦法做得出來這樣子 [02:47:06] 所以 [02:47:08] Anyway就是 [02:47:09] 重點還是在於你能夠吸收AI給你的做法 [02:47:14] 因為基本上我們不太可能會叫你做一個Open的Problem [02:47:17] 不太做一個很難的東西 [02:47:19] 那以作業Label來講 [02:47:21] 以現在AI要做都不難 [02:47:24] 不難但是 [02:47:26] 你們務必要自己 [02:47:28] 自己 [02:47:29] 搞懂他在幹什麼 [02:47:31] 好 [02:47:32] 那再講這個World Embedding我們來看一下這個 [02:47:34] 其實 [02:47:35] 為什麼要帶1HR跟Dense Factor [02:47:38] 其實因為就是說 [02:47:39] 以前有太多這種 [02:47:41] 這種所謂的 [02:47:43] Synonymy跟Palsymy的問題 [02:47:45] 同義詞跟一詞多義的問題 [02:47:48] 就是 [02:47:49] 就是 [02:47:52] 不同的字 [02:47:53] 但是他有同樣的意思 [02:47:55] 像這三個字 [02:47:56] 都是盜賊的意思 [02:47:59] 所以我當我在query這個時候你沒有辦法給我這兩個字的時候 [02:48:03] 你的RuCode就會降低 [02:48:05] 所以RuCode就是說有些該找的找不到啊 [02:48:08] 所以你的RuCode會降低 [02:48:09] 那 [02:48:10] 一詞多義呢一詞多義是什麼 [02:48:13] 我這個字在不同的地方的描述 [02:48:15] 意思是不一樣的 [02:48:17] 比如說像蘋果 [02:48:19] 這最常拿來舉一詞多義的就是蘋果在講 [02:48:22] 公司跟講水果的時候意思是不同的 [02:48:26] 就是一詞多義 [02:48:27] 那教科書都會用Bank [02:48:30] 就是他講銀行跟河岸 [02:48:32] 這兩件事 [02:48:33] 就是越common的字 [02:48:35] 他其實又有越 [02:48:37] 地方組起來的意思越不同 [02:48:39] 那這東西你的準確率就會下降 [02:48:41] 你可能我要找 [02:48:43] 我現在要去買蘋果哪裡 [02:48:44] 新竹買 [02:48:45] 賣蘋果最好吃 [02:48:46] 他告訴我那個 [02:48:48] 小吃部那個賣蘋果店 [02:48:51] 雖然隔壁有賣蘋果這樣子 [02:48:52] Anyway [02:48:53] 所以 [02:48:54] 這樣你的準確度就下降 [02:48:56] 告訴他不同意思的文章 [02:48:58] 所以 [02:48:59] 這就是以前一直 [02:49:00] 一直困擾NLP的問題 [02:49:03] 因為你沒辦法去 [02:49:05] 只能靠人工去界定 [02:49:07] 所以當如果我們可以做出一個比較 [02:49:10] Continuous [02:49:11] 然後又能夠算出 [02:49:13] 算出兩兩之間相似度的 [02:49:17] 我其實可以發現這兩個向量也許比較接近 [02:49:20] 雖然不完全一樣 [02:49:21] 但比較接近 [02:49:23] 然後同樣的字 [02:49:26] 他在不同的句子 [02:49:27] 能夠 [02:49:28] 得到不同的embedding這件事情 [02:49:31] 我就可以得到一詞多義這件事情 [02:49:34] 所以 [02:49:35] 這不是兩個 [02:49:37] 雖然很難但是你會覺得好像很簡單的問題但是你可以想像如果你現在用LM的角色來看 [02:49:43] 這件事情 [02:49:44] 他要怎麼做 [02:49:45] 他要怎麼知道Apple在這句話的表示是不一樣 [02:49:49] 雖然以後我們會講他在算attention的時候 [02:49:52] 他會看到說你其實是買一台Mac [02:49:55] 那這個 [02:49:56] Apple在算attention的時候的Apple [02:49:58] 的概念就會不太一樣 [02:50:01] 那如果你 [02:50:02] 你前面有所謂的 [02:50:03] 這個 [02:50:04] 什麼營養成分 [02:50:06] 那這個Apple他在算attention的時候又得到不一樣的 [02:50:09] 的比重 [02:50:10] 所以他的字詞的表示會隨著不同的 [02:50:15] 不同的Layer [02:50:16] 慢慢的Propagate [02:50:18] 算attention的過程中慢慢的改變 [02:50:21] 他就利用這種方式 [02:50:23] 那同一詞的方式他其實可能本身 [02:50:26] 在做 [02:50:27] All Embedding的時候 [02:50:29] 他在Change出來的Embedding就可以拉出他的相似度跟差距 [02:50:33] 所以就靠著這些東西的現在的模型可以做的比以前好 [02:50:38] 就是這些道理 [02:50:40] 只是說這些問題呢現在都是Ivory [02:50:43] 你可能一個句子裡面有同一詞也有一詞多義的問題 [02:50:47] 那只要是混在一起的時候你的 [02:50:49] 你的東西就不是 [02:50:51] 很好 [02:50:52] 這也是為什麼我常會說 [02:50:54] 你們直接轉那個向量杯 [02:50:56] 一句話轉 [02:50:58] 轉成一個向量 [02:51:00] 大家都會接近 [02:51:01] 你會發現那個向量都會接近 [02:51:02] 尤其是越長的句子 [02:51:04] 向量都會越接近 [02:51:06] 這是本身大圓模型的一個BIOS [02:51:09] 也是他的一個 [02:51:11] 也不算缺陷啦應該是他的特性 [02:51:14] 這個以後我們有機會再談 [02:51:18] 那以前呢 [02:51:19] 轉換成One Heart跟轉換成Thanks [02:51:22] 其實差別就比較像是Concept Matching跟Term Matching [02:51:26] 因為 [02:51:27] 因為 [02:51:28] 不太容易比因為query的話很短 [02:51:31] 那如果我要做Term Matching沒有比對到就沒有中了 [02:51:35] 因為有時候我會在不同 [02:51:38] 用的詞不同比如說 [02:51:40] 繁簡體的比對就是一個很大的問題 [02:51:42] 就是 [02:51:43] 這是 [02:51:44] 計程車啊 [02:51:45] 出租車啊這些不要說寫的不一樣你單單你把出租車寫成 [02:51:50] 寫成繁體 [02:51:51] 他的概念也是不同的 [02:51:53] 當然你可以試著把他轉成OriBetting [02:51:55] 算算他們的 [02:51:56] 像不像 [02:51:58] 所以不同語言在同樣的概念的時候 [02:52:02] 我如果只是Concept Matching的時候他其實 [02:52:05] 也是比對不到的 [02:52:07] 那或者是說有不同Domain的Let's Con [02:52:09] 我 [02:52:10] 學電腦的跟學電機的跟學物理的模樣出一件事情都不太一樣 [02:52:16] 比如說一般人講手機我們會說智慧行動運算裝置 [02:52:20] 這其實要講什麼 [02:52:22] 就是 [02:52:23] 我們如果各位計劃說我要 [02:52:25] 買設備 [02:52:27] 手機 [02:52:28] 不行 [02:52:28] 這個是一般民生用途不是做研究 [02:52:31] 但是我寫智慧行動運算裝置就過了 [02:52:35] 我也不知道為什麼 [02:52:38] 然後更扯的是我們計劃書寫 [02:52:40] 運算伺服器 [02:52:42] 然後後來廠商給我們的發票是AI伺服器 [02:52:45] 學校說不行這跟 [02:52:47] 這跟你當初計劃寫的不一樣 [02:52:50] 這個就是拿來運算的不然還拿來幹什麼 [02:52:53] 所以 [02:52:54] 品名不叫運算伺服器學校就不准這樣子 [02:53:00] 這個 [02:53:01] 有錄影 [02:53:04] 好啦不要去查我的帳我覺得這個都OK啊 [02:53:07] 只是舉這個例子 [02:53:08] 不能買冰箱沒關係我寫高效能溫度調節器 [02:53:12] 好像蠻科學就過這樣子 [02:53:16] 那這個 [02:53:18] 現在電視其實都 [02:53:19] 都很便宜啊 [02:53:20] 那有時候你覺得你去買一個投影機 [02:53:23] 又礙於空間你不如買個電視然後就可以討論 [02:53:28] 我們就寫互動多媒體視訊 [02:53:30] 就過了這樣子 [02:53:33] 好我只是舉例啦 [02:53:34] 並不是發生在我身上的例子 [02:53:37] 反正呢我覺得這是不同Domain的Let's continue [02:53:40] 你用的詞彙描述一個概念 [02:53:43] 那其實 [02:53:44] 你用單字去比對就不太一樣 [02:53:47] 但是你可以回去試試你用embedding的角度 [02:53:49] 他其實也不見得OK這樣子 [02:53:53] 那當然有一些是最 [02:53:55] 蠻常發現的問題就是 [02:53:57] 因為這種這個 [02:53:58] 字詞啊 [02:53:59] 新詞啊 [02:53:59] 或是概念變化的 [02:54:01] 快 [02:54:03] 就是一個詞的概念會隨著時間 [02:54:06] 有改變 [02:54:07] 像 [02:54:08] COVID-19新冠 [02:54:09] 或是這些 [02:54:10] 這些重要名詞 [02:54:11] 都會一直改變 [02:54:12] 他本來應該跟誰很像現在可能 [02:54:15] 變得不像 [02:54:17] 就像現在 [02:54:19] 保麗達BU也不知道為什麼會跟那個那麼像這樣子 [02:54:23] 就是一個東西的turn [02:54:25] 他會隨著時間而改變 [02:54:28] 那 [02:54:29] 這就是concept [02:54:30] 這個東西其實為什麼 [02:54:33] 有時候你拿一個很早以前勸好的embedding model [02:54:36] 其實不見得 [02:54:38] 符合現在時是所要用到的embedding [02:54:41] 有時候你可能要拿新一點的 [02:54:43] 概念是這樣 [02:54:44] 或是說 [02:54:45] 重新再用你自己的語調再重新tune一下這樣子 [02:54:52] OK [02:54:53] 好 [02:54:54] 那以前的做法就是以前做法比較 [02:54:58] 比較人工一點的 [02:54:59] 去建立所謂的 [02:55:01] 這樣的觀點 [02:55:02] 那 [02:55:03] 這個 [02:55:04] 這個其實是Python的code你可以直接從 [02:55:07] WordNet [02:55:08] 這個以前做NLP的人大概都會用到 [02:55:11] 他其實是人工建的 [02:55:13] 非常 [02:55:14] 精準非常乾淨的一個所謂的字詞關係的一個對照表 [02:55:20] 那這個當然也有中文版的 [02:55:22] 不過你可以再去 [02:55:24] 找一下這樣子 [02:55:25] 那WordNet他就會建一個 [02:55:28] 像這樣的關係 [02:55:29] 同義詞的關係 [02:55:31] 然後也有所謂的 [02:55:32] 反義詞 [02:55:33] 像這個SIMSET [02:55:35] 一個SIMSET是 [02:55:36] 同義的 [02:55:37] 那也有反義之類的 [02:55:38] 你可以透過一個字的反義之間 [02:55:40] 推出 [02:55:41] 別的字詞之間的反義的關係 [02:55:43] 這樣子 [02:55:44] 所以透過這樣的一個WordNet你可以去query [02:55:52] 你可以用這個WordNet的 [02:55:54] package然後去導出這些字的關係 [02:55:58] 這是以前會這樣用的 [02:55:59] 但是說實在現在 [02:56:01] 教育人們來判斷就好 [02:56:03] 因為 [02:56:04] 這個 [02:56:04] 這個都在他的Training Data裡面這樣子 [02:56:07] 他都有看過這些東西 [02:56:09] 但是他的確用這個WordNet其實他可以告訴你 [02:56:12] 字詞之間的 [02:56:14] Relation這樣子 [02:56:16] OK [02:56:17] 不過因為基本上 [02:56:20] 他是人工建的 [02:56:21] 有關係就有關係 [02:56:23] 反義就是反義 [02:56:24] 所以是一個非常 [02:56:26] 非常這個 [02:56:27] Discrete的一個Relation [02:56:29] 然後也是一個One Heart的關係這樣子 [02:56:32] OK [02:56:34] 那我們希望是做成這樣子 [02:56:36] 比如說就算只有兩個空間我也希望能夠表述 [02:56:40] 貓跟狗的向量是近一點貓跟卡車是比較 [02:56:44] 分開一點這樣子 [02:56:46] 這例子其實是之前 [02:56:48] 我在 [02:56:49] 騰空智慧學校舉的例子 [02:56:50] 不過我現在都用這樣的例子來舉 [02:56:53] 我們希望不要 [02:56:54] 第一個不要是One Heart [02:56:55] 不要是狗一個向量貓一個向量卡車一個向量 [02:56:59] 比如說我們這樣 [02:57:00] 兩個維度就好了 [02:57:02] 然後呢又希望說 [02:57:04] 在我 [02:57:04] 這裡面的Instance [02:57:06] 能夠的Relation [02:57:07] 他們的接近度 [02:57:09] 能夠符合我的概念 [02:57:11] 至少在這個例子裡面貓跟狗比較接近 [02:57:13] 卡車要比較遠一點 [02:57:16] 你自己就可以寫 [02:57:17] 你自己就可以寫這個數字 [02:57:18] 但是如果現在有100個Instance [02:57:23] 那你就要怎麼Change [02:57:24] 你要怎麼寫出這兩個數字 [02:57:26] 老師我就可以 [02:57:27] 訓練一下用Constructive Learning來幹什麼 [02:57:31] 所以 [02:57:32] 接下來就會是一種 [02:57:34] 當你 [02:57:34] 定義好這樣的空間之後 [02:57:37] 接下來你會有所謂的 [02:57:39] 對比資料訓練資料 [02:57:41] 然後呢 [02:57:42] 訓練出 [02:57:43] 每一個字詞 [02:57:45] 該用什麼樣的數字來表示 [02:57:47] 使得 [02:57:48] 這些表示在你的映射的空間裡面 [02:57:52] 能夠滿足你當初定義好的 [02:57:55] 關聯 [02:57:56] 所以接下來在做 [02:57:59] Representation [02:58:00] World Representation [02:58:01] 就是在做這些事情 [02:58:03] 包含我們要提到的 [02:58:04] Water Vector [02:58:05] 或是Growth Vector [02:58:06] 不過我們不會提到Growth Vector [02:58:08] 大概是講Water Vector而已 [02:58:11] 那就來算這些事情 [02:58:13] 那怎麼Change [02:58:15] Model長什麼樣子 [02:58:17] 然後怎麼去Define這個Dimension [02:58:19] 就是在做World Representation的 [02:58:21] 會去 [02:58:22] 會去細分的東西 [02:58:24] 所以我們 [02:58:26] 今天呢就到這邊 [02:58:28] 我們下禮拜就會從這邊 [02:58:30] 開始帶 [02:58:30] 然後就會告訴你說當年這個年代 [02:58:34] 為什麼 [02:58:34] 可以用NN [02:58:35] 找出 [02:58:36] 貓跟狗比較接近 [02:58:38] 跟卡車比較厲害 [02:58:41] OK [02:58:45] 好 [02:58:46] 有問題就在 [02:58:49] Recall是什麼 [02:58:51] 這個要講又是 [02:58:53] 好啦下次再補充 [02:58:55] 就一般基本上在算所謂的 [02:58:58] Precision Recall [02:58:59] 尤其是在做資訊檢索的時候通常Recall非常重要 [02:59:02] 那一般進行學習會 [02:59:03] 講所謂的Accuracy [02:59:05] 但是基本上 [02:59:07] 基本上是 [02:59:08] 接近的東西 [02:59:09] 也許我下次再補充一點東西這樣子 [02:59:12] Github的連結在 [02:59:14] NTU庫上找不到 [02:59:18] 好不過好像在slide上有啊這個 [02:59:21] 這個上面這個Live Announcement [02:59:24] 有Github連結這樣子 [02:59:26] 好啦剩下的我就在offline回應的 [02:59:31] 我就在offline回應 [02:59:32] 好我們今天就上到這 [02:59:35] OK [02:59:35] 好謝謝 [02:59:43] 謝謝