LoginSignup
10
5

More than 1 year has passed since last update.

深層学習で名寄せ(Entity Matching)を行う「DeepMatcher」を試してみた

Last updated at Posted at 2021-12-12

Entity Matchingとは

ざっくりとした説明をすると、あるデータ(商品情報や会社名、人名などなど)に含まれるレコードと別のレコードが同一のものかどうかを判定するタスクです。今年2021の3月~5月に開催されていたKaggleコンペのShopeeがEntity Matchingに該当するかと思います。

(Shopeeはテキスト×画像のマルチモーダルな内容なので今回はお話しませんが)

Entity Matchingの詳細に関しては、非常に丁寧にまとめてくださっている方がいるので、そちらを参照していただければと思います。(私もお世話になりました)

どういったときに役立つのか?

例えば、ECサイト/フリマアプリの掲載商品が同一のものかどうかを判定する際に活用されます。

  • 同じ商品が別の出品者ではいくらで出品されているかを提示するケース
    (上記で紹介したShopeeコンペは同一商品の最低価格保証を目的としたもの)
  • 類似商品のレコメンドのために使われるケース

商品情報だけでなく、人名や社名情報の同一判定などでも活用されているようです。

  • 名刺アプリなどにおける会社名・人名の同一判定に利用するケース
  • サイトでユーザー登録する際に会社名をサジェストする機能に利用されるケース
    • 少し毛色が違いますが、こちらもEntity Matchingの一種と呼べそうですね

また、別システムのデータ同士の紐付けを行うという活用ケースもあります。

  • 例えば、紐づけに必要な主キー(外部キー)が用意されておらずデータのJOINができないため、レコードの中身を見て同一のEntityであるかどうかを判定するケースなど

Entity Matching処理の流れ

Entity Matchingにはざっくりと以下のようなタスクが含まれています。

  • レコードの各要素の対応付け
    • テーブルA(レコードa)のどの列がテーブルB(レコードb)のどの列に対応するか判定
    • 単に列・項目の種別を判定するだけの場合もあります
  • 各要素の類似度の算出(以下、簡易的に 名寄せ と呼びます)
    • 数字的な近さ(単位を揃えるなど)
    • 文字列的な近さ(商品名・人名・会社名など)
    • 文章的な近さ(フリーテキストの意味的な近さなど)
  • Blocking / Filtering
    • 多対多のマッチングを行おうとすると件数が膨大になるので、マッチングする可能性が低いものを除外する(Blocking)、マッチングする可能性が高いものに絞り込む(Filtering)という処理が必要になってきます。

今回の検証について

今回は、上記のEntity Matchingを深層学習で行う手法である「DeepMatcher」について、会社名の名寄せ判定にフォーカスして検証した内容について触れます。

DeepMatcherとは

深層学習によるエンティティマッチングを行うOSSです。

  • レコードの各要素の類似度に基づきレコードが一致するかどうかの判定を行う
  • 文字列の類似度を単語レベル・文字レベルの埋め込み学習により判定する

image.png

名寄せが必要なパターン

会社名の名寄せにおいては、以下のような表記ゆれが含まれることが想定されます。

パターン 表記ゆれの例
正式名 A & B Technology Solution ltd
スペースの有無 A&B TechnologySolution ltd
記号の読み A and B Technology Solution ltd
記号の有無 A & B Technology Solution , ltd .
会社形態の間違い A & B Technology Solution Inc
単語のタイプミス A & B Tech onlogy Solution ltd
単語の省略形 A & B Tech Solution ltd
単数形・複数形 A & B Technology Solution s ltd
単語の追加 A & B Technology Solutions America ltd
略称(頭文字) ABTS

これが全てではないですが、今回は上記の表内のパターンについて検証してみます。
(日本語表記/英語表記/他言語表記などの揺れについては触れていません。)

検証

英語の会社名の名寄せデータセットとして公開されているものがあったので、こちらを利用しています。(nama自体も名寄せ用のツールとして作られているもののようです)

query_stringとcandidate_stringおよび正誤がセットで用意されています。

このデータに含まれれている会社名を表記揺れパターン毎に分類しどれくらいの精度で判定ができるかを試しています。以下、20%の評価データに対しての判定精度です。

パターン 表記ゆれの例
スペースの有無 77.8%
記号の読み 100.0%
記号の有無 99.1%
会社形態 98.8%
単語のタイプミス 80.8%
単語の省略形 97.3%
単数形・複数形 100%
単語の追加 91.2%
略称(頭文字) 47.2%

スペースの有無と略称(頭文字)への対処が難しい傾向にありました。
スペースの有無によって単語の区切り方が異なり別の単語として扱われてしまうことや、略称になることで文字列が大幅に変わることが精度悪化につながるようです。

まとめ

今回は、深層学習によりEntity Matchingを行うDeepMatcherの文字列類似度の評価検証を行いました。

会社名を例に評価を行い、様々な表記ゆれパターンである程度の精度を出せている一方、スペースの有無や略称(頭文字)レベルでの表記ゆれがあった場合には同一判定が難しいという課題が見えてきました。

学習させるデータセットのAugmentation方法の調査や、利用しているネットワークの変更・改善など引き続き検証していこうと思います。また、今回の検証は英語のみのため日本語や他の言語への対応可否についても検証していきたいです。

10
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
5