天天看點

【NLP】從整體視角了解情感分析、文本分類!

作者:太子長琴,算法工程師,Datawhale成員

文本分類是自然語言處理(NLP)最基礎核心的任務,或者換句話說,幾乎所有NLP任務都是「分類」任務,或者涉及到「分類」概念。比如分詞、詞性标注、命名實體識别等序列标注任務其實就是Token粒度的分類;再比如文本生成其實也可以了解為Token粒度在整個詞表上的分類任務。

本文側重于從宏觀角度(曆史演變和基本流程)對文本情感分類任務進行介紹,目的是給讀者提供一個整體視角,從高遠處審視情感分析、文本分類、甚至NLP,期望能抛磚引玉,引發讀者更多的思考。

本文同樣适合于非算法崗位的工程師,以及沒有技術背景但對NLP感興趣的夥伴。

本文篇幅較長,主要分為四個部分。

背景介紹:簡單介紹情感分析相關的概念、類型,并和文本分類任務對應。

基本流程:文本分類(或常見的NLP任務)基本處理流程。

模型簡史:NLP處理任務中模型變遷的簡單曆史。

情感未來:探讨未來情感分析可能的發展方向。

01 背景介紹

情感分析是根據輸入的文本、語音或視訊,自動識别其中的觀點傾向、态度、情緒、評價等,廣泛應用于消費決策、輿情分析、個性化推薦等商業領域。包括篇章級、句子級和對象或屬性級。可以分為以下三類:

【NLP】從整體視角了解情感分析、文本分類!

工業界最常見的往往是這種情況。比如大衆點評某家餐飲店下的評論:“服務非常贊,但味道很一般”,這句話其實表達了兩個意思,或者說兩個對象(屬性)的評價,我們需要輸出類似:<服務,正向>和<口味,負向>這樣的結果(<屬性-傾向>二進制組),或者再細一點加入使用者的觀點資訊(<屬性-觀點-傾向>三元組):<服務,贊,正向>和<口味,一般,負向>。這樣的結果才更有實際意義。

從 NLP 處理的角度看,情感分析包括兩種基礎任務:文本分類和實體對象或屬性抽取,而這也正好涵蓋了 NLP 的兩類基本任務:序列分類(Sequence Classification)和 Token 分類(Token Classification)。兩者的差別是,前者輸出一個标簽,後者每個 Token 輸出一個标簽。

02 基本流程

一般來說,NLP 任務的基本流程主要包括以下五個:

【NLP】從整體視角了解情感分析、文本分類!

2.1 文本預處理

文本預處理主要是對輸入文本「根據任務需要」進行的一系列處理。

文本清理:去除文本中無效的字元,比如網址、圖檔位址,無效的字元、空白、亂碼等。

标準化:主要是将不同的「形式」統一化。比如英文大小寫标準化,數字标準化,英文縮寫标準化,日期格式标準化,時間格式标準化,計量機關标準化,标點符号标準化等。

糾錯:識别文本中的錯誤,包括拼寫錯誤、詞法錯誤、句法錯誤、語義錯誤等。

改寫:包括轉換和擴充。轉換是将輸入的文本或 Query 轉換為同等語義的另一種形式,比如拼音(或簡拼)轉為對應的中文。擴充主要是講和輸入文本相關的内容一并作為輸入。常用在搜尋領域。

需要注意的是,這個處理過程并不一定是按照上面的順序從頭到尾執行的,可以根據需要靈活調整,比如先糾錯再标準化或将标準化放到改寫裡面。咱們不能被這些眼花缭亂的操作迷惑,始終謹記,文本預處理的目的是将輸入的文本變為已有系統「喜歡且接受」的形式。舉個例子,比如系統在訓練時都使用「單車」作為自行車的稱呼,那預處理時就應該把自行車、Bike、Bicycle 等都轉為單車。或者甚至系統用了某個錯别字,那輸入也要變成對應的錯别字。

2.2 Tokenizing(分詞)

主要目的是将輸入的文本 Token 化,它涉及到後續将文本轉為向量。一般主要從三個粒度進行切分:

字級别:英文就是字母級别,操作起來比較簡單。

詞級别:英文不需要,中文可能會需要。關于中文分詞,之前寫過一點思考,簡單來說,分詞主要是「分割語義」,降低不确定性,要不要分詞一般要看任務和模型。

子詞:包括BPE(Byte Pair Encoding),WordPieces,ULM(Unigram Language Model)等。在英文中很常見,當然中文也可以做,是介于字級别和詞級别中間的一種粒度。主要目的是将一些「統一高頻」的形式單獨拎出來。比如英文中 ​

​de​

​​ 開頭的字首,或者最進階 ​

​est​

​ 等等。子詞一般是在大規模語料上通過統計「頻率」自動學習到的。

我們需要知道的是,字和詞并非哪個一定比另一個好,都要需要根據具體情況具體分析的。它們的特點如下:

粒度
詞表大小 固定 無法窮盡
未識别詞(OOV) 沒有 典型問題,長尾、稀疏性
參數/計算量 Token 變少,參數少,計算快
語義/模組化複雜度 有不确定性 攜帶語義,能夠降低不确定性

注:OOV=Out Of Vocabulary

2.3 構造資料

文本經過上一步後會變成一個個 Token,接下來就是根據後續需要将 Token 轉為一定形式的輸入,可能就是 Token 序列本身,也可能是将 Token 轉為數字,或者再加入新的資訊(如特殊資訊、Token 類型、位置等)。我們主要考慮後兩種情況。

Token 轉數字:就是将每個「文本」的 Token 轉為一個整數,一般就是它在詞表中的位置。根據後續模型的不同,可能會有一些特殊的 Token 加入,主要用于「分割輸入」,其實就是個「标記」。不過有兩個常用的特殊 Token 需要稍加說明:​

​<UNK>​

​​ 和 ​

​<PAD>​

​​,前者表示「未識别 Token」,UNK=Unknown,後者表示「填充 Token」。因為我們在實際使用時往往會批量輸入文本,而文本長度一般是不相等的,這就需要将它們都變成統一的長度,也就是把短的用 ​

​<PAD>​

​​ 填充上。​

​<PAD>​

​ 一般都放在詞表第一個位置,index 為 0,這樣有個好處就是我們在計算時,0 的部分可以友善地處理掉(它們是「填充」上去的,本來就算不得數)。

加入新的資訊:又可以進一步分為「在文本序列上加入新的資訊」和「加入和文本序列平行的資訊」。

  • 序列上新增資訊:輸入的文本序列有時候不一定『隻』是一句話,還可能會加入其他資訊,比如:「公司旁邊的螺蛳粉真的太好吃了。<某種特殊分隔符>螺蛳粉<可能又一個分隔符>好吃」。是以,準确來說,應該叫「輸入序列」。
  • 新增平行資訊:有時候除了輸入的文本序列,還需要其他資訊,比如位置、Token 類型。這時候就會有和 Token 序列 Token 數一樣的其他序列加入,比如絕對位置資訊,如果輸入的句子是「今天吃了螺蛳粉很開心」,對應的位置編碼是「1 2 3 4 5 6 7 8 9 10」。

需要再次強調的是,這一步和後續使用的模型直接相關,要根據具體情況進行相應處理。

2.4 文本特征

根據上面構造的資料,文本特征(也可以看作對文本的表征)從整體來看可以分為兩個方面:Token 直接作為特征和 Token(或其他資訊)編碼成數字,然後轉成向量作為特征。這一小節咱們主要介紹一下從 Token 到特征形态發生了哪些變化,至于怎麼去做這種轉換,為什麼,下一節《模型發展》中會做進一步分析。

a. OneHot

首先,要先明确下輸入的文本最終要變成什麼樣子,也就是特征的外形長啥樣。注意,之前得到的整數并不能直接放到模型裡去計算,因為數字的大小并沒有語義資訊。

那麼,最簡單的表示方式就是某個 Token 是否出現在給定的輸入中。我們假設實作已經有一個做好的很大的詞表,裡面有 10w 個 Token。當我們給定 Token 序列時,詞表中的每個 Token 是否出現在給定的序列中就可以構造出一個 01 向量:

[0, 0, 1, 0, ..., 0, 1] # 10w 個      

其中 1 表示那個位置的 Token 在出現在了給定的序列中,0 則表示未出現。可以想象,對于幾乎所有的輸入,對應的 01 向量絕大多數的位置都是 0。假設有 m 個句子,那麼會得到一個矩陣:

# m * 10w
[[0, 0, 1, 0, ..., 0, 1],
 [0, 1, 0, 0, ..., 0, 0],
 [0, 0, 1, 1, ..., 0, 1],
 [0, 1, 1, 0, ..., 0, 0],
 ...
 [1, 0, 0, 0, ..., 0, 1]]      

其中的每一列就表示該位置 Token 的向量表示,換句話說,在表示句子的同時,Token 也被成功地表示成了一個向量。

上面的這種編碼方式就叫 OneHot 編碼,也就是把 Token 編成一個隻有一個 1 其餘全是 0 的向量,然後通過在語料上計算(訓練)得到最後的表示。

b. TF-IDF

聰明的您一定會想到,既然可以用「出現」或「不出現」來表示,那為啥不用頻率呢?沒錯,我們可以将上面的 1 都換成該詞在每個句子中出現的頻率,歸一化後就是機率。由于自然語言的「齊夫定律」,高頻詞會很自然地占據了主導地位,這對向量表示大有影響,想象一下,那些機率較高的詞幾乎在所有句子中出現,它們的值也會更大,進而導緻最終的向量表示向這些詞傾斜。

齊夫定律:在自然語言語料庫中,一個單詞出現的頻率與它在頻率表裡的排名成反比。即第 n 個常見的頻率是最常見頻率的 1/n。舉個例子來說,中文的「的」是最常見的詞,排在第 1 位,比如第 10 位是「我」,那「我」的頻率就是「的」頻率的 1/10。

于是,很自然地就會想到使用某種方式去平和這種現象,讓真正的高頻詞凸顯出來,而降一些類似的、是這種常見詞的影響下降。咱們很自然就會想到,能不能把這些常見詞從詞表給剔除掉。哎,是的。這種類似的常見詞有個專業術語叫「停用詞」,一般呢,停用詞主要是虛詞居多,包括助詞、連詞、介詞、語氣詞等,但也可能會包括一些「沒用」的實詞,需要根據實際情況處理。

除了停用詞,還有另一種更巧妙的手段處理這個問題——TF-IDF,TF=Term Frequency,IDF=Inverse Document Frequency。TF 就是剛剛提到的詞頻,這不是有些常用詞嗎,這時候 IDF 來了,它表示「有多少個文檔包含那個詞」,具體等于​

​文檔總數/包含該詞的文檔數​

​。比如「的」在一句話(或一段文檔)中機率很高,但幾乎所有句子(或文檔)都有「的」,IDF 接近 1;相反如果一個詞在句子中機率高,但包含該詞的文檔比較少,IDF 就比較大,最後結果也大。而這是滿足我們預期的——詞在單個文檔或句子中是高機率的,但在所有文檔或句子中是低機率的,這不正說明這個詞對所在文檔或句子比較重要嗎。實際運算時,一般會取對數,并且防止 0 除:

這時候的向量雖然看着不是 OneHot,但其實本質還是,隻是在原來是 1 的位置,變成了一個小數。

c. Embedding

剛剛的得到的矩陣最大的問題是次元太大,資料稀疏(就是絕大部分位置是 0),而且詞和詞之間是孤立的。最後這個問題不用多解釋,這樣建構的特征肯定「不全面」。但是次元太大和資料稀疏又有什麼影響呢?首先說前者,在《文獻資料:文本特征》第一篇文章提到了在超高次元下的反直覺現象——資料不會變的更均勻,反而會聚集在高維空間的角落,這會讓模型訓練特别困難。再說後者,直覺來看,資料稀疏最大的問題是使得向量之間難以互動,比如「出差住酒店」和「出差住旅店」,酒店和旅店在這裡意思差不多,但模型卻無法學習到。

既然如此,先輩們自然而然就想能不能用一個連續稠密、且次元固定的向量來表示。然後,大名鼎鼎的「詞向量」就登場了——它将一個詞表示為一個固定次元大小的稠密向量。具體來說,就是首先随機初始化固定次元大小的稠密向量,然後用某種政策通過詞的上下文自動學習到表征向量。也就是說,當模型訓練結束了,詞向量也同時到手了。具體的過程可參考《文獻資料:文本特征》第二篇文章。

「詞向量」是一個劃時代的成果,為啥這麼說呢?因為它真正把自然語言詞彙表征成一個可計算、可訓練的表示,帶來的直接效果就是自然語言一步跨入了深度學習時代——Embedding 後可以接各種各樣的模型架構,完成複雜的計算。

2.5 結果輸出

當使用者的輸入是一句話(或一段文檔)時,往往需要拿到整體的向量表示。在 Embedding 之前雖然也可以通過頻率統計得到,但難以進行後續的計算。Embedding 出現之後,方法就很多了,其中最簡單的當然是将每個詞的向量求和然後平均,複雜的話就是 Embedding 後接各種模型了。

那麼在得到整個句子(或文檔)的向量表示後該如何得到最終的分類呢?很簡單,通過一個矩陣乘法,将向量轉為一個類别次元大小的向量。我們以二分類為例,就是将一個固定次元的句子或文檔向量變為一個二維向量,然後将該二維向量通過一個非線性函數映射成機率分布。

舉個例子,假設最終的句子向量是一個 8 維的向量,w 是權重參數,計算過程如下:

import numpy as np

rng = np.random.default_rng(seed=42)
embed = rng.normal(size=(1, 8)).round(2)
# array([[ 0.3 , -1.04,  0.75,  0.94, -1.95, -1.3 ,  0.13, -0.32]])  次元=1*8
w = rng.normal(size=(8, 2)).round(2)
""" 次元=8*2
array([[-0.02, -0.85],
       [ 0.88,  0.78],
       [ 0.07,  1.13],
       [ 0.47, -0.86],
       [ 0.37, -0.96],
       [ 0.88, -0.05],
       [-0.18, -0.68],
       [ 1.22, -0.15]])
"""
z = embed @ b # 矩陣乘法
# array([[-2.7062,  0.8695]]) 次元=1*2

def softmax(x): 
    return np.exp(x) / np.sum(tf.exp(x), axis=1)

softmax(z)
# array([[0.0272334, 0.9727666]])      

這個最後的機率分布是啥意思呢?它分别表示結果為 0 和 1 的機率,兩者的和為 1.0。

您可能會有疑問或好奇:參數都是随機的,最後輸出的分類不對怎麼辦?這個其實就是模型的訓練過程了。簡單來說,最後輸出的機率分布會和實際的标簽做一個比對,然後這個差的部分會通過「反向傳播算法」不斷沿着模型網絡往回傳,進而可以更新随機初始化的參數,直到最終的輸出和标簽相同或非常接近為止。此時,我們再用訓練好的網絡參數計算,就會得到正确的标簽。

03 模型簡史

這部分我們主要簡單回顧一下 NLP 處理情感分類任務模型發展的曆史,探讨使用了什麼方法,為什麼使用該方法,有什麼問題等。雖然您看到的是情感分類,其實也适用于其他類似的任務。

【NLP】從整體視角了解情感分析、文本分類!

3.1 詞典/規則

在 NLP 發展的初級階段,詞典和規則的方法是主流。算法步驟也非常簡單:

  • 事先收集好分别代表正向和負向的詞表。比如正向的「開心、努力、積極」,負向的「難過、垃圾、郁悶」
  • 對給定的文本分詞
  • 分别判斷包含正向和負向詞的數量
  • 包含哪類詞多,結果就是哪一類

可以看出這個非常簡單粗暴,模型就是這兩個詞表,整個算法的核心就是「基于比對」,實際比對時,考慮到性能一般會使用 Trie 或自動機進行比對。這種方法的主要特點包括:

簡單:意味着成本低廉,非常容易實施。

歧義:因為一個個詞是獨立的,沒有考慮上下文,導緻在否定、多重否定、反問等情況下會失敗,比如「不開心、不得不努力、他很難過?不!」

無法泛化:詞表是固定的,沒有出現在詞表中的詞,或稍微有些變化(比如單個字變了)就會導緻識别失敗。

雖然有不少問題,但詞典/規則方法直到現在依然是常用的方法之一,這背後根本的原因就在于我們在自然語言了解時往往會特别關注到其中的「關鍵詞」,而語序、助詞等往往沒啥别特影響^_^

3.2 機器學習

随着統計在 NLP 領域的使用,「基于頻率」的方法開始風靡,最簡單常用的模型就是 Ngram,以及基于 Ngram 建構特征并将之運用在機器學習模型上。這一階段的主要特點是對資料進行「有監督」地訓練,效果自然比上一種方法要好上很多。

Ngram 其實很簡單。比如給定一句話「人世間的成見就像一座大山」,如果以字為粒度,Bigram 結果是「人世 世間 間的……」,Trigram 自然就是「人世間 世間的 間的成……」,4-Gram,5-Gram 以此類推。不過實際一般使用 Bigram 和 Trigram 就夠了。

Ngram 本質是對句子進行語義分割(回想前面提到的「分詞的意義」),也可以看成是一種「分詞」。是以之前建構文本特征的 Token 也都可以換成 Ngram。現在從機率角度考慮情感分類問題,其實就是解決下面這個式子:

情感傾向給定序列)給定序列情感傾向情感傾向給定序列給定序列情感傾向

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

給定序列情感傾向情感傾向情感傾向情感傾向

此時,我們隻需要在正向和負向語料上分别計算 Token 的機率即可,這個過程也叫訓練,得到的模型其實是兩個 Token 機率表。有了這個模型,再有新的句子過來時,Token 化後,利用(2)式分别計算正向和負向的機率,哪個高,這個句子就是哪種類别。深度學習之前,Google 的垃圾郵件分類器就是用該算法實作的。

可以發現,這種方法其實是考慮了兩種不同類型下,可能的 Token 序列機率,相比上一種方法容錯率得到了提高,泛化能力增加。需要注意的是,歧義本質是使用 Ngram 解決的,這也同樣适用于上一種方法。由于類似于直接查表,是以這種方法本質上是 OneHot 特征,隻不過是直接用了 Token 本身(和它的機率)作為特征。另外,無論是哪種「文本特征」,都是可以直接運用在機器學習模型上進行計算訓練的。

這裡的核心其實是「基于頻率」模組化,實際會使用 Ngram,通過 OneHot、TF-IDF 等來建構特征。這種方法的主要問題是:次元災難、資料稀疏、詞孤立等,在『文本特征』一節已做相應介紹,這裡不再贅述。

3.3 深度學習

深度學習時代最大的不同是使用了稠密的 Embedding,以及後面可接各式各樣的神經網絡,實際上是一種「基于上下文」的模組化方式。我們以 NLP 領域經典的 TextCNN 架構來進行說明。

【NLP】從整體視角了解情感分析、文本分類!

假設每個詞是 6 維的(如圖所示),每個詞旁邊的格子裡都對應着該詞的 Embedding,整個那一片可以叫輸入句子的 Embedding 矩陣。我們現在假設有一個 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 預訓練+微調

預訓練模型「基于大規模語料訓練」,其本質是一種遷移學習——将大規模語料中的知識學習到模型中,然後用在各個實際的任務中,是對上一種方法的改進。我們以百度的 ERNIE 為例說明。

【NLP】從整體視角了解情感分析、文本分類!

首先是它的輸入比上一種方法多了新的資訊,但最終每個 Token 依然會得到一個 Embedding,然後經過一個複雜的預訓練模型 ERNIE 就會得到最終的輸出向量(類似上個方法的中間步驟),進而就可以得到标簽的機率分布。預訓練模型已經在很多 NLP 任務上達到了最好的效果。

當然,要說預訓練模型有什麼不好,那就是太大太貴了,大是指模型大以及參數規模大(起碼上億),貴則是訓練過程需要消耗的資源很多。不過大多數情況下,我們并不需要自己訓練一個,隻要使用開源的即可,因為預訓練的語料足夠大,幾乎涵蓋了所有領域,大部分時候會包含您任務所需要的資訊。

以上涉及的代碼可以參考:http://nbviewer.org/github/hscspring/All4NLP/blob/master/Senta/senta.ipynb

04 探讨展望

4.1 實際應用

上面介紹了那麼多的方法和模型,這裡主要探讨一下在實際應用過程中的一些取舍和選擇。

規則 VS 模型:純規則、純模型和兩者結合的方法都有。規則可控,但維護起來不容易,尤其當規模變大時,規則重複、規則沖突等問題就會冒出來;模型維護簡單,有 bad case 重新訓練一下就行,但可能需要增加語料,另外過程也不能幹預。實際中,簡單任務可以使用純模型,複雜可控任務可以使用模型+規則組合,模型負責通用大多數,規則覆寫長尾個案。

深度 VS 傳統:這個選擇其實比較簡單,當業務需要可解釋時,可以選擇傳統的機器學習模型,沒有這個限制時,應優先考慮深度學習。

簡單 VS 複雜:當任務簡單,資料量不大時,可以用簡單模型(如 TextCNN),此時用複雜模型未必效果更好;但是當任務複雜,資料量比較多時,複雜模型基本上是碾壓簡單模型的。

總而言之,使用什麼方案要綜合考慮具體的任務、資料、業務需要、産品規劃、資源等多種因素後确定。

4.2 情感的未來

主要簡單暢想一下未來,首先可以肯定的是未來一定是圍繞着更深刻的語義了解發展的。從目前的發展看,主要有以下幾個方向。

1、多模态:多種不同形态的輸入結合。包括:文本、圖像、聲音等,或者文本、視訊。這個也是目前比較前沿的研究方向,其實也是很容易了解的。因為我們人類往往都會察言觀色,聽話聽音,其實就是從多個管道接收到「資訊」。換成機器,自然也可以做類似的事情,預期來看,效果必然是有提升的。舉個例子,比如就是簡單的「哈哈哈哈」幾個字,如果單純從文本看就是「大笑」,但如果配上圖像和聲音,那可能就變成「狂暴」、「淫邪」、「假笑」等可能了。

2、深度語義:綜合考慮率多種影響因素。包括:環境、上下文、背景知識。這點和第一點類似,也是盡量将場景「真實化」。

環境指的是對話雙方目前所處的環境,比如現在是冬天,但使用者說「房間怎麼這麼熱」,其實可能是因為房間空調或暖氣開太高。如果不考慮環境,可能就會難以了解(這對人來說也是一樣的)。

上下文指的是對話中的曆史資訊,比如開始對話時使用者說「今天有點感冒」,後面如果再說「感覺有點冷」,那可能是生病導緻的。如果沒有這樣的上下文記憶,對話可能看起來就有點傻,對情感的了解和判斷也會不準确。其實上下文在多輪對話中已有部分應用,但還遠遠不夠,主要是難以将和使用者所有的曆史對話都結構化地「連接配接」在一起。目前常用的也是根據使用者的「行為」資料對其「畫像」。

背景知識是指關于世界認知的知識。比如使用者說「年輕人,耗子尾汁」,如果機器人沒有關于馬保國相關的背景知識就很難了解這句話是啥意思。這塊目前在實踐的是知識圖譜,其實就是在做出判斷時,多考慮一部分背景知識的資訊。

3、多方法:綜合使用多種方法。包括:知識圖譜、強化學習和深度學習。這是從方法論的角度進行思考,知識圖譜主要是世界萬物及其基本關系進行模組化;強化學習則是對事物運作的規則模組化;而深度學習主要考慮執行個體的表征。多種方法組合成一個立體完整的系統,這裡有篇不成熟的胡思亂想對此進行了比較詳細的闡述。

文獻資料

這部分作為擴充補充,對相應領域有興趣的夥伴可以順着連結了解一下:

  • 業界應用

 情感分析技術在美團的探索與應用:https://mp.weixin.qq.com/s/gXyH4JrhZI2HHd5CsNSvTQ

 情感計算在UGC應用進展:https://mp.weixin.qq.com/s/FYjOlksOxb255CvNLqFjAg

  • 預處理

NLP 中的預處理:使用 Python 進行文本歸一化:https://cloud.tencent.com/developer/article/1625962)

當你搜尋時,發生了什麼?(中) | 人人都是産品經理:http://www.woshipm.com/pd/4680562.html

全面了解搜尋 Query:當你在搜尋引擎中敲下回車後,發生了什麼?: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/

  • 情感未來

多模态情感分析簡述:https://www.jiqizhixin.com/articles/2019-12-16-7

千言資料集:情感分析:https://aistudio.baidu.com/aistudio/competition/detail/50/0/task-definition

【NLP】從整體視角了解情感分析、文本分類!

太子長琴

算法工程師

個人部落格:https://yam.gift/

作品推薦:我轉行AI的成長心得