Stanby Tech Blog

求人検索エンジン「スタンバイ」を運営するスタンバイの開発組織やエンジニアリングについて発信するブログです。

スタンバイにおける検索への取り組み

1 はじめに

はじめまして、スタンバイのSearchAdvertisingCoreGroup(検索・広告コアグループ、以降SACG)でAPI・インフラ周りの開発を行なっている金正です。 この記事では、スタンバイにおける検索への取り組みを紹介します。

2 一般的な検索システムに関して

まず一般的な検索改善の取り組みを紹介します。 以下の図のように一般的な検索システムは大きく分けて2つのコンポーネントに分けられます。

2.1 クエリプリプロセス

ユーザーが入力したクエリをより検索マッチしやすく加工したり、 ユーザーの検索理解をする、いわゆる「クエリアンダースタンディング」と一般的には呼ばれているコンポーネントもこのクエリプリプロセスに含まれます。

そもそも検索システムに使い慣れているユーザーなら、クエリアンダースタンディングは必要ありません。 検索窓されあれば自分で意図通りの検索クエリを入力し構築できるからです。 しかし全てのユーザーが慣れているとは限りません、そこで必要になってくるのがユーザーの検索行為を助ける役割であるクエリアンダースタンディングです。

  • query understanding
    • query classification(分類)
    • query correction(訂正)
    • query expansion(拡張)
    • query relaxation(緩和)
    • query suggestion(提案)
    • query segmentation(セグメンテーション)
    • query scoping(スコーピング)

上リストのようにクエリアンダースタンディングは主に7つのコンポーネントから構成されています。 それぞれのコンポーネントの役割を紹介します。

2.1.1 classification(クエリ分類)

ユーザーが入力したクエリを分類するコンポーネントになります。

2.1.2 correction(クエリ訂正)

ユーザーが入力したクエリの誤字脱字などを訂正するコンポーネントになります。 例えば、googleで「エンジア」と検索すると、「エンジニア」として検索された結果が返ってきます。

ゼロマッチ等の再現率 ※2の低下に対して有効です。

2.1.3 expansion(クエリ拡張)

ユーザーが入力したクエリに対してタームを追加するコンポーネントになります。 検索対象のドキュメントを増やすためにクエリを書き換えます。

例えば、「メガネ バイト」に対して、「(メガネ or サングラス) and (バイト or アルバイト)」のようにクエリを拡張することで検索対象のドキュメントを増やすことができます。

2.1.4 relaxation(クエリ緩和)

ユーザーが入力したクエリに対してより検索マッチさせるためにクエリを書き換えます。 簡単にできることはストップワードの削除です。

例えば、「バイト 東京都周辺」のようなクエリに対して、 「周辺」を削除してあげることで 検索対象のドキュメントを増やすことができます。

2.1.5 suggestion(クエリ提案)

ユーザーが入力したクエリに対して他のクエリを提案するコンポーネントになります。

ここにはクエリオートコンプリートや関連キーワードの表示などがある。 クエリオートコンプリートでは、以下のようにユーザー入力クエリに対して、 以下の例では、enと打つと「エンジニア、園芸」などのような検索クエリを提案しています。

また、関連キーワードもこのコンポーネントの一部です。 ユーザーが再度検索クエリを入力する必要がなくなり、運営目線で言うと離脱を防げる可能性があります。

2.1.6 segmentation(クエリセグメンテーション)

ユーザーが入力したクエリに対して、意味的にまとまりのある単語に分割してより意図通りの検索結果を返すようにします。 例えば、New Yorkという単語に対して空白で分割すると全く意味が変わってくるので、分割はせずにNew Yorkという1つの単語としてみなした方が良いでしょう。

2.1.7 scoping(クエリスコーピング)

ユーザー入力のクエリやセグメントされたクエリに対して、ジャンルを割り当ててより適合率 ※1を高めることをします。 ユーザーが畜産業のバイトを探しており「豚 飼育 バイト」と検索する例で考えます。 このクエリに対して「豚飼育= 畜産業」のジャンルだと認識することで、豚を飼育している動物園の求人情報も出る可能性があるところ 「畜産業」ジャンルのラベルがついたドキュメントのみ検索結果として表示されるようになります。

以上がクエリプリプロセスを構成するクエリアンダースタンディングの各コンポーネントの紹介でした。

2.2 クエリポストプロセス

検索結果の加工・ランキング等を行うコンポーネントです。 検索結果のランキングではクエリに合致したドキュメントを何かしらの基準で並び替えることをします。 例えば、ドキュメントの登録日順に並べてより新鮮なドキュメントを上位に並び替えたり、機械学習モデルを用いてより複雑な要素を組み合わせてドキュメントを並び替えたり、様々な手法があります。

これ以上はこの記事の範囲を超えるので触れませんが、気になる方はぜひ論文等読んでみてください。

以上のように、一概に検索といっても様々なコンポーネントから構成されていることが分かりました。 スタンバイの検索システムに関しては別記事で詳しく紹介していますので、ぜひご覧ください。

https://techblog.stanby.co.jp/entry/stanby_search

※1 適合率 検索結果の中でクエリにマッチしたドキュメントの割合

※2 再現率 クエリに対して返すべきドキュメントの中で、どれだけ返せたのかの割合

3 スタンバイにおける検索改善への取り組み

ここからは、実際にスタンバイで行っている検索改善取り組みをご紹介します。 主に、前章の内容にそって具体例を載せながら紹介します。

まず、検索周りの大まかなシステム構成は下図のようになっています。

3.1クエリアンダースタンディングの実施

3.1.1 suggest-apiの説明

suggestionを行うapiです。ユーザーの過去検索リクエストからsuggestワードを抽出し、検索エンジンにインデックスしています。 検索窓にユーザーが文字を入力するとその文字にマッチしたsuggestワードを表示しています。 例えば「エンジニア」と入力する最中の「えn」という文字に対してsuggestワードを検索できないといけません。 この場合検索エンジンにsuggestワードをインデックスする際に、「enjinia, enzinia」のようなローマ字読みを追加したドキュメントをインデックスしておきます。 さらにユーザークエリに対しても、「えn => en」のようにローマ字読みに変換します。 その後、変換後のユーザークエリでprefix searchをすることで suggestワードを結果として取得しています。

3.1.2 query-handling-apiの説明

このapiでは、クエリアンダースタンディングの以下コンポーネントを実装しています。 relaxationとexpansionを実現しています。現状主に、ルールベースでクエリアンダースタンディングの各コンポーネントを実現しています。 それぞれの具体例を紹介していきます。

実際のクエリ判定方法は以下の記事を参照してください。 具体的な実装方法などを詳しく紹介しています。

https://techblog.stanby.co.jp/entry/label

3.2.1 relaxation

主にストップワードの削除を行なっています。 例えば、「募集・仕事」のような文字をユーザー入力クエリから削除しています。 スタンバイでは求人情報を扱っているので、「募集・仕事」など明示的にドキュメントに記載する必要がないからです。 これらの単語を削除することにより、 再現率を高めることができています。

expansion

スタンバイでは、エンジニア・看護師などのキーワードの他に、東京都・神奈川のように勤務地検索にも対応しています。(検索窓が2つ用意されている) そこで首都圏が入力されたときには、「首都圏 => 東京都、神奈川県」に変換し、or検索にしています。 スタンバイの求人票では具体的な都道府県が記載されていることが多いので、 このような変換処理を入れることで再現率を高めることができています。

機械学習ランキングモデルの説明

スタンバイではYahoo! Japanで独自開発しているSolrのプラグインを利用して、機械学習モデルによるランキングを実現しています。

ランキングモデルの特徴量としては、求人票自体の特徴や検索ログから集計した求人票ごとのクリック数などの実績データも使用しています。

ABテストを重ねて日々モデル改善に取り組んでいます。

まとめ

この記事では、スタンバイにおける検索改善の一例を紹介しました。 検索改善と言っても課題に対して様々なアプローチが存在します。 現在スタンバイでは、この記事で紹介した様々なアプローチをとり課題解決に向けて日々取り組んでいます。

スタンバイのプロダクトや組織について詳しく知りたい方は、気軽にご相談ください。

参考文献

スタンバイのプロダクトや組織について詳しく知りたい方は、気軽にご相談ください。 www.wantedly.com