こんにちは。Yahoo! JAPAN研究所の鍜治です。今回は、最近私が研究開発に関わっている、Yahoo!検索のクエリスペル訂正機能(スペラー)についてご紹介したいと思います。
スペラーって何? なぜスペラーを開発するの?
本日紹介するスペラーとは、入力されたスペルを訂正するモジュールのことです。例えば、ウェブ検索を使って調べものをしているときに、クエリのスペルを間違えて入力してしまったけどそのまま送信してしまった。そんな経験、皆さんにもあるのではないでしょうか。
Yahoo!検索にも、間違ったスペルのクエリが毎日大量に送信されてきます。例えば、下の表は、ある期間のYahoo!検索のクエリログから「鬼滅の刃」を意図していると思しきクエリを集めたものです。
クエリ |
---|
きめつのやいば |
きめつの刃 |
kimetunoyaiba |
鬼滅の刄 |
キメツノヤイバ |
起滅の刃 |
木滅の刃 |
きっめつの刃 |
鬼滅のは |
クエリのスペルが間違っていると、ユーザーの意図通りの検索結果を返すことが難しくなってしまいます。
そのため、Yahoo!検索には、スペルの間違いを検出して自動的に訂正することにより、ユーザーが間違ったスペルで検索したとしても適切な検索結果を返すことができる仕組みが用意されています。このようにより良い検索体験を作るためにスペラーは開発されています。
どうやってスペラーを学習しているの?
スペル訂正は古くから研究が行われているタスクで、性能の良い機械学習モデルがいくつも提案されています。そのため、学習データ(スペル間違いのクエリとその訂正結果の集合)さえ用意してしまえば、あとは既存の機械学習モデルを適用するだけでスペラーを作成することが可能です。
なお、スペル訂正の手法に関する体系的な解説に興味のある方は、例えば自然言語処理の著名な教科書「Speech and Languege Processing」の「Spelling Correction and the Noisy Channel」の章を参考にされると良いかと思います。深層学習以前の話が多く、少し昔の内容ですが、わかりやすくまとめられています。
話は戻りますが、既存の機械学習モデルを適用するだけで作成できるほど、現実は甘くありません。精度の良いスペラーを作成するためには、大量の学習データが必要になりますが、それには時間もお金もかかります。さらに、よく検索されるクエリにはトレンドがあります。そのため、最新の検索トレンドにあったスペラーを学習するためには、一度学習データを作成すればそれでおしまいというわけではく、定期的に学習データを更新する必要もあります。
そこで私たちはクエリログ*1を利用することを考えました。( *1プライバシーポリシーの範囲内で取得したデータを個人が特定できない状態に加工しています)
ウェブ検索ユーザーは、自分の意図に合う検索結果が得られなかったとき、クエリを変えて再検索を行うことがあります。そのため、クエリログには、ユーザーがスペルの間違いに気づいて自分で訂正を行った履歴が大量に蓄積されています。
例えば、ユーザーが間違えて「鬼滅の刃 夢幻列車」と入力してしまい(正しくは「無限列車」)、その直後に正しいスペルのクエリで検索しなおした場合、その様子は次のようにクエリログに保存されます(このクエリログは私の創作です)。
検索時刻 | クエリ |
---|---|
2021-02-01 15:43:33 | 鬼滅の刃 映画 |
2021-02-01 15:44:31 | 鬼滅の刃 夢幻列車 |
2021-02-01 15:44:49 | 鬼滅の刃 無限列車 |
2021-02-01 15:45:16 | 鬼滅の刃 無限列車 上映時刻 |
Yahoo!検索では、このような訂正履歴をうまくクエリログから自動収集して、それをスペラーの学習データに利用しています。この方法によって、最新のクエリログから何百万、何千万という学習データを毎日自動的に生成することが可能となり、前述の問題を解決することができました。
スペル間違いのクエリ | 訂正後のクエリ |
---|---|
習慣少年ジャンプ 発売日 | 週刊少年ジャンプ 発売日 |
kannsennsyoutaisaku | 感染症対策 |
あじだす スニーカー | アディダス スニーカー |
ドアンゴ学園 | ドワンゴ学園 |
チュリーップローズ | チューリップローズ |
どのくらいサービスは便利になっているの?
さて、スペラーという機能が備わっていることによって、Yahoo!検索はどのくらい便利になっているのでしょうか?
検索エンジンがユーザにとって価値のある回答を届けられているかどうかを測る指標の1つとして、検索結果に適切なモジュールを表示できているかどうか、というものが考えられます。
そこで、11種類のモジュールを対象として、スペラーを使った場合と使わなかった場合の表示数とクリック率を比較するライブテストを行いました。モジュールを表示するかどうかの判断は、クエリを元に行われているので、そのスペルが間違っているとうまくモジュールを表示できません。そのため、スペラーの導入によって、より適切なモジュールをより多く表示できるようになることが期待できます。
ライブテストの結果、モジュールの表示数が平均24.9%増加、クリック率が平均20.2%増加しており、より良いモジュールをより多く表示できていることが確認できました。
さらに、スペラーの導入によってモジュールの有無が変化した400クエリを対象として、実際に検索結果の質が改善しているかどうかも人手で評価しました。その結果、「TEST(スペラー有り)の方が良い」と判定されたクエリが「CTRL(スペラーなし)の方が良い」と比べて倍増しており、モジュールの増加が検索結果の改善につながっていることが確認できました。
評価結果 | クエリ数 |
---|---|
TEST(スペラー有り)の方が良い | 222 |
CTRL(スペラーなし)の方が良い | 98 |
どちらも良い | 70 |
どちらも悪い | 10 |
スペラーは、以前こちらの記事で紹介した共通化インタフェース「Azuki」を利用して、API形式で提供されています。私たちのチームではスペラー以外にも多数の言語処理機能を開発しています。そのため、それらの運用コストは無視できない問題となっているのですが、Azukiを利用することによって、運用コストを抑えつつ積極的に新規開発も行うことが可能になっています。
おわりに
本記事ではYahoo!検索で使われているスペラーのご紹介しました。
スペラーはスペルの間違いを訂正するというちょっとした機能を提供しているだけですが、サービスの利便性を大きく向上させる重要な技術となっています。ヤフーの研究者やデータサイエンティストたちが普段どのようなことを行っているのか、この記事を通して知っていただき、そして少しでも興味を持っていただければうれしく思います。
こちらの記事のご感想を聞かせください。
- 学びがある
- わかりやすい
- 新しい視点
ご感想ありがとうございました