テキスト変換の仕組み

テキスト変換とは、テキストのシーケンスを、同じ長さか、異なる長さの別のシーケンスに翻訳または変換する処理のことです。 この処理は、自然言語処理 (NLP) ドメインのシーケンス間 (Seq2seq) モデルを用いて行われます。 GeoAI ツールボックスのテキストの分析ツールセットには、テキスト変換モデルをトレーニングするツールや、テキストを別の形式に変換するためにモデルを使用するツールが含まれています。

[テキスト変換モデルのトレーニング (Train Text Transformation Model)] ツールは、シーケンス間タスクを行うために NLP モデルをトレーニングします。トレーニング済みモデルと [ディープ ラーニングを使用したテキスト変換 (Transform Text Using Deep Learning)] ツールを併用することで、テキストを同様に変換、翻訳、集約できます。

適用例

このツールは、次のような場合に適用できます。

  • スペル ミスがあり標準的な形式ではない、間違った住所を修正し、標準化します。 これにより、これらの住所をジオコーディングする際に精度を高めることができます。
  • 外国語のテキストを翻訳して (機械翻訳の範囲内で) 理解を深め、さらに手を加えたりすることを可能にします。
  • 土地区画境界線 (土地境界など) の法的記述をトラバース ファイルに変換し、自動的に処理してパーセルのジオメトリを生成します。
テキスト変換モデル フロー チャート
住所の標準化のテキスト変換モデルでは、スペル ミスを修正し、番地の表記を標準化します。

ArcGIS のテキスト変換モデルは、Vaswani et, al. が発表した影響力の大きい論文 "Attention is All you Need" において提案されている Transformer アーキテクチャに基づいています。 これにより、モデルの精度と並行処理のしやすさが高まると同時に、トレーニングに必要なラベル付きデータが少なくて済みます。

内部的には、ArcGIS のテキスト変換モデルは encoder-decoder モデルです。 エンコーダーのアテンション レイヤーは入力テキストのすべての単語を受け取りますが、デコーダーのアテンション レイヤーは処理中の単語の前にある単語にしかアクセスできません。 デコーダーは、エンコードされた特徴表現を変換し、トークンの出力シーケンスを生成します。 よく知られている encoder-decoder モデルには、BART や T5 などがあります。

エンコーダーおよびデコーダーとは:

  • エンコーダー: エンコーダーは、入力テキストを固定長の特徴ベクトルの形で数値表現に変換します。 この数値表現は、入力テキストの意味論的意味を維持します。
  • デコーダー: デコーダーは、エンコードされた特徴ベクトルをエンコーダーから取り、これを入力シーケンスと組み合わせて、トークンの出力シーケンスを生成します。
テキスト変換モデルの構成要素

テキスト変換モデルも、Mistral モデル バックボーンをサポートしています。 Mistral は、Transformer アーキテクチャに基づく大規模言語モデルで、デコーダーオンリーなモデルとして動作します。 Mistral のアーキテクチャの主要コンポーネントは次のとおりです。

  • Sliding Window Attention - 長いテキストを小さな重複セグメントで処理することで効率的に処理し、重要なコンテキストを維持しながら計算コストとメモリ使用量を削減します。
  • Grouped Query Attention - 類似のクエリをまとめてクラスタリングすることで効率を高め、アテンションの計算量を最小限に抑え、処理を高速化します。
  • Byte-Fallback BPE (Byte Pair Encoding) Tokenizer - モデルが処理できるようにテキストをトークンに変換します。
注意:

NLP モデルは、大量の非構造化テキストの解析を自動化するには効果的なツールです。 他の種類のモデルと同様に、人間による適度な監視と、モデルの種類およびモデルのトレーニングに使用するトレーニング データセットに関する透明性を確保したうえで、関連するタスクに適用する必要があります。

テキスト変換モデルの使用

[ディープ ラーニングを使用したテキスト変換 (Transform Text Using Deep Learning)] ツールは、トレーニング済みのテキスト変換モデルを非構造化テキストに適用し、別の言語または形式に変換するために使用できます。 ArcGIS Living Atlas of the World の事前トレーニング済みのテキスト変換モデルを使用するか、[テキスト変換モデルのトレーニング (Train Text Transformation Model)] ツールを使用してカスタム モデルをトレーニングできます。

[ディープ ラーニングを使用したテキスト変換 (Transform Text Using Deep Learning)] ツールへの入力は、変換するテキストを含むフィーチャクラスかテーブルです。 入力モデルには、Esri モデル定義 JSON ファイル (*.emd) またはディープ ラーニング モデル パッケージ (*.dlpk) を指定できます。 モデルには、ディープ ラーニング モデル ファイル (モデル ウェイトを含む) へのパスと、その他のモデル パラメーターが含まれます。 一部のモデルには、追加のモデル引数が含まれることがあります。 このツールは、入力テーブルに変換済みテキストを含むフィールドを作成します。

ツールは CPU で実行できますが、ディープ ラーニングは計算負荷が高いため、GPU を使用して処理することをお勧めします。 GPU を使用してこのツールを実行するには、プロセッサ タイプ環境設定を GPU に設定します。 複数の GPU がある場合は、代わりに GPU ID 環境設定を指定します。

テキスト変換モデルのトレーニング

[テキスト変換モデルのトレーニング (Train Text Transformation Model)] ツールは、テキスト変換を行う NLP モデルのトレーニングに使用できます。 このツールでは機械学習のアプローチを用い、入力テキストとターゲットの変換済み出力のペアで構成されるトレーニング サンプルを提供することで、モデルのトレーニングを行います。 Mistral モデル バックボーンでは、コンテキスト内学習を使用し、入力プロンプトを通じて、また、目的の出力を推測するのに役立つ具体的な例をモデルに提供することで、モデルの理解と応答をガイドします。 NLP モデルのトレーニングは計算負荷が高いタスクなので、GPU を使用することをお勧めします。

トレーニング データは、予測変数として機能するテキスト フィールドを含む入力テーブルと、テーブルの各入力テキストのターゲット ラベルを含むラベル フィールドの形式で提供されます。

テキスト変換モデルをトレーニングする場合、モデルを最初からトレーニングするか、トレーニングされたモデルを微調整するか、コンテキスト内学習を使用できます。 一般的に、Transformer アーキテクチャを使用する言語モデルは few-shot 学習手法として見なされています。

ただし、類似のタスクを実行する事前トレーニング済みのテキスト変換モデルを使用できる場合は、それを新しいトレーニング データで微調整できます。 新しいモデルをトレーニングするよりも、既存のモデルを微調整する方が時間を短縮でき、トレーニング サンプルも少なくて済みます。 事前トレーニング済みモデルを微調整する際は、事前トレーニング済みモデルに使用される同じバックボーン モデルを維持してください。

事前トレーニング済みモデルは、Esri モデル定義ファイルか、ディープ ラーニング パッケージ ファイルのいずれかです。 出力モデルも、これらの形式で、指定した出力モデル フォルダーに保存されます。

ディープ ラーニング モデルのトレーニングは反復的な処理で、入力トレーニング データが複数回にわたってニューラル ネットワークで渡されます。 トレーニング データ全体の各トレーニング パスは、エポックと呼ばれます。 [最大エポック] パラメーターは、トレーニング中のモデルにおいて、トレーニング データが確認される最大回数を指定します。 これは、トレーニング対象のモデル、タスクの複雑さ、トレーニング サンプルの数によって異なります。 トレーニング サンプルが多い場合は、小さい値を使用できます。 一般的に、検証損失が少なくなるまで、エポックを増やしてトレーニングを繰り返すことをお勧めします。

[モデル バックボーン] パラメーターは、モデルのエンコーダーとして機能し、入力テキストの特徴表現を抽出する、事前構成済みのニューラル ネットワークを指定します。 このモデルは、大量のテキストに対して半教師付きで事前トレーニングされ、言語をよく理解している、Transformer アーキテクチャに基づく T5 ベースのエンコーダーをサポートしています。 [モデル バックボーン] パラメーターは、Mistral 大規模言語モデル (LLM) もサポートしています。 Mistral は、長いテキストを効率的に処理するための Sliding Window Attention、計算を効率化するための Grouped Query Attention、および多様なテキスト入力を処理するための Byte-Fallback BPE Tokenizer を使用するデコーダーオンリーなトランスフォーマーです。

モデルのトレーニングはバッチで行われ、[バッチ サイズ] パラメーターは 1 回のトレーニングで処理されるトレーニング サンプルの数を指定します。 バッチ サイズを大きくするとツールのパフォーマンスが向上します。 しかし、バッチ サイズが増加するにつれて、使用されるメモリ量も増えます。 モデルのトレーニング中にメモリ不足エラーが発生した場合は、より小さいバッチ サイズを使用してください。

[学習率] パラメーターは、非常に重要なハイパーパラメーターの 1 つです。 これは、トレーニング中に調整されるモデル ウェイトの割合を表します。 低い学習率を指定すると、モデルはゆっくりと向上し、トレーニングにも時間がかかるため、時間とリソースが浪費されることになります。 学習率が高ければ逆効果となり、モデルはあまり学習しない可能性があります。 高い学習率では、モデル ウェイトが大幅に調整され、不正な結果が生成されることになります。 ほとんどの場合、このツールでは Leslie N. Smith による論文 "Cyclical Learning Rates for Training Neueal Networks" に基づく自動学習率ファインダーを使用するため、[学習率] パラメーターには値を指定しないことをお勧めします。

このツールでは、トレーニング データの一部 (デフォルトでは 10%) を検証用のセットとして使用します。 [検証率] パラメーターでは、検証に使用するトレーニング データの量を調整できます。 Mistral モデルの場合、必要なトレーニング セットが小さく、モデルのパフォーマンスの評価に大規模な検証用のセットを利用するため、データの少なくとも 50 パーセントを検証用に予約する必要があります。

デフォルトでは、早期停止手法を使用するため、後続のトレーニング エポックでモデルが改善しなくなった時点で、モデルのトレーニングを停止します。 [モデルが改善しなくなったら停止] パラメーターをオフにすると、この動作をオフにできます。

また、事前トレーニング済みモデルのバックボーン レイヤーを固定するかどうかも指定できます。これにより、ウェイトとバイアスが本来の設計どおりになります。 デフォルトでは、バックボーン モデルのレイヤーは固定されず、[モデル バックボーン] 値のウェイトとバイアスはトレーニング サンプルに合わせて変更できます。 この処理には時間がかかりますが、通常は優れた結果が得られます。

多くの場合、テキスト データには、HTML タグや URL 形式のノイズが含まれます。 の[HTML タグの削除] パラメーターと [URL の削除] パラメーターを使用してテキストを事前処理し、タグを削除してから処理を行えます。

参考文献

Vaswani, Ashish, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, Illia Polosukhin. "Attention Is All You Need." December 6, 2017. https://arxiv.org/abs/1706.03762.

Raffel, Colin. et al. "Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer." July 20, 2020. https://doi.org/10.48550/arxiv.1910.10683.

"Encoder models." https://huggingface.co/course/chapter1/5?fw=pt.

Brown, Tom B. et al. "Language Models are Few-Shot Learners." July 22, 2020. https://doi.org/10.48550/arxiv.2005.14165.

Smith, Leslie N. "Cyclical Learning Rates for Training Neural Networks." April 4, 2017. https://doi.org/10.48550/arxiv.1506.01186.

"Mistral." https://docs.mistral.ai/getting-started/open_weight_models/.