自然言語処理技術

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 のメリットを得られるビジネス シナリオは次のとおりです。

  • 財務、医療、小売、政府機関、その他のセクターで手書きまたは機械で作成されたドキュメントのドキュメント インテリジェンス。
  • 名前エンティティ認識 (NER)、分類、要約、リレーションシップ抽出などの、テキスト処理のための業界に依存しない NLP タスク。 これらのタスクにより、テキストや非構造化データなどのドキュメント情報を取得、識別、分析するプロセスが自動化されます。 これらのタスクの例としては、リスク階層化モデル、オントロジ分類、小売りの要約などがあります。
  • セマンティック検索のための情報取得とナレッジ グラフの作成。 この機能により、創薬や臨床試験をサポートする医療知識グラフを作成できます。
  • 小売、金融、旅行、その他の業界にわたる顧客向けアプリケーションでの会話型 AI システムのテキスト翻訳。

カスタマイズされた NLP フレームワークとしての Apache Spark

Apache Spark は、ビッグデータ分析アプリケーションのパフォーマンスを向上させるメモリ内処理をサポートする並列処理フレームワークです。 Azure Synapse AnalyticsAzure HDInsightAzure Databricks は Spark へのアクセスを提供し、その処理能力を活用します。

カスタマイズされた NLP ワークロードの場合、Spark NLP は、大量のテキストを処理するための効率的なフレームワークとして機能します。 このオープンソース NLP ライブラリには、spaCy、NLTK、Stanford CoreNLP、Open NLP などの従来の NLP ライブラリの完全な機能を提供する Python、Java、Scala のライブラリが用意されています。 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 チームは、関連する最新の学術論文を定期的に読み、最先端のモデルを実装しています。 過去 2、3 年の間、最もパフォーマンスの高いモデルがディープ ラーニングを使用してきました。 このライブラリには、名前付きエンティティ認識、ドキュメント分類、センチメントと感情の検出、文検出のための事前構築済みのディープ ラーニング モデルが付属しています。 このライブラリには、単語、チャンク、文、ドキュメントの埋め込みのサポートを含む、多数の事前トレーニング済み言語モデルも含まれています。

ライブラリには、CPU、GPU、最新の Intel Xeon チップ用に最適化されたビルドがあります。 Spark クラスターを利用するために、トレーニングと推論のプロセスをスケーリングできます。 これらのプロセスは、すべての一般的な分析プラットフォームで運用環境で実行できます。

課題

  • 自由形式のテキスト ドキュメントのコレクションを処理するには、大量の計算リソースが必要です。 処理には時間もかかります。 このようなプロセスには、多くの場合、GPU コンピューティングのデプロイが含まれます。
  • 標準化されたドキュメント形式がない場合、自由形式のテキスト処理を使用してドキュメントから特定のファクトを抽出し、正確な結果に恒常的に到達することは困難である可能性があります。 たとえば、請求書のテキスト表現を考えてみてください。請求書がさまざまなベンダーから来ているときに、請求の番号と日付を正確に抽出する処理を構築することは、難しい可能性があります。

主要な選択条件

Azure では、Azure Databricks、Azure Synapse Analytics、Azure HDInsight などの Spark サービスを Spark NLP で使用すると、NLP 機能が提供されます。 Azure Cognitive Services は、NLP 機能のもう 1 つのオプションです。 使用するサービスを決定するには、次の質問を検討してください。

  • 事前構築済みまたは事前トレーニング済みのモデルを使用しますか。 "はい" の場合は、Azure Cognitive Services が提供する API の使用を検討してください。 または、Spark NLP を使用して任意のモデルをダウンロードしてください。

  • テキスト データの大規模なコーパスに対してカスタム モデルをトレーニングする必要がありますか。 "はい" の場合は、Spark NLP で Azure Databricks、Azure Synapse Analytics、または Azure HDInsight を使用することを検討してください。

  • トークン化、ステミング、レンマ化、単語の出現頻度/逆文書頻度 (TF/IDF) のような低レベルの NLP 機能が必要ですか。 "はい" の場合は、Spark NLP で Azure Databricks、Azure Synapse Analytics、または Azure HDInsight を使用することを検討してください。 または、任意の処理ツールでオープンソースのソフトウェア ライブラリを使用してください。

  • エンティティと意図の識別、トピック検出、スペル チェック、センチメント分析などのシンプルで高レベルの NLP 機能が必要ですか。 "はい" の場合は、Cognitive Services が提供する API の使用を検討してください。 または、Spark NLP を使用して任意のモデルをダウンロードしてください。

機能のマトリックス

次の表は、NLP サービスの機能の主な相違点をまとめたものです。

一般的な機能

機能 Spark NLP を使用した Spark サービス (Azure Databricks、Azure Synapse Analytics、Azure HDInsight) Azure Cognitive Services
サービスとして事前トレーニング済みモデルを提供 はい はい
REST API はい はい
プログラミング Python、Scala サポートされている言語については、「その他のリソース」を参照してください
大規模なデータ セットとサイズの大きいドキュメントの処理のサポート はい いいえ

低レベルの NLP 機能

アノテーターの機能 Spark NLP を使用した Spark サービス (Azure Databricks、Azure Synapse Analytics、Azure HDInsight) Azure Cognitive Services
文検出機能 はい いいえ
文のディープ検出機能 はい はい
Tokenizer はい はい
N グラム ジェネレーター はい いいえ
単語のセグメント化 はい はい
ステマー はい いいえ
レンマタイザー はい いいえ
品詞のタグ付け はい いいえ
依存関係パーサー はい いいえ
翻訳 はい いいえ
ストップワード クリーナー はい いいえ
スペル修正 はい いいえ
ノーマライザー はい はい
テキスト マッチャー はい いいえ
TF/IDF はい いいえ
正規表現マッチャー はい Language Understanding サービス (LUIS) に組み込まれています。 LUIS を置き換える会話言語理解 (CLU) ではサポートされていません。
日付マッチャー はい DateTime 認識エンジンを使用して LUIS と CLU で可能
Chunker はい いいえ

高レベルの NLP 機能

機能 Spark NLP を使用した Spark サービス (Azure Databricks、Azure Synapse Analytics、Azure HDInsight) Azure Cognitive Services
スペル チェック はい いいえ
概要 はい はい
質問応答 はい はい
センチメント検出 はい はい
感情検出 はい オピニオン マイニングをサポート
トークンの分類 はい はい (カスタム モデルを使用)
テキスト分類 はい はい (カスタム モデルを使用)
テキスト表現 はい いいえ
NER はい はい - テキスト分析が一連の NER を提供し、カスタム モデルがエンティティ認識内にあります
エンティティ認識 はい はい (カスタム モデルを使用)
言語検出 はい はい
英語以外の言語のサポート はい、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 構造体にそのトークンを返すアノテーター。 このクラスは適合されていません。 トークナイザーを適合すると、内部 RuleFactory によって入力構成が使用されてトークン化規則が設定されます。 トークナイザーでは、オープン標準を使用してトークンを識別します。 既定の設定がニーズを満たしていない場合は、ルールを追加してトークナイザーをカスタマイズできます。

  • Normalizer: トークンをクリーンアップするアノテーター。 ノーマライザーにはステムが必要です。 ノーマライザーでは、正規表現とディクショナリを使用してテキストを変換し、ダーティ文字を削除します。

  • WordEmbeddings: トークンをベクトルにマップするアノテーターを検索します。 setStoragePath を使用して、埋め込み用のカスタム トークン検索ディクショナリを指定できます。 ディクショナリの各行には、スペースで区切られたトークンとそのベクター表現が含まれている必要があります。 トークンがディクショナリに見つからない場合、結果は同じディメンションのゼロ ベクトルになります。

Spark NLP は、MLflow がネイティブにサポートする Spark MLlib パイプラインを使用します。 MLflow は、機械学習ライフサイクル用のオープンソース プラットフォームです。 そのコンポーネントには、次のものがあります。

  • Mlflow Tracking: 実験を記録し、結果を照会する方法を提供します。
  • MLflow プロジェクト: 任意のプラットフォームでデータ サイエンス コードを実行できます。
  • MLflow モデル: 多様な環境にモデルをデプロイします。
  • モデル レジストリ: 中央リポジトリに格納するモデルを管理します。

MLflow は Azure Databricks に統合されています。 他の Spark ベースの環境に MLflow をインストールして、実験を追跡および管理できます。 MLflow モデル レジストリを使用して、運用目的でモデルを使用できるようにすることもできます。

共同作成者

この記事は、Microsoft によって保守されています。 当初の寄稿者は以下のとおりです。

プリンシパルの作成者:

次のステップ