共用方式為


延遲 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 配置

此元件需要數據集,其中包含未經處理或預先處理的文字數據行。

  1. Latent Dirichlet 配置 元件新增至您的管線。

    在 [文字分析] 底下的資產清單中,將 [Latent Dirichlet 配置] 元件拖放到畫布上。

  2. 作為元件的輸入,提供包含一或多個文字數據行的數據集。

  3. 針對 [ 目標數據行],選擇一或多個包含要分析之文字的數據行。

    您可以選擇多個數據行,但它們必須是 字串 數據類型。

    由於 LDA 會從文字建立大型特徵矩陣,因此您通常會分析單一文字數據行。

  4. 針對 要建立模型的主題數目,輸入介於 1 到 1000 之間的整數,指出您想要從輸入文字衍生多少個類別或主題。

    根據預設,會建立5個主題。

  5. 針對 N-gram,指定哈希期間產生的 N-gram 最大長度。

    默認值為 2,表示產生 bigrams 和 unigram。

  6. 選取 [ 標準化] 選項,將輸出值轉換成機率。

    輸出和特徵資料集中的值會以下列方式轉換,而不是將轉換的值表示為整數:

    • 資料集中的值會以機率表示,其中 P(topic|document)

    • 特徵主題矩陣中的值會以機率表示,其中 P(word|topic)

    注意

    在 Azure 機器學習 設計工具中,scikit-learn 連結庫不再支援 0.19 版的未正規化doc_topic_distr輸出。 在此元件中 ,Normalize 參數只能套用至 功能主題矩陣 輸出。 轉換的數據集 輸出一律會正規化。

  7. 選取 [顯示所有選項] 選項,然後如果您想要設定下列進階參數,請將它設定為 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 中的 參數。

  8. 如果您想要在分類文字之前先在初始階段中建立 n-gram 清單,請選取 [建置 ngram 的字典] 或 [建置 ngram] 字典的選項。

    如果您事先建立初始字典,您可以在檢閱模型時使用字典。 能夠將結果對應至文字,而不是數值索引通常更容易解譯。 不過,儲存字典需要較長的時間,並使用額外的記憶體。

  9. 針對 ngram 字典的大小上限,輸入可在 n-gram 字典中建立的數據列總數。

    此選項適用於控制字典的大小。 但是,如果輸入中的ngram數目超過這個大小,可能會發生衝突。

  10. 提交管線。 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 功能哈希期間要使用的位數目。

下一步

請參閱 Azure 機器學習 可用的元件集。

如需元件特定的錯誤清單,請參閱 設計工具的例外狀況和錯誤碼。