Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

Elasticsearch(OpenSearch)を活用した採用候補者検索の同義語辞書整備の取り組み

技術本部 Eight Engineering Unit でエンジニアをしている平石です。今回は、Eight で提供している採用サービス Eight Career Design (ECD)の候補者検索機能における、検索ヒット件数改善の取り組みについて紹介していきます。

materials.8card.net

目次

ECDの候補者検索機能について

ECD とは Eight ユーザーと、自社にマッチしそうな人材を採用したい企業をつなぐサービスです。 ECD の候補者検索画面では、採用担当者が採用候補者の数十項目以上のプロフィール情報を自由に検索し、スカウト送信やタレントプール (お気に入りリストのような機能) への追加を行うことできます。

以前にも候補者検索機能についてブログを書いているので、興味のある方はこちらも是非ご覧ください!
buildersbox.corp-sansan.com
buildersbox.corp-sansan.com


今回解決したい課題

この候補者検索機能では OpenSearch(旧Elasticsearch)を検索エンジンとして採用していますが、キーワード検索を行う際に入力したキーワードに一致した文言が含まれたユーザのみしか検索結果が表示されないという課題が発生していました。

たとえば、営業メンバーを採用したい採用担当者が検索した際に、「営業」というキーワードで検索した場合と、「営業」、「セールス」、「sales」と複数のキーワードで検索した場合とでは、検索結果の件数に10%以上の大きな差がありました。

※検索結果の数字はサンプルです。


上記のように、この現象の結果として、営業関連の職種を探しているにもかかわらず、一部の人材が検索結果に表示されないという課題が生じていました。これは検索効率に影響を与え、大きな機会損失となっていました。この課題に対処するために、OpenSearchに同義語辞書を導入することを決定しました。次のセクションでは、同義語辞書をどのように導入し、整備していったかについて詳しく説明していきます。

同義語辞書の整備

同義語辞書を整備する上で今回2つの手段を使って行いました。

  • 検索ログにおける共起単語の抽出
  • word2vecを使った類似語の抽出

検索ログにおける共起単語の抽出

先ほど述べた「営業」の例において、複数のキーワード(営業・セールス・sales)を使用することで、検索結果は約3万件も増加します。これは、ユーザーが候補者の選択肢を増やしたい場合に、潜在的に関連する単語を検索に加える傾向があることを示しています。そのため、一つの検索クエリ内で共に使われる単語は、意味的に近い関係にあると推測することができます。

この考えを基に、今回は共起分析を活用して同義語辞書の構築を行いました。同義語の関係を評価する手法としては、今回はJaccard係数を採用しています。Jaccard係数は、二つの単語A 、Bにおいて

  1. A、Bの両方が同時に出現する検索ログの回数を数える(交差部分)
  2. A、Bそれぞれの単語が検索ログ上で出現する回数を数える(和集合)
  3. 交差部分を和集合で割る

$$
Jaccard (A, B) = \frac{n(A\cap B)} {n(A\cup B)}
$$

同義語辞書の構築では、まず大量の検索データから頻繁に共起するキーワードのペアを抽出し、一定の出現回数、および閾値以上の類似度を持つペアを同義語として辞書に登録していきます。ちなみに実際のデータで分析した結果上位5件のペアは以下のようになりました。

「MD/マーチャンダイザー」や「pdm/productmanager」は略称と正式名称なので正しく抽出できています。また「特許/知的財産」に関してもカバーしたい人材は同じように思います。ちなみに文献によって異なっていたりするのですが、0.3を越えると非常に強い関連を示すと言われています。

word2vecを使った類似語の抽出

共起以外の単語の意味の近さを調べる方法としてword2vecを用いました。word2vecに関しては詳しく説明されている記事も多く存在するのでここで多くは説明しませんが、単語をベクトル化してそのベクトルの類似度を測ることで意味的に近い単語を抽出することを目指しました。word2vecを使った類似度の上位5件は以下のようになりました。


「会計士/公認会計士」、「リフォーム/リノベーション」など全体的に意味の近い単語がまとまっていそうです。

結果

今回は共起とword2vecを用いたベクトル表現の類似度の2つで同義語辞書の拡張を行いました。結果として同義語辞書に追加した単語について検索結果が同義語辞書なしで検索した場合と比較して +13% のヒット数増加に繋げることができました!

まとめ

同義語辞書のまとめ方について色々と説明してきましたが、先に説明したように同義語辞書の導入は検索結果ボリュームの向上に非常に効果があります。ただ一方で同義語辞書を追加していく中で検索ノイズが増えるという弱点があります。検索ボリュームが増えることは良いことなのですが、その結果としてユーザが望んでいない検索結果がヒットしてしまうことがあります。

同義語辞書による検索ノイズを防ぐ方法として完全一致検索のみヒットするようなオプションを追加して、ユーザが本当に求めたいキーワードの検索結果だけをヒットさせることや、辞書の作成時においても最終的には人の目でおかしな単語のペアが入っていないかどうかをチェックすることも大事です。

また、これらの作業は一度作成して終わるものではなく、検索ログやユーザの入力データも日々蓄積・更新されていくので定期的にメンテナンスしていく必要があります。

今回説明した辞書機能を含め検索機能は今後も改善し、新たな出会いを作るサービスとして価値提供できるように開発していきます!

© Sansan, Inc.