テキスト分類とは、事前定義済みカテゴリまたはラベルを、文、パラグラフ、テキスト レポート、またはその他の非構造化テキスト形式に割り当てる処理のことです。 GeoAI ツールボックスのテキスト分析ツールセットには、自然言語処理 (NLP) 手法を使用してテキスト分類モデルのトレーニングを行ったり、モデルを使用してテキストを分類するためのツールが含まれています。
[テキスト分類モデルのトレーニング (Train Text Classification Model)] ツールは、データセットのトレーニングの一環として提供される既知のクラスやカテゴリに基づき、テキストを分類するための NLP モデルをトレーニングします。 トレーニング済みモデルは [ディープ ラーニングを使用したテキスト分類 (Classify Text Using Deep Learning)] ツールで、類似するテキストをこれらのカテゴリに分類するために使用されます。
適用例
このツールは、次のような場合に適用できます。
- 不完全な住所を、その住所が所在する国によって分類します。 これにより、適切なロケーターを割り当てて、住所をより正確にジオコーディングできるようになります。
- ワクチン忌避の感情の有無によって、ジオコーディングされたツイートを分類します。 これにより、公衆教育キャンペーンを通じて市民の信頼を獲得し、ワクチン接種の促進につなげられるエリアを特定します。
- インシデント レポートに基づき、犯罪の種類を分類します。 犯罪をカテゴリ別に集計することで傾向を把握し、改善策の策定に役立てることができます。
ArcGIS のテキスト分類モデルは、Vaswani et, al. が発表した影響力の大きい論文 "Attention is All you Need" において提案されている Transformer アーキテクチャに基づいています。 これにより、モデルの精度と並行処理のしやすさが高まると同時に、トレーニングに必要なラベル付きデータが少なくて済みます。
内部的には、ArcGIS のテキスト分類モデルは、次の 2 つのコンポーネントを持つディープ ニューラル ネットワークです。
- エンコーダー: エンコーダーはモデルのバックボーンとしての役割を担い、入力テキストを固定長ベクトル形式の特徴表現に変換します。 このモデルは、Transformer アーキテクチャに基づき、大量のテキストに対して事前にトレーニングされた BART、ALBERT、RoBERTa などの一般的なエンコーダーを使用しています。
- 分類器: 分類器はモデルのヘッドとしての役割を担い、特徴表現を複数のカテゴリに分類します。 多くの分類器は、ニューラル ネットワークの単純な線形レイヤーです。
ArcGIS のテキスト分類モデルも、Mistral モデル バックボーンをサポートしています。 Mistral は、Transformer アーキテクチャに基づく大規模言語モデルで、デコーダーオンリーなモデルとして動作します。 Mistral のアーキテクチャの主要コンポーネントは次のとおりです。
- Sliding Window Attention - 長いテキストを小さな重複セグメントで処理することで効率的に処理し、重要なコンテキストを維持しながら計算コストとメモリ使用量を削減します。
- Grouped Query Attention - 類似のクエリをまとめてクラスタリングすることで効率を高め、アテンションの計算量を最小限に抑え、処理を高速化します。
- Byte-Fallback BPE (Byte Pair Encoding) Tokenizer - モデルが処理できるようにテキストをトークンに変換します。
注意:
NLP モデルは、大量の非構造化テキストの解析を自動化するには効果的なツールです。 他の種類のモデルと同様に、人間による適度な監視と、モデルの種類およびモデルのトレーニングに使用するトレーニング データセットに関する透明性を確保したうえで、関連するタスクに適用する必要があります。
テキスト分類モデルの使用
[ディープ ラーニングを使用したテキストの分類 (Classify Text Using Deep Learning)] ツールは、トレーニング済みのテキスト分類モデルを非構造化テキストに適用し、事前定義済みのタイプに分類するために使用されます。 ArcGIS Living Atlas of the World の事前トレーニング済みのテキスト分類モデルを使用するか、[テキスト分類モデルのトレーニング (Train Text Classification Model)] ツールを使用してカスタム モデルをトレーニングできます。
[ディープ ラーニングを使用したテキスト分類 (Classify Text Using Deep Learning)] ツールへの入力は、分類するテキストを含むフィーチャクラスかテーブルです。 入力モデルには、Esri モデル定義 JSON ファイル (*.emd) またはディープ ラーニング モデル パッケージ (*.dlpk) を指定できます。 モデルには、ディープ ラーニング モデル ファイル (モデル ウェイトを含む) へのパスと、その他のモデル パラメーターが含まれます。 一部のモデルには、追加のモデル引数が含まれることがあります。
このツールは、モデルによって入力テキストに割り当てられたクラスまたはカテゴリ ラベルを含む、入力テーブルのフィールドを作成します。
ツールは CPU で実行できますが、ディープ ラーニングは計算負荷が高いため、GPU を使用して処理することをお勧めします。 GPU を使用してこのツールを実行するには、プロセッサ タイプ環境設定を GPU に設定します。 複数の GPU がある場合は、代わりに GPU ID 環境設定を指定します。
テキスト分類モデルのトレーニング
[テキスト分類モデルのトレーニング (Train Text Classification Model)] ツールは、テキスト分類を行う NLP モデルのトレーニングに使用できます。 このツールでは機械学習のアプローチを用い、入力テキストとラベル付きクラスのペアで構成されるトレーニング サンプルを提供することで、モデルのトレーニングを行います。 Mistral モデル バックボーンでは、コンテキスト内学習を使用し、入力プロンプトを通じて、また、目的の出力を推測するのに役立つ具体的な例をモデルに提供することで、モデルの理解と応答をガイドします。 NLP モデルのトレーニングは計算負荷が高いタスクなので、GPU を使用することをお勧めします。
トレーニング データは、予測変数として機能するテキスト フィールドを含む入力テーブルと、テーブルの各入力テキストのターゲット クラス ラベルを含むラベル フィールドの形式で提供されます。
テキスト分類モデルをトレーニングする場合、モデルを最初からトレーニングするか、トレーニングされたモデルを微調整するか、コンテキスト内学習を使用できます。 一般的に、Transformer アーキテクチャを使用する言語モデルは few-shot 学習手法として見なされています。
ただし、トレーニング サンプルに含まれるターゲット クラスと同じセットを持つ事前トレーニング済みテキスト分類モデルを利用できる場合は、それを新しいトレーニング データで微調整できます。 新しいモデルをトレーニングするよりも、既存のモデルを微調整する方が時間を短縮でき、トレーニング サンプルも少なくて済みます。 事前トレーニング済みモデルを微調整する際は、事前トレーニング済みモデルに使用される同じバックボーン モデルを維持してください。
事前トレーニング済みモデルは、Esri モデル定義ファイルか、ディープ ラーニング パッケージ ファイルのいずれかです。 出力モデルも、これらの形式で、指定した出力モデル フォルダーに保存されます。
ディープ ラーニング モデルのトレーニングは反復的な処理で、入力トレーニング データが複数回にわたってニューラル ネットワークで渡されます。 トレーニング データ全体の各トレーニング パスは、エポックと呼ばれます。 [最大エポック] パラメーターは、トレーニング中のモデルにおいて、トレーニング データが確認される最大回数を指定します。 これは、トレーニング対象のモデル、タスクの複雑さ、トレーニング サンプルの数によって異なります。 トレーニング サンプルが多い場合は、小さい値を使用できます。 一般的に、検証損失が少なくなるまで、エポックを増やしてトレーニングを繰り返すことをお勧めします。
[モデル バックボーン] パラメーターは、モデルのエンコーダーとして機能し、入力テキストの特徴表現を抽出する、事前構成済みのニューラル ネットワークを指定します。 このモデルは、大量のテキストに対して半教師付きで事前トレーニングされ、Transformer アーキテクチャに基づく BERT、ALBERT、RoBERTa ベースのエンコーダーをサポートしており、ます。 これらのエンコーダーは言語をよく理解しており、モデルの分類ヘッドへの入力としての役割を担う固定長ベクトルの形式として入力テキストを表現できます。 [モデル バックボーン] パラメーターは、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, and Illia Polosukhin. "Attention Is All You Need." December 6, 2017. https://arxiv.org/abs/1706.03762.
Devlin, Jacob, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding." May 24, 2019. https://doi.org/10.48550/arxiv.1810.04805.
"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/.