フォルシアを支える検索技術 ~検索精度を向上させる工夫~
皆さん、こんにちは。
高速検索の会社、フォルシア株式会社のMasstery(マスタリー)部でエンジニアをしている光山です。
今回はデータクレンジングツールMassteryではなく、それを運営しているフォルシアについて、ご紹介させて頂きます。
具体的には、フォルシアのコア技術である検索技術のご紹介をいたします。
・ECサイトの検索技術にご興味のある方
・ECサイトの構築を検討されている方
といった方々にぜひお読み頂けると嬉しいです。
はじめに
フォルシアは、高速検索を強み・主力事業としてきた会社です。
弊社の検索エンジンは、
・旅行会社様
・商社・メーカー様
などの「膨大かつ複雑」なデータを扱ってECサイトで販売されているお客様に主にご導入頂いています。
前者の旅行会社様に対する弊社の取り組みや強みにつきましては、Masstery部エンジニア伊藤さんによる記事をぜひご覧ください。
今回は、後者の商社・メーカー様、特に商社様に焦点を当てて書かせて頂きます。
ここでいう商社様とは、具体的にはMRO業界、試薬業界、医療機器業界などの専門性の高い業界の商社様になります。
検索やデータベースという観点で捉えると、これらの業界に共通する特徴として以下の3点が挙げられます。
・専門性が高い商品群のため、一般的な検索エンジンでは検索精度の向上が難しい。
・データ量が多く、その結果、検索速度が出づらい。試薬業界であれば1,000万点以上の商品が存在することもざら。
・複数メーカーから仕入れたデータを加工するため、データ整備コストが高い。結果的に必要十分なデータが揃わないことが多い。
本記事は、1つ目の検索精度の向上に着目し、フォルシアの検索エンジン『Spook』の具体的な取り組み・工夫を書かせて頂きます。
検索精度向上の工夫
今回は「耐熱手袋」を例にとってご説明します。
耐熱手袋とは文字通り熱に強い手袋のことで、ものづくりの現場で使われる、特殊な素材で出来た手袋です。ユーザーがECサイトで「耐熱手袋」というキーワードを入力したと仮定します。
また、ECサイトのデータベースには、関連しそうな商品として以下が存在しているものとします。
・耐熱手袋
・耐熱手袋用ケース
・耐熱グローブ
・手袋(耐熱)
何の工夫も無い場合
検索エンジン側で何の工夫もなく「耐熱手袋」というキーワードをデータベースに照合すると、ヒットするのは「耐熱手袋」「耐熱手袋用ケース」の2商品だけです。
「耐熱グローブ」と「手袋(耐熱)」は、実質「耐熱手袋」と同じ意味であるにも関わらず、この2商品は「耐熱手袋」という文字を含まないため、検索にヒットしません。これでは、ユーザーが本当に欲しい商品に辿り着ける確率が大きく下がってしまいます。
フォルシアの検索エンジン『Spook』では、以下の技術を用いて検索の精度を向上させています。
精度向上の工夫1. 同義語展開
「耐熱手袋」と「耐熱グローブ」は同じ意味の単語、すなわち同義語です。このような同義語の関係にある単語群を予め設定しておくことで、「耐熱手袋」と検索された場合、「『耐熱手袋』または『耐熱グローブ』」の条件でデータベースを照合することができます。
同義語展開は技術そのもの以上に、質の高い同義語辞書をいかに用意できるかが重要になります。しかしながら、一般用語ならまだしも、専門性の高い業界の場合、この同義語辞書の用意が難しい場合が多いです。
フォルシアの場合は長年の知見の蓄積により、MRO、試薬、医療機器業界の同義語辞書を独自に保持しています。(お客様にご用意頂いたり、組み合わせて使う場合もあります。)また、同義語辞書(候補)を自動で生成する仕組みもあります。
フォルシアでは、これらの仕組みによって、質の高い同義語辞書による同義語展開を行っています。
精度向上の工夫2. 単語の分かち書き
日本語において意味のある最小単位のことを形態素と呼び、各単語を形態素に分割することを形態素解析、もしくは分かち書きと呼びます。入力単語を分かち書きすることで、表記方法が異なるだけで実質的に同じ意味の単語を抽出することが可能です。
具体的には、
「耐熱手袋」は「耐熱 / 手袋」と形態素に分割することができます(※)。一方「手袋(耐熱)」も「手袋 / 耐熱」と分割できます。検索において()は使用しませんので、省略しています。
ユーザが「耐熱手袋」と検索した場合、それを「耐熱 / 手袋」に分かち書きをし、分かち書きした結果のそれぞれに合致する形態素を持つ商品を見つけることで、「手袋(耐熱)」をヒットさせることができます。
なお、同義語展開や、検索に分かち書きを使用する技術は「クエリ拡張」と呼ばれています。クエリとはこの文脈においては「ユーザからの問い合わせ」のことです。問い合わせをシステムが賢く拡張し、入力単語には表れていないがユーザが暗黙的に期待している結果も抽出します。
※ 実際には、形態素に分割した結果は形態素解析エンジンやそのエンジンが使用している辞書の中身等に依存します。この記事の他の形態素解析の例も同様です。
精度向上の工夫3. 検索結果並び順最適化
上記のクエリ拡張によって、「耐熱手袋」のキーワードに対して「耐熱手袋」「耐熱手袋用ケース」「耐熱グローブ」「手袋(耐熱)」の4種類の商品を無事ヒットさせることができるようになりました。
しかしながら、ここでもう一つ重大な観点があります。それは検索結果の並び順です。実は上記4種類の商品の中に一つ仲間はずれがあることにお気づきでしょうか。それは「耐熱手袋用ケース」です。
他の3商品は表記の違いはあれどいずれも「耐熱性のある手袋」であるのに対し、「耐熱手袋用ケース」が指すものはあくまで「ケース」であり、「耐熱性のある手袋」ではありません。
ユーザが「耐熱手袋」と入力した場合、おそらくは手袋が欲しいのであって、ケースが欲しい可能性は低いでしょう。仮にケースが欲しいのであれば検索キーワードに「ケース」を含めるはずです。ただしそうは言っても、ユーザーや状況によっては「耐熱手袋用ケース」を検索結果に表示する必要が無いとは断定できません。
総合的にみて、「検索結果には表示するが、表示順位は下げる」対応をするのが好ましいと言えそうです。今回の例では、検索結果とその並び順は以下の通り「検索にはヒットさせるが一番下」が良さそうです。
1. 耐熱手袋
2. 耐熱グローブ
3. 手袋(耐熱)
4. 耐熱手袋用ケース
では、どのような処理を用いて「耐熱手袋用ケース」とそれ以外とを区別すればよいでしょうか。ここで、先程の形態素解析(分かち書き)が再び活躍します。
形態素解析を用いることで、「耐熱手袋用ケース」は「耐熱 / 手袋 / 用 / ケース」に分割されます。ここで重要なのは「用」です。これは接尾辞と呼ばれる、直前の単語を修飾するための形態素です。(他の接尾辞の例として「式」や「型」などがあります。)この接尾辞があることで、その直前の単語である「耐熱手袋」は、その商品そのものではなく、何かしらの修飾語としての働きをしていると判断できます。
この情報を活用し、「接尾辞の直前にあるキーワードは優先度を下げる」という処理を追加すればよいわけです。(これはあくまでイメージであり、実際にはより厳密な処理を行っています。)
この例のように、Spookでは単純に「入力キーワードの合致した/しない」に留まらず、「接尾辞を含むか」「どの項目にヒットしたか。商品名なのか、メーカー名なのか、仕様なのか」「元の単語なのか、同義語なのか」など複数の観点でスコアを設定し、その合計スコアにより並び順を決定しています。
さいごに
今回は、MRO業界、試薬業界、医療機器業界などの専門性の高い業界の商社様において、フォルシアの提供している検索エンジン『Spook』が検索精度を向上させるために行っている工夫を3つお伝えしました。
キーワード検索は奥が深く、今回ご紹介できなかった技術やテクニックがまだまだ数多く存在します。さらに、キーワード検索とは別の検索形態として、カテゴリ検索やスペック検索などがあり、これらもECサイトにおいて重要な役割を担っています。こちらもまた別の機会でご紹介出来ればと思います。
この記事が気に入ったらサポートをしてみませんか?