起初,用於單詞和文檔的聚類的大量方法似乎不勝枚舉,讓我們仔細研究其中幾種。
本文涵蓋的主題包括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多萬人次