[0:00:27] 有些網路的問題,不過我們就開始上課,這個echo很大,不是有電,但是echo很大。今天我們會把W2的頭影片講完。 [0:02:24] 我們今天的下半場會是TA Lab課,但是因為TA Lab課的教材是比較技術性的,而且大概沒什麼改變。所以我們之前就是用預錄的方式。所以我們今天大概會上一半的時間。然後剩下一半的時間就是讓大家回去看TA Lab課的第一段。其實是介紹這些從前面PyTorch到整個,有點像帶領一下、勸一下NN的過程。這個當然對如果有一些人已經有機器學習的經驗,或是已經都在玩這些東西的,他可能會覺得很簡單。不過anyway,你就是看一下。這是我們自己需要的部分。那第一段的那個PyTorch的Tutorial大概是一個半小時。這個影片已經放上去了。那我們今天大概就是會接著把W2的頭影片講完,這樣子。好,我先在這一張頭影片。這一張之前有同學問BM25了。雖然這個東西是蠻舊的東西。不過因為其實還蠻長的。這個其實還蠻重要的。而且現在還是一直有在用。 [0:03:55] 什麼問題?直播。對,為什麼這個?應該是畫面機器。這個嗎?OK,好。好,那我就繼續了。這個公式其實當初我並沒有細講。但是這一個精神就是說。因為我們知道這個Sparse Matrix。然後用IDF來表示一個Document。然後我們把Query跟Document都用這種方式來描述。然後算向量的相似度這樣子。所以當初我們一個重點就是說BM25其實它就是在這樣的一個Space Model裡面去算Query跟Document的相似度。這個公式其實也是TFIDF之間的關係。那我並沒有細講。不過可能有一個概念可以再提一下。大家其實再細看這個公式。就可以發現前面是這個IDF的式子。 [0:05:29] 這個Q其實基本上是跟Query有關的term。因為它其實算內積的時候。它其實只算跟Query有出現。所以基本上它其實就算在這個Document有出現這個Query這個term的frequency。所以這個F function其實是frequency的一個概念而已。所以你先不要看後面這些。其實你看了這個F你就大概知道說它其實就是在算Query有出現的term的這個TFIDF的這樣的一個成績。就是內積的這樣子。OK。那BM25之所以它會有一些參數可以調整。重點就是在於是說。因為你們知道TFIDF它其實TF就算次數。那算次數這種東西其實對於大的文章小的文章是非常的權重是非常不一的。比如說一篇文章只有寫五個字。然後另外一篇文章寫五萬個字。那五萬個字出現的frequency一定就相當的高。所以我們之前也有提到一些。正規化的機制。那在BM25裡面它這樣的一個公式它其實是想要去。利用一些參數來控制說它對於frequency的增加的敏感度。所以其實這個這個AVGDL其實是所有document的平均的size。 [0:07:02] 所以這個只是一個constants。就是有點像是比重說你現在這篇文章跟整個document size的大小的一個ratio。那這個也是一個調整的。不過它基本的量你大概可以用這個公式來看。它其實它的TF就是靠這個K的這個值去做一點調整。這K的值的調整你會發現說。我這個turn frequency其實會對於比如說我是一個短文章。我這個頻率從一次到兩次。或者是從100次到101次。因為都是多一次。但是多一次在這個公式裡面呢。它其實它成長的幅度是不一樣的。成長幅度是不一樣的。所以它可以用這個K呢。其實是K1標準上是K1。但是我當初頭裡面寫K啦。不過就把它補上K1。不過它這只是一個index。那。那它就用這個K來調整說。好吧。那我現在要讓這個turn frequency的成長的敏感度到什麼地步。所以你自己可以畫這個曲線。就是說如果我K1帶2。或是帶20。它這個turn frequency。就是你本來的這個low frequency呢。會轉換到真正的BM25 turn frequency的一個ratio是什麼這樣子。所以之所以可以。它會比一般的TFIDF好。 [0:08:32] 就是說它有對一個這樣的東西做Normalization。當然另外一個參數是B啦。那這個就是另外一個調整的機制這樣子。那另外當然IDF它也有。它也不是一個正規的IDF。它其實也有做一些。其實跟我們前面講的那個一樣。就是它有一個Normalization的機制這樣子。所以我才會摘要是說OK好。它就是一個改良版的TFIDF。所以其實你大概就有這種精神。那。如果你在用BM25的時候。基本上你也不會設這些參數。就是D4就是這樣。當然你覺得。我的BM25好像跑的不是很好。那也許你可以試著改這個東西。不過通常現在也不太會去改。因為它有點像是一個Base Line。或者是說。你居然你講的BM25。那它就大家都知道它的行為跟參數的設定就是這樣子。所以這大概是BM25的一個衝了。OK。好。那我們就跳回。其實我們的W2的投影片跟W1其實。其實本來是接在一起的。它只是說。這投影片實在太長。就把它切掉這樣子。 [0:10:03] 這個OK嗎?感覺我們這系統Temperature蠻高的這樣。每次都不太一樣。上次。我們有提到這個Facility的。的問題。就是在計算這個東西。是用來。度量一個Language Model的。對於你的Data Set Alignment的過程。的一個標準。那當然這個東西其實它可以用來度量很多東西。這其實是。我們上次有提到的部分。那。那以前在做Language Model這件事情。因為基本上不是用模型去Change的。所以基本上我們會說。我們就用機率的概念。把這樣的東西切成N-Grant的。假設去做。那。之前我們列一個公式。那發現說。這個Grant太長的時候。我算這個Probability其實有點困難。所以一開始呢。我們可能會先採用所謂的Bigrant Model。就是。下一個字。這個字。它只會跟前一個字出現機率有關。就是一個Bigrant Model。就是兩兩之間的關係。OK。所以基本上用Bigrant Model。我們就不用去計算說。哇。這個T-H-E在這一串字的後面。 [0:11:33] 出現了Probability。這樣子。OK。那。這樣的東西其實。是一個很簡單的概念。但是它。呃。表現就會。就會。呃。不太一樣啦。就是跟我們之前在用簡單的方式。在計算的時候就不太一樣。但是當然你會覺得是說。誒。我當然是Grant越長越好。記憶力越高。這樣。越能夠Catch。這樣的東西。但是它的計算複雜度就。就很高。這樣子。OK。那。這樣的東西。其實也跟我們之前有提到。那個Mockup的。的。它做的東西。其實。也是Based on這樣的精神。其實它就雖然是看前一個字。但是。它會在那個前一個字的。的。Accumulate的東西。會進入一個。一個Hidden State。所以從Mockup Assumption演變出來的。比如說。這個Hidden Markov Model。它其實有一些這樣的概念的延伸。這樣。好。那當然。我們如果切N-Grant來做。比如說我給你一個。一個Deja-Vue。然後你誒。好吧。那我們就自己切N-Grant。自己做一個Language Model。我們不要自己Change這個。大語言模型。我們從語料庫裡面。自己去做這個N-Grant Model。其實它會有很多的問題。當然。我們現在還沒有用Change的方式。我們就是算Premobility的方式。它其實。問題就在於說。誒。那我要。我要更精確的時候。 [0:13:03] 我會。我會去。拉長我的Context。我的。我的N就會拉大。但N拉大的時候。其實。這個。計算複雜度很高。然後呢。最大問題通常是來自於這個Data Sparsity。就是說。你要所有的字。之間的。共同出現的機率。或是說。你要能夠知道說。我講了這句話。後面會跟著所有種的可能。這件事情。你要收集非常多的語料。所以依照你的。語料的大小。通常你沒辦法。Catch到所有的。所有的Concept。所以你的Data的。吸收度是很高的。那吸收度很高。會有一個問題。就是我們在算。條件機率的時候。它搞不好就發生一次。誒。就是你語料庫中。就出現一次這樣子。那出現一次。你在算這個機率。其實這個。那個。BIOS會相當的高。那另外一個就是說。我如果不要拉長。我的片段變短的時候。片段變短比較好做。但是。短的時候。我的。這個。字的順序的這種。這種特性就不見了。這樣子。那當然。用這種硬算的方式。不是硬算。就是這種。直接。直接。字跟字之間的關聯。它其實就少了一些。比如說。像。像同一字啊。這種。這種概念的東西的延伸。它其實彈性度就很低。這樣子。那所以上。如果你用這種。 [0:14:33] 統計的方式。去切圓。在算的時候。其實你會遇到一些。比如說。你沒看過的字。或是很少出現的字。其實就剛才提到。這些Spacity的問題。其實你都很難去計算。那或者說。換一個Domain。就是。完全不懂的。詞彙。或者是。看得懂的詞彙。但是。它的解釋。是不太一樣的時候。這個其實都會有。很大的問題。所以。以前的做法。當然就是。好。那我們就是。描述完。這樣的一個。向量之後。其實。我們能不能去學。更。更。複雜一點。更具有。Semantic。含義的東西。而不是。直接來。算。這樣的。語言的模式。那我這邊呢。再。再把。前面講。TFIDF。SPARTS FACTOR。放在這裡。其實主要是。為了要代出。後面的這種。Dense Factor的概念。那在這邊。當然SPARTS FACTOR。我們其實會。前面就提到。TFIDF。那其實以。以。字的。之間的。貢獻性來講。其實以前有算。所謂的。PMI的。這樣的概念。就算一個。條件機率。共同。出現的。機率的。很常拿來做的。我們其實等一下。可以用一個小例子。來看一下。用。這個PPMI。怎麼做一個。Vector。一個Turn的。Vector的表示。OK。那。顧名思義。這個SPARTS FACTOR。 [0:16:03] 就是它一個稀疏。啊。稀疏其實它是一個。在高維空間。然後。大多數都是0。因為你可以想像。我們當初的。Vector Space Model。如果是一個。三萬個字的。字典的時候。一篇文章。三百個字。其實它大概只有。1%的。1%的。這個。數值是有1的。所以它。我們會叫它。SPARTS FACTOR的。概念是這樣。那這邊。在RECAP下。這個TFITF的。的。那。這其實也是我們。前面有提到。的部分。那。也有秀說。這些東西。其實是有。很多的。變形。有很多。根據你的。你的。假設的。一些變形。好。所以你。你算完這個之後呢。你的。這是你原來那一句話。這是你得到的。這個SPARTS FACTOR。你會發現。有出現這個字呢。它有一個FREQUENCY。但是沒有出現這個字呢。它就是。就是0。這樣子。這個當然是為了簡化。不然。這不見得會是這個順序。你的VACTOR.VACTOR SPACE MODEL。不見得這個字的順序。是這樣。只是用來。HIGHLIGHT說。有。有這個字的。FREQUENCY會是。出現。其他這些。都是0。這樣子。這個大概就是用TFIDF來描述一個文章。的一個VACTOR的。這樣的一個想法。好。那當然這件事情我們前面有提到說。那你需不需要斷詞。需不需要取這個關鍵字。 [0:17:34] 我需要做STEMMING。或是做FITUAL SELECTION。其實這邊取的FITUAL SELECTION這件事情。就跟前面我講。要不要取關鍵字。要不要去兜出更長的詞。或是有意義的TOKEN。其實是一樣的。那。這個。這個動作其實在以前。在以前。就是在DANCE FACTOR。其實也是。需要。只是DANCE FACTOR的時候。我們不見得會去人工去。做這件事情。而是讓模型去學會。我們該取。什麼樣的FITUAL。這樣子。好。但是其實這個。問題以前就提過了。它其實是一個稀疏。然後。第一個。它要完全一樣的東西才會。才會能夠HIT的到。那個概念。而且。它其實是非常不。不均勻分佈的一個東西。因為你可以想像。這麼稀疏的東西。那很多的概念。它其實是散落在。空間。而且是可能很聚集的點。這樣子。那這邊舉的例子是說。這兩個字其實是。一樣的意思。但是。以BACTER來表示的時候。它就是完全不同的。那這邊我秀一下這個。PPMI。它其實。以前在統計。在。進入NLP的這個。時間點。它其實就。在大量的資料的。一個Background下。它。大家覺得它還蠻有用的。我們來看它怎麼做。我們先來看。這個公式。Mutual Information。 [0:19:04] 這其實還蠻常在。這個做。尤其是。做。資料分析。或是。機器學習的一些。評估上。也常用這種Mutual Information的。角度去算。它其實在算。兩個EVENT XY。就是共同發生的。一個。一個。一個度量值。就是。呃。Mine。就是它們之間有。多有關係。所以你看這個公式。大家就知道是說。個別發生的。機率當分母。然後。它們一起發生的。當分子。所以如果。X跟Y。其實是完全沒有相關的。沒有相關的東西。那。我這個。分子。跟分母是。完全一樣的。因為它是獨立世界。我就把它相稱。所以。所以它是得到。這個。完全一樣的。就是它們之間的。機率是。不會互相影響的。那。為什麼這個以前。在做基因學習。會常用的。以前這個。我們拿到TRAINING DATA的時候。常常會去分析說。哪一個Future。跟哪一個Future。是。有直接相關。就是它們之間。也許是。有。有一個因果關係。或是。有一個共同影響什麼的關係。所以比如說。你把身高跟體重。放進來的時候。你會發現。身高跟體重。會呈現一個比較正比的關係。所以它們的。這個共同出現的PROPRIETY。就是那個高的值的分佈。就會不太一樣。所以。就用這種方式。 [0:20:34] 去度量。兩個EVENT。或是兩個FUTURE。之間的DISPUTION的相關性。當然度量相關性。這件事情有太多的。INDEX可以做了。那。可以算什麼。相關係數。或是什麼。什麼這種。CORRELATION COEFFICIENT。不過。各式各樣。那我們把這個MI呢。用所謂的。把。一個字。跟CONTEXT WORLD的。角色。把它放進這個公式。它其實就是我們這邊。所謂的POINT WISE。的MUTUAL INFORMATION。就是我現在。我的TARGET WORLD。跟我的周邊的字。到底有沒有存在一個關係。就是。這個字寫在這裡。到底是獨立的呢。還是因為旁邊的字影響。我才會必須寫這個字。我們會去算這個PMI。那PMI因為它這個是取LOG。取LOG。所以其實它有時候會是負的。但是我們不希望有負的。所以我們就定義這個叫PPMI。它其實就是POSITIVE PMI。其實就是把剛才那個。那個MI的公式。換上W跟。那個TARGET WORLD跟CONTEXT。把它全部的取正的字。這樣子。就是不會有負的字。好。所以一個很簡單的公式。那我們來看一下。我們現在如果這個。這個例子。我應該把原來的CONTEXT放進來。不過。這個是。從某個教材。 [0:22:05] 延伸出來的。它是一個DATASET。小的DATASET。然後我們去看它這邊有。四個字。跟這。五個字。那。我這邊的。這個情境是這樣。我把這五個字呢。當成所謂的CONTEXT。你不要把它當成另外一個字。就是有點想想像說。我現在就是。要對這樣的一個問題。做這個。五個。維度的。分類。或是這五個維度的特徵。所以我現在指呢。這些字。我要算它在這五個情境下的一個分數。其實也是另外一個字。沒錯。這個當然是。那我也可以自己定義一個別的字。只是說你可以從語料庫裡面。去算出這些東西。譬如說我們一開始已經定義好這五個CONTEXT。然後我現在要算這四個字。在這邊的。用這五個CONTEXT來描述的。一種表示方式。那。我會先算。會先算說。譬如說。這個CHERRY跟COMPUTER。這個。在這個CONTEXT WINDOW底下共同出現的次數是兩次。那CHERRY跟DATA是八次。那在整個DATASET裡面呢。CHERRY總共出現四百八十六次。這樣子。OK。那值的我們也可以算。因為我們現在把這個CONTEXT當成是一個。也是一個SINGLE的WORD。所以我也可以算這樣的。當然你說。 [0:23:35] 老師那我們要取什麼CONTEXT。這個。這個就。在我們這邊我們可以隨意的去假設。或是說。你覺得你的問題。你現在這個應用。你現在比如說要做情緒分類。你現在要定義什麼樣的CONTEXT。你可以自己取出那個字。但是你待會說。那我這個CONTEXT越多越好。就是有點像記憶學習裡面。我的DIMENSION越高越好。其實是可以。不過我們這邊先做一個這樣的例子。那給你一個語料庫呢。你就可以統計出這個表格。就是。其實有點像字跟字之間的共同出現的一個FREQUENCY。所以你會發現說。像INFORMATION跟COMPUTER。很常出現。所以它這個COUNT很高。那這邊比較像是食物。所以它就會跟PIE、SUGAR比較多。FREQUENCY多一點這樣子。好。那這個。這個圖表做出來。大家可能就覺得。這跟我們當初在講SVD的過程有點像。也是在做DOCUMENT跟TURN。然後FREQUENCY。然後算一些共同出現的狀況這樣子。好。那我們現在就用這個。這樣的一個CORE CURRENCY的MATRIX。去算這個PPMI。那我們先對它做NOMINATION。算這個。這個出現的PROPRIETY。就是其實。其實演算法只是把這個當分母。這個當分母。去NOMINALIZE這些東西這樣子。OK。所以我們會得到一個分數的值。 [0:25:07] 那總量我們也可以得到一個分數的一個RATIO。就是TOTAL的FREQUENCY。去除的這樣子。那得到這樣的一個RATIO值。我們就可以去計算。譬如說。我們要去算說。那REFERENCE這個。應該把它框起來。這個SUGAR跟CHERRY。就是CHERRY的PROPRIETY。跟SUGAR共同出現的。但是CHERRY本身的PROPRIETY。是0.0415在這裡。那SUGAR自己的PROPRIETY呢。是這個0.0052。那它們共同出現的是0.0021。那我們就根據PMI的公式呢。得到這樣一個值。所以我算出來。這個PPMI。這個。這個CHERRY這個TARGET WALL。在SUGAR這個CONTEXT底下。得到3.3這樣子。那我們就可以根據這樣的方式呢。去計算出。我要的TARGET WALL。在我定義好的CONTEXT。的。的一個PPMI值。當然另外一種做法。你也可以把所有的TARGET WALL。跟所有的把。另外的TARGET WALL。當成是CONTEXT。去計算這些事情。不過計算方式其實是一樣。那算完之後呢。我就得到一個新的MATRIX。那這新的MATRIX其實意思是什麼。我就可以把CHERRY呢。用這五個數字來表示。 [0:26:37] 0004.38跟3.3。它就得到一個這樣的VACTORY。那。這個跟TFIDF其實是。有點像。有點像。只是說在這邊。我們的維度。就不是。我們的DIMENSION。就不是VOCABULARY的每一個字。而是我們定義的。我現在的情境是什麼。我現在情境是什麼。而且我上面的值。也不是FREQUENCY。也不是IDF。我是用MATRIX INFORMATION的概念去計算。那你也可以自己比較。就是說。那如果。我可以拿到這個文獻。那我用TFIDF做一遍。然後再把這個。用PBMI算每一個TURN的表示。然後再把這個每個表示呢。再INVADE回去整個Document的表示。那當然中間還是有一個INTEGRATION的過程。你可以發現其實。會很接近。會很接近。因為基本上。就是一個貢獻性的關係。好。不過這個。這個當然。這個會比之前我們在做SVD簡單許多。這個會比之前我們在做SVD簡單許多。因為SVD需要拆解整個矩陣。然後需要去做。做這種Principle的Vector出來這樣子。然後需要去做。做這種Principle的Vector出來這樣子。那這邊呢。我們就直接。做統計。印算。然後算這個PMI這樣子。然後算這個PMI這樣子。好。那只是說你可以想像。就是說。那我就可以用貢獻性的方式。那我就可以用貢獻性的方式。算這種Probability。算這種Probability。共同出現的關係。共同出現的關係。我可以知道。 [0:28:07] 每一個字在我設定的情境底下。它的程度有多少。所以如果你的應用。所以如果你的應用。在這五個空間中。在這五個空間中。這五個維度裡面。就有辦法在你的應用區分出。就有辦法在你的應用區分出。你想要的結果的時候。其實你也可以這樣做。其實你也可以這樣做。就是我把Digital。就是我把Digital。切出這五個數字。就代表我認為很重要的。就代表我認為很重要的。五個Dimension的分數。五個Dimension的分數。那這五個Dimension的分數呢。那這五個Dimension的分數呢。你可以去算。比如說。這個語意之間的相關度。比如說。這個語意之間的相關度。或者是。我要去計算一些距離。我要去計算一些距離。或者是什麼。我都可以用這種方式來計算。我都可以用這種方式來計算。這個計算量就小很多。這個計算量就小很多。這樣子。這是我們之前舉的一個例子。這是我們之前舉的一個例子。不過。我們是。把它用一個壓縮後的。把它用一個壓縮後的。叫五個。八個Dimension。當中一個Concept Space。當中一個Concept Space。來去做。當初這個Sentiment World。當初這個Sentiment World。這幾個Term。去描述這樣子。去描述這樣子。但這個其實已經到。Dense Vector 的。的。的。的地步了。那其實你當初這個。的地步了。那其實你當初這個。這個Context的部分呢。這個Context的部分呢。你如果用.我們現在。你如果word2vec去想像。那個700多維。或是300維的空間。或是300維的空間。其實有點像。其實有點像。只是我們這邊是。Given的字。就是我必須知道是哪一個字。哪一個字我才能算但是你在做Wall-to-Vector或是一些Wall-Embedding的時候那個維度空間我們是不需要去給它說第一維是什麼概念 [0:29:37] 第二維是什麼概念它就直接用一個壓縮後的Concept的一個Dimension去度量這些東西那怎麼去算這些東西就是有各式各樣的方法只是說後來都用Trend的方式讓它去逼近我想要的語料的特性然後去學會這些Vector的表現就像我們當初Wall-to-Vector講的部分所以PPMI其實你也可以把它想像是某一種Sparse Vector只是你的Context通常我們會取比較多一點那維度大一點然後它就是字跟字之間或字跟Context之間的Relation那轉換過來之後我們希望說這個這麼大但是又有稀疏好像不太有意義這計算量又很高然後也沒有真正Capture出重點的Semantic的相似度所以當然後面就所謂的Dense Vector那我們當然希望說我們把這個稀疏性把它破壞掉希望這整個Dense Vector的Embedding能夠是一個比較連續型的向量空間我不要這麼的01或者是非常的稀疏我希望所有的語言都有然後能夠去完全表現我的字的語義但這件事情當你在做第一個作業的時候你可以思考一下就是說我如果用300維度或是768維度去做一個字的Embedding的時候 [0:31:08] 你可以想像說那我有點像是把人類所有的Token的表示就用這768個數字來描述這個以前在做機器學習的時候你會覺得好像不太夠就是一個所有的人類的語言的Token怎麼可能只靠768個數字就可以足夠表示你一定會覺得應該要到一萬維度這樣子不過後來也發現說其實以字的Static Wall Embedding的角色來看那個700多其實是蠻夠的那以Dense Vector來講我們這邊會秀這兩個當然這個大家都知道是我們這個字當初的Static的Embedding那到後來所謂Contextual Embedding當然就是大家所熟知的這些BERT或是LM他們在講的事情那我們還是在Recap下我Embedding在看的東西那Embedding我們是希望說我只要靠短的東西或是壓縮厚的東西去把這樣的概念能夠更連續更分散式的呈現所以他靠這樣的表示我們希望能夠做到更好的這件事情其實SPARTS的東西不見得做不到只是沒那麼好而已這樣子那只是說以前我也想要說這個字其實老實說以前在做IR的時候Search Engine 2000年的時候 [0:32:38] 其實並沒有這個字並沒有太被大家所這樣用就算Wall-to-Vector出來之後大家才會把它當成是所謂的Wall Embedding所以它比較像是一個遷路比較像是用我一個壓縮後的空間去描述一個更大量的語義的Space所以會用這種Embedding本身當然是變密變小但是他也有一點是有壓縮的概念這樣子這個例子是一個這個Analogy的例子就對比的例子這也是在裡面第一個作業會做到的部分那其實在這種對比的或是說你做Wall Embedding的東西其實他有很多很有趣的東西包含這邊我提到的是這種Semantic Drift就是語義的概念的飄移就是比如說我這邊提到這個Broadcast這Broadcast其實在以前可能會講的是因為他其實你可以想像做Wall Embedding大概不外乎是跟其他字共同出現去算一些Relations出來那以前在講Broadcast可能是廣播電臺或者是什麼但是後來的媒體也變成電視變成報紙什麼什麼之類的甚至你現在可能做BroadcastingBroadcast的東西也許是在網路上真正Physical的東西的Broadcast所以這個字的概念 [0:34:08] 或是說跟他共同出現的字的分佈會隨著年份有所不同所以如果even你只是用Wall-to-Vector這麼簡單的Model只要你有很長的時間的語料庫你就可以辦法做這件事情比如說你就這個你有可能有100年的資料你就10年切一組10年然後每一個給這個每一個字一個編號比如說這叫Broadcast1 Broadcast2那你就根據這樣10個Broadcast去算把它當成不同的字然後你就可以算出發現他們的字其實他們的Vector表現是不太一樣那這個另外一個例子是Network當然這種越Genial的Term其實他本來他本來涵蓋的概念就多了只是說後來他的每個年份每個議題的重點會不太一樣所以他很容易會造成這種Semantic Drip的狀況這樣子OK那其實這樣的東西其實他這是一個好像很正面的現象但其實這種用貢獻性來做這些其實會有很大的問題就是說我們等一下會秀一下說 [0:35:46] 這是新的嗎好沒關係我用嘴巴講就是在以前那個年代大概在2000年代的時候Google的演算法有很多是靠著所謂Anchor Tags就是比如說就是連接到一個學校然後你希望這個比如說Stanford好那你會擺在個人網頁你會放一個連接當然你會寫Stanford但是你可能會寫說這是你心目中最好的一個大學這樣子你會用那個Anchor Tags去描述你要連接到的東西所以以前當時在Google剛起來的時候它其實Anchor Tags其實它是一個很重要去度量這個網頁的一個特徵當然它這是一個正面的但是後來大家發現Google有這個特性之後就假造了很多假的Anchor就是你做了很多假網頁然後上面都用一些很負面的Anchor Tags然後連接到這個個人網頁就是你很容易可以造這種東西因為都是你自己做你只要擺連接比如說你把它指到學校的首頁然後你就說這個學校很爛這樣子然後你就造了一大堆這樣的連接然後Google就會把它Cloud回去 [0:37:16] 然後算一算之後發現這個被指到的這個連接就會帶有這些負面的概念所以以前這樣的東西出來之後Google本來不覺得怎樣就是你了不起只能做幾個假的Anchor但是後來這個自動化的工具出來之後這個Anchor就太多很容易造假的部分所以當初有所謂的這種Google的Bomb就是它其實名稱就叫Google Bomb就是Google炸彈就是我可以用這種方式去做去讓某些人的網頁的排名下降甚至我要去對一些尤其是政治人物我要給他一些很負面的詞彙的時候我就可以利用這種方式去做因為這個掌控權都在自己因為網頁自己做的連接你自己放Anchor text你自己設計所以都可以這樣做所以有點就抓住他們在計算演算法的這種貢獻性的詞彙之後你就可以做造假這種東西那這個東西其實一直有在用其實一直有在用其實像你如果有機會去下載比如說川普他在競選總統時候的言論或者是新聞稿或者是什麼你可以把它的東西抓出來之後你會發現他在形容對手的時候 [0:38:46] 都一定會加一些很負面的形容詞這樣子像這其實是事實都有點統計過像當初他就會說這個拜登叫做sleepy joe就是愛睡覺的這樣子他就會前面放一些比較不是這麼誇張但其實是負面的形容詞去形容對手那隻要他不斷提到這個事情的時候這個對手常常在搜尋在搜尋運行在搜尋的時候通常就會被很容易被帶到這種比較負面的概念進去這樣子那這個當然是有點像是道高與子魔高與藏這種東西就是你怎麼去破壞各種的ranking的機制然後達到你想要的效果當然以前搜尋運行剛剛很正常的樣子當然以前搜尋運行剛剛很正常的樣子當然以前搜尋運行剛剛很正常的樣子當然以前搜尋運行剛剛很正常的樣子當很重要很紅的時候就有這種SEO的公司幫你去做一些最佳化就排名最佳化一個新公司出來之後你可能不會被搜尋到你就付一些錢給這些公司他就可以幫你做一些內容農場然後去導引到你的網站然後去promote你的東西這樣其實那個其實是也有正面也有負面的case不過anyway這個可能就大家自己在想象好好,我們當初提了what-to-vector這兩個方式你用這個這樣的一個角色去講就比較知道是說 [0:40:17] 我在做C-Ball的時候其實我是根據這個context去predict我現在的target那這個在這有點像磕漏字有點像我們後面要提到這個maskinglanguage model在做的事但是其實上以我們這個當初在做what-to-vector的語料庫的取得的時候其實我覺得這種角色這種方向是比較容易訓練就是我只要去抓我這個中間這一個字然後他周邊的字predict他可能是哪些這個在training data上是比較直覺當然不是說有很大差別但是我覺得用這種訓練方式可能比較容易理解這個是我們當初有提到這樣的一個角色其實就是就是這一個兩層的NN其實我們在上一W1的投影片後面有提到那其實他整個一個flow當然就是以一個兩層的NN的training的過程那我需要有supervised data所以我們說我們會根據語料做一個sliding window切這樣的一個pair這個pair其實都是positive example就是A有共同處理的A有共同出現的字碼但是機器學習我們需要negative sample這樣才比較知道告訴模型說他應該是 [0:41:49] 這個是yes這個是no這樣子這個模型才知道算這樣的一個分數去算loss當然這樣講不見得是這麼嚴謹不過一般機器學上都會需要所謂negative sample而且negative sample選擇相當重要因為你如果隨便選如果隨便選模型很聰明他知道說原來這次考試這麼簡單這個看起來就是很明顯的negative我就就隨便回答就好了那這個問題其實我們到時候在講這個transformer在pretrain的那個時候在講有一個NSP的train法其實也會有negative sample選擇的不好的問題所以其實以前如果你做過機器學你就知道說如果我不是一個given已經給你好的train data的時候你要自己去建造或是選擇你所謂的positive或negative data的時候這時候就學問就來就是你需要好好的選擇第一個你可能要balance就是你不能差太多這樣子差太多其實模型也會就都回答比如說你的negative很多但positive只有一個那以後模型都是回答不是這樣子它分數就很高那另外你也希望能夠讓這個negative越接近positive越好有點像是說 [0:43:19] 這個考試難度要增加不是讓他很容易就可以判斷這一題的對錯他必須要稍微思考一下必須要模型要稍微去看一下說原來隨便答的是會錯的所以他必須要探究更細的特徵跟差距值的時候模型才能學到一些相似的東西細的美感這樣子但是這句話其實也是有trade-off就是很容易會有一些over-fitting的狀況我想這個在做基因學習的過程應該如果你有經驗大概可以體會出這種感覺不過在做Wall-to-Vector的時候negative選擇非常重要因為一個字在整個vocabulary裡會出現跟它共同出現的字是在佔整個詞彙的位置因為這個詞彙的比例非常低的那你不太可能把比如說你用一萬維度的vocabulary size那每一個字了不起就是十個字跟它共同出現你不太可能把所有的9990個都算成negative sample第一個非常不balance第二個你要算這所有東西的cost相當的高那你可以再去看一下Wall-to-Vector本身它在做training data的sampling的時候它的一個process是什麼它其實是有一個裡面有各式各樣的做法但是一般都是會用一個簡單的sampling方式它不會去sample所有的case出來去算loss [0:44:50] 它只會跟你的training data一個比例去對照那個positive跟negative去算那個loss當然也有不同的做法你可能可以用這個Hoffman的方式以code這些每一個vocabulary來做anyway你可以去看一下它的細節這個用這個regression的角度來看這件事情其實跟我們原先的那個NN在做的其實是一樣的只是說我們在後面的Wall-to-Vector其實一般都是用我們前面講那樣的一個簡單的NN的方式在做這件事情那只是說勸完之後的模型勸完之後的模型它只能做一件事它就是給一個字然後它去預測跟它的context的perplexity但這個模型其實不是我們要這個模型能夠output的東西不是我們要的東西我們要的是它勸出來這個第一層的weight因為第一層的weight在這樣的一個語義的表示的空間其實是一個一個space vector透過一個學習的過程轉換出我要的一個embedding的space的呈現比如說這個字 [0:46:20] 我在這300個NN裡面應該要用哪些數字來表示透過這些數字的表示之後我可以靠著它的一個weighted sum就是第二個矩陣的學習的過程比如說我這個字的維度是應該第一個維度跟第三個維度乘以多少然後就可以構成這個字典裡的第一個字的共同出現的perplexity這個也是學出來的只是說我們其實是用第一層學會的結果去轉換出我的字的embedding的分佈然後第二個metric其實是把這樣的一個wall embedding靠著某種組合學到來組合去預測這個字的共同出現的一個perplexity這也是我們當初講過embedding比較強調的部分不然它就是一個非常小的NN的metrics好這是在計算的過程這個summax就看了其實在predict最後的perplexity那我這邊舉一個例子這是一個target wallABC三個字其實這個字這個例子只是讓大家感覺一下這個計算過程因為這個U其實是 [0:47:53] 它並不是ABC的embedding而是這個我們後來學到第二層的那個metric那個weight跟我現在target wall這個embedding之間該怎麼去做一個weighted sum去得到這個字的一個perplexity這樣子它只是說我們我們這個例子是告訴你說我這樣乘出來之後我再做一個這個neuron的這樣的一個計算summax的方式然後去得到這個值所以最後的perplexity就是我看到這一個target wall之後我的ABC它共同出現perplexity是這樣其實大概只是帶用這個例子帶一下這個這個值那你大概就可以predict說如果我現在的vocabulary只有這三個字那我大概就可以算出我現在的perplexity但是因為你的vocabulary很大你可能有一萬個字一萬個字裡面我去算這些全部都算出來其實cost相當高所以我們通常會做negative sampling的地方的概念就在這裡好不過這個例子只是數字讓你帶一下這個感覺不過大概你可以發現它是也是一個正比的關係也是一個正比的關係不過因為這個本來就會對這個數值做一個normalization然後有些東西會有點壓縮 [0:49:25] 所以當然它並不是一個很線性的部分好這其實大概就是在在recap下這些Value to Vector的東西那這個東西其實隨著大家在使用上覺得這種東西如果是一個static的角色的時候它就有時候不是這麼好用或者根本是不對的東西所以我們希望做一個叫contextual embedding就是我會隨著前後文的東西這個字的表示就會有所不同這當然大家覺得現在好像都是這樣但是其實在Value to Vector那個年代其實大家也想這樣只是做不太到這樣子所以從Value to Vector到後面的transformer這個過程大家就一直希望從所謂的Value embedding轉換到這種contextual embedding能夠去capture這個字同樣的字在這個句子裡面該有什麼樣不同的表示OK所以我想這個概念大家都知道就是比如說我在蘋果公司吃蘋果同樣一句話裡面的兩個蘋果這概念本來就是不一樣它應該用不同的向量的字來表示OK那這種contextual embedding當然後面就爆出大家非常重要的一個技術就是BERT這種transformer based的這種encoder的東西 [0:50:56] 當然GPT也是它雖然是decode但是它也可以拿來當成是這種embedding的用法那這種context會影響字大家用這個例子大家可能比較有感覺這是網路上的一個Cast這其實是一張圖片那這個影像辨識器把這隻因為它頭也沒看到把它視成Tiger為什麼它其實它是一隻狗這看起來像拉不拉多這一隻狗在透過這個欄杆的影子的照射下它有老虎的斑紋那這個意思就是說我用這個context這就像它前後紋這前後紋會影響原來這個物體使它的語義的表示有所不同這大概是這樣的一個情境的介紹不過我想這個大家都知道那比如說我想蘋果公司跟蘋果派雖然兩個都是蘋果但在這個句子裡面這個turn它所代表的vector應該是要不一樣當然你也可以試著用wall embedding來做那其實有時候效果也沒有很差因為基本上你那麼多維度裡面應該也有一些相似的東西其實你如果有興趣你可以把這個birth出來的每一個字的token去看一下如果這個在蘋果公司持蘋果把這兩個蘋果的在birth出來的這個logic [0:52:27] 你去算一下它們的相似度你就會發現好像有一點故事那像這兩句話它其實前面講同樣的東西但是後面這個人不一樣的時候你這一句話所代表的含義對模型來講應該是不一樣就是到底改變怎麼改變這樣子雖然你說字面上的意思就是改變它的意思但是這裡面的蘋果跟這邊的蘋果意思也不一樣所以如果你現在沒有birth的這樣的技術你想象說如果我們只有static embedding的時候你覺得你會怎麼做這件事情你覺得你會怎麼做這件事情你會說那我就把這個蘋果跟後面的字算一下相關性對不對如果我這些每一個字的token我都有一些static embedding的時候那我算一算相似度也許我可以找出一些不同的度量的方式去改變這個token說後面的字是長這個樣子那你自己的描述應該要做一點調整你可以先去想這件事情如果你的想法就像我剛才講的那樣這個其實就是後面在做attention的機制會去看的東西就是每個句子 [0:53:57] 我們會去看說前後字到底是什麼然後算算一些權重算算那個QKB的值然後改變一下我自己的embedding然後再去做那個weight的學習然後每過一層我都要再去看看別人變成什麼樣子然後再學所以他就是不斷看別人變成什麼然後再學新的東西所以attention機制就是這樣出來的所以你可以用你自己的想法去思考說如果你要做一個contextual embedding我給你這兩個句子你怎麼把這個蘋果這樣的一個stack embedding變成有點不一樣你當然會說那我就跟後面的去做一些度量做一些計算去幹嘛那你自己有這樣想過之後等在學到transformer在學到stepattention的時候你就會比較有點感覺原來你自己在找出生十年attention is all you need就是你寫的這樣子OK好那當然以前我們講contextual word embedding最重要最簡單的做法也不是最簡單最直覺的做法就是long context反正這個字它會出現的perplexity就跟前面的字有關這樣子這是一個基本的這樣的一個language model只是說我的context拉的比較長但是其實我們後來 [0:55:27] 這個後面也有人做一些東西就是說它其實不是跟前面這個字的意義它其實也會跟後面有關只是說一般我們在看字的時候或是在聽字的時候其實都只聽到前面那個字但是你會發現你聽到前面這個字的意思跟你把整句聽完你這個字的意思其實有時候也會不一樣所以這樣的perplexity其實也會有一點biasOK那只是說以前我們是用這種比較片段這種統計式的方式來學這件事情但是後來發現第一個語料沒那麼多第二個這個計算其實也是非常恐怖的而且有很高的spacity所以我們就讓模型來學那你一定覺得說那用統計跟用模型來學的差別到底是什麼其實你可以回想一下當初你如果有學過機器學習如果你有用過角色數有用過所謂的哪一base的這種機率的統計的分類的數的做法然後你在對照所謂的NN就是小顆的模型的NN這樣子它們的精神是有點不太一樣你如果在做哪一base的時候其實基本上因為哪一base其實是 [0:56:58] 我們叫做ZZ的runner就是說它其實是不用學的不用學習就是它是統計就是說你以前看到這個特徵是什麼什麼什麼然後它會跟以前的case怎麼樣它會算出一個機率然後預測你在這class的probability是什麼它其實根據以前發生的過程去算出那個機率就是哪一base的精神但是呢這種NN或者是比較學習的方式它可以去延伸或是說它可以去看到說你這樣的pattern其實在以前的狀況底下它應該會演變成什麼它會多看到一些可能是數據統計上沒辦法告訴你的東西但這些東西可能不見得是對的但是通常是有幫助於你去延伸你的訓練資料庫的所以用統計的跟用學的它會有一點點差距但是可能你可以從哪一base或是基本上NN學習的過程去想像這件事的差別所以以前用CPU算不夠好那為什麼用這種模型的training的角度它就可以變得比較好這件事情你可能可以用這種角度去做思考好我們現在先不管說怎麼學這contextual embedding假設我已經有一個這樣的contextual embedding的東西 [0:58:29] 那就表示說我一個句子來我就可以把它轉換成一個電腦看得懂的Semantic的表示而且是整句它都知道然後我再去切換到那我去做一些判斷比如說我要去算算情緒分數或者是算這些相似度做搜尋做QA之類的就可以自己設計這個東西這個架構可能大家也不陌生其實現在的UAM就是前面有一個從我embedding進去的然後它會去做encode的過程然後當然自己可以在Pretrained的model底下後面設計一個下游任務去做這件事情OK那這個過程當然整顆是你的任務整顆是你的任務那這個embedding呢是一個Pretrained就是這可能是某一個模型告訴我你這句話應該要叫這個意思但是有時候我們通常因為整顆是你的任務所以你也會有一個訓練的資料來訓練這顆東西因為你要做一些邏輯所以這邊我需不需要publicate到這邊的東西因為它可能也是一個NN的架構不是一個不一樣的長相的東西你沒辦法publicate所以有時候是可以embed在一起的NN的架構的時候有時候你就可以train together就是這個當初是用一個common的Corpus train的東西那我現在如果要做一個Medical application [1:00:00] 那我這邊都是Medical的一個應用的字那我如何讓它去理解這些東西或是說在我這邊這個字可能是應該要那樣的表示的時候我可以去update我這個東西我去update我前面這個embedding的東西這個可能大家覺得好像很直覺就很像你現在拿這個Pretrained Language Model再接一個下游任務去做這個fine-tune的這件事情一樣但是我們這邊講的只是說我要去改變前面的embedding的東西就是文字進來怎麼表示圖片進來怎麼表示這樣的這一塊內容那這塊內容當然都會拿Pretrained好的東西因為我不太可能用那麼大的語料庫去做訓練那Pretrained好之後我們再根據我們的Domain我們的新的Corpus去做這件事情所以它跟現在的fine-tune它的精神是一樣所以如果你有fine-tune過你大概知道說這時候我的Logs怎麼publish我的Logs都要怎麼設計我如何讓這個有點改變又不會把它變爛這樣子所以這個embedding的這樣的co-training其實是一個這樣的精神當然你也可以說我不要我不要去動因為你圈不太動因為這個可能也很大這樣子雖然這個以現在來講啊如果是你拿Pretrain來當成 [1:01:30] 是一個Contextual Embedding的時候你會覺得現在Pretrain很小反正一個B點都不大的東西但是呢這個在在這個七八年前這個Pretrain已經是一個對我們來講是一個龐然大物這個非常大的東西這個我還記得我們當年參加一個DiversDN的比賽那時候只有Pretrain拿來做一些這個我記得那個那個比賽是一個Gender Bias就是怎麼去判斷句子裡面有性別歧視的這件事情當然所有的參賽隊伍都是用BERT來做這件事情只要我們也是用BERT但是我們是Foreign我們就BERT都不動這樣子然後那時候其實我們數據還不錯我們還拿到第二名然後那時候去Post的時候其他隊伍就也很好奇我們的做法這樣子但是他們最好奇的是你們為什麼要Foreign BERT這樣子我們只能說我們圈不太動這樣子對他們來講他們就很不可思議BERT你們沒辦法Tune他這樣子當然這個就跟那個國家的算力有點關係應該說我個人的算力不足不過Anyway其實Foreign也有Foreign的做法那重點是有時候你Train Together也會比較好你只會把他搞爛而已這樣子所以也是要評估一下 [1:03:02] 好那這邊後面會提到NN的東西那這個可能會跟著第一堂的Lab課有點關係第一堂Lab課其實就是教你怎麼裝PyTorch然後怎麼去做一個很簡單的NN的訓練所以我們這邊的課程還是有帶一些NN的東西不過這基本上應該是在機器學習的課程會提到那這個我在這邊就很快的帶過了那因為一般的NN的架構或者是說現在機器學習或者是所謂的Deep Learning其實都是Based on這個NN的一個這樣的一個Architecture在做其實幾乎沒有別的選擇幾乎沒有別的選擇只是說這個Architecture的不同或是說是不是你現在是不是要Transformer或不是Transformer這樣那基本上還是NN你現在已經沒有別種的Training的方式沒有Training的這種Model不同的Model在做這件事情我所謂的Model是說你不太會用以前的所謂像什麼SVN啊Dishon Tree啊去做這樣的事情那一個這樣的學習的Deep Learning的Project或是一個Model它其實大概包含的本身的模型的部分那這個模型其實如果你有經驗大概知道 [1:04:32] 它就是把Input跟Output之間的關聯靠著一些Weight的方式把它串接起來那這東西當然裡面有所謂的這個所謂的Optimizer跟Loss Function這兩個東西其實你應該能夠區分如果你學過機器學習應該知道說Loss Function是用來度量說你現在距離目標還有多遠就告訴你說我現在還有十門課還沒有讀那怎麼樣去達到這個目標怎麼樣把這十門課讀得更好就是你的Optimizer在做的事情就是該怎麼走接下來該怎麼走一個是度量你現在還差多遠另外一個是告訴你接下來你的參數要怎麼改變做這件事情當然這些都是有標準的或是常用的或是什麼應用會用什麼Optimizer用什麼Loss Function在做OK那通常你在設計的時候這個架構你可能會改變那你會自己設計你自己的Loss Function如果你是要做一些比較小型的Deep Learning的研究大概會這樣Optimizer比較少除非你想做Optimizer的研究了這邊通常變動性不會很高這樣子好那這個大概是一個有點像比較接陳一點細一點的就是你在Train一個NNN的時候的一個比較細部的過程 [1:06:04] 就是準備資料建構你的Model其實當初Deep Learning出來之後有TensorFlow其實蠻紅的因為它比較好入手但是後來它包裝的太多其實不太容易改太多的東西所以現在多半都以PyTorch為主那怎麼計算這整個NNN呢我們的Loss Function其實有很多種比較常用的Close Entropy在做那Optimizer其實也有一些標準的基本上都是算一些Momentum算一些你跟目標距離的差距你要怎麼改變你這次要跨大步一點跨小步一點或是你要怎麼跳這樣子就是Optimizer比較有名的像Aden或是什麼這個就是比較動態去調整這個Momentum的的誤刷這時候我該緩慢這時候我該快一點這樣子那Aden是一個很常用的名字那每次講到這個我都要講這個笑話對這是一個事實真實發生的事情是國內一個老師他的論文他在論文寫說在模型怎樣怎樣然後他的Optimizer是他是說用Aden來說是就是說用Aden來做了當然是英文是英文那因為這Aden看起來他寫的就是It's done by Aden這樣子那他拿到那個Reviewer的意見 [1:07:35] 那個Reviewer就問他說我們不知道Aden是誰Aden到底是誰為什麼你在論文中去說這個東西是誰做的這樣子那就看到就傻眼就說這個等到這個Reviewer不知道Aden是什麼所以這個也凸顯出現在頂潰很多審稿是有點問題的就是這個其實不是那麼專業因為就是那句話他就寫Who is Aden這樣子我覺得是蠻特別的不過至少那個Reviewer應該是他自己寫的如果叫AI Reviewer應該不會出現Who is Aden這樣子不過這個大概就是有時候你會特別去描述你的模型是這些細部的其實比較像超參數怎麼做然後你就會訓練然後你就會評估這樣子我想這個是一個標準的流程只是說讓因為在做第一個作業的時候你就要做這件事情只是說因為我們的code都現成的所以你大概需要自己變動的東西不是很多這樣子所以我在講這個我們就下課了我們今天就上到這邊然後接下來的一個半小時你們就回去看我們第一個lab課程的錄影這樣子有問題都可以在slide上再問主教會再回復其實activation function的概念其實非常重要 [1:09:06] 因為它其實比較像是NN能夠跨入真正現在很有用的年代的一個很大的工程它可以做一些non-linear的mapping因為你如果學過機器學你就知道這個故事就是就是它沒辦法做一些這種一刀兩切的就是如果是linear的這種separator的時候它沒辦法做這種不是一刀兩切的一個data那NN其實基本上因為它核心的長相也是一些weight上也是regression只是說它靠著neuron之間的串接靠這些activation的串接使它可以做到一些non-linear的問題那大家所熟悉的activation function這個大家可能都聽過用sigmoid,relu,tangent h或者是給入這樣子那這其實也不太會動不太會動那這個圖其實想呈現的是它們的關係像比如說很標準的sigmoid就是這個顏色是這樣的就是從你可以想象從大到無窮大就是我現在input x那我的output f就是y那sigmoid是從0到1所以它就是負窮大就會開始從0然後慢慢增加到1這樣子就是這一條線 [1:10:36] 這條線其實它比較敏感的地方就在中間就是在x介於0的正負的範圍內就是中間所以越大跟負的越大跟正的越大不是很敏感這樣子那比較暴力的像relurelu就是這一條因為蓋在一起的這個圖是AI幫我畫的就是它是這一條線然後長上來就是把小於0的都把它變成0這樣子然後大於0的就是原子output這樣子那大家可能要先有個概念就是activation這個東西其實當初因為類神經網路其實是源自於人類的腦袋人類腦袋在這個神經元在串接的時候它其實是用一些化學物質像是鉀離子鈉離子這種濃度到一定地步的時候它會trigger它會發出一個訊號那這種就是把它轉換成這種控制我們就用activation function的角色來做這件事情那當然這個東西你說那我們是要模擬人的activation function嗎其實也沒有就是我們就靠著這種有點像過濾的機制去達到我們所要做到的控制的效果那大家可能常聽到tangent action或者是給入其實後面這兩個比較像是把累入因為累入其實是非常不連續的 [1:12:07] 因為它前面就是0然後這邊直接上升這樣子這邊就不可為分這種東西對模型來講很不好所以它就把它變成一個比較連續的連續的函式可為然後去做一些這樣的調整讓它子逼近這樣子但是現在在做一些hardware的implementation都會覺得這些function實在太難做硬體的加速了因為根本沒辦法去用電路去模擬就是要做一些邏輯判斷甚至還要算tangent去這樣子這個成本很高因為等於你每一個neural都要做一件這件事情那個cost相當高所以現在有很多做硬體加速就直接在edification的方式裡做手腳就是設計一個函式然後它可以逼近這些圖案那些函式是很容易可以靠著電路做出來的只是說它是逼近逼近這樣的一個pattern所以還是行為有點不太一樣所以他們常做就是這樣是轉換之後然後去看最後的模型的效能跟原來效能差多少但是速度會快很多因為這個計算過程都可以用硬體加速ok這個是在做NN後面我有一個edification function這一段這個是它的敘述其實你可以想象它就是 [1:13:37] 特殊的一個正規化的一個function去做一點壓縮做一點調整這樣子好我想我們今天呢就上到這邊其實剛好你去看這個PyTorch的那個tutorial你會發現其實因為就是從安裝開始然後再帶類似NN網路的的python的code怎麼做其實有些是講tf啦就是講tensorflow不過你大概可以知道這整個過程但如果對你已經有一些基礎你已經有訓練模型的基礎的話可能會稍微簡單不過你就挑你你認為需要的就閱讀這樣子那第一部分的PyTorch的tutorial大概是一個半小時所以大概可以先去看那邊的部分好我們今天的課程就到這裡slido上有沒有問題需要回復跳出slido那之前有人在slido上問那個作業的效能那其實那個過程其實基本上你都可以在你個人的collab的quota上 [1:15:07] 跑得起來這樣子所以如果你要跑很久的時候你可能你自己要看哪邊有問題這樣子好ntu庫好吧這個的確一開始都會有這個問題可能對於後面才加選的他的名單的導入會稍微慢一點這個這個可能我問一下辦公室好好context怎麼取這個當然這個context你可能講的是比如說我們PPMI那邊我那個例子只是一個舉例就是說好比如說我現在應用要用這樣的五個維度或是幾個重要的的字來capture我現在字的所有的表示我可以自己設計那或者是說我你在waterbag裡面你這個context你可以取更大一點你可以取這個window size是2去看他的context有哪些字共同出現這樣子ficial selection的select其實這邊的當初那個投影片的ficial selection比較像是就像我們在做PPMI那邊我要用一個我要用什麼樣的維度來描述一個文字其實當初的研究有很多人去做這件事情 [1:16:37] 比如說他特別設計這個比較語法的或是這個詞性的什麼什麼其實以前有人做這樣的這種人工設計的embedding然後去學這些東西或者是用程式去attract他的ficial出來這個是一個概念是用人去設計那我embedding你在做的時候你可能300維度或千百維度765維度的時候其實那個維度就是你的ficial其實這個ficial的select是模型自己去學的lab的算分沒有它只是有點像帶這些比較實作不是實作就是搞不好對你們來講你會覺得比較有收穫這樣因為老師都講太泛泛的東西那邊其實就是帶你真正真正要帶這個code真正在券的時候你該怎麼寫這樣子有點像助教課那邊是沒有有點像也是為了帶帶這個作業相關的部分其實也是考量有些同學可能經驗沒那麼多這樣子下載那個cobus可能我不知道這個語料應該是我們在github上應該是可以嗎還是你們助教再回復一下這個問題OK好其實以前一直有 [1:18:07] 其實第一年第一年非常慘因為第一年我們好像沒放在github還是什麼放在學校這邊就有點掛掉了這樣子那OKlab應該在ntucool跟github都有這樣子它有投影片跟助教預錄的影片這樣子OK好那我們就回復到這那如果你在看lab的課的影片有問題都可以在Style上問助教都可以回覆這樣子好我們今天就上到這邊我們就下課