はじめに
エンティティ解決 (ER) はエンティティのあいまいさをなくすプロセスです。 このプロセスは、テキスト メンションを検索ナレッジベース (KB) に存在する、最も適切な現実世界の名前と対応付けることで実現します。 たとえば、`
madrid fc` を解決すると `
Real Madrid Club de Fútbol,` になりますが、前者は後者の言い換えの 1 つです。 エンティティ解決は、エンティティ マッチング、エンティティ リンキング、レコードリンケージ、レコードデ デュプリケーションといった名称で呼ばれることがよくあります。 エンティティ解決は、MindMeld の
NLP Pipeline の一部として利用でき、ユーザー入力で識別されたエンティティを、事前設定された KB とマッチングしてあいまいさをなくすために使われます。 KB をエンティティ レゾルバとして作成し、MindMeld アプリをビルドする際に連携する方法については
公式ドキュメントを確認してください。最近まで、MindMeld はエンティティ解決に 2 つの選択肢を提供していました。1 つは
Elasticsearch の全文検索と分析エンジンをベースにしたもので、もう 1 つは代替案として単純な完全一致マッチング アルゴリズムをベースにしたものです。 MindMeld のアプリケーションの種類が増えているため、この 2 つのオプションは必ずしも実現可能ではないかもしれません。 幅広いサポートを提供するために、MindMeld では現在、エンティティ解決のオプションをさらに 2 つ用意しています。1 つは
TF-IDF ベースのもの、もう 1 つは事前トレーニング済みのニューラルモデル表現をベースにしたもの (
BERT、
GloVe、
fastText など) です。 特に、この新しいオプションは Elasticsearchn (および、そこから生まれるサービスにも) に一切依存していません。 この新しいオプションについてさらに詳しい説明に入る前に、エンティティのナレッジベースを MindMeld で構築する方法を簡単に振り返りましょう。 以下は
料理の注文の設計図 の例で、料理名のあいまいさをなくすためにナレッジベースが作成されます:
エンティティ解決のためのナレッジベースのスナップショット
ご覧のとおり `cname` フィールド (正式名) と `whitelist` フィールドで各料理の一般的な語法とナレッジベースで公式に認められているレコードを一意に参照する ‘id’ フィールドの実例をいくつか示しています。 3 つのフィールドは主として KB のエンティティ オブジェクトの構成要素です。 `cname` フィールドの文字列は一般的に日常会話で使われるもので、`whitelist` フィールドは正式名とともにあいまいさをなくすときにエイリアスとして処理されます。 多くの場合、エンティティ レゾルバから最も良い結果が得られるのは、’whitelist’ フィールドにさまざまな入力 (たとえば別の語法、スペルミス、省略形など) がされたときです。 この種のキュレーションは一部のアプリケーションでは面倒な処理になる場合もありますが、高度に専門化されたドメインのエンティティを処理する場合は避けられません。
新しく追加されたレゾルバについて学ぶ
完全一致マッチング以外のレゾルバでは、最初のステップは、あいまいさをなくす必要がある入力テキストと、あいまいさをなくすためにエイリアスとして処理する KB のすべてのエンティティ (cname と whitelist) のベクトル表示を取得することです。 次に、何らかの形態のベクトル類似度マッチング (コサイン類似度など) を使って、エイリアスのスコアが付けられランク付けされます。 新しく追加されたエンティティ解決の選択肢では、TF-IDF ベースのレゾルバが、さまざまな n-gram 特徴 (表面的なテキストの特徴など) をキュレートしてからスパース ベクトルのコサイン類似性を計算します。 一方、事前トレーニング済みの embedder ベースのレゾルバは、テキストの全結合層ベクトル表現のコサイン類似度を使ってマッチングをします。 エンティティ解決に事前トレーニング済みの embedder を利用すると、他の手法と比べていくつかのメリットがあります。 たとえば、大量の whitelist を入力しなくてもテキストの意味論的理解 (例:「期待を下回る実績」は「お粗末な実績」と同じことである) を提供し、多言語のエンティティ マッチング (例: スペイン語の「tercio」は英語の「third」と同じである) に簡単に移行できます。 ただし、事前トレーニングと推論の食い違い (入力テキストの長さの違いなど) があれば、事前トレーニング済みの embedder が不利になります。 さらに、embedder モデルの推論時間は、基礎となる全結合層ベクトル計算のために、他のレゾルバ オプションより長くなる場合があります。 それでもやはり、embedder モデルが適切にファインチューニングされると、主に表面的なテキストの特徴をベースにした他のレゾルバよりも優れている可能性があります。 以下の分析では、embedder ベースのレゾルバが、Elasticsearch と TF-IDF の各レゾルバと比較されています。 この比較のためにキュレートされたデータセットには、表面的なテキストのマッチングだけでなく、意味的なマッチングも含まれています。
さまざまなレゾルバのパフォーマンス
社内でキュレートされたさまざまなデータセットでテストすると、短いテキストのエンティティ マッチングでは各種エンティティ レゾルバの平均パフォーマンスは以下のようになります。 検索で最高スコアとなったものがここでは正確性の測定として報告されています。
各種エンティティ レゾルバのパフォーマンス
事前トレーニング済みの BERT は
Huggingface Sentence-Transformer の一部として利用可能で、最もパフォーマンスの良いバリアントの上位 5 つのスコアだけがプロットに表示されます。 fastText などの事前トレーニング済みの単語埋め込みモデルは、一般的に BERT embedder モデルや TF-IDF ベースのレゾルバよりパフォーマンスが悪くなります。 そのようにパフォーマンスが悪いのは、ドメインの変更やファインチューニングが不足していることが原因である可能性があります。 パフォーマンスが最高の BERT バリアントのさまざまな構成を使ってさらに分析すると (‘
distilbert-base-nli-stsb-mean-tokens’) 次の結果が得られます。
パフォーマンスが最高の BERT バリアントを使ったさまざまな構成のパフォーマンス
その結果、
BERTScore などの代替の類似度のスコアには、優位性がないことがわかります。 さらに、BERT モデルの各層を連結して、コサイン類似度を使うと Elasticsearch のパフォーマンスに匹敵するパフォーマンスの増加につながります。 BERT の各層で情報を補完的にキャプチャーできるのでこれは直感的に理解できます。 メモリの搭載量や計算時間が不足しているために BERT バリアントを
量子化した後でも、パフォーマンスは 2、3% しか低下しません。 また、入力にスペルミスなどのランダムなノイズのあるデータを評価する場合、TF-IDF ベースのレゾルバは他のものよりもパフォーマンスが優れています。 これはこのレゾルバでさまざまな n-gram がキャプチャーされるのが原因の可能性があります。 (このテストでは、whitelist のテキストがテストのインスタンスとして再利用され、そこにスペルミスが引き起こされています。 このため、すべてのテスト エンティティが whitelists にも存在するので、ノイズ 0% で 100% の正確性が観測されます)
テキスト マッチングで起きたミススペルのパフォーマンス
最後に、次のプロットでさまざまなレゾルバを選択したときの推論計算時間の違いを説明しています。
(左から右へ: 最も正確な BERT、TF-IDF、Elasticsearch) さまざまなサイズのナレッジベースで測定された場合のエンティティあたりの推論時間。 X 軸はナレッジベースのサイズを示し、Y 軸はエンティティあたりの時間を示します (ミリ秒単位)。 黄色は入力テキストをエンコードする推論時間で、緑色は類似度計算のエンティティあたりの推論時間です。 TF-IDF と Elasticsearch の計算時間はほぼ同等ですが、一方、最高の BERT バリアントは量子化しても速度が 20 倍低下します。 これは上位 4 層を連結しなければ 10 倍の速度低下に改善されますが、精度の低下につながります。
エンティティ レゾルバの選択と構成
MindMeld エンティティ レゾルバを構成する場合は、使用するレゾルバに応じてさまざまなパラメータの設定が可能になります。 次のスニペットが、アプリの `config.py` で指定されると、 Huggingface で選択した事前トレーニング済みの BERT モデルを利用します。
ENTITY_RESOLVER_CONFIG = { ‘model_type’: ‘resolver’, ‘model_settings’: { ‘resolver_type’: ‘sbert_cosine_similarity’, ‘pretrained_name_or_abspath’: ‘distilbert-base-nli-stsb-mean-tokens’, … } } `embedder_type` パラメータを変更すると他の embedder モデルを使用できます。
ENTITY_RESOLVER_CONFIG = { ‘model_type’: ‘resolver’, ‘model_settings’: { ‘resolver_type’: ‘embedder_cosine_similarity’, ‘embedder_type’: ‘glove’, … } } embedder モデルを使用する場合、`batch_size` などのランタイム設定を embedder モデル固有の設定とともに指定することもできます。 TF-IDF ベースのレゾルバをロードする場合は、次の操作を行うことができます。
ENTITY_RESOLVER_CONFIG = { ‘model_type’: ‘resolver’, ‘model_settings’: { ‘resolver_type’: ‘tfidf_cosine_similarity’, … } } KB の各エンティティ オブジェクトに対して、特別なエンベディング (全エイリアスのエンベディングの平均/最大プール) の計算も行われ、設定されると解決に使用されます。 そうした特別なエンベディングによって、多くの場合、計算コストをわずかに増やすだけで、レゾルバの精度が改善されます。 すべての詳細とすべての設定の選択肢については、
公式ドキュメントの「設定」セクションをご覧ください。
まとめと今後の活動
全体としては、特殊な状況でやむをえず使わない場合を除いて、Elasticsearch ベースのレゾルバをお勧めします。 代替策としては、もっとセマンティック マッチングの要求がある場合は embedder モデルベースのレゾルバ、そのような要求がない場合は TF-IDF ベースのレゾルバを使用してください。 MindMeld の ER モジュールは、アプリケーションに最も効率の良いレゾルバを決定するベンチマークに、まだ API を提供していません。 サポートの追加は計画しており、embedder モデルベースのレゾルバをファインチューニング中でもあるので、しばらくお持ちください。
Webex にサインアップ弊社の
ホームページをご覧いただくか、サポートが必要な場合は直接
お問い合わせください。
Webex のサービスの詳細を見るか、無料アカウントにサインアップする場合は、こちらをクリックしてください