Databricksにおける自然言語処理

[Natural language processing \| Databricks on AWS](https://docs.databricks.com/machine-learning/reference-solutions/natural-language-processing.html) [2022/10/25時点]の翻訳となります。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

Spark MLやspark-nlpのような人気のあるオープンソースライブラリや、DatabricksとJohn Snow Labsとのパートナーシップによるプロプライエタリなライブラリを用いて、Databricks上で自然言語処理のタスクを実行することができます。

# Spark MLを用いたテキストからの特徴量の生成

Spark MLには、テキストの列から特徴量を作成するための様々なテキスト処理ツールが含まれています。Spark MLを用いた[Spark MLパイプライン](https://spark.apache.org/docs/latest/ml-pipeline.html)の中で、テキストからモデルトレーニングアルゴリズムの入力特徴量を直接作成することができます。Spark MLはトークン作成、ストップワード処理、word2vec、特徴量のハッシュ化を含む様々な[テキストプロセッサー](https://spark.apache.org/docs/latest/ml-features.html)をサポートしています。

# Spark NLPを用いたトレーニングと推論

オープンソースのSpark NLPを用いることで、Spark上に自然言語処理に対する数多くのディープラーニングのメソッドをスケールアウトさせることができます。このライブラリは、トークン化、固有表現認識、同梱されている[アノテーター](https://nlp.johnsnowlabs.com/docs/en/annotators)によるベクトル化のような標準的な自然言語処理をサポートしています。また、BERTやT5 Marionのような[Spark NLPのトランスフォーマー](https://nlp.johnsnowlabs.com/docs/en/transformers)に基づく数多くの事前学習済みディープラーニングモデルを用いて、テキストの要約、固有表現認識の実行、翻訳、生成を行うこともできます。

## CPU上でSpark NLPを用いたバッチでの推論の実行

Spark NLPは最小限のコードで使用できる事前学習済みモデルを多数提供しています。このセクションには、機械翻訳のためのMarianトランスフォーマーを使ったサンプルが含まれています。サンプルな完全な一覧については、[Spark NLP documentation](https://nlp.johnsnowlabs.com/docs/en/quickstart)をご覧ください。

### 要件

Spark NLPを使うには、[互換性のあるランタイム](https://nlp.johnsnowlabs.com/docs/en/install#databricks-support)が稼働しているクラスターを[作成](https://qiita.com/taka_yayoi/items/d36a469a1e0c0cebaf1b)するか使用します。`com.johnsnowlabs.nlp:spark-nlp_2.12:4.1.0`のようなSpark NLPの最新のMavenコーディネートを用いて、クラスターにSpark NLPをインストールします。

### 機械翻訳のサンプルコード

ノートブックのセルで`sparknlp`のPythonライブラリをインストールします。

```
%pip install sparknlp
```

翻訳のパイプラインを構成し、サンプルテキストに対して実行します。

```py:Python
from sparknlp.base import DocumentAssembler
from sparknlp.annotator import SentenceDetectorDLModel, MarianTransformer
from pyspark.ml import Pipeline

document_assembler = DocumentAssembler().setInputCol("text").setOutputCol("document")

sentence_detector = SentenceDetectorDLModel.pretrained("sentence_detector_dl", "xx") \
  .setInputCols("document").setOutputCol("sentence")

marian_transformer = MarianTransformer.pretrained() \
  .setInputCols("sentence").setOutputCol("translation")

pipeline = Pipeline().setStages([document_assembler,  sentence_detector, marian_transformer])

data = spark.createDataFrame([["You can use Spark NLP to translate text. " + \
                               "This example pipeline translates English to French"]]).toDF("text")

# Create a pipeline model that can be reused across multiple data frames
model = pipeline.fit(data)

# You can use the model on any data frame that has a “text” column
result = model.transform(data)

display(result.select("text", "translation.result"))
```

## Spark NLPとMLflowを用いた固有表現認識モデルのトレーニングと活用

このサンプルノートブックでは、Spark NLPを用いた固有表現認識モデルのトレーニング、MLflowへのモデルの保存、テキストから推論を行うためにモデルを使用する方法を説明します。この他の自然言語処理モデルのトレーニングの方法に関しては、[John Snow Labs documentation for Spark NLP](https://nlp.johnsnowlabs.com/docs/en/training)をご覧下さい。

### Spark NLPモデルのトレーニング、推論のノートブック

https://github.com/taka-yayoi/public_repo_2/blob/master/spark_nlp_tutorial/Spark%20NLP%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E3%83%88%E3%83%AC%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%81%A8%E6%8E%A8%E8%AB%96.py

# John Snow LabsパートナーシップによるヘルスケアNLP

John Snow LabsのSpark NLP for Healthcareは、診療テキストや生物医療テキストマイニング向けのプロプライエタリなライブラリです。このライブラリは、医療エンティティ、薬品、リスク要因、解剖学、デモグラフィックス、センシティブなデータの認識、操作のための事前学習済みモデルを提供します。[John Snow LabsとのPartner Connectインテグレーション](https://docs.databricks.com/partners/ml/john-snow-labs.html)を用いてSpark NLP for Healthcareを試すことができます。この際には、John Snow Labsトライアルあるいは有料アカウントが必要となります。彼らの[ウェブサイト](https://nlp.johnsnowlabs.com/docs/en/license_getting_started)でJohn Snow Labs Spark NLP for Healthcareの完全な機能やドキュメントを確認することができます。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)