こんにちは、海外事業部エンジニア『名寄せのkawakubo』ことid:kawakuboxです。
以前、SpeeeKaigi の発表内容の記事で「会社の名寄せにグラフDB(Neo4j)を使ってみた話」を書きました。
その後、実際に名寄せ補助ツールとして開発し、稼働させるに至ったので、その過程を社内勉強会で発表しました。
今回はそのレポートになります。
トークテーマ
会社名寄せ補助ツールを稼働させた話
キーワード
- 名寄せ
- Neo4j
発表資料
質疑応答
似てると判断されるデータのマッピングデータの自動生成などはやっていないのか?
まだ曖昧な検索結果なので、マッピングデータの生成には人の目を介在させたい。
検索にかかる時間は?
総ノード数は 60,000ノード、総リレーション数は 300,000リレーション この状態で100件を上限に検索する処理は、100ms とかそのくらい。
インポートにかかる時間はどのくらい?
インデックス(ノード作成)にかかる時間は、10,000件のマスタ取り込みで 10分程度。 単語間の関連を作成するのにかかる時間は、20,000ワードくらいで4~5時間程度。
20,000 x 20,000 の突き合わせは数日経っても終わらないので、極端に文字数が離れている単語(5文字と10文字みたいな)やつは、レーベンシュタイン距離をとるまでもないので、あらかじめ除外していたりはしている。
単語の重みをつける方法はどうするのか?
日本で言うところの 株式会社
とか 有限会社
みたいな一般ワードのスコアを下げるようにしたり、全ワード中の登場回数が多いもののスコア調整したりするようなオーソドックスなものを考えている。
所感
発表したことで、ワード重み付けについて tf-idf
, 単語ベクトル
といったアドバイスをもらったので、検索/サジェスト精度を上げるためにどう調理できるかに取り組みたいです。
最近、立て続けに Neo4j
について社内発表重ねているので、プロジェクトに導入の検討してみるみたいな話が上がってきたのは喜ばしいことです。
経路問題に置き換えるとスマートに解決できるものはまだまだあると思っているので、いろんなデータモデルを考えてみたいです。