はじめに
こんにちは! 株式会社BookLive所属の田口です。
先日、招待限定社内勉強会で弊社が取り組んでいる検索改善の取り組みについてのLTを行いました。
割とご好評いただきましたので、ざっくり内容に触れつつ記事として一般公開しようと思います。
目次
- 導入 : 検索システム概要について
- 課題について
- 改善策
- 今後の展望 / まとめ
導入: 検索システム概要について
はじめにざっくりとした検索システムの流れについてお話しします。
- 検索システムは大きく分けて2段階の処理を行っている
- 入力キーワードに合致するものを絞り込み
- 特定のロジックで並べ替え
- 並べ替えの結果がレスポンスとして返却される
- 特定のロジックとは?
- スコアリングによるソートが一般的
- ここでいうスコアは
スコア = キーワードとどれくらい一致しているか * 重み付け
という要素で算出される
- 弊社のような電子書籍ドメインの例で言うと、
-
スコア合計 = タイトル名の一致スコア * 10 + 著者名の一致スコア * 1 + ...
のようなイメージ
-
以上のスコア合計によってソートされてレスポンスとしてユーザーに返されるという感じです。
課題について
ここからは、改修前の課題感について触れていきます。
大きく分けて以下の3点が課題となっていることがわかりました。
- ノイズの多さ
- フィールド重み付け
- 表記揺れ
それぞれについて詳しく見ていきます。
1. ノイズの多さ
- 過去の検索システムでは、タイトルのあらすじなどが主に記載されている 概要文(abst) を常に検索対象フィールドとしていた
- abst は他のフィールドと比較すると情報量がかなり多いため、意図せぬヒットが発生していた
以下に例として架空のタイトルとabstのイメージを示します。
abstは一見して明らかにタイトルに比べて情報量が多いです。
加えて、注意書きのような文書もabstに含まれるため、タブレット
,ディスプレイ
などの検索キーワードでも、引っかかってしまうという挙動を示していました。
かなりのノイズが含まれる結果となってしまっていたのは想像に難くないと思います。
2. フィールド重み付け
前述のスコアリング方式には、以下のような問題があります。
- スコアリングによるフィールドの重み付けは固定値で設定されており、柔軟な変更が不可
- キーワードAでは重みXの方の結果が良いんだけど、キーワードBでは重みYの方の結果が良いんだよな...ということが起こりがち
- 重みの数値に説明性がない
- スコアリングの要素とユーザーニーズは必ずしも一致しない
- 例: 以下の青タイトル, 赤タイトルがあるとする
- 青タイトルには、タイトル名と著者名にキーワードが含まれる
- 赤タイトルは著者名にしかキーワードは含まれないが、有名タイトルであるとする
- 上記のような場合には、スコアリングの結果をそのまま返しても「ユーザーが欲しい結果」とは一致しない
- 例: 以下の青タイトル, 赤タイトルがあるとする
スコアリングの仕組みも万能ではないというイメージを掴めると良いかなと思います。
3. 表記揺れによる検索漏れ
表記揺れにはおおまかに分けて2種類あり、略称によるものと、ひらがな/カタカナ/漢字によるものに大別されます。
それぞれの要素について例を交えつつ、課題について説明していきます。
- 略称
- NASA <=> アメリカ航空宇宙局 などはシステム的に別単語として認識される
- そのため、
NASA
で検索してもアメリカ航空宇宙局の歴史
のようなタイトルは結果に出せない
- ひらがななど
-
僕
,ボク
,ぼく
は自然言語的には同じ意味を表しているが、検索システム的には別の単語として扱われる - そのため、
ぼくのひみつきち
のようなひらがなタイトルは僕の秘密基地
で検索しても結果に出せなかったりする - これは電子書籍ドメインにおいて特に顕著に出る
- (表現としてひらがな/カタカナを使用している場合が多々あるので)
-
改善案
では、それぞれの課題に対して何を行ったのかを紹介していきます。
- ノイズの多さ
- 多段階検索という仕組みを導入
- フィールド重み付け
- 機械学習によるリランキングを導入
- 表記揺れ
- シノニム拡充 / 読みがなフィールド を行う
改善アイデア1. 多段階検察
abstのノイズ削減のために導入してみたアイデアが多段階検索という仕組みです。
多段階検索は単に「ヒットしなければ条件を緩めて再検索を行う」というロジックで行っています。
再検索の段階をstageとして、以下のようなイメージで再度検索を流してます。
- stage1: 検索対象としてよく使用されているフィールド (メジャーフィールド)
- stage2: 概要文を含む
- stage3: その他フィールド
これにより、abstのノイズ影響を抑えつつ、abstにしかないキーワードなども結果として表示できるようになりました。
アイデア2. 機械学習によるリランキング
次は重み付けの対策として、機械学習によるリランキングを導入しました。
検索システム概要の2段階目の処理で 特定ロジックによる並べ替え
を適用していると説明しました。
この並べ替えロジックに機械学習リランキングを導入して、よりよい並び順を掲出しようというアイデアです。
簡単な学習の流れとしては、以下のようになってます。
- タイトル情報(特徴量) / 行動ログ(label) から学習データを作成
- 購入 > クリック > CVなし という順になるように学習
アイデア3. シノニムタグ拡充
特に略称による表記揺れの対策として、シノニム(同義語)の拡充を行いました。
電子書籍タイトルにおけるシノニムテキストは公式で名付けられたものが少ないため、こちらのデータソースには関連性が存在していません。
そのため、検索クエリからの抽出や外部データソースから関係性のテキストを用意してあげる必要があります。
今回は商用利用可能な外部ソースからルールベースでの抽出 -> 人力チェックでフィルタ という形式でシノニムの抽出を行いました。
これによりある程度のシノニムを検索結果として掲出できるようになりました。
できれば自動化までいきたいところでしたが、工数コストと見合わないのでは? ということで断念されました。無念。
結果
わかりやすい指標として、検索を行ったユーザーの売上比較を行いました。
ちなみに、初期はユーザーベースの購入率 / クリック率 / ndcg などを評価指標として確認する予定でした。
が、急遽収益ベースの比較に切り替えたので、AAテストの意味もあまりなかったかもしれません。反省。
今後の展望など
補遺
2025/11/12(wed) 19:00~ 株式会社BookLive主催で勉強会を開催します!
AI活用に関するトピックを持ち寄る予定ですので興味をお持ちの方がいらっしゃいましたら、以下からご参加いただけますと幸いです!(筆者もLT担当で登壇予定です)
また、株式会社BookLiveは一緒にはたらく仲間を募集しております。
ご興味をお持ちの方は以下リンクからぜひエントリーをお願いします!