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