隱含狄利克雷分佈元件
本文描述如何在 Azure Machine Learning 設計工具中使用「隱含狄利克雷分佈」元件,將其餘未分類的文字分組至類別。
隱含狄利克雷分佈 (LDA) 通常用於自然語言處理,可尋找類似的文字。 另一種常見說法為「主題模型化」。
此元件會取得文字的資料行,並產生下列輸出:
來源文字,以及每個類別的分數
特徵矩陣,包含每個類別已擷取的字詞和係數
轉換,您可以將其儲存並重新套用至做為輸入使用的新文字
此元件使用 Scikit-learn 程式庫。 如需 Scikit-learn 的詳細資訊,請參閱 GitHub 存放庫,其中包含教學課程和演算法說明。
深入了解隱含狄利克雷分佈
LDA 通常不是用於分類的方法, 但是此方法會使用生成方法,因此您不需要提供已知的類別標籤再推斷模式。 相反地,此演算法會產生用來識別主題群組的機率模型。 您可以使用此機率模型分類現有的定型案例,或是您提供給模型做為輸入的新案例。
您可能會偏好使用生成式模型,因為如此可避免對文字和分類之間的關聯性做出強烈假設。 這種模型只會使用字詞的分佈,以數學方式建立主題模型。
這項理論的討論可參閱此研究論文 (可下載為 PDF):Latent Dirichlet Allocation: Blei, Ng, and Jordan。
此元件中的實作會根據 LDA 的 Scikit-learn 程式庫。
如需詳細資訊,請參閱技術說明一節。
如何設定隱含狄利克雷分佈
此元件需要包含文字資料行的資料集,原始或預先處理過的都可以。
將隱含狄利克雷分佈元件新增至您的管線。
在 [文字分析]下的資產清單中,將隱含狄利克雷分佈元件拖放到畫布上。
提供包含一或多個文字資料行的資料集,作為元件的輸入。
針對目標資料行,選擇包含待分析文字的一個或多個資料行。
您可以選擇多個資料行,但必須都是字串資料類型。
因為 LDA 會根據文字建立大型的特徵矩陣,因此通常是分析單一文字資料行。
針對模型的主題數目,請輸入介於 1 到 1000 之間的整數,指出您想要從輸入文字衍生的類別或主題數目。
預設會建立 5 個主題。
針對 N 元語法,請指定雜湊處理期間可產生的 N 元語法長度上限。
預設值為 2,表示會產生雙字母組和單字母組。
選取 [正規化] 選項將輸出值轉換為機率。
輸出和特徵資料集的值在轉換後不會以整數表示,而是轉換如下:
資料集的值會以機率表示:
P(topic|document)
。特徵主題矩陣中的值會以機率表示:
P(word|topic)
。
注意
在 Azure Machine Learning 設計工具中,Scikit-learn 程式庫自 0.19 版起不再支援非正規化的 doc_topic_distr 輸出。 在此元件中,[正規化] 參數只能套用至特徵主題矩陣輸出。 轉換的資料集輸出一律會正規化。
選取選項 [顯示所有選項],如果您想設定下列進階參數,請設置為 TRUE。
這些參數專門用於 LDA 的 Scikit-learn 實作。 在 Scikit-learn 中有一些不錯的 LDA 教學課程,以及官方的 Scikit-learn 文件。
Rho 參數。 為主題分佈的稀疏性提供事前機率。 此參數會對應至 sklearn 的
topic_word_prior
參數。 如果您預期字組的分佈是平面的,請使用值 1,這表示所有字組都假設為機率相等。 如果您認為大部分的字組分佈稀疏,可以將其設定為較低的值。Alpha 參數。 針對每個文件主題權重的稀疏性指定事前機率。 此參數會對應至 sklearn 的
doc_topic_prior
參數。估計的文件數目。 輸入數字,代表待處理文件 (資料列) 數目的最佳預估。 此參數可讓元件配置大小充足的雜湊表。 這對應至 Scikit-learn 中的
total_samples
參數。批次的大小。 輸入數字,表示傳送至 LDA 模型的每個文字批次中要包含多少資料列。 此參數對應至 Scikit-learn 中的
batch_size
參數。學習更新排程中所使用的反覆運算初始值。 指定起始值,降低線上學習中早期反覆運算學習率的權重。 此參數對應至 Scikit-learn 中的
learning_offset
參數。更新期間套用至反覆運算的功率。 指出套用至反覆運算計數的功率等級,以控制線上更新期間的學習速度。 此參數對應至 Scikit-learn 中的
learning_decay
參數。資料的處理次數。 指定演算法將在資料上迴圈的最大次數。 此參數對應至 Scikit-learn 中的
max_iter
參數。
若想要在分類文字之前在初次執行中建立 N 元語法,請選取選項 [建構 N 元語法字典] 或 [在 LDA 之前建構 N 元語法字典]。
如果您事先建立初始字典,則稍後可以在查看模型時使用字典。 能夠將結果對應至文字 (而不是數值索引),通常比較容易轉譯。 不過,儲存字典需要較長的時間,並會使用額外的儲存體。
針對N 元語法字典的大小上限,請輸入可在 N 元語法字典中建立的資料列總數。
此選項可有效控制字典的大小。 但是,如果輸入中的 N 元語法數目超過此大小,則可能會發生衝突。
提交管線。 LDA 元件會使用貝氏機率分類理論來判斷哪些主題可能與個別字組相關。 字組並不會僅與某一主題或群組相關聯。 相反地,每個 N 元語法具有與任何探索到類別相關聯的學習可能性。
結果
元件有兩個輸出:
已轉換的資料集:此輸出包含輸入文字、指定數目的已探索類別,以及每個類別的個別文字範例分數。
特徵主題矩陣:最左邊的資料行包含已擷取的文字特徵。 每個類別的資料行都包含該分類中該特徵的分數。
LDA 轉換
此元件也會輸出將 LDA 套用至資料集的 LDA 轉換。
您可以儲存此轉換,並重複套用至其他資料集。 如果您已經定型大型主體,並且想要重複使用係數或類別,這項技巧可能會很有用。
若要重複使用此轉換,請選取隱含狄利克雷分佈元件右側面版的註冊資料集圖示,以將元件保留在元件清單的資料集類別中。 接著可以將此元件連接至套用轉換元件,以重複使用此轉換。
精簡 LDA 模型或結果
一般來說,您無法建立能滿足所有需求的單一 LDA 模型。 即使是針對一個工作所設計的模型,也可能需要許多反覆項目來改善精確度。 建議您嘗試所有這些方法來改善您的模型:
- 變更模型參數
- 透過視覺效果了解結果
- 取得主題專家的意見反應,判斷產生的主題是否有用
質化量值也有助於評估結果。 若要評估主題模型化結果,請考慮下列項目:
- 精確度。 類似項目是否真的類似?
- 多樣性。 當商務問題有需要時,模型是否可以區分類似項目?
- 延展性。 模型是否適用於各式各樣的文字類別,或僅適用於較窄的目標定意域?
您通常可以使用自然語言處理來清除、摘要和簡化,或是分類文字,藉此改善以 LDA 為基礎的模型精確度。 例如,下列技術 (Azure Machine Learning 全部支援) 可以改善分類的精確度:
停用字詞移除
大小寫正規化
詞形歸併還原或詞幹分析
具名實體辨識
如需詳細資訊,請參閱前置處理文字。
在設計工具中,您也可以使用 R 或 Python 程式庫進行文字處理:執行 R 指令碼、執行 Python 指令碼。
技術說明
本節包含實作詳細資料、提示和常見問題集的解答。
實作詳細資料
根據預設,已轉換資料集和特徵主題矩陣的輸出分佈會正規化為機率:
已轉換的資料集會正規化為文件指定主題的條件機率。 在此案例中,每個資料列的加總會等於 1。
特徵主題矩陣會正規化為字組指定主題的條件機率。 在此案例中,每個資料行的加總會等於 1。
提示
有時候元件可能會傳回空白主題。 最常見的原因是演算法的虛擬隨機初始化。 如果發生這種情況,您可以嘗試變更相關的參數。 例如,變更 N 元語法字典的大小上限,或變更特徵雜湊所使用的位元數。
LDA 和主題模型化
隱含狄利克雷分佈通常用於以內容為基礎的主題模型化,基本上是指從未分類文字學習類別目錄。 在以內容為基礎的主題模型化中,主題是字組的分佈。
例如,假設您已提供客戶評論的主體,其中包含許多產品。 客戶在一段時間內提交的評論文字包含許多字詞,其中有一些用於多個主題。
LDA 流程識別的「主題」可能代表個別產品的評論,或是代表一組產品評論。 對 LDA 而言,主題本身就是一組字組在一段時間的機率分佈。
字詞很少僅限於任一項產品。 這些字詞可以指涉其他產品,也可以是通用性的一般字詞 (「很棒」、「糟糕」)。 其他字詞可能是非搜尋字。 但是,LDA 方法不會嘗試擷取內容中的所有字組,或理解字組的相關性,而是關注同時出現的機率。 此方法只能分組目標定義域中使用的字組。
計算字詞索引之後,以距離為基礎的相似性量值會比較個別的文字資料列,藉此判斷兩段文字是否類似。 例如,您可能會發現產品有多個明顯相互關聯的名稱。 或者,您可能會發現強烈的負面字詞通常與特定產品相關聯。 您可以使用相似性量值來識別相關的字詞,以及建立建議。
元件參數
名稱 | 類型 | 範圍 | 選擇性 | 預設 | 描述 |
---|---|---|---|---|---|
目標資料行 | 資料行選取 | 必要 | StringFeature | 目標資料行名稱或索引。 | |
模型的主題數目 | 整數 | [1;1000] | 必要 | 5 | 依據 N 個主題為文件分佈建立模型。 |
N 字母組 | 整數 | [1;10] | 必要 | 2 | 雜湊期間產生的 N 元語法順序。 |
正規化 | Boolean | True 或 False | 必要 | true | 將輸出正規化為機率。 已轉換的資料集將會是 P(topic|document),而特徵主題矩陣將會是 P(word|topic)。 |
顯示所有選項 | Boolean | 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 | 定型反覆運算的次數。 |
建立 N 元語法字典 | Boolean | True 或 False | 在「未勾選」[顯示所有選項] 時套用 | True | 在計算 LDA 之前,先建立 N 元語法的字典。 適用於模型檢查和轉譯。 |
N 元語法字典的大小上限 | 整數 | [1;int.MaxValue] | 當選項 [建構 N 元語法字典] 為 True 時套用 | 20000 | N 元語法字典的大小上限。 如果輸入中的 N 元語法數目超過此大小,則可能會發生衝突。 |
特徵雜湊所使用的位元數。 | 整數 | [1;31] | 在「未勾選」[顯示所有選項] 核取方塊,且 [建立 N 元語法字典] 為 False 時套用 | 12 | 特徵雜湊所使用的位元數。 |
在 LDA 之前建立 N 元語法字典 | Boolean | True 或 False | 在勾選 [顯示所有選項] 核取方塊時套用 | True | 在 LDA 之前,先建立 N 元語法的字典。 適用於模型檢查和轉譯。 |
字典中的 N 元語法數目上限 | 整數 | [1;int.MaxValue] | 在勾選 [顯示所有選項] 核取方塊,且 [建立 N 元語法字典] 為 True 時套用 | 20000 | 字典的大小上限。 如果輸入中的 N 元語法數目超過此大小,則可能會發生衝突。 |
雜湊位元數 | 整數 | [1;31] | 在勾選 [顯示所有選項] 核取方塊,且 [建立 N 元語法字典] 為 False 時套用 | 12 | 特徵雜湊處理時所使用的位元數。 |
後續步驟
請參閱 Azure Machine Learning 可用的元件集。
如需元件特定的錯誤清單,請參閱設計工具的例外狀況和錯誤碼。