自然語言處理技術 (機器翻譯)

Azure AI 服務
Azure Databricks
Azure HDInsight
Azure Synapse Analytics

自然語言處理 (NLP) 有許多用途:情感分析、主題偵測、語言偵測、關鍵片語擷取和文件分類。

具體來說,您可以使用 NLP 來:

  • 分類檔。 例如,您可以將文件標記為敏感性或垃圾郵件。
  • 執行後續的處理或搜尋。 您可以針對這些用途使用 NLP 輸出。
  • 藉由識別檔中存在的實體來摘要文字。
  • 使用關鍵詞標記檔。 針對 關鍵詞,NLP 可以使用已識別的實體。
  • 進行以內容為基礎的搜尋和擷取。 標記可讓此功能成為可能。
  • 摘要說明檔的重要主題。 NLP 可以將已識別的實體合併成主題。
  • 將檔案分類以供流覽。 為此,NLP 會使用偵測到的主題。
  • 根據選取的主題列舉相關文件。 為此,NLP 會使用偵測到的主題。
  • 為情感評分文字。 藉由使用這項功能,您可以評估檔的正面或負面語氣。

Apache、Apache® Spark 和火焰標誌是 美國 和/或其他國家/地區的 Apache Software Foundation 註冊商標或商標。 Apache Software Foundation 不會隱含使用這些標記。

潛在的使用案例

可受益於自定義 NLP 的商務案例包括:

  • 用於金融、醫療保健、零售、政府和其他部門的手寫或機器建立文件的文件智慧。
  • 與產業無關的文字處理 NLP 工作,例如名稱實體辨識 (NER)、分類、摘要和關聯擷取。 這些工作會將擷取、識別和分析檔資訊的程式自動化,例如文字和非結構化數據。 這些工作的範例包括風險分層模型、內部學分類和零售摘要。
  • 語意搜尋的資訊擷取和知識圖表建立。 這項功能可讓您建立支援藥物發現和臨床試驗的醫學知識圖表。
  • 跨零售、金融、旅遊和其他產業的客戶面向應用程式中交談式 AI 系統的文字翻譯。

Apache Spark 作為自定義的 NLP 架構

Apache Spark 是一個平行處理架構,可支援記憶體內部處理,以大幅提升巨量資料分析應用程式的效能。 Azure Synapse AnalyticsAzure HDInsightAzure Databricks 提供 Spark 的存取權,並利用其處理能力。

針對自定義的 NLP 工作負載,Spark NLP 可作為處理大量文字的有效架構。 此開放原始碼 NLP 連結庫提供 Python、Java 和 Scala 連結庫,可提供傳統 NLP 連結庫的完整功能,例如 spaCy、NLTK、Stanford CoreNLP 和 Open NLP。 Spark NLP 也提供拼字檢查、情感分析和文件分類等功能。 Spark NLP 藉由提供最先進的精確度、速度和延展性,來改善先前的工作。

Diagram that shows areas of N L P functionality like entity recognition. Various boxes list N L P annotators, models, and supported languages.

最近的公開基準檢驗顯示 Spark NLP 的速度比 spaCy 快 38 和 80 倍,其可比定型自定義模型的正確性。 Spark NLP 是唯一可以使用分散式 Spark 叢集的開放原始碼連結庫。 Spark NLP 是 Spark ML 的原生延伸模組,可直接在數據框架上運作。 因此,叢集上的加速會導致效能提升的另一個數量級。 因為每個 Spark NLP 管線都是 Spark ML 管線,因此 Spark NLP 非常適合用來建置統一的 NLP 和機器學習管線,例如檔分類、風險預測和推薦管線。

除了出色的效能,Spark NLP 也為越來越多的 NLP 工作提供最先進的精確度。 Spark NLP 小組會定期閱讀最新的相關學術論文,並實作最先進的模型。 在過去兩到三年中,效能最佳的模型已使用深度學習。 連結庫隨附預先建置的深度學習模型,可用於具名實體辨識、檔分類、情感和情感偵測,以及句子偵測。 此連結庫也包含數十種預先定型的語言模型,其中包含文字、區塊、句子和檔內嵌的支援。

連結庫已針對 CPU、GPUS 和最新的 Intel Xeon 晶片優化組建。 您可以調整定型和推斷程式,以利用Spark叢集。 這些程式可以在所有熱門的分析平臺中於生產環境中執行。

挑戰

  • 處理自由格式文字檔的集合需要大量的計算資源。 處理也會耗費大量時間。 這類程式通常牽涉到 GPU 計算部署。
  • 如果沒有標準化的檔格式,當您使用自由格式文字處理從檔擷取特定事實時,很難達到一致精確的結果。 例如,想想發票的文字表示法,可能很難建立一個程式,以正確擷取來自各種廠商的發票編號和日期。

索引鍵選取準則

在 Azure 中,當您搭配 Spark NLP 使用 Azure Databricks、Azure Synapse Analytics 和 Azure HDInsight 等 Spark 服務時,會提供 NLP 功能。 Azure 認知服務是 NLP 功能的另一個選項。 若要決定要使用的服務,請考慮下列問題:

  • 您要使用預先建置或預先定型的模型嗎? 如果是,請考慮使用 Azure 認知服務所提供的 API。 或透過Spark NLP 下載您選擇的模型。

  • 您需要根據大型文字數據主體來定型自定義模型嗎? 如果是,請考慮搭配 Spark NLP 使用 Azure Databricks、Azure Synapse Analytics 或 Azure HDInsight。

  • 您是否需要低階 NLP 功能,例如 Tokenization、stemming、lemmatization 和 term frequency/inverse 檔頻率 (TF/IDF)? 如果是,請考慮搭配 Spark NLP 使用 Azure Databricks、Azure Synapse Analytics 或 Azure HDInsight。 或在您選擇的處理工具中使用開放原始碼軟體連結庫。

  • 您是否需要簡單的高層級 NLP 功能,例如實體和意圖識別、主題偵測、拼字檢查或情感分析? 如果是,請考慮使用認知服務所提供的 API。 或透過Spark NLP 下載您選擇的模型。

功能矩陣

下表摘要說明 NLP 服務功能的主要差異。

一般功能

功能 Spark 服務 (Azure Databricks、Azure Synapse Analytics、Azure HDInsight) 與 Spark NLP Azure 認知服務
提供預先定型的模型即服務 Yes Yes
REST API Yes Yes
可程式性 Python、Scala 如需支持的語言,請參閱 其他資源
支援處理巨量數據集和大型檔 No

低階 NLP 功能

批注器的功能 Spark 服務 (Azure Databricks、Azure Synapse Analytics、Azure HDInsight) 與 Spark NLP Azure 認知服務
句子偵測器 No
深層句子偵測器 Yes Yes
Tokenizer Yes Yes
N-gram 產生器 No
分詞 Yes Yes
詞幹分析器 No
Lemmatizer No
Part-of-speech 標記 No
相依性剖析器 No
翻譯 No
停用字詞清除器 No
拼字更正 No
Normalizer Yes Yes
文字比對器 No
TF/IDF No
正則表達式比對器 Yes 內嵌在 Language Understanding Service (LUIS) 中。 在取代 LUIS 的 Conversational Language Understanding (CLU) 中不支援。
日期比對器 Yes 透過 DateTime 辨識器在 LUIS 和 CLU 中可能
區塊器 No

高階 NLP 功能

功能 Spark 服務 (Azure Databricks、Azure Synapse Analytics、Azure HDInsight) 與 Spark NLP Azure 認知服務
拼字檢查 No
摘要 Yes Yes
問題解答 Yes Yes
情感偵測 Yes Yes
表情偵測 Yes 支援意見採礦
詞元分類 Yes 是,透過自定義模型
文字分類 Yes 是,透過自定義模型
文字表示法 No
NER Yes 是 -- 文字分析提供一組 NER,而自定義模型位於實體辨識中
實體辨識 Yes 是,透過自定義模型
語言偵測 Yes Yes
支援英文以外的語言 是,支持超過 200 種語言 是,支持超過97種語言

在 Azure 中設定 Spark NLP

若要安裝 Spark NLP,請使用下列程式代碼,但以最新版本號碼取代 <version> 。 如需詳細資訊,請參閱 Spark NLP 檔

# Install Spark NLP from PyPI.
pip install spark-nlp==<version>

# Install Spark NLP from Anacodna or Conda.
conda install -c johnsnowlabs spark-nlp

# Load Spark NLP with Spark Shell.
spark-shell --packages com.johnsnowlabs.nlp:spark-nlp_<version>

# Load Spark NLP with PySpark.
pyspark --packages com.johnsnowlabs.nlp:spark-nlp_<version>

# Load Spark NLP with Spark Submit.
spark-submit --packages com.johnsnowlabs.nlp:spark-nlp_<version>

# Load Spark NLP as an external JAR after compiling and building Spark NLP by using sbt assembly.
spark-shell --jars spark-nlp-assembly-3 <version>.jar

開發 NLP 管線

針對 NLP 管線的執行順序,Spark NLP 遵循與傳統 Spark ML 機器學習模型相同的開發概念。 但 Spark NLP 會套用 NLP 技術。

Diagram that shows N L P pipeline stages, such as document assembly, sentence detection, tokenization, normalization, and word embedding.

Spark NLP 管線的核心元件包括:

  • DocumentAssembler:將數據變更為 Spark NLP 可處理的格式來準備數據的轉換器。 此階段是每個 Spark NLP 管線的進入點。 DocumentAssembler 可以讀取資料 String 行或 Array[String]。 您可以使用 setCleanupMode 來前置處理文字。 根據預設,此模式會關閉。

  • SentenceDetector:使用指定的方法來偵測句子界限的批注器。 這個批注子可以傳回 中每個擷取的 Array句子。 如果您設定 explodeSentences 為 true,也可以傳回不同數據列中的每個句子。

  • Tokenizer:將原始文字分隔成標記的批註器,或文字、數位和符號等單位,並傳回結構中的 TokenizedSentence 標記。 這個類別不是合適的。 如果您符合 Tokenizer,內部 RuleFactory 會使用輸入組態來設定令牌化規則。 Tokenizer 會使用開放式標準來識別令牌。 如果預設設定不符合您的需求,您可以新增規則來自定義 Tokenizer。

  • 正規化程式:清除令牌的批注器。 正規化程式需要字幹。 Normalizer 會使用正則表達式和字典來轉換文字並移除髒字元。

  • WordEmbeddings:查閱將標記對應至向量的批註器。 您可以使用 setStoragePath 指定用於內嵌的自訂令牌查閱字典。 字典的每一行都必須包含標記及其向量表示法,並以空格分隔。 如果在字典中找不到令牌,則結果為相同維度的零向量。

Spark NLP 使用原生支援 MLflow 的 Spark MLlib 管線。 MLflow 是機器學習生命週期的開放原始碼平臺。 元件包括:

  • Mlflow 追蹤:記錄實驗,並提供查詢結果的方式。
  • MLflow 專案:可讓您在任何平台上執行數據科學程序代碼。
  • MLflow 模型:將模型部署到不同的環境。
  • 模型登錄:管理儲存在中央存放庫中的模型。

MLflow 已整合在 Azure Databricks 中。 您可以在任何其他 Spark 型環境中安裝 MLflow,以追蹤和管理您的實驗。 您也可以使用 MLflow 模型登錄,讓模型可供生產用途使用。

參與者

本文由 Microsoft 維護。 原始投稿人如下。

主要作者:

下一步