延遲 Dirichlet 配置元件
本文說明如何使用 Azure 機器學習 設計工具中的 Latent Dirichlet 配置元件,將其他未分類的文字分組為類別。
潛伏的 Dirichlet 設定 (LDA) 通常用於自然語言處理,以尋找類似的文字。 另一個常見詞彙是 主題模型化。
此元件會採用文字資料列併產生下列輸出:
來源文字,以及每個類別的分數
特徵矩陣,其中包含每個類別的擷取詞彙和係數
轉換,您可以儲存並重新套用至做為輸入的新文字
此元件使用 scikit-learn 連結庫。 如需 scikit-learn 的詳細資訊,請參閱 GitHub 存放庫,其中包含教學課程和演算法的說明。
深入瞭解 Latent Dirichlet 配置
LDA 通常不是分類的方法。 但是它會使用產生式方法,因此您不需要提供已知的類別卷標,然後推斷模式。 相反地,演算法會產生用來識別主題群組的概率模型。 您可以使用概率模型,將現有的定型案例或您提供給模型的新案例分類為輸入。
您可能會偏好產生模型,因為它可避免對文字與類別之間的關聯性做出強有力的假設。 它只會使用文字分佈,以數學方式建立主題模型。
本文將討論此理論,可下載 PDF:Latent Dirichlet Allocation: Blei、Ng 和 Jordan。
此元件中的實作是以適用於 LDA 的 scikit-learn 連結庫 為基礎。
如需詳細資訊,請參閱 技術注意事項 一節。
如何設定 Latent Dirichlet 配置
此元件需要數據集,其中包含未經處理或預先處理的文字數據行。
將 Latent Dirichlet 配置 元件新增至您的管線。
在 [文字分析] 底下的資產清單中,將 [Latent Dirichlet 配置] 元件拖放到畫布上。
作為元件的輸入,提供包含一或多個文字數據行的數據集。
針對 [ 目標數據行],選擇一或多個包含要分析之文字的數據行。
您可以選擇多個數據行,但它們必須是 字串 數據類型。
由於 LDA 會從文字建立大型特徵矩陣,因此您通常會分析單一文字數據行。
針對 要建立模型的主題數目,輸入介於 1 到 1000 之間的整數,指出您想要從輸入文字衍生多少個類別或主題。
根據預設,會建立5個主題。
針對 N-gram,指定哈希期間產生的 N-gram 最大長度。
默認值為 2,表示產生 bigrams 和 unigram。
選取 [ 標準化] 選項,將輸出值轉換成機率。
輸出和特徵資料集中的值會以下列方式轉換,而不是將轉換的值表示為整數:
資料集中的值會以機率表示,其中
P(topic|document)
。特徵主題矩陣中的值會以機率表示,其中
P(word|topic)
。
注意
在 Azure 機器學習 設計工具中,scikit-learn 連結庫不再支援 0.19 版的未正規化doc_topic_distr輸出。 在此元件中 ,Normalize 參數只能套用至 功能主題矩陣 輸出。 轉換的數據集 輸出一律會正規化。
選取 [顯示所有選項] 選項,然後如果您想要設定下列進階參數,請將它設定為 TRUE。
這些參數專屬於 LDA 的 scikit-learn 實作。 scikit-learn 中有一些關於 LDA 的良好教學課程,以及官方 scikit-learn 檔。
Rho 參數。 提供主題分佈稀疏的先前機率。 此參數對應至 sklearn 的參數
topic_word_prior
。 如果您預期單字分佈是平面的,請使用值 1 ;也就是說,假設所有單字皆可使用。 如果您認為大部分的單字都很少出現,您可以將它設定為較低的值。Alpha 參數。 指定個別檔主題權數稀疏的先前機率。 此參數對應至 sklearn 的參數
doc_topic_prior
。估計的檔數目。 輸入數位,代表將處理的檔數(數據列)數目的最佳估計值。 此參數可讓元件配置足夠大小的哈希表。 它會對應至
total_samples
scikit-learn 中的 參數。批次的大小。 輸入數位,指出傳送至 LDA 模型的每個文字批次中要包含的數據列數目。 此參數會對應至
batch_size
scikit-learn 中的 參數。學習更新排程中使用的反覆專案初始值。 指定降低在線學習中早期反覆項目的學習速率的起始值。 此參數會對應至
learning_offset
scikit-learn 中的 參數。更新期間套用至反覆項目的電源。 指出套用至反覆專案計數的電源層級,以控制在線更新期間的學習速率。 此參數會對應至
learning_decay
scikit-learn 中的 參數。傳遞數據的數目。 指定演算法在數據上循環的次數上限。 此參數會對應至
max_iter
scikit-learn 中的 參數。
如果您想要在分類文字之前先在初始階段中建立 n-gram 清單,請選取 [建置 ngram 的字典] 或 [建置 ngram] 字典的選項。
如果您事先建立初始字典,您可以在檢閱模型時使用字典。 能夠將結果對應至文字,而不是數值索引通常更容易解譯。 不過,儲存字典需要較長的時間,並使用額外的記憶體。
針對 ngram 字典的大小上限,輸入可在 n-gram 字典中建立的數據列總數。
此選項適用於控制字典的大小。 但是,如果輸入中的ngram數目超過這個大小,可能會發生衝突。
提交管線。 LDA 元件會使用貝氏定理來判斷哪些主題可能與個別單字相關聯。 單字不會與任何主題或群組獨佔關聯。 相反地,每個 n-gram 都有與任何探索到的類別相關聯的學習機率。
結果
元件有兩個輸出:
已轉換的數據集:此輸出包含輸入文字、所探索到的類別數目,以及每個類別之每個文字範例的分數。
功能主題矩陣:最左邊的數據行包含擷取的文字功能。 每個類別的數據行都包含該類別中該功能的分數。
LDA 轉換
此元件也會輸出 將 LDA 套用至資料集的 LDA 轉換 。
您可以儲存此轉換,並將其重複使用給其他數據集。 如果您已針對大型主體進行定型,而且想要重複使用係數或類別,這項技術可能會很有用。
若要重複使用此轉換,請在 [Latent Dirichlet 配置] 元件的右面板中選取 [註冊數據集] 圖示,以將元件保留在元件清單中的 [數據集] 類別之下。 然後,您可以將此元件連線至 套用轉換 元件,以重複使用此轉換。
精簡 LDA 模型或結果
一般而言,您無法建立符合所有需求的單一 LDA 模型。 即使是針對一項工作設計的模型,也可能需要許多反覆專案來改善精確度。 建議您嘗試所有這些方法來改善您的模型:
- 變更模型參數
- 使用視覺效果來了解結果
- 取得主題專家的意見反應,以判斷產生的主題是否有用
質化量值也有助於評估結果。 若要評估主題模型化結果,請考慮:
- 精確度。 類似的專案是否真的類似?
- 多元化。 模型可以在商務問題需要時區分類似專案嗎?
- 延展性。 它是否適用於廣泛的文字類別,或只在狹窄的目標網域上運作?
您通常可以使用自然語言處理來清除、摘要和簡化或分類文字,來根據 LDA 改善模型的正確性。 例如,Azure 機器學習 中支援下列技術可以改善分類精確度:
停止移除字組
案例正規化
Lemmatization 或 stemming
具名實體辨識
如需詳細資訊,請參閱 前置處理文字。
在設計工具中,您也可以使用 R 或 Python 連結庫來處理文字: 執行 R 腳本、 執行 Python 腳本。
技術注意事項
本節包含常見問題的實作詳細數據、秘訣和解答。
實作詳細資料
根據預設,轉換數據集和特徵主題矩陣的輸出分佈會正規化為機率:
已轉換的數據集會正規化為給定檔之主題的條件機率。 在此情況下,每個數據列的總和等於 1。
特徵主題矩陣會標準化為給定主題之單字的條件機率。 在此情況下,每個數據行的總和等於 1。
提示
元件偶爾可能會傳回空的主題。 最常見的原因是演算法的虛擬隨機初始化。 如果發生這種情況,您可以嘗試變更相關的參數。 例如,變更 N-gram 字典的大小上限,或要用於特徵哈希的位數。
LDA 和主題模型化
潛伏的 Dirichlet 配置通常用於 以內容為基礎的主題模型化,這基本上表示從未分類的文字學習類別。 在以內容為基礎的主題模型化中,主題是文字的散發。
例如,假設您已提供包含許多產品的客戶評論主體。 客戶在一段時間內提交的評論文字包含許多詞彙,其中有些用於多個主題。
LDA 程式所識別的主題可能代表個別產品的評論,或者它可能代表產品評論群組。 對於 LDA,主題本身只是一組單字的機率分佈。
條款很少專屬於任何一個產品。 他們可以參考其他產品,或適用於一切的一般條款(“偉大”,“可怕的”)。 其他字詞可能是非搜尋字組。 不過,除了共生機率之外,LDA 方法不會嘗試擷取宇宙中的所有單字,或瞭解單字的關聯性。 它只能將目標網域中使用的單字分組。
計算索引一詞之後,以距離為基礎的相似度量值會比較個別的文字數據列,以判斷兩段文字是否相似。 例如,您可能會發現產品有多個名稱與強關聯。 或者,您可能會發現強負字詞通常與特定產品相關聯。 您可以使用相似度量值來識別相關的詞彙和建立建議。
元件參數
名稱 | 類型 | 範圍 | 選擇性 | 預設 | 描述 |
---|---|---|---|---|---|
目標資料列(秒) | 資料行選取 | 必要 | StringFeature | 目標數據行名稱或索引。 | |
要建立模型的主題數目 | 整數 | [1;1000] | 必要 | 5 | 根據 N 主題建立檔散發模型。 |
N-grams | 整數 | [1;10] | 必要 | 2 | 哈希期間產生的 N-gram 順序。 |
標準化 | 布林值 | True 或 False | 必要 | true | 將輸出正規化為機率。 轉換的數據集會是 P(topic|document),功能主題矩陣會是 P(word|topic)。 |
顯示所有選項 | 布林值 | True 或 False | 必要 | False | 提供 scikit-learn 在線 LDA 特有的其他參數。 |
Rho 參數 | Float | [0.00001;1.0] | 選取 [ 顯示所有選項 ] 複選框時適用 | 0.01 | 主題文字先前的散發。 |
Alpha 參數 | Float | [0.00001;1.0] | 選取 [ 顯示所有選項 ] 複選框時適用 | 0.01 | 檔主題先前的散發。 |
估計的檔數目 | 整數 | [1;int。MaxValue] | 選取 [ 顯示所有選項 ] 複選框時適用 | 1000 | 估計的檔數目。 對應至 total_samples 參數。 |
批次的大小 | 整數 | [1;1024] | 選取 [ 顯示所有選項 ] 複選框時適用 | 32 | 批次的大小。 |
學習速率更新排程中使用的反覆專案初始值 | 整數 | [0;int。MaxValue] | 選取 [ 顯示所有選項 ] 複選框時適用 | 0 | 降低早期反覆項目學習率的初始值。 對應至 learning_offset 參數。 |
更新期間套用至反覆項目的電源 | Float | [0.0;1.0] | 選取 [ 顯示所有選項 ] 複選框時適用 | 0.5 | 套用至反覆項目計數的電源,以控制學習速率。 對應至 learning_decay 參數。 |
定型反覆項目的數目 | 整數 | [1;1024] | 選取 [ 顯示所有選項 ] 複選框時適用 | 25 | 定型反覆項目的數目。 |
建置 ngram 的字典 | 布林值 | True 或 False | 未選擇[顯示所有選項] 複選框時適用 | True | 在計算 LDA 之前,先建置 ngram 的字典。 適用於模型檢查和解譯。 |
ngram 字典的大小上限 | 整數 | [1;int。MaxValue] | 當 ngrams 的建置字典為 True 時適用 | 20000 | ngrams 字典的大小上限。 如果輸入中的令牌數目超過此大小,可能會發生衝突。 |
要用於功能哈希的位數目。 | 整數 | [1;31] | 當未選取 [顯示所有選項] 複選框,且 ngram 的建置字典為 False 時適用 | 12 | 要用於功能哈希的位數目。 |
在 LDA 之前建置 ngram 的字典 | 布林值 | True 或 False | 選取 [ 顯示所有選項 ] 複選框時適用 | True | 在 LDA 之前建置 ngram 的字典。 適用於模型檢查和解譯。 |
字典中的 ngram 數目上限 | 整數 | [1;int。MaxValue] | 當已選取 [顯示所有選項] 複選框,且 [建置 ngram 的字典] 選項為 True 時適用 | 20000 | 字典的大小上限。 如果輸入中的令牌數目超過此大小,可能會發生衝突。 |
哈希位數目 | 整數 | [1;31] | 當已選取 [顯示所有選項] 複選框,且 ngram 的 [建置字典] 選項為 False 時適用 | 12 | 功能哈希期間要使用的位數目。 |
下一步
如需元件特定的錯誤清單,請參閱 設計工具的例外狀況和錯誤碼。