0 / 0
資料の 英語版 に戻る
ユーザー辞書によるエンティティーの検出
最終更新: 2024年7月23日
ユーザー辞書によるエンティティーの検出

製品名や組織のリストなど、検出する必要がある用語の固定セットがある場合は、辞書を作成できます。 辞書マッチングは、非常に高速で、リソース効率に優れています。

Watson Natural Language Processing 辞書には、以下のような単純なストリング・マッチングを超える拡張マッチング機能が含まれています。

  • 辞書用語は、単一のトークン (ホイールなど) で構成することも、複数のトークン ( 自動車ハンドルなど) で構成することもできます。
  • 辞書用語のマッチングは、大/小文字を区別することも、大/小文字を区別しないこともできます。 大/小文字の区別があるマッチングでは、ABS(航空)のような頭字語が、意味の異なるabs(絶対)のような通常の言語の用語と一致しないようにすることができます。
  • 複数の辞書項目が同じテキストに一致する場合に、一致を統合する方法を指定できます。 WatsonWatson Natural Language Processing の 2 つの辞書項目の場合、「I like Watson Natural Language Processing」でどの項目を一致させるかを構成できます。Watson が含まれている Watson Natural Language Processing のみ、またはその両方です。
  • すべての語尾変化を列挙する代わりに、見出し語を一致させるように指定できます。 このようにすると、単一の辞書項目である mouse は、テキスト内で mousemice の両方を検出します。
  • 各辞書項目にラベルを付けることができます。例えば、組織カテゴリーと指定すると、マッチングに追加のメタデータを含めることができます。

これらの機能はすべて構成できるため、ユース・ケースに適したオプションを選択できます。

辞書ファイルのタイプ

Watson Natural Language Processing は、以下の 2 つのタイプの辞書ファイルをサポートします。

  • 用語リスト (末尾.dict)

    用語リストの例:

    Arthur
    Allen
    Albert
    Alexa
    
  • 表 (末尾.csv)

    表の例:

    "label", "entry"
    "ORGANIZATION", "NASA"
    "COUNTRY", "USA"
    "ACTOR", "Christian Bale"
    

同じ抽出で複数の辞書を使用できます。 また、両方のタイプを同時に使用することもできます。例えば、3 つの辞書、1 つの用語リスト、および 2 つの表を使用して単一の抽出を実行できます。

辞書ファイルの作成

ノートブック内にモジュール・ディレクトリーを作成することから始めます。 これは、辞書ファイルを保管するために一時的に使用されるノートブック・ファイル・システム内のディレクトリーです。

ノートブックで辞書ファイルを作成するには、以下のようにします。

  1. モジュール・ディレクトリーを作成します。 エラーの原因となるため、モジュール・フォルダーの名前にダッシュを含めることはできません。
    import os
    import watson_nlp
    module_folder = "NLP_Dict_Module_1"
    os.makedirs(module_folder, exist_ok=True)
    
  2. 辞書ファイルを作成し、モジュール・ディレクトリーに保管します。 外部リストまたは CSV ファイルを読み込むことも、次のような辞書ファイルを作成することもできます。
    # Create a term list dictionary
    term_file = "names.dict"
    with open(os.path.join(module_folder, term_file), 'w') as dictionary:
        dictionary.write('Bruce')
        dictionary.write('\n')
        dictionary.write('Peter')
        dictionary.write('\n')
    
    # Create a table dictionary
    table_file = 'Places.csv'
    with open(os.path.join(module_folder, table_file), 'w') as places:
        places.write("\"label\", \"entry\"")
        places.write("\n")
        places.write("\"SIGHT\", \"Times Square\"")
        places.write("\n")
        places.write("\"PLACE\", \"5th Avenue\"")
        places.write("\n")
    

辞書のロードとマッチング・オプションの構成

辞書は、以下のヘルパー・メソッドを使用してロードできます。

  • 単一の辞書をロードするには、watson_nlp.toolkit.rule_utils.DictionaryConfig (<dictionary configuration>)を使用します。
  • 複数の辞書をロードするには、watson_nlp.toolkit.rule_utils.DictionaryConfig.load_all([<dictionary configuration>)])を使用します。

辞書ごとに、辞書構成を指定する必要があります。 辞書構成は、以下の属性を持つ Python 辞書です。

属性 説明 必須
name ストリング 辞書の名前 はい
source ストリング 辞書へのパス (module_folderを基準とした相対パス) はい
dict_type ファイルまたは表 辞書成果物が用語リスト (ファイル) であるか、マッピングの表 (表) であるか いいえ。 デフォルトはファイルです。
consolidate ContainedWithin (最長一致と重複排除を保持) / NotContainedWithin (最短一致と重複排除を保持) / ContainsButNotEqual (最長一致を保持するが重複一致を保持) / ExactMatch (重複排除) / LeftToRight (重複しない最も長い左端スパンを保持) 重複している辞書一致の処理。 いいえ。 デフォルトでは、一致を統合しません。
case 完全一致 / 大文字と小文字を区別しない 大文字と小文字の完全一致か、大文字と小文字を区別しないかのいずれかです。 いいえ。 デフォルトは完全一致です。
lemma True / False 辞書内の用語を、テキストの見出し語と一致させます。 辞書には見出し語の形式のみを含める必要があります。 例えば、テキストのmousemiceの両方に一致するように、辞書に mouseを追加します。 辞書にmiceを追加しないでください。 テキスト内の複数のトークンで構成される用語を突き合わせるには、辞書内のそれらの用語の見出し語をスペース文字で区切ります。 いいえ。 デフォルトは False です。
mappings.columns (列as attribute ofマッピング: {}) list [文字列] 表 csv に存在するのと同じ順序での列ヘッダーのリスト はい (dict_type: tableの場合)
mappings.entry (エントリーas attribute ofマッピング: {}) ストリング 文書と突き合わせるストリングを含む列ヘッダーの名前です。 はい (dict_type: tableの場合)
label ストリング 一致に付加するラベル。 いいえ

コード・サンプル

# Load the dictionaries
dictionaries = watson_nlp.toolkit.rule_utils.DictionaryConfig.load_all([{
    'name': 'Names',
    'source': term_file,
    'case':'insensitive'
}, {
    'name': 'places_and_sights_mappings',
    'source': table_file,
    'dict_type': 'table',
    'mappings': {
        'columns': ['label', 'entry'],
        'entry': 'entry'
    }
}])

辞書を含むモデルのトレーニング

辞書をロードした後、辞書モデルを作成して、RBR.train()メソッドを使用してモデルをトレーニングします。 メソッドで、以下を指定します。

  • モジュール・ディレクトリー
  • 辞書エントリーの言語
  • 使用する辞書

コード・サンプル

custom_dict_block = watson_nlp.resources.feature_extractor.RBR.train(module_folder,
language='en', dictionaries=dictionaries)

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

辞書をトレーニングした後、事前にトレーニングされた既存のブロックで使用するように、run()メソッドを使用して新規データにモデルを適用します。

コード・サンプル

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

コード・サンプルの出力:

{(0, 5): ['Names'], (12, 24): ['SIGHT']}

辞書のラベルまたは名前を表示するには、以下のようにします。

RBR_result = custom_dict_block.executor.get_raw_response('Bruce is at Times Square', language='en')
print(RBR_result)

ラベルを示す出力:

{'annotations': {'View_Names': [{'label': 'Names', 'match': {'location': {'begin': 0, 'end': 5}, 'text': 'Bruce'}}], 'View_places_and_sights_mappings': [{'label': 'SIGHT', 'match': {'location': {'begin': 12, 'end': 24}, 'text': 'Times Square'}}]}, 'instrumentationInfo': {'annotator': {'version': '1.0', 'key': 'Text match extractor for NLP_Dict_Module_1'}, 'runningTimeMS': 3, 'documentSizeChars': 32, 'numAnnotationsTotal': 2, 'numAnnotationsPerType': [{'annotationType': 'View_Names', 'numAnnotations': 1}, {'annotationType': 'View_places_and_sights_mappings', 'numAnnotations': 1}], 'interrupted': False, 'success': True}}

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

生成 AI の検索と回答
これらの回答は、製品資料の内容に基づいて、 watsonx.ai のラージ言語モデルによって生成されます。 詳細