読者です 読者をやめる 読者になる 読者になる

検索機能の精度向上でもっと商品が探しやすく!〜テックブログが公開されました〜

こんにちは、広報の坂井です。

本日2月16日(木)、テックブログが公開されました!

タイトルは『形態素解析とNgramを併用したハイブリッド検索をSolrで実現する方法』、担当はバックエンドエンジニア塩崎です。

tech.vasily.jp

f:id:vasilyjp:20170215202040j:plain

今回もさっそく、分かりやすく解説してもらおうと思います。しおちゃん(社内での塩崎のニックネーム)、よろしくお願いします!


 ー しおちゃん、よく登場しますね!(今月だけで2回目!)素晴らしい。今回、申し訳ないのですがタイトルから全く分からず…このブログ、どういった内容なのでしょう?

iQONのブランドやアイテムなどの検索機能で、商品がより見つかりやすくなるように改善した話です!例えば、「JIMMY CHOO」というブランドを探したいとき、「ジミー」「JIMMY」などの部分的な検索でも、精度の高い結果が表示されるようになりました。

 

なるほど、それはどうやってやったんですか?

テキストの検索を高速に行うためには、文章を単語に区切る必要があります。この単語に区切る方法としてこれまでは「形態素解析」という手法だけを活用していましたが、最近「Ngram」という手法も併用した検索方法に改善しました。

 

それぞれについて簡単に教えてもらえますか?

まずはシンプルな機能を持ったNgramから説明します。

Ngramは、文章を決まった文字数ごとに分解する手法です。例えば、N=2にしたとき、1つの長い単語を2文字ずつに区切ります。

例として「東京都に行く」という言葉をデータベースに登録したとき、自動で「東京」「京都」「都に」「に行」「行く」と区切ってくれます。

部分一致検索が必ずできるということが利点である反面、欲しくない余分な情報まで出てしまいやすいという欠点があります。

例えば、「京都」で検索したときも、この「東京都に行く」がヒットしてしまいます。

 

形態素解析は?

形態素解析は、文章を文法的に意味のある単位で単語に分割する手法です。

例えば、「東京都に行く」という言葉を登録すると「東京都」「に」「行く」と区切ってくれます。

「京都」で検索してもこの文章はヒットしないので、不要な情報が出ることは少ない反面、「東京」で検索してもヒットしなくなってしまうという欠点があります。(「東京都」で区切ると認識されているため)

単語区切りの精度が悪いと、それは検索精度の悪化につながります。この両方を活用することで、より精度の高い検索結果が表示されるようになりました。

f:id:vasilyjp:20170215215616j:plain

それを両方使うと混乱する気がするのですが…、どうして検索の精度向上につながるんですか?

良い質問ですね(笑)何も考えずに両方の手法を使うと、精度は悪化してしまいます。それぞれの特徴を考慮した上で併用すると、それぞれの欠点を補い合いながら精度の高い検索結果を表示することができるんです。

具体的には、検索結果を表示するとき、はじめの方に形態素解析を用いた結果を表示して、徐々にNgramを用いた結果を混ぜている、といった感じです。

 

どうして先に形態素解析なんでしょう?

先程お話した通り、形態素解析のほうが不要な情報が出づらいという利点があるので、はじめに形態素解析の結果を表示した方が、ユーザーの探しているものに正確に対応することができます。

そして、そこから漏れてしまった情報をNgramによって補って表示しています。

なるほど!ユーザーから見ると、検索結果がより充実して見れるようになっていますね♡


 しおちゃん、ありがとうございました!

ユーザーの皆さまにより楽しんでいただけるよう、VASILYエンジニアは日々新しい技術と向き合いながらサービスを成長させています。

最新技術を駆使しながら自身のエンジニア力も高められるVASILYで、一緒に働いてみませんか?

2月からエンジニアインターンの募集も始まりました!ご応募お待ちしております。

【お問い合わせ】
株式会社VASILY 広報
press@vasily.jp