自動從文本中提取概念和關鍵字(第二部分:語義方法)
已發表: 2022-09-20本文是關於從文本中自動提取關鍵字的第一部分的後續文章。 上一篇文章討論了從文本中提取關鍵字的所謂“傳統”方法:基於統計或基於圖形。
在這裡,我們將探索具有更多語義方法的方法。 首先,我們將介紹詞嵌入和轉換器,即上下文嵌入。 然後我們將分享一個基於 BERT 模型的關於 John Coltrane 的專輯 Impressions(來源 francemusique.fr)的同文示例。 最後,我們將介紹一些評估方法,例如P@k
、 f1-score
以及最新技術水平的基準。
與傳統方法不同,語義方法使您能夠鏈接屬於相似詞彙領域的單詞,即使它們不同。 這種方法背後的想法是省略文本中單詞出現頻率的計算,以便提取最有意義的單詞,換句話說,那些提供與文本相關的最相關信息的單詞。
詞嵌入
這種方法可以追溯到 2013 年,當時引入了一個名為 word2vec 的模型。 它是一種“簡單”的人工神經網絡架構——與所謂的“深度學習”架構不同——它提出將詞彙表中的單詞集表示為向量。 換句話說,每個單詞都由一行數字表示。 這組向量代表詞彙的語義場,能夠將這些向量相互比較。 通過測量這些向量之間的距離,我們可以判斷這些詞在語義上是否相似。 將單詞表示為數字數組稱為嵌入。
一旦你有了你的詞集的向量表示,你就可以將這些詞相互比較。 如果兩個向量之間的角度非常小,則兩個詞將具有接近的含義:這就是語義距離- 一個介於 -1 和 1 之間的值。該值越接近 1,詞就越具有“相似性”意義。 相反,接近-1 的值將表示“相反”的含義,例如“好”和“壞”。
該模型的目標是從不可忽略的大量文本文檔中“製造”這些著名的嵌入。 假設你有幾十萬個文本,模型將學習根據與之相似的詞來預測一個詞。
該模型將輸入幾組單詞——例如大小為 5 的單詞——並嘗試找到<mask>
的最佳替代品。 在你的語料庫中,有相似的短語或詞組; 我們將能夠找到這些詞:例如“爵士”、“搖滾”、“古典”或“雷鬼”。 因此,所有這些詞都將具有非常相似的向量。 因此,該模型可以將相似詞彙領域中的概念和單詞組合在一起。
[案例研究] 查找並修復索引問題
另一方面,對於具有相同拼寫但在上下文中沒有相同含義的單詞可能存在歧義:這些是同形異義詞。
例如:
- 他在塞納河畔坐下。
- 她將錢存入大通銀行。
這是此類模型的一個限制:無論上下文如何,單詞都將具有相同的向量表示。
變形金剛
一種更新的方法主要出現在 2017 年,Google 的 Attention Is All You Need。 在word2vec方法難以表示兩個具有不同含義的相同單詞的情況下, transformers類型模型能夠根據上下文區分單詞的含義。 請注意,還有一些 NLP 模型能夠考慮單詞序列,例如 RNN 或 LSTM,但我們不會在本文中討論它們。
Transformers將在神經網絡架構中普及一個新概念:注意力機制。 這使您能夠在一系列單詞(例如一個句子)中找到每個單詞與其他單詞的關係。
BERT 模型由 Google 於 2018 年創建,是一種強大且流行的模型。 這些語言模型的優勢在於它們基於預訓練模型,即該模型已經在大量英語、法語等文本上進行了訓練。然後可以基於更詳細的分析。 然後可以按原樣使用它來比較文本、從問題中生成答案、進行情緒分析、對更具體的文本正文進行微調等。
該圖像是使用exBERT可視化工俱生成的。 我們可以看到,選中的單詞“money”與“ deposit ”和“ bank ”有很強的聯繫。 由於上下文,模型更容易消除“銀行”一詞的歧義。
在 KeyBERT 的情況下,它是一個從 BERT 派生的模型,稱為 Sentence-BERT,它允許我們輕鬆地在語義上比較句子。
如果您想了解更多關於所有可用的開源和預訓練模型的信息,您可以訪問 Huggingface 中心,該中心專門存儲和共享與 NLP 相關的數據集和模型(最近還包括音頻和圖像)。
使用 KeyBERT 提取關鍵字
那麼,我們如何使用轉換器從文本中提取相關關鍵字呢? 有幾個項目,包括 KeyBERT:使用 BERT 進行最小關鍵字提取,這是一個使用 BERT 模型的開源 Python 庫。
默認情況下,KeyBERT 將使用基於 BERT 的句子轉換器將句子而不是單個單詞表示為向量。 這是比較句子或詞組的一種非常有效的方法。 KeyBERT 算法的原理非常簡單。 讓我們看一個示例文本,然後:
- 該代碼將從文本中提取所有唯一單詞。 在這一步中,停用詞通常會被消除。
- 計算整個文本和每個單詞的嵌入。
- 然後,我們可以計算來自單詞的向量與代表整個文本的向量之間的語義距離。
一旦計算了所有的距離,我們就可以提取與文本的整體含義密切相關的詞:這些將是算法選擇的關鍵詞。
此外,KeyBERT 讓您能夠選擇關鍵字的長度:我們實際上可以選擇單個單詞,或者成對甚至三個單詞。 此外,該代碼提供了一種實現“最大邊際相關性”(MMR)方法的方法,以增加結果的多樣性。 這可以幫助您避免重複某個術語,該術語可能與文檔的內容相關,但在結果中經常出現,例如:“爵士音樂會”、“爵士音樂”、“爵士風格” , ETC。
總而言之,也可以將其他 NLP 模型用於 KeyBERT,例如 spaCy 或 flair 的模型。
和上一篇文章一樣,這裡是 KeyBERT 從關於 John Coltrane 的專輯 Impressions 的同一篇文章中提取的關鍵字示例:
“coltrane印象”、“音樂四重奏”、“爵士寶藏”、“約翰音樂會”、“珍珠序列”、“格拉茨曲目”、“次中音薩克斯”
評價方法
在本文和上一篇文章中,我們介紹了幾種用於從文檔中提取關鍵字的方法:RAKE、Yake、TextRank 和 KeyBERT。 但是,重要的是能夠根據您的上下文選擇正確的。
因此,有必要查看評估方法,以便將一種方法的結果與另一種方法的結果進行比較。 從關鍵字已經被人類定義和驗證的數據(document, keywords)
中,可以將模型的結果與這個“現實”進行比較。 我們有準確率、召回率和 f1 分數等指標,這些指標經常用於分類問題。 因此,我們可以通過知道模型提取的給定關鍵字是否確實在相關關鍵字列表中來構建混淆矩陣。
由於模型可以提取一系列關鍵字,我們經常將前k個關鍵字與ground truth進行比較。 由於結果可能會根據我們希望比較的關鍵字數量而有所不同,因此我們根據k值對模型進行多次評估。 這些指標稱為Precision@k
,意思是:“我計算 top-k 的精度”。
[電子書] 您的內部鏈接方案如何影響 Inrank
精確
這是所有預測關鍵字中top-k中正確關鍵字的數量。
記起
這是基本事實的總關鍵字中前 k個正確關鍵字的數量。
f1-分數
它是前兩個指標的組合——或者換句話說,準確率和召回率之間的和諧平均值:
地圖@k
平均平均精度
計算MAP的第一步是計算平均精度。 我們將獲取模型找到的所有關鍵字,併計算模型找到的每個相關關鍵字的P@k
。 例如,使用 5 個建議的關鍵字中的 3 個相關關鍵字計算AP@5
:
關鍵詞:爵士音樂會音樂薩克斯收音機 相關:1 0 1 1 0 P@k:1/1 2/3 3/4 AP:1/3 (1 + 2/3 + 3/4) ~= 0.80
我們在這裡註意到相關關鍵字的位置很重要。 事實上,如果五個關鍵字中的前三個關鍵字不相關(resp.related),則AP將不會獲得相同的分數。
然後,對於每一個(document, keywords)
,我們將計算所有AP的平均值,最終得到MAP。
請注意,這些不同的指標也廣泛用於評估排名模型或推薦系統。
對其中一些指標的一個小批評涉及相關基本事實關鍵字的數量,每個數據集和每個文檔可能會有所不同。
- 例如,
recall@k
:分數很大程度上取決於基本事實的相關關鍵字的大小。 如果您有多達 20 個相關關鍵字,那麼對於一個recall@10
,您將比較這組 20 個關鍵字中的前 10 個關鍵字。 在最好的情況下,如果模型提出的所有關鍵詞都是相關的,那麼召回分數不會超過 0.5。 - 另一方面,如果相關的 ground truth 關鍵字的數量與模型提出的相比非常少,您將無法獲得良好的
precision@k
分數。 對於五個相關的基本事實關鍵字,precision@10
最多只能獲得 0.5 分,但不會更高。
無論用於評估結果的指標是什麼,都必須有一個數據集(文本、關鍵字),其中關鍵字先前由人們定義——文本的作者、讀者、編輯等。有幾個數據集,主要在英語和不同主題:科學文章、摘要、新聞、IT 等。例如,這裡是這個 Github KeywordExtractor-Datasets 存儲庫,其中列出了大約 20 個數據集。
基準
除了對各種評估方法的介紹之外,我還想為您提供一些提出基準的研究論文的“摘要” 。
第一個是實施 Yake 的研究人員! 論文中的方法,“YAKE! 使用多個局部特徵從單個文檔中提取關鍵字”。 他們在大約 20 個不同的數據集上分析了他們的方法:PubMed、WikiNews、SemEval2010 和 KDD,使用了上面描述的大部分指標: P@k
、 recall@k
等。Yake! 將與其他大約十種方法進行比較,包括 Rake、Text Rank 等。通過整合所有可用的數據集和計算精度和召回率,Yake! 方法要么更好,要么非常接近最先進的方法。 例如,對於f1@10
:
數據集 | 呸! | 最佳或第二 |
---|---|---|
維基新聞 | 0.450 | 0.337 |
KDD | 0.156 | 0.115 |
檢查 | 0.316 | 0.378 |
呸! 往往高達 50-100% 更好,這接近領先的方法。
在另一篇較新的論文“TNT-KID:基於 Transformer 的關鍵字識別神經標註器”中,我們還比較了傳統方法和基於Transformer的方法。 使用Transformer進行提取的方法表現更好。 不過要小心,因為這些是所謂的“監督”方法,不像 Rake、KeyBERT 和 Yake,它們不需要對大量數據進行訓練即可產生結果。
最後,讓我們看看另外兩個基準:
- Simple Unsupervised Keyphrase Extraction using Sentence Embeddings 使用詞嵌入,在 Inspec 和 DUC 等數據集上與 TextRank 相比表現良好。
- 比較 7 種算法(在 Python 中)的博客文章:關鍵字提取 — Python 中 7 種算法的基準。 作者比較了 KeyBERT、RAKE、Yake 方法的計算時間以及每種方法可以提取的相關詞的數量方面的性能。
結論
正如您在這兩篇文章中所看到的,確實有許多非常不同的方法可以從文本中提取相關關鍵字。 查看不同的基準,您會注意到沒有一個在指標方面真正超過所有其他基準。 這將取決於文本和上下文。 而且,正如關於 7 種提取算法的博客文章的作者所指出的,我們在面對冗長的文本時也可以依靠算法的處理時間。
在將算法付諸實施和處理數十萬份文檔時,這一次肯定會成為一個因素。 對於 KeyBERT,您應該考慮使用帶有 GPU 的基礎設施來從根本上增加處理時間。 事實上,這種方法依賴於具有需要大量計算的深度學習架構的 Transformer。
如果讓我做出選擇,那肯定是在 KeyBERT 和 Yake 之間。 前者用於轉換器和語義方面,後者用於其效率和執行速度。
參考書目
- 2017年,你需要的只是注意力
- BERT:用於語言理解的深度雙向變壓器的預訓練,2019
- 帶有自我標籤的自我監督上下文關鍵詞和關鍵詞檢索。 Sharma P. & Li Y. (2019)
- 探索不同的關鍵詞提取器——評估指標和策略