名前付きエンティティーのタグ付けツール

概要

このモデルは、テキスト内の各単語または用語にそのエンティティーのタイプを表すタグでアノテーションを付けます。エンティティーのタグは Groningen Meaning Bank (GMB) データセットに含まれる 17 のタグのうちから選択されます。これらのタグには 8 つのタイプの名前付きエンティティー (個人、場所、組織、地政学的エンティティー、成果物、イベント、自然物体、時間) に対応するものと、「エンティティーなし」を表すタグがあります (すべてのエンティティーの定義については、GMB データセットのマニュアル・ページを参照してください)。エンティティーのタイプには、さらに “B-” タグまたは “I-” タグが付けられることもあります。”B-” タグは新しいエンティティーで最初に出現する用語 (単一用語のエンティティーの場合は、その用語そのもの) を意味し、エンティティーに含まれる以降の用語には “I-” タグが付けられます。例えば、「New York」は ["B-GEO", "I-GEO"] としてタグ付けされ、「London」は "B-GEO" としてタグ付けされます。

このモデルは、再帰型ニューラル・ネットワーク・アーキテクチャーで構成されていて、双方向の LSTM 層が文字レベルの埋め込みベクトルに適用されます。これにより、文字レベルの埋め込みベクトルに事前トレーニングされた GloVe 6B 単語ベクトルが結合され、最後に 2 番目の双方向の LSTM 層がこの結合されたベクトル表現に適用されます。モデルに文字列を入力すると、入力テキストに含まれる (単純なトークン化を適用した後の) 用語のリストと、これらの用語ごとに予測されるエンティティー・タグのリストが出力されます。

このモデルは、Guillaume Genthial の Named Entity Recognition with TensorFlow モデルをベースに、Keras フレームワークを使用するように構成されています。IBM CODAIT チーム によるモデルのトレーニングでは、GMB データセット・バージョン 2.2.0 のサブセットが使用されました。

モデルのメタデータ

ドメイン アプリケーション 業種 フレームワーク トレーニング・データ 入力データの形式
自然言語処理 名前付きエンティティーの認識 一般 Keras Groningen Meaning Bank (GMB) データセット テキスト

注: 基礎となるデータセットは主にニュース記事に基づいているため、このモデルは一般的なニュース、ビジネス、地政学、スポーツのイベントに関する入力に対して比較的優れたパフォーマンスを発揮します。モデルのトレーニングには 2014 年までのデータセットを使用したため、このモデルで認識されるのは、この期間のエンティティーです。

参考資料

ライセンス

コンポーネント ライセンス リンク
モデルのリポジトリー Apache 2.0 LICENSE
モデルの重み Apache 2.0 LICENSE
モデルのコード (サード・パーティー) Apache 2.0 TensorFlow NER リポジトリーのライセンス

このモデルのデプロイ方法

このモデルは、以下のメカニズムを使用してデプロイできます。

  • Docker Hub からデプロイする場合:
docker run -it -p 5000:5000 codait/max-named-entity-tagger
  • Kubernetes 上にデプロイする場合:
kubectl apply -f https://raw.githubusercontent.com/IBM/MAX-Named-Entity-Tagger/master/max-named-entity-tagger.yaml

使用例

モデルをデプロイしたら、コマンド・ラインからモデルをテストできます。以下に例を示します。

curl -X POST -H 'Content-Type: application/json' -d '{"text":"John lives in Brussels and works for the EU"}' 'http://localhost:5000/model/predict'

以下のような JSON レスポンスが表示されるはずです。

{
    "status": "ok",
    "prediction": {
        "entities": [
            "B-PER",
            "O",
            "O",
            "B-GEO",
            "O",
            "O",
            "O",
            "O",
            "B-ORG"
        ],
        "input_terms": [
            "John",
            "lives",
            "in",
            "Brussels",
            "and",
            "works",
            "for",
            "the",
            "EU"
        ]
    }
}