0 / 0
資料の 英語版 に戻る
カスタム変換プログラム・モデルを使用したエンティティーの検出
最終更新: 2024年11月07日
カスタム変換プログラム・モデルを使用したエンティティーの検出

用語の固定セットがない場合、または正規表現として検出したいエンティティーを表現できない場合は、カスタム変換プログラム・モデルを作成できます。 モデルは、事前にトレーニングされた Slate IBM Foundation モデルに基づいています。

事前トレーニングされたモデルを使用すると、多言語モデルを作成できます。 言語ごとに別個のモデルを用意する必要はありません。

高品質 (エンティティー・タイプごとに 2000 から 5000) を実現するには、十分なトレーニング・データが必要です。 使用可能な GPU がある場合は、それらをトレーニングに使用します。

注:

トランスフォーマー・モデルのトレーニングは、CPU とメモリーを集中的に使用します。 事前定義環境の大きさが不足しているため、トレーニングを完了できません。 CPU とメモリーの量が多いカスタム・ノートブック環境を作成し、それを使用してノートブックを実行します。 使用可能な GPU がある場合は、それらを使用することを強くお勧めします。 独自の環境テンプレートの作成を参照してください。

入力データ・フォーマット

トレーニング・データは、複数の JSON オブジェクトを持つ配列として表されます。 各 JSON オブジェクトは 1 つのトレーニング・インスタンスを表し、 text フィールドと mentions フィールドが必要です。 text フィールドはトレーニング・センテンス・テキストを表し、 mentions は各メンションのテキスト、タイプ、および場所を含む JSON オブジェクトの配列です。

[
  {
    "text": str,
    "mentions": [{
      "location": {
        "begin": int,
        "end": int
      },
      "text": str,
      "type": str
    },...]
  },...
]

例:

[
    {
        "id": 38863234,
        "text": "I'm moving to Colorado in a couple months.",
        "mentions": [{
            "text": "Colorado",
            "type": "Location",
            "location": {
                "begin": 14,
                 "end": 22
                 }
            },
            {
                "text": "couple months",
                "type": "Duration",
                "location": {
                    "begin": 28,
                     "end": 41
                     }
            }]
    }
]

モデルのトレーニング

トランスフォーマー・アルゴリズムは、事前にトレーニングされた Slate モデルを使用しています。

利用可能な Slate モデルの一覧については、次の表を参照してください。

利用可能なSlateモデルとその説明のリスト
モデル 説明
pretrained-model_slate.153m.distilled_many_transformer_multilingual_uncased 汎用多目的モデル
pretrained-model_slate.125m.finance_many_transformer_en_cased 金融コンテンツで事前トレーニングされたモデル
pretrained-model_slate.110m.cybersecurity_many_transformer_en_uncased サイバーセキュリティコンテンツで事前トレーニングされたモデル
pretrained-model_slate.125m.biomedical_many_transformer_en_cased 生物医学コンテンツで事前トレーニングされたモデル

Transformer のトレーニングを設定するために使用できるオプションを取得するには、次のように入力します。

help(watson_nlp.workflows.entity_mentions.transformer.Transformer.train)

サンプル・コード

import watson_nlp
from watson_nlp.toolkit.entity_mentions_utils.train_util import prepare_stream_of_train_records_from_JSON_collection

# load the syntax models for all languages to be supported
syntax_model = watson_nlp.load('syntax_izumo_en_stock')
syntax_models = [syntax_model]

# load the pretrained Slate model
pretrained_model_resource = watson_nlp.load('<pretrained Slate model>')

# prepare the train and dev data
# entity_train_data is a directory with one or more json files in the input format specified above
train_data_stream = prepare_stream_of_train_records_from_JSON_collection('entity_train_data')
dev_data_stream = prepare_stream_of_train_records_from_JSON_collection('entity_train_data')

# train a transformer workflow model
trained_workflow = watson_nlp.workflows.entity_mentions.transformer.Transformer.train(
    train_data_stream=train_data_stream,
    dev_data_stream=dev_data_stream,
    syntax_models=syntax_models,
    template_resource=pretrained_model_resource,
    num_train_epochs=3,
)

新規データへのモデルの適用

既存の事前トレーニング済みブロックで使用する場合と同様に、 run() メソッドを使用して、トレーニング済みの変換プログラム・ワークフロー・モデルを新規データに適用します。

コード・サンプル

trained_workflow.run('Bruce is at Times Square')

モデルの保管およびロード

カスタム変換プログラム・モデルは、「 カスタム・モデルの保存およびロード」で説明されているように、 ibm_watson_studio_libを使用して他のモデルとして保管できます。

カスタム変換プログラム・モデルをロードするには、追加のステップが必要です。

  1. プロジェクトの「管理」タブの「アクセス制御」ページにアクセス・トークンがあることを確認します。 プロジェクト管理者のみがアクセス・トークンを作成できます。 アクセス・トークンには、 ビューアー または 編集者 のアクセス権を設定できます。 トークンをノートブックに注入できるのは、編集者のみです。

  2. ノートブックのアクション・バーから 「詳細」>「プロジェクト・トークンの挿入」 をクリックしてプロジェクト・トークンをノートブックに追加し、セルを実行します。

    挿入された非表示コード・セルを実行すると、 ibm-watson-studio-lib ライブラリー内の関数に使用できる wslib オブジェクトが作成されます。 使用可能な ibm-watson-studio-lib 関数については、 Using ibm-watson-studio-lib for Pythonを参照してください。

  3. モデルをローカル・ランタイム環境にダウンロードして解凍します。

    import zipfile
    model_zip = 'trained_workflow_file'
    model_folder = 'trained_workflow_folder'
    wslib.download_file('trained_workflow', file_name=model_zip)
    
    with zipfile.ZipFile(model_zip, 'r') as zip_ref:
      zip_ref.extractall(model_folder)
    
  4. 解凍したフォルダーからモデルをロードします。

    trained_workflow = watson_nlp.load(model_folder)
    

親トピック: 独自のモデルの作成