用語の固定セットがない場合、または正規表現として検出したいエンティティーを表現できない場合は、カスタム変換プログラム・モデルを作成できます。 モデルは、事前にトレーニングされた 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 モデルの一覧については、次の表を参照してください。
モデル | 説明 |
---|---|
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
を使用して他のモデルとして保管できます。
カスタム変換プログラム・モデルをロードするには、追加のステップが必要です。
プロジェクトの「管理」タブの「アクセス制御」ページにアクセス・トークンがあることを確認します。 プロジェクト管理者のみがアクセス・トークンを作成できます。 アクセス・トークンには、 ビューアー または 編集者 のアクセス権を設定できます。 トークンをノートブックに注入できるのは、編集者のみです。
ノートブックのアクション・バーから 「詳細」>「プロジェクト・トークンの挿入」 をクリックしてプロジェクト・トークンをノートブックに追加し、セルを実行します。
挿入された非表示コード・セルを実行すると、
ibm-watson-studio-lib
ライブラリー内の関数に使用できるwslib
オブジェクトが作成されます。 使用可能なibm-watson-studio-lib
関数については、 Using ibm-watson-studio-lib for Pythonを参照してください。モデルをローカル・ランタイム環境にダウンロードして解凍します。
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)
解凍したフォルダーからモデルをロードします。
trained_workflow = watson_nlp.load(model_folder)
親トピック: 独自のモデルの作成