使用深度學習進行自動意圖分類(第2部分)

[ad_1]
使用深度學習進行自動意圖分類(第2部分)

我最初的計劃是涵蓋這個主題:「如何使用Python和BigQuery構建一個機器人來自動執行無意識的任務」。我做了一些輕微的課程改變,但希望,原來的意圖保持不變!

本文的靈感來自於此推文 JR奧克斯。 ?

正如優步發布的那樣 Ludwig的更新版本 谷歌也宣布了在BigQuery中執行Tensorflow模型的能力,我認為時機不可能更好。

在本文中,我們將重新審視意圖分類問題 我以前說過,但我們將用最先進的編碼器替換我們的原始編碼器:BERT,代表 變壓器的雙向編碼器表示

這個小改動將幫助我們將模型精度從0.66組合測試精度提高到0.89,同時使用相同的數據集而無需自定義編碼!

使用深度學習進行自動意圖分類(第2部分)「width =」1114「height =」1046「sizes =」(最大寬度:1114px)100vw,1114px「data-srcset =」https://cdn.searchenginejournal.com/ wp-content / uploads / 2019/07 / pasted_image_7_29_19__5_44_pm.png 1114w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/07/pasted_image_7_29_19__5_44_pm-480x451.png 480w,https://cdn.searchenginejournal。 com / wp-content / uploads / 2019/07 / pasted_image_7_29_19__5_44_pm-680x638.png 680w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/07/pasted_image_7_29_19__5_44_pm-768x721.png 768w,https:// cdn.searchenginejournal.com/wp-content/uploads/2019/07/pasted_image_7_29_19__5_44_pm-1024x961.png 1024w「data-src =」https://cdn.searchenginejournal.com/wp-content/uploads/2019/07/pasted_image_7_29_19__5_44_pm。 PNG

以下是我們的行動計劃:

  • 我們將重建我們在第一部分上構建的意圖分類模型,但我們將使用BERT編碼器來利用預訓練數據。
  • 我們將針對從Google Search Console提取的問題再次對其進行測試。
  • 我們將查詢和意圖預測數據上傳到BigQuery。
  • 我們將BigQuery與Google Data Studio聯繫起來,根據他們的意圖對問題進行分組,並提取可用於確定內容開發工作優先順序的可操作見解。
  • 我們將介紹一些新的基礎概念,這些概念有助於BERT的性能明顯優於我們之前的型號。

設置Google Colaboratory

與第一部分一樣,我們將從內部運行路德維希 Google Colaboratory 為了使用他們的免費GPU運行時。

首先,運行此代碼以檢查安裝的Tensorflow版本。

導入張量流為tf;列印(TF .__ version__)

讓我們確保我們的筆記本使用Ludwig所期望的正確版本,並且它還支持GPU運行時。

我得到了1.14.0,這對路德維希來說很棒 要求 至少1.14.0

在Runtime菜單項下,選擇Python 3和GPU。

您可以輸入以下內容確認您擁有GPU:

! NVIDIA-SMI

在撰寫本文時,您需要在安裝最新的Ludwig(0.2)之前安裝一些系統庫。我後來遇到了一些錯誤 解決

!apt-get install libgmp-dev libmpfr-dev libmpc-dev

當我安裝失敗時,我找到了StackOverflow的解決方案 回答,甚至不被接受的!

!pip安裝路德維希

你應該得到:

成功安裝了gmpy-1.17 ludwig-0.2

準備數據集進行培訓

我們將使用相同的 問題分類數據集 我們在第一篇文章中使用過的。

登錄到Kaggle並下載數據集後,您可以使用該代碼將其載入到Colab中的數據框。

配置BERT編碼器

我們將使用最近添加到Ludwig的BERT編碼器,而不是使用我們在第一部分中使用的並行CNN編碼器。

該編碼器利用預先訓練的數據,使其能夠比我們以前的編碼器更好地執行,同時需要更少的訓練數據。我將在本文末尾以簡單的術語解釋它是如何工作的。

我們先下載一個 預訓練語言模型。我們將下載BERT-Base型號的文件,Uncased。

我首先嘗試了更大的模型,但由於其內存要求和Google Colab的局限性,我遇到了一些障礙。

!wget https://storage.googleapis.com/bert_models/2018_10_18/uncased_L-12_H-768_A-12.zip

解壓縮:

!unzip uncased_L-12_H-768_A-12.zip

輸出應如下所示:

存檔:uncased_L-12_H-768_A-12.zip創建:uncased_L-12_H-768_A-12 / inflating:uncased_L-12_H-768_A-12 / bert_model.ckpt.meta inflating:uncased_L-12_H-768_A-12 / bert_model.ckpt。 data-00000-of-00001 inflating:uncased_L-12_H-768_A-12 / vocab.txt inflating:uncased_L-12_H-768_A-12 / bert_model.ckpt.index inflating:uncased_L-12_H-768_A-12 / bert_config.json

現在我們可以將模型定義文件放在一起。

讓我們將它與我們在第一部分中創建的那個進行比較。

我做了一些改變。我們來回顧一下吧。

我基本上將編碼器從parallel_cnn更改為bert並添加了額外的參數 需要 by bert:config_path,checkpoint_path,word_tokenizer,word_vocab_file,padding_symbol和unknown_symbol。

大多數值來自我們下載的語言模型。

我添加了一些我憑經驗得出的參數:batch_size,learning_rate和word_sequence_length_limit。

Ludwig用於這些參數的默認值對BERT編碼器不起作用,因為它們與預訓練數據相比是偏離的。我發現了一些有用的價值觀 BERT文檔

培訓過程與我們之前完成的過程相同。但是,我們需要先安裝bert-tensorflow。

!pip install bert-tensorflow!ludwig experiment –data_csv Question_Classification_Dataset.csv –model_definition_file model_definition.yaml

僅在兩個時代之後,我們擊敗了之前的模型表現。

使用深度學習進行自動意圖分類(第2部分)「width =」721「height =」610「sizes =」(最大寬度:721px)100vw,721px「data-srcset =」https://cdn.searchenginejournal.com/ wp-content / uploads / 2019/07 / pasted_image_7_29_19__7_46_pm.png 721w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/07/pasted_image_7_29_19__7_46_pm-480x406.png 480w,https://cdn.searchenginejournal。 com / wp-content / uploads / 2019/07 / pasted_image_7_29_19__7_46_pm-680x575.png 680w「data-src =」https://cdn.searchenginejournal.com/wp-content/uploads/2019/07/pasted_image_7_29_19__7_46_pm.png

在10個時期之後,最終的改進是0.89組合測試精度。我們以前的模型用了14個時代來達到.66。

考慮到我們沒有編寫任何代碼,這非常值得注意。我們只更改了一些設置。

令人難以置信和令人興奮的是,深度學習研究的速度有多快以及現在的可訪問性如何。

為什麼BERT表現如此之好

與傳統編碼器相比,使用BERT有兩個主要優點:

  • 雙向字嵌入。
  • 語言模型通過轉移學習來利用。

雙向Word嵌入

當我在第一部分中解釋單詞向量和嵌入時,我指的是傳統方法(我在假想空間中使用了坐標的GPS類比)。

傳統的單詞嵌入方法為每個單詞分配相當於GPS的坐標。

讓我們回顧一下「華盛頓」這個詞的不同含義來說明為什麼在某些情況下這可能是一個問題。

  • 喬治華盛頓(人)
  • 華盛頓(州)
  • 華盛頓特區(市)
  • 喬治華盛頓大橋(橋)

上面的「華盛頓」一詞代表了完全不同的東西,並且不管上下文如何分配相同坐標的系統都不會非常精確。

如果我們在谷歌的紐約辦事處並且我們想訪問「華盛頓」,我們需要提供更多背景信息。

  • 我們打算參觀喬治華盛頓紀念館嗎?
  • 我們打算開車去南方參觀華盛頓特區嗎?
  • 我們計划到華盛頓州進行越野旅行嗎?

正如您在文中看到的那樣,周圍的單詞提供了一些可以更清楚地定義「華盛頓」可能含義的背景。

如果你從左到右閱讀,喬治這個詞可能表明你在談論這個人,如果你從右到左閱讀,那麼單詞D.C.可能表明你指的是這個城市。

但是,你需要從左到右,從右到左閱讀,告訴你實際上想要訪問這座橋。

BERT通過為每個單詞用法編碼不同的單詞嵌入來工作,並依賴於周圍的單詞來實現這一點。它雙向讀取上下文單詞(從左到右,從右到左)。

回到我們的GPS類比,想像一下紐約市街區,在同一條街上有兩家星巴克咖啡店。如果您想要獲得特定的產品,那麼之前和/或之後的業務將更容易引用它。

轉學習

轉學是當今深度學習中最重要的概念之一。即使您有非常小的數據集進行訓練,它也會使許多應用程序變得實用。

傳統上,轉移學習主要用於計算機視覺任務。

您通常擁有來自大公司(谷歌,Facebook,斯坦福等)的研究小組,在像Imagenet這樣的大型數據集上訓練圖像分類模型。

這個過程需要數天,而且通常非常昂貴。但是,一旦訓練完成,訓練模型的最後部分將被替換,並重新訓練新數據以執行類似但新的任務。

這個過程稱為微調,效果非常好。微調可能需要數小時或數分鐘,具體取決於新數據的大小,大多數公司都可以訪問。

讓我們回到我們的GPS類比來理解這一點。

假設您想從紐約市前往華盛頓州,而您認識的人將前往密歇根州。

你可以徒步乘坐汽車前往密歇根州,然後租一輛汽車從密歇根州開往華盛頓州,而且費用和駕駛時間都要低得多。

BERT是首批在NLP(自然語言處理)中成功應用轉移學習的模型之一。有幾種預先訓練過的模型通常需要數天才能進行訓練,但如果您使用Google Cloud TPU,則可以在數小時甚至數分鐘內進行微調。

使用BigQuery和Data Studio自動化Intent Insights

現在我們已經有了經過培訓的模型,我們可以使用我創建的報告測試我們可以從Google Search Console獲取的新問題 第一部分

我們可以像以前一樣運行相同的代碼來生成預測。

這一次,我還想將它們導出為CSV並導入到BigQuery中。

test_df.join(predictions)((「Query」,「Clicks」,「Impressions」,「Category0_predictions」,「Category2_predictions」))。to_csv(「intent_predictions.csv」)

首先,登錄Google Cloud。

!gcloud auth login –no-launch-browser

在單獨的選項卡中打開授權窗口,然後將令牌複製回Colab。

在Google雲端存儲中創建一個存儲桶並將CSV文件複製到那裡。我將我的桶命名為bert_intent_questions。

此命令會將我們的CSV文件上傳到我們的存儲桶。

!gsutil cp -r intent_predictions.csv gs:// bert_intent_questions

您還應該在BigQuery中創建一個數據集來導入該文件。我將我的數據集命名為bert_intent_questions

!bq load –autodetect –source_format = CSV bert_intent_questions.intent_predictions gs://bert_intent_questions/intent_predictions.csv

在我們對BigQuery進行預測之後,我們可以將它連接到Data Studio並創建一個超級有價值的報告,以幫助我們可視化哪些意圖具有最大的機會。

使用深度學習進行自動意圖分類(第2部分)「width =」2484「height =」1330「sizes =」(最大寬度:2484px)100vw,2484px「data-srcset =」https://cdn.searchenginejournal.com/ wp-content / uploads / 2019/07 / bert_data_studio.png 2484w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/07/bert_data_studio-480x257.png 480w,https://cdn.searchenginejournal。 com / wp-content / uploads / 2019/07 / bert_data_studio-680x364.png 680w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/07/bert_data_studio-768x411.png 768w,https:// cdn.searchenginejournal.com/wp-content/uploads/2019/07/bert_data_studio-1024x548.png 1024w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/07/bert_data_studio-1600x857.png 1600w「數據-SRC =「https://cdn.searchenginejournal.com/wp-content/uploads/2019/07/bert_data_studio.png

在我將Data Studio連接到BigQuery數據集之後,我創建了一個新欄位:通過劃分展示次數和點擊次數來實現點擊率。

由於我們根據預測的意圖對查詢進行分組,因此我們可以找到具有較高搜索展示次數和較少點擊次數的內容機會。那些是較淺的藍色方塊。

使用深度學習進行自動意圖分類(第2部分)「width =」2483「height =」1332「sizes =」(最大寬度:2483px)100vw,2483px「data-srcset =」https://cdn.searchenginejournal.com/ wp-content / uploads / 2019/07 / bert_data_studio_final.png 2483w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/07/bert_data_studio_final-480x257.png 480w,https://cdn.searchenginejournal。 com / wp-content / uploads / 2019/07 / bert_data_studio_final-680x365.png 680w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/07/bert_data_studio_final-768x412.png 768w,https:// cdn.searchenginejournal.com/wp-content/uploads/2019/07/bert_data_studio_final-1024x549.png 1024w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/07/bert_data_studio_final-1600x858.png 1600w「數據-SRC =「https://cdn.searchenginejournal.com/wp-content/uploads/2019/07/bert_data_studio_final.png 學習過程如何運作

我想介紹最後一個基本主題,以擴展我在第一部分中簡要介紹的編碼器/解碼器的想法。

讓我們看看下面的圖表,它們可以幫助我們想像培訓過程。

使用深度學習進行自動意圖分類(第2部分)「width =」460「height =」566「data-srcset =」「data-src =」https://cdn.searchenginejournal.com/wp-content/uploads/2019/ 07 /學習curves.png

但是,到底發生了什麼?機器學習模型如何能夠執行我們正在訓練的任務?

第一個圖表顯示每個訓練步驟(藍線)的誤差/損失如何減少。

但是,更重要的是,當模型在「看不見的」數據上進行測試時,錯誤也會減少。然後,有一點沒有進一步的改進。

我喜歡將此培訓過程視為通過反覆試驗消除輸入中的噪音/錯誤,直到您留下對於手頭任務至關重要的內容。

有一些隨機搜索涉及了解要刪除的內容和要保留的內容,但是由於理想的輸出/行為是已知的,因此隨機搜索可以是超選擇性和高效的。

再說一遍,你想從紐約開車到華盛頓,所有的道路都被積雪覆蓋。在這種情況下,編碼器將扮演吹雪卡車的角色,其任務是為您划出一條道路。

它具有目的地的GPS坐標,可以用它來說明它的距離或距離,但需要通過智能試驗和錯誤找出如何到達那裡。解碼器將是我們的汽車跟隨吹雪機為這次旅行創造的道路。

如果吹雪機向南移動太遠,它可以說它走向錯誤的方向,因為它越來越遠離最終的GPS目的地。

關於過度擬合的註記

在吹雪機完成之後,很容易記住到達那裡所需的所有轉彎,但是如果我們需要走彎路並且沒有為此划出道路,那將使我們的行程變得不靈活。

因此,記憶並不好,在深度學習術語中被稱為過度擬合。理想情況下,吹雪機會不止一種方式到達我們的目的地。

換句話說,我們需要儘可能廣義的路線。

我們通過在培訓過程中保留數據來實現這一目標。

我們使用測試和驗證數據集來使我們的模型儘可能通用。

關於BigQuery的Tensorflow的注釋

我試圖直接從BigQuery運行我們的預測,但是當我嘗試導入我們訓練過的模型時遇到了障礙。

!bq查詢 –use_legacy_sql = false 「CREATE MODEL bert_intent_questions.BERT OPTIONS (MODEL_TYPE ='TENSORFLOW', MODEL_PATH ='gs:// bert_intent_questions / *')」

BigQuery抱怨模型的大小超出了他們的極限。

等待bqjob_r594b9ea2b1b7fe62_0000016c34e8b072_1 …(0s)當前狀態:DONE查詢操作中的BigQuery錯誤:處理作業時出錯'sturdy-now-248018:bqjob_r594b9ea2b1b7fe62_0000016c34e8b072_1':讀取數據時出錯,錯誤消息:Total TensorFlow數據大小超過允許的最大大小;總尺寸至少為:1319235047;允許的最大尺寸為:268435456

我伸出了他們的支持,他們提出了一些建議。我在這裡分享它們以防有人找到時間來測試它們。

使用深度學習進行自動意圖分類(第2部分)「width =」1523「height =」824「sizes =」(最大寬度:1523px)100vw,1523px「data-srcset =」https://cdn.searchenginejournal.com/ wp-content / uploads / 2019/07 / google-bg-support.png 1523w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/07/google-bg-support-480x260.png 480w, https://cdn.searchenginejournal.com/wp-content/uploads/2019/07/google-bg-support-680x368.png 680w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/07 /google-bg-support-768x416.png 768w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/07/google-bg-support-1024x554.png 1024w「data-src =」https: //cdn.searchenginejournal.com/wp-content/uploads/2019/07/google-bg-support.png資源以了解更多信息

當我開始學習深度學習課程時,我沒有看到BERT或任何最新的神經網路架構。

然而,我收到的基礎,幫助我很快掌握了新的概念和想法。我發現學習新進展最有用的文章之一是這一篇: Illustrated BERT,ELMo和co。 (NLP如何破解轉移學習)

我還發現這個非常有用:紙張解剖: BERT:用於語言理解的深度雙向變壓器的預訓練「解釋 而另一個來自同一出版物: 論文解析:「XLNet:語言理解的廣義自回歸預訓練」解釋

BERT最近 被毆打 通過一個名為XLNet的新模型。我希望在將來的文章中提及Ludwig。

SEO社區中的Python勢頭繼續增長。這裡有些例子:

Paul Shapiro本月早些時候將Python帶到了MozCon舞台。他 共享腳本 他在演講中討論過。

當我在Twitter上分享代碼片段時,我感到非常驚喜 泰勒里爾頓一個SEO的同事,很快發現了我錯過的一個錯誤,因為他創造了一個 類似的代碼 獨立。

邁克爾韋伯分享了他的精彩 排名預測 使用多層感知器分類器和 Antoine Eripret 共享一個超級有價值 robot.txt更改監視器

我還要提一下,JR為opensource.com提供了一個非常有用的Python文章 Google Natural Language API的實際用例

圖片來源

所有截圖均由作者拍攝,2019年7月

相關文章