從整體視角了解情感分析、文本分類!
以下文章來源于公眾號【Datawhale】?,作者太子長琴
前 言
文本分類是自然語言處理(NLP)最基礎核心的任務,或者換句話說,幾乎所有NLP任務都是「分類」任務,或者涉及到「分類」概念。比如分詞、詞性標注、命名實體識別等序列標注任務其實就是Token粒度的分類;再比如文本生成其實也可以理解為Token粒度在整個詞表上的分類任務。
本文側重于從宏觀角度(歷史演變和基本流程)對文本情感分類任務進行介紹,目的是給讀者提供一個整體視角,從高遠處審視情感分析、文本分類、甚至NLP,期望能拋磚引玉,引發(fā)讀者更多的思考。
本文同樣適合于非算法崗位的工程師,以及沒有技術背景但對NLP感興趣的伙伴。
本文篇幅較長,主要分為四個部分。
背景介紹:簡單介紹情感分析相關的概念、類型,并和文本分類任務對應。
基本流程:文本分類(或常見的NLP任務)基本處理流程。
模型簡史:NLP處理任務中模型變遷的簡單歷史。
情感未來:探討未來情感分析可能的發(fā)展方向。
01 背景介紹
情感分析是根據輸入的文本、語音或視頻,自動識別其中的觀點傾向、態(tài)度、情緒、評價等,廣泛應用于消費決策、輿情分析、個性化推薦等商業(yè)領域。包括篇章級、句子級和對象或屬性級??梢苑譃橐韵氯悾?/p>
工業(yè)界最常見的往往是這種情況。比如大眾點評某家餐飲店下的評論:“服務非常贊,但味道很一般”,這句話其實表達了兩個意思,或者說兩個對象(屬性)的評價,我們需要輸出類似:<服務,正向>和<口味,負向>這樣的結果(<屬性-傾向>二元組),或者再細一點加入用戶的觀點信息(<屬性-觀點-傾向>三元組):<服務,贊,正向>和<口味,一般,負向>。這樣的結果才更有實際意義。
從 NLP 處理的角度看,情感分析包括兩種基礎任務:文本分類和實體對象或屬性抽取,而這也正好涵蓋了 NLP 的兩類基本任務:序列分類(Sequence Classification)和 Token 分類(Token Classification)。兩者的區(qū)別是,前者輸出一個標簽,后者每個 Token 輸出一個標簽。
02 基本流程
一般來說,NLP 任務的基本流程主要包括以下五個:

2.1 文本預處理
文本預處理主要是對輸入文本「根據任務需要」進行的一系列處理。
文本清理:去除文本中無效的字符,比如網址、圖片地址,無效的字符、空白、亂碼等。
標準化:主要是將不同的「形式」統(tǒng)一化。比如英文大小寫標準化,數字標準化,英文縮寫標準化,日期格式標準化,時間格式標準化,計量單位標準化,標點符號標準化等。
糾錯:識別文本中的錯誤,包括拼寫錯誤、詞法錯誤、句法錯誤、語義錯誤等。
改寫:包括轉換和擴展。轉換是將輸入的文本或 Query 轉換為同等語義的另一種形式,比如拼音(或簡拼)轉為對應的中文。擴展主要是講和輸入文本相關的內容一并作為輸入。常用在搜索領域。
需要注意的是,這個處理過程并不一定是按照上面的順序從頭到尾執(zhí)行的,可以根據需要靈活調整,比如先糾錯再標準化或將標準化放到改寫里面。咱們不能被這些眼花繚亂的操作迷惑,始終謹記,文本預處理的目的是將輸入的文本變?yōu)橐延邢到y(tǒng)「喜歡且接受」的形式。舉個例子,比如系統(tǒng)在訓練時都使用「單車」作為自行車的稱呼,那預處理時就應該把自行車、Bike、Bicycle 等都轉為單車?;蛘呱踔料到y(tǒng)用了某個錯別字,那輸入也要變成對應的錯別字。
2.2 Tokenizing(分詞)
主要目的是將輸入的文本 Token 化,它涉及到后續(xù)將文本轉為向量。一般主要從三個粒度進行切分:
字級別:英文就是字母級別,操作起來比較簡單。
詞級別:英文不需要,中文可能會需要。關于中文分詞,之前寫過一點思考,簡單來說,分詞主要是「分割語義」,降低不確定性,要不要分詞一般要看任務和模型。
子詞:包括BPE(Byte Pair Encoding),WordPieces,ULM(Unigram Language Model)等。在英文中很常見,當然中文也可以做,是介于字級別和詞級別中間的一種粒度。主要目的是將一些「統(tǒng)一高頻」的形式單獨拎出來。比如英文中?de
?開頭的前綴,或者最高級?est
?等等。子詞一般是在大規(guī)模語料上通過統(tǒng)計「頻率」自動學習到的。
我們需要知道的是,字和詞并非哪個一定比另一個好,都要需要根據具體情況具體分析的。它們的特點如下:

2.3 構造數據
文本經過上一步后會變成一個個 Token,接下來就是根據后續(xù)需要將 Token 轉為一定形式的輸入,可能就是 Token 序列本身,也可能是將 Token 轉為數字,或者再加入新的信息(如特殊信息、Token 類型、位置等)。我們主要考慮后兩種情況。
Token 轉數字:就是將每個「文本」的 Token 轉為一個整數,一般就是它在詞表中的位置。根據后續(xù)模型的不同,可能會有一些特殊的 Token 加入,主要用于「分割輸入」,其實就是個「標記」。不過有兩個常用的特殊 Token 需要稍加說明:<UNK>
?和?<PAD>
,前者表示「未識別 Token」,UNK=Unknown,后者表示「填充 Token」。因為我們在實際使用時往往會批量輸入文本,而文本長度一般是不相等的,這就需要將它們都變成統(tǒng)一的長度,也就是把短的用?<PAD>
?填充上。<PAD>
?一般都放在詞表第一個位置,index 為 0,這樣有個好處就是我們在計算時,0 的部分可以方便地處理掉(它們是「填充」上去的,本來就算不得數)。
加入新的信息:又可以進一步分為「在文本序列上加入新的信息」和「加入和文本序列平行的信息」。
序列上新增信息:輸入的文本序列有時候不一定『只』是一句話,還可能會加入其他信息,比如:「公司旁邊的螺螄粉真的太好吃了。<某種特殊分隔符>螺螄粉<可能又一個分隔符>好吃」。所以,準確來說,應該叫「輸入序列」。
新增平行信息:有時候除了輸入的文本序列,還需要其他信息,比如位置、Token 類型。這時候就會有和 Token 序列 Token 數一樣的其他序列加入,比如絕對位置信息,如果輸入的句子是「今天吃了螺螄粉很開心」,對應的位置編碼是「1 2 3 4 5 6 7 8 9 10」。
需要再次強調的是,這一步和后續(xù)使用的模型直接相關,要根據具體情況進行相應處理。
2.4 文本特征
根據上面構造的數據,文本特征(也可以看作對文本的表征)從整體來看可以分為兩個方面:Token 直接作為特征和 Token(或其他信息)編碼成數字,然后轉成向量作為特征。這一小節(jié)咱們主要介紹一下從 Token 到特征形態(tài)發(fā)生了哪些變化,至于怎么去做這種轉換,為什么,下一節(jié)《模型發(fā)展》中會做進一步分析。
a. OneHot
首先,要先明確下輸入的文本最終要變成什么樣子,也就是特征的外形長啥樣。注意,之前得到的整數并不能直接放到模型里去計算,因為數字的大小并沒有語義信息。
那么,最簡單的表示方式就是某個 Token 是否出現(xiàn)在給定的輸入中。我們假設實現(xiàn)已經有一個做好的很大的詞表,里面有 10w 個 Token。當我們給定 Token 序列時,詞表中的每個 Token 是否出現(xiàn)在給定的序列中就可以構造出一個 01 向量:
其中 1 表示那個位置的 Token 在出現(xiàn)在了給定的序列中,0 則表示未出現(xiàn)??梢韵胂?,對于幾乎所有的輸入,對應的 01 向量絕大多數的位置都是 0。假設有 m 個句子,那么會得到一個矩陣:
其中的每一列就表示該位置 Token 的向量表示,換句話說,在表示句子的同時,Token 也被成功地表示成了一個向量。
上面的這種編碼方式就叫 OneHot 編碼,也就是把 Token 編成一個只有一個 1 其余全是 0 的向量,然后通過在語料上計算(訓練)得到最后的表示。
b. TF-IDF
聰明的您一定會想到,既然可以用「出現(xiàn)」或「不出現(xiàn)」來表示,那為啥不用頻率呢?沒錯,我們可以將上面的 1 都換成該詞在每個句子中出現(xiàn)的頻率,歸一化后就是概率。由于自然語言的「齊夫定律」,高頻詞會很自然地占據了主導地位,這對向量表示大有影響,想象一下,那些概率較高的詞幾乎在所有句子中出現(xiàn),它們的值也會更大,從而導致最終的向量表示向這些詞傾斜。
齊夫定律:在自然語言語料庫中,一個單詞出現(xiàn)的頻率與它在頻率表里的排名成反比。即第 n 個常見的頻率是最常見頻率的 1/n。舉個例子來說,中文的「的」是最常見的詞,排在第 1 位,比如第 10 位是「我」,那「我」的頻率就是「的」頻率的 1/10。
于是,很自然地就會想到使用某種方式去平和這種現(xiàn)象,讓真正的高頻詞凸顯出來,而降一些類似的、是這種常見詞的影響下降。咱們很自然就會想到,能不能把這些常見詞從詞表給剔除掉。哎,是的。這種類似的常見詞有個專業(yè)術語叫「停用詞」,一般呢,停用詞主要是虛詞居多,包括助詞、連詞、介詞、語氣詞等,但也可能會包括一些「沒用」的實詞,需要根據實際情況處理。
除了停用詞,還有另一種更巧妙的手段處理這個問題——TF-IDF,TF=Term Frequency,IDF=Inverse Document Frequency。TF 就是剛剛提到的詞頻,這不是有些常用詞嗎,這時候 IDF 來了,它表示「有多少個文檔包含那個詞」,具體等于文檔總數/包含該詞的文檔數
。比如「的」在一句話(或一段文檔)中概率很高,但幾乎所有句子(或文檔)都有「的」,IDF 接近 1;相反如果一個詞在句子中概率高,但包含該詞的文檔比較少,IDF 就比較大,最后結果也大。而這是滿足我們預期的——詞在單個文檔或句子中是高概率的,但在所有文檔或句子中是低概率的,這不正說明這個詞對所在文檔或句子比較重要嗎。實際運算時,一般會取對數,并且防止 0 除:

這時候的向量雖然看著不是 OneHot,但其實本質還是,只是在原來是 1 的位置,變成了一個小數。
c. Embedding
剛剛的得到的矩陣最大的問題是維度太大,數據稀疏(就是絕大部分位置是 0),而且詞和詞之間是孤立的。最后這個問題不用多解釋,這樣構建的特征肯定「不全面」。但是維度太大和數據稀疏又有什么影響呢?首先說前者,在《文獻資料:文本特征》第一篇文章提到了在超高維度下的反直覺現(xiàn)象——數據不會變的更均勻,反而會聚集在高維空間的角落,這會讓模型訓練特別困難。再說后者,直觀來看,數據稀疏最大的問題是使得向量之間難以交互,比如「出差住酒店」和「出差住旅店」,酒店和旅店在這里意思差不多,但模型卻無法學習到。
既然如此,先輩們自然而然就想能不能用一個連續(xù)稠密、且維度固定的向量來表示。然后,大名鼎鼎的「詞向量」就登場了——它將一個詞表示為一個固定維度大小的稠密向量。具體來說,就是首先隨機初始化固定維度大小的稠密向量,然后用某種策略通過詞的上下文自動學習到表征向量。也就是說,當模型訓練結束了,詞向量也同時到手了。具體的過程可參考《文獻資料:文本特征》第二篇文章。
「詞向量」是一個劃時代的成果,為啥這么說呢?因為它真正把自然語言詞匯表征成一個可計算、可訓練的表示,帶來的直接效果就是自然語言一步跨入了深度學習時代——Embedding 后可以接各種各樣的模型架構,完成復雜的計算。
2.5 結果輸出
當用戶的輸入是一句話(或一段文檔)時,往往需要拿到整體的向量表示。在 Embedding 之前雖然也可以通過頻率統(tǒng)計得到,但難以進行后續(xù)的計算。Embedding 出現(xiàn)之后,方法就很多了,其中最簡單的當然是將每個詞的向量求和然后平均,復雜的話就是 Embedding 后接各種模型了。
那么在得到整個句子(或文檔)的向量表示后該如何得到最終的分類呢?很簡單,通過一個矩陣乘法,將向量轉為一個類別維度大小的向量。我們以二分類為例,就是將一個固定維度的句子或文檔向量變?yōu)橐粋€二維向量,然后將該二維向量通過一個非線性函數映射成概率分布。
舉個例子,假設最終的句子向量是一個 8 維的向量,w 是權重參數,計算過程如下:
這個最后的概率分布是啥意思呢?它分別表示結果為 0 和 1 的概率,兩者的和為 1.0。
您可能會有疑問或好奇:參數都是隨機的,最后輸出的分類不對怎么辦?這個其實就是模型的訓練過程了。簡單來說,最后輸出的概率分布會和實際的標簽做一個比對,然后這個差的部分會通過「反向傳播算法」不斷沿著模型網絡往回傳,從而可以更新隨機初始化的參數,直到最終的輸出和標簽相同或非常接近為止。此時,我們再用訓練好的網絡參數計算,就會得到正確的標簽。
03 模型簡史
這部分我們主要簡單回顧一下 NLP 處理情感分類任務模型發(fā)展的歷史,探討使用了什么方法,為什么使用該方法,有什么問題等。雖然您看到的是情感分類,其實也適用于其他類似的任務。

3.1 詞典/規(guī)則
在 NLP 發(fā)展的初級階段,詞典和規(guī)則的方法是主流。算法步驟也非常簡單:
事先收集好分別代表正向和負向的詞表。比如正向的「開心、努力、積極」,負向的「難過、垃圾、郁悶」
對給定的文本分詞
分別判斷包含正向和負向詞的數量
包含哪類詞多,結果就是哪一類
可以看出這個非常簡單粗暴,模型就是這兩個詞表,整個算法的核心就是「基于匹配」,實際匹配時,考慮到性能一般會使用 Trie 或自動機進行匹配。這種方法的主要特點包括:
簡單:意味著成本低廉,非常容易實施。
歧義:因為一個個詞是獨立的,沒有考慮上下文,導致在否定、多重否定、反問等情況下會失敗,比如「不開心、不得不努力、他很難過?不!」
無法泛化:詞表是固定的,沒有出現(xiàn)在詞表中的詞,或稍微有些變化(比如單個字變了)就會導致識別失敗。
雖然有不少問題,但詞典/規(guī)則方法直到現(xiàn)在依然是常用的方法之一,這背后根本的原因就在于我們在自然語言理解時往往會特別關注到其中的「關鍵詞」,而語序、助詞等往往沒啥別特影響^_^
3.2 機器學習
隨著統(tǒng)計在 NLP 領域的使用,「基于頻率」的方法開始風靡,最簡單常用的模型就是 Ngram,以及基于 Ngram 構建特征并將之運用在機器學習模型上。這一階段的主要特點是對數據進行「有監(jiān)督」地訓練,效果自然比上一種方法要好上很多。
Ngram 其實很簡單。比如給定一句話「人世間的成見就像一座大山」,如果以字為粒度,Bigram 結果是「人世 世間 間的……」,Trigram 自然就是「人世間 世間的 間的成……」,4-Gram,5-Gram 以此類推。不過實際一般使用 Bigram 和 Trigram 就夠了。
Ngram 本質是對句子進行語義分割(回想前面提到的「分詞的意義」),也可以看成是一種「分詞」。所以之前構建文本特征的 Token 也都可以換成 Ngram?,F(xiàn)在從概率角度考慮情感分類問題,其實就是解決下面這個式子:

這里給定的 Token 可以是字、詞或任意的 Ngram,甚至是彼此的結合。由于分母在不同類型下是一樣的,所以可以不考慮,主要考慮分子部分。又由于類別的概率一般是先驗的,因此最終就成了解決給定情感傾向得到給定 Token 序列的概率。上面的式子也叫貝葉斯公式,如果不考慮給定 Token 之間的相關性,就得到了樸素貝葉斯(Naive Bayes):

此時,我們只需要在正向和負向語料上分別計算 Token 的概率即可,這個過程也叫訓練,得到的模型其實是兩個 Token 概率表。有了這個模型,再有新的句子過來時,Token 化后,利用(2)式分別計算正向和負向的概率,哪個高,這個句子就是哪種類別。深度學習之前,Google 的垃圾郵件分類器就是用該算法實現(xiàn)的。
可以發(fā)現(xiàn),這種方法其實是考慮了兩種不同類型下,可能的 Token 序列概率,相比上一種方法容錯率得到了提高,泛化能力增加。需要注意的是,歧義本質是使用 Ngram 解決的,這也同樣適用于上一種方法。由于類似于直接查表,所以這種方法本質上是 OneHot 特征,只不過是直接用了 Token 本身(和它的概率)作為特征。另外,無論是哪種「文本特征」,都是可以直接運用在機器學習模型上進行計算訓練的。
這里的核心其實是「基于頻率」建模,實際會使用 Ngram,通過 OneHot、TF-IDF 等來構建特征。這種方法的主要問題是:維度災難、數據稀疏、詞孤立等,在『文本特征』一節(jié)已做相應介紹,這里不再贅述。
3.3 深度學習
深度學習時代最大的不同是使用了稠密的 Embedding,以及后面可接各式各樣的神經網絡,實際上是一種「基于上下文」的建模方式。我們以 NLP 領域經典的 TextCNN 架構來進行說明。

假設每個詞是 6 維的(如圖所示),每個詞旁邊的格子里都對應著該詞的 Embedding,整個那一片可以叫輸入句子的 Embedding 矩陣。我們現(xiàn)在假設有一個 3×6 的矩陣,里面的值是要學習的參數,一開始是隨機初始化的。這個 3×6 的矩陣叫 Kernel,它會沿著句子 Embedding 矩陣從上往下移動,圖例中的步幅是 1,每移動一步,Kernel 和 3 個詞的 Embedding 點乘后求和后得到一個值,最后就會得到一個一維向量(卷積層 Convolutional layer),然后取最大值或平均值(池化層 Pooling),就會得到一個值。如果我們每次使用一個值不一樣的 Kernel,就會得到一組不同的值,這個就構成了輸入句子的表征,通過類似前面『結果輸出』中的計算,就會得到最終的概率分布。
這里有幾點需要說明一下:
第一,我們可以使用多個不同大小的 Kernel,剛剛用了 3,還可以用 2、4 或 5,最后得到的向量會拼接在一起,共同作為句子的標準。
第二,Embedding 矩陣也是可以作為參數在訓練時初始化的,這樣模型訓練完了,Embedding 順便也就有了(此時因為最終結果都已經有了,往往該矩陣也沒啥意義,不需要單獨拿出來考慮),或者也可以直接使用已經訓練好的 Embedding 矩陣。
第三,除了 TextCNN 還有其他很多模型也可以做類似的事,大同小異。
Embedding 有效地解決了上一種方法的問題,但它本身也是有一些問題的,比如沒考慮外部知識,這就進入了我們下一個時代——預訓練模型。
3.4 預訓練+微調
預訓練模型「基于大規(guī)模語料訓練」,其本質是一種遷移學習——將大規(guī)模語料中的知識學習到模型中,然后用在各個實際的任務中,是對上一種方法的改進。我們以百度的 ERNIE 為例說明。

首先是它的輸入比上一種方法多了新的信息,但最終每個 Token 依然會得到一個 Embedding,然后經過一個復雜的預訓練模型 ERNIE 就會得到最終的輸出向量(類似上個方法的中間步驟),進而就可以得到標簽的概率分布。預訓練模型已經在很多 NLP 任務上達到了最好的效果。
當然,要說預訓練模型有什么不好,那就是太大太貴了,大是指模型大以及參數規(guī)模大(起碼上億),貴則是訓練過程需要消耗的資源很多。不過大多數情況下,我們并不需要自己訓練一個,只要使用開源的即可,因為預訓練的語料足夠大,幾乎涵蓋了所有領域,大部分時候會包含您任務所需要的信息。
以上涉及的代碼可以參考:http://nbviewer.org/github/hscspring/All4NLP/blob/master/Senta/senta.ipynb
04 探討展望
4.1 實際應用
上面介紹了那么多的方法和模型,這里主要探討一下在實際應用過程中的一些取舍和選擇。
規(guī)則 VS 模型:純規(guī)則、純模型和兩者結合的方法都有。規(guī)則可控,但維護起來不容易,尤其當規(guī)模變大時,規(guī)則重復、規(guī)則沖突等問題就會冒出來;模型維護簡單,有 bad case 重新訓練一下就行,但可能需要增加語料,另外過程也不能干預。實際中,簡單任務可以使用純模型,復雜可控任務可以使用模型+規(guī)則組合,模型負責通用大多數,規(guī)則覆蓋長尾個案。
深度 VS 傳統(tǒng):這個選擇其實比較簡單,當業(yè)務需要可解釋時,可以選擇傳統(tǒng)的機器學習模型,沒有這個限制時,應優(yōu)先考慮深度學習。
簡單 VS 復雜:當任務簡單,數據量不大時,可以用簡單模型(如 TextCNN),此時用復雜模型未必效果更好;但是當任務復雜,數據量比較多時,復雜模型基本上是碾壓簡單模型的。
總而言之,使用什么方案要綜合考慮具體的任務、數據、業(yè)務需要、產品規(guī)劃、資源等多種因素后確定。
4.2 情感的未來
主要簡單暢想一下未來,首先可以肯定的是未來一定是圍繞著更深刻的語義理解發(fā)展的。從目前的發(fā)展看,主要有以下幾個方向。
1、多模態(tài):多種不同形態(tài)的輸入結合。包括:文本、圖像、聲音等,或者文本、視頻。這個也是目前比較前沿的研究方向,其實也是很容易理解的。因為我們人類往往都會察言觀色,聽話聽音,其實就是從多個渠道接收到「信息」。換成機器,自然也可以做類似的事情,預期來看,效果必然是有提升的。舉個例子,比如就是簡單的「哈哈哈哈」幾個字,如果單純從文本看就是「大笑」,但如果配上圖像和聲音,那可能就變成「狂暴」、「淫邪」、「假笑」等可能了。
2、深度語義:綜合考慮率多種影響因素。包括:環(huán)境、上下文、背景知識。這點和第一點類似,也是盡量將場景「真實化」。
環(huán)境指的是對話雙方當前所處的環(huán)境,比如現(xiàn)在是冬天,但用戶說「房間怎么這么熱」,其實可能是因為房間空調或暖氣開太高。如果不考慮環(huán)境,可能就會難以理解(這對人來說也是一樣的)。
上下文指的是對話中的歷史信息,比如開始對話時用戶說「今天有點感冒」,后面如果再說「感覺有點冷」,那可能是生病導致的。如果沒有這樣的上下文記憶,對話可能看起來就有點傻,對情感的理解和判斷也會不準確。其實上下文在多輪對話中已有部分應用,但還遠遠不夠,主要是難以將和用戶所有的歷史對話都結構化地「連接」在一起。目前常用的也是根據用戶的「行為」數據對其「畫像」。
背景知識是指關于世界認知的知識。比如用戶說「年輕人,耗子尾汁」,如果機器人沒有關于馬保國相關的背景知識就很難理解這句話是啥意思。這塊目前在實踐的是知識圖譜,其實就是在做出判斷時,多考慮一部分背景知識的信息。
3、多方法:綜合使用多種方法。包括:知識圖譜、強化學習和深度學習。這是從方法論的角度進行思考,知識圖譜主要是世界萬物及其基本關系進行建模;強化學習則是對事物運行的規(guī)則建模;而深度學習主要考慮實例的表征。多種方法組合成一個立體完整的系統(tǒng),這里有篇不成熟的胡思亂想對此進行了比較詳細的闡述。
文獻資料
這部分作為擴展補充,對相應領域有興趣的伙伴可以順著鏈接了解一下:
業(yè)界應用
?情感分析技術在美團的探索與應用:https://mp.weixin.qq.com/s/gXyH4JrhZI2HHd5CsNSvTQ
?情感計算在UGC應用進展:https://mp.weixin.qq.com/s/FYjOlksOxb255CvNLqFjAg
預處理
NLP 中的預處理:使用 Python 進行文本歸一化:https://cloud.tencent.com/developer/article/1625962)
當你搜索時,發(fā)生了什么?(中) | 人人都是產品經理:http://www.woshipm.com/pd/4680562.html
全面理解搜索 Query:當你在搜索引擎中敲下回車后,發(fā)生了什么?:https://zhuanlan.zhihu.com/p/112719984
Tokenize
深入理解NLP Subword算法:BPE、WordPiece、ULM:https://zhuanlan.zhihu.com/p/86965595
Byte Pair Encoding — The Dark Horse of Modern NLP:https://towardsdatascience.com/byte-pair-encoding-the-dark-horse-of-modern-nlp-eb36c7df4f10
文本特征
The Curse of Dimensionality in Classification:https://www.visiondummy.com/2014/04/curse-dimensionality-affect-classification/
word2vec 前世今生:https://www.cnblogs.com/iloveai/p/word2vec.html
情感未來
多模態(tài)情感分析簡述:https://www.jiqizhixin.com/articles/2019-12-16-7
千言數據集:情感分析:https://aistudio.baidu.com/aistudio/competition/detail/50/0/task-definition
