簡潔詳盡講解文本聚類

2021-01-10 AI火箭營

起初,用於單詞和文檔的聚類的大量方法似乎不勝枚舉,讓我們仔細研究其中幾種。

本文涵蓋的主題包括k均值,布朗聚類,tf-idf聚類,主題模型和潛在的Dirichlet分配(也稱為LDA)。

聚類是數據科學中最大的主題之一,其規模如此之大,以至於你很容易會發現有大量書籍正探討它的每一個細節。文本聚類的子主題也不例外。因此,雖然本文無法提供詳盡的概述,但是本文涵蓋了它的主要方面。話雖如此,讓我們從共識開始,什麼是聚簇,什麼不是聚簇。

實際上,聚簇不過是包含相似對象的組。聚類是用於將對象分為這些組的過程。

聚簇內部的對象應儘可能相似。不同聚簇中的對象應儘可能不同。但是誰定義「相似」的含義呢?我們將稍後再講。

現在,你可能已經聽說過分類。在對對象進行分類時,還可以將它們分為不同的組,但是它和聚簇相比有一些重要的區別。分類是指根據具有組際隸屬關係的已知對象,將之前未曾見過的新對象放入組中,新對象也就是所謂的訓練數據。這意味著我們可以有可靠的東西與新對象進行比較。但進行聚類時,我們是從一塊空白畫布開始:所有對象都是新對象!因此,我們將分類稱為一種監督方法,而聚類則是一種無監督的方法。

這也意味著用於分類的正確數目的組是已知的,而在聚類中則沒有這樣的數目。請注意,它不僅未知且根本不存在,我們要根據自己的目的選擇合適數量的聚簇。很多時候,這意味著嘗試後選擇效果最好的一種。

聚類的種類

在深入研究具體的聚類算法之前,讓我們首先建立一些描述和區分它們的方法。以下幾種方法可以實現:

在硬集群中,每個對象都完全屬於一個聚簇。

在軟集群中,一個對象可以屬於一個或多個聚簇。成員資格可以是部分的,也就是說比某些聚簇,對象屬於另一些聚簇的可能性高。

在分層集群中,集群以分層方式迭代組合,最終以一個根聚簇結束。

你還可以將層次結構聚類視為二叉樹。所有不遵循該原理的聚類方法都可以簡單地描述為扁平聚類,但有時也稱為非分層或非聚類方法。你通常可以通過在你選擇的級別上水平「切割」樹來將分層聚類轉換為平坦聚類。

分層聚類的樹形圖稱為樹狀圖。連接在較低層級上的對象比連接在樹上較高層的對象更相似。

分層方法可以進一步分為兩個子類別。

聚集(「自下而上」)方法首先將每個對象放入其自己的群集中,然後繼續統一它們。

分開的方法(「自上而下」)的作用相反:它們從根開始並不斷分割,直到只剩下單個對象為止。

分層聚類的樹形圖稱為樹狀圖。連接在較低層級上的對象比連接在樹上較高層的對象更相似。

分層方法可以進一步分為兩個子類別。

聚集(「自下而上」)方法首先將每個對象放入其自己的群集中,然後繼續統一它們。

分開的方法(「自上而下」)的作用相反:它們從根開始並不斷分割,直到只剩下單個對象為止。

你獲取一些數據,用你選擇的聚類算法和ta-da,就完成了!儘管從理論上講可能是可行的,但事實通常並非如此。尤其是在處理文本時,在聚類之前和之後必須執行幾個步驟。實際上,對文本進行聚類的過程通常是混亂的,並且以諸多失敗的試驗為標誌。但是,如果嘗試以理想的線性方式繪製它,它可能看起來像這樣:

還有一些額外的步驟,對吧?不用擔心-無論如何,你可能會出於直覺做到這一點。但是,自己最好考慮好每個步驟,並記住多種應對可能存在問題的解決方法。

聚類詞

在接下來的幾段中,我們將研究單詞的聚類方法。讓我們看一下其中的一組:

對我們來說,我們可以立即看出哪些詞屬於同一詞。顯然應該有一個聚簇,其中的動物帶有單詞``Aardvark''和``Zebra'',一個聚簇中的副詞帶有``on''和``under''。但是對於計算機來說是否同樣明顯?

在談論具有相似含義的單詞時,我們通常會遵循語言學中的分布假設。該假設指出,具有相似含義的單詞將出現在相似單詞的上下文之間。你可以說「盒子在架子上」,也可以說「盒子在架子下」。並且仍然產生有意義的句子。「上」、「下」兩詞之間在一定程度上可以互換。

創建單詞嵌入時會使用此假設。單詞嵌入將詞彙表的每個單詞映射到n維向量空間。具有相似上下文的單詞將大致出現在向量空間的相同區域中。其中的一種嵌入是Weston,Ratle和Collobert在2008年開發的。在此處你可以看到單詞向量一個有趣的部分(使用t-SNE縮減為二維):

請注意,月份,名稱和位置是如何整齊地分組在一起,這將在下一步將它們聚類時派上用場。

K均值

現在,我們將看一下最著名的基於矢量的聚類算法:k均值。k均值的作用是將一個聚類分配返回給每個對象的k個可能聚類之一。概括一下我們先前學到的東西,這是一個困難的,平坦的集群方法。讓我們看看k均值過程的樣子:

K均值在向量空間中分配k個隨機點作為k個簇的初始虛擬均值。然後,將每個數據點分配給平均值最近的聚類。接下來,重新計算每個聚類的實際平均值。根據均值的偏移,重新分配數據點。重複此過程,直到集群的平均值停止移動。

K表示它不是唯一的基於矢量的聚類方法。其他常用的方法包括DBSCAN,它是一種支持人口稠密的群集和期望最大化(EM)的方法,該方法假設每個群集的潛在概率分布。

布朗聚類

還有一些用於聚類單詞的方法,不需要這些單詞已經作為矢量可用。被引用最多的此類技術是Brown群集,該算法由Brown等人在1992年提出。(與以羅德島布朗大學命名的棕色語料庫無關)。

布朗聚類是一種分層聚類方法。如果在樹中的正確位置上進行切割,還可以產生漂亮而平坦的簇,如下所示:

你還可以查看小的子樹,找到包含近似同義詞的單詞對的聚類,例如評價和評估或會話和討論。

如何實現的?同樣,此方法依賴於分布假設。它引入了一個質量函數,描述了周圍的上下文單詞對當前聚類中單詞的出現的預測程度(所謂的互信息)。然後,它遵循以下過程:

通過將每個單詞分配給自己的唯一聚簇來初始化。

直到只剩下一個簇(根):合併兩個產生的併集具有最佳質量函數值的簇。

這就是為什麼評價和評估這麼早就合併的原因。由於兩者都出現在極為相似的環境中,因此上面的質量函數仍然提供了非常好的價值。我們從逐漸統一的單個元素簇開始的事實意味著該方法是聚集的。

今天布朗平均值仍然有在使用!在Owoputi等人的出版物中(2013)棕色聚類法被用來尋找在線會話語言中應有的語音標籤部分。結果既有趣又準確:

雖然本段結束了關於單詞聚類的章節,但本文中沒有討論單詞聚類更多的方法。一種非常有前途和高效的詞聚類方法是基於圖的聚類,也稱為譜聚類。使用的方法包括基於最小生成樹的聚類,馬爾可夫鏈聚類。

聚類文件

通常,也可以通過查看矢量格式的每個文檔來完成文檔的聚類。但是文檔很少有上下文。你可以想像一本書在整潔的書架上與其他書籍並排站立,但是通常這不是大型數字文檔看起來的樣子。

向量化文檔的最快方法是給字典中的每個單詞賦予其自己的向量維數,然後僅對每個單詞和每個文檔的出現次數進行計數。這種不考慮單詞順序而查看文檔的方式稱為``詞袋法''。牛津英語詞典包含300,000多個主要條目,不包括同形異義詞。這是一個很大的維度,並且大多數維度可能會獲得零值。

在一定程度上,你可以通過刪除文檔集合中未使用的所有單詞維來抵消此問題,但最終仍然會遇到很多維。而且,如果你突然看到一個包含先前未使用過的單詞的新文檔,則必須更新每個文檔向量,並為其添加新維度和零值。因此,為簡單起見,假設我們的文檔收集沒有增長。

tf-idf

請看下面的小玩具示例,其中僅包含兩個簡短文檔d1和d2,以及由此產生的單詞向量包:

你會看到,像「我」和「愛」這樣的抽象的單詞會獲得與實際辨別兩個文件(如披薩和巧克力)的單詞相同的價值。抵消這種行為的一種方法是使用tf-idf,這是一種數值統計數據,用作減輕次重要單詞影響的加權因子。

Tf-idf代表術語頻率和文檔反向頻率,這是用於加權的兩個因素。術語頻率只是一個單詞在特定文檔中出現的次數。如果我們的文件是「我愛巧克力,而巧克力愛我」,則「愛」一詞的詞頻將為兩個。此值通常通過將其除以給定文檔中的最高術語頻率來歸一化,從而導致術語頻率值介於0(對於文檔中未出現的單詞)和1(對於文檔中最常見的單詞)之間。術語頻率是按單詞和文檔計算的。

另一方面,僅按單詞計算逆文檔頻率。它指示單詞在整個語料庫中出現的頻率。通過取其對數來反轉該值。還記得我想擺脫的無處不在的詞嗎?由於1的對數為零,因此完全消除了它的影響。

基於這些公式,我們的示例獲得以下值:

查看最後兩列,我們看到只有最相關的單詞才能獲得較高的tf-idf值。所謂的停用詞,即在我們的文檔集中無處不在的詞,其值等於或接近0。

接收到的tf-idf向量仍然與單詞向量的原始包一樣高維。因此,經常使用降維技術(例如潛在語義索引(LSI))使它們更好處理。正如前面針對單詞聚類所述,k-means,DBSCAN和EM之類的算法也可以在文檔向量上使用。可能的距離度量包括歐幾裡得距離和餘弦距離。

潛在狄利克雷分布(LDA)

通常,僅具有文檔簇是不夠的。

主題建模算法是一種統計方法,可以分析原始文本中的單詞以發現貫穿它們的主題,這些主題之間的聯繫方式以及它們隨著時間的變化(Blei,2012)。

所有主題模型均基於相同的基本假設:

·每個文檔都包含一個主題分布,並且

·每個主題均由單詞組成。

除了諸如概率潛在語義分析(pLSA)之類的其他主題模型外,潛在狄利克雷分布是最著名和使用最廣泛的模型。僅通過查看其名稱,我們就可以找到很多有關其工作原理的信息。

潛在的是指隱藏的變量,狄利克雷分布是相對於其他概率分布的概率分布,而分配是指根據兩者分配一些值。為了更好地理解這三個方面的作用,讓我們看一下LDA給我們帶來的結果。以下主題是通過將LDA模型與《科學》雜誌上的17,000篇文章擬合而發現的100個主題的摘錄。

你應該如何解釋這些主題?主題是單詞上的概率分布。有些單詞更可能出現在主題中,有些則更少。你在上方看到的是每個主題中10個最常見的詞,不包括停用詞。請務必注意,這些主題實際上並沒有名稱「遺傳學」或「進化」。這些只是我們人類用來概括主題內容的術語。嘗試將主題視為單詞概率分布1或單詞概率分布23來代替。

但這不是LDA提供給我們的全部。此外,它還告訴我們每個文檔中出現了哪些主題以及佔哪個百分比。例如,有關可以檢測DNA中特定疾病流行程度的新設備的文章中可能包含48%疾病,31%遺傳學和21%計算機的主題組合。

為了解如何使計算機知道好主題以及如何找到主題,我們將再次構建一個玩具示例。假設我們的語料庫詞彙僅由幾個表情符號組成。

此詞彙表上可能的主題或單詞概率分布可能看起來像這樣:

作為人類,我們可能將這些主題標識為``食物,笑臉和動物''。讓我們假設給出了主題。為了解LDA所做的基本假設,讓我們看一下文檔的生成過程。即使看起來不太現實,作者也可以採取以下步驟:

1.選擇要在文本中寫多少個單詞。

2.選擇文本應涵蓋的主題混合。

3.對於文檔中的每個單詞:

·從混合中畫出一個詞應與之相關的話題

·從所選主題的單詞分布中繪製單詞

基於這些步驟,可能是以下文檔:

請注意,即使從主題3提取披薩表情符號的可能性很小,但仍然有可能源自該主題。現在我們有了想要的結果,我們只需要找到一種方法來扭轉這一過程。但實際上,我們面臨著:

從理論上講,我們可以使計算機嘗試單詞和主題的所有可能組合。除了這可能需要一個永恆的事實之外,我們究竟怎麼知道哪種組合才有意義,而哪種組合卻沒有呢?為此,狄利克雷分布派上了用場。與其像上面的圖片那樣繪製分布,不如在相應位置的主題單純形上繪製文檔。

我們還可以從我們的語料庫中抽取很多其他文檔。它可能看起來像這樣:

或者,如果我們事先選擇了其他主題,例如:

在第一個變體中,文檔清晰可見,並且可以理解不同的主題,而在第二個變體中,文檔或多或少是相似的。此處選擇的主題無法以有意義的方式分隔文檔。這兩個可能的文檔發行版不過是兩個不同的Dirichlet發行版而已!這意味著我們找到了一種描述主題上「良好」分布的方式!

同樣的原則適用於主題中的單詞。好的主題在單詞上的分布會有所不同,而壞的主題將與其他單詞具有大致相同的單詞。在LDA模型中,通過兩個超參數alpha和beta描述了狄利克雷分布的這兩種外觀。通常,你希望將狄利克雷分布參數保持在一個以下。看看動畫中,不同的值如何改變分布。

好的單詞和主題分布通常通過使用諸如摺疊的吉布斯採樣或期望傳播之類的技術來近似。兩種方法都可以迭代地改善隨機初始化的單詞和主題的分布。但是,但可能永遠找不到「完美」的分布。

還記得簡介中介紹的聚類流程圖嗎?特別是最後一步稱為最終評估?

使用聚類方法時,應始終牢記,即使特定模型可能導致最小的矢量平均運動或最小的概率分布值,但這並不意味著它是「正確的」。有很多數據集,k均值無法正確聚類,甚至LDA都可以產生對人類沒有任何意義的主題。

簡而言之:所有模型都是錯誤的,但是有些模型是有用的。

AI火箭營開設了一系列的人工智慧課程,受到網友的廣泛歡迎,課後答疑乾貨滿滿,學習人次已經40多萬人次

相關焦點

  • K-Means聚類講解:算法和Sklearn的實現(附代碼)
    # 用於集群的Sklearn庫pip3 install scikit-learn#我們將使用nltk(自然語言工具包)從文本刪除停用詞pip3 install nltk# 我們將使用Wikipedia庫從Wikipedia頁面下載文本pip3 install wikipedia現在,讓我們定義一個小類,以幫助從Wikipedia頁面收集文本。
  • 集成聚類系列(三)圖聚類算法詳解
    圖聚類算法研究現狀聚類分析是一種常用的機器學習技術,它的目的是將一個數據點劃分為幾個類。同一個類的數據之間具有較高的相似性,不同的類之間的相似度較低。很多研究已表明圖聚類是一種極具競爭力的聚類算法,圖聚類是一種基於圖劃分理論的算法。與其他聚類算法相比,圖聚類算法有些明顯的優勢。
  • 有了K均值聚類,為什麼還需要DBSCAN聚類算法?
    所有聚類法都使用相同的方法,即首先計算相似度,然後使用相似度將數據點聚類為組或群。本文將重點介紹具有噪聲的基於密度的聚類方法(DBSCAN)。既然已經有了K均值聚類,為什麼還需要DBSCAN這樣的基於密度的聚類算法呢?K均值聚類可以將鬆散相關的觀測聚類在一起。
  • 「Workshop」第十期:聚類
    ❝本期由吳濤師弟講解聚類,內容很詳實,推薦感興趣的讀者通過原文連結觀看介紹視頻。(Partitioning clustering)劃分聚類需要我們指定類別的數量最常用的有:K-medoids clustering (PAM)K均值聚類k表示我們想要數據聚成的類數,最終的結果是實現高的類內相似性和低的類間相似性
  • 聚類算法 Hierarchical Clustering算法
    Hierarchical Clustering算法概述HC算法,又稱層次聚類算法,就是按照某種方法進行層次分類,直到滿足某種條件為止。簡單說它是將數據集中的每個樣本初始化為一個簇,然後找到距離最近的兩個簇,將他們合併,不斷重複這個過程,直達到到預設的聚類數目為止。
  • 英語老師力薦:英語16種時態講解,一目了然,簡潔清晰!
    所以,在學習英語的時候,第一步就得將時態給掌握好,今天就給大家帶來了英語老師力薦的英語16種時態講解,一目了然,簡潔清晰!需要列印版資料請看末尾!
  • 譜聚類(spectral clustering)原理總結
    譜聚類(spectral clustering)是廣泛使用的聚類算法,比起傳統的K-Means算法,譜聚類對數據分布的適應性更強,聚類效果也很優秀,同時聚類的計算量也小很多,更加難能可貴的是實現起來也不複雜。
  • 使用Python進行K均值聚類
    聚類意味著對一組對象進行分組。K-means聚類是無監督學習的一部分,我們使用的是未標記的數據集,這個算法會自動為我們將數據分組成聚類。它是目前最流行、應用最廣泛的聚類算法之一。它用於各種應用程式,例如市場細分,圖像細分等。
  • 回歸、分類與聚類:三大方向剖解機器學習算法的優缺點(附Python和R...
    深度神經網絡在圖像、音頻和文本等數據上表現優異,並且該算法也很容易對新數據使用反向傳播算法更新模型參數。它們的架構(即層級的數量和結構)能夠適應於多種問題,並且隱藏層也減少了算法對特徵工程的依賴。缺點:深度學習算法通常不適合作為通用目的的算法,因為其需要大量的數據。實際上,深度學習通常在經典機器學習問題上並沒有集成方法表現得好。
  • 前沿|通用句子語義編碼器,谷歌在語義文本相似性上的探索
    近年來,基於神經網絡的自然語言理解研究取得了快速發展(尤其是學習語義文本表示),這些深度方法給人們帶來了全新的應用,且還可以幫助提高各種小數據集自然語言任務的性能。本文討論了兩篇關於谷歌語義表示最新進展的論文,以及兩種可在 TensorFlow Hub 上下載的新模型。
  • ACL2019|圖表示解決長文本關係匹配問題:騰訊提出概念交互圖算法
    傳統算法忽略了文本內部語義結構,而深度神經網絡目前主要用於句子對之間的匹配。同時由於長文本對計算量需求較大,且目前缺乏訓練數據集,因此長文本的匹配問題一直難以解決。對此,來自阿爾伯塔大學和騰訊 PCG 移動瀏覽器產品部的研究者提出了概念交互圖(Concept Interaction Graph)算法,對比現有的文章關係匹配算法有明顯的效果提升。
  • 雲平臺|OTU聚類的幾種算法!
    今天給大家介紹雲平臺|OTU聚類的幾種算法!講述微生物多樣分析背後的上帝之手!為何要進行聚類?(OTU)進行物種注釋(即從OTU中選擇一天代表序列與資料庫進行比對獲得分類水平信息,便是該OTU的分類水平信息);如此操作,不僅簡化工作量,提高分析效率,而且OTU在聚類過程中還可以去除一些錯誤的序列,如嵌合體序列,提高分析的準確性。
  • 機器學習之基於sklearn的KMeans聚類
    聚類算法,無監督學習的代表算法,又叫做「無監督分類」即在訓練的時候只需要特徵矩陣,不需要真實值標籤可以有效地幫助我們探索數據的自然分布一、KMeans算法的運行過程運行的流程如下:自動聚類時的質心點的每步驟變化如下:
  • 深度剖析:數據科學家需懂的5種聚類算法
    在數據科學中,我們可以使用聚類分析,通過在應用聚類算法時查看數據點落入哪些組,從數據中獲得一些有價值的見解。今天,我們將看看數據科學家需要知道的5種流行的聚類算法以及它們的優缺點!  K均值(K-Means)聚類  K-Means可能是最知名的聚類算法。它在很多介紹性的數據科學和機器學習課程中都有教過。
  • python之kmeans數據聚類算法
    一 Kmeans原理kmeans是屬於無監督學習的數據聚類算法,根據點與點之間的距離推測每個點屬於哪個中心,常用計算距離的方式有:餘弦距離、歐式距離、曼哈頓距離等,本文以歐式距離為例。圖1假設每個點的維度是n,即每個點有n個特徵維度,計算這些點數據到數據中心A、B、C的距離,從而將每個數據歸類到A或B或C。
  • 你需要的最全面的K-means聚類指南
    這就是聚類概念在數據科學中如此重要的原因。聚類有助於我們以獨特的方式理解我們的數據 - 通過將事物分組。在本文中,我們將全面介紹K-means聚類及其擴展。我們將研究聚類,它為什麼重要,它的應用,然後深入研究K-means聚類(包括如何在真實數據集上用Python實現它)。2. 什麼是聚類?讓我們用一個簡單的例子來解決問題。
  • 提高IP定位精準度之基準點聚類定位
    動態密度聚類算法是基於經典的密度聚類算法,結合IP定位的現實需求進行優化改進,針對不同的聚類參數,權衡最終聚類覆蓋區域的面積大小以及聚類覆蓋區域下的基準點召回率,尋找效果最優的聚類參數,得到最終的聚類結果。 1) 基準點分布情況 基準點分布情況,可以分為兩種。
  • 「R」層次聚類和非層次聚類
    ❝原英文連結:https://www.rpubs.com/dvallslanaquera/clustering[1]❞層次聚類 (HC)在這個分析中,我們將看到如何創建層次聚類模型。目的是探索資料庫中是否存在相似性組,並查看它們的行為。
  • 人人都能讀懂的無監督學習:什麼是聚類和降維?
    聚類聚類的一個有趣的真實應用案例是營銷數據提供商 Acxiom 的人生階段聚類系統 Personicx。這項服務將美國家庭分成了 70 個不同的聚類,它們分屬於 21 個人生階段分組,可以被廣告主用於投放定向 Facebook 廣告、陳列式廣告和直郵廣告等。
  • 常用的數據分析方法及案例講解
    本文將結合實際案例,為大家一一講解這些數據分析的方法。如果你想了解如何做數據分析,就接著看下去吧~這也是我們在日常生活最常用的一種數據分析方法,因此這裡就不再用案例展開講解了。2、信度分析信度即可靠性,它是指採用同樣的方法對同一對象重複測量時所得結果的一致性程度。企業在招聘員工時會有一套性格測試題,這裡面就用到了信度分析。企業會在性格測試題裡面放入兩道及以上相同或相似的問題,這兩道題問的內容一樣,但是具體表達描述不一樣,通過計算求職人員是否在答題時選擇結果一致的答案來分析該求職人員的可靠性。