シャンプヌずシャンピニオン、および䞲ずシャンパンを区別する方法... Elasticsearch-ストアデヌタベヌスで補品を怜玢する

挑戊する



賌入を保存および分析するためのアプリケヌションの倧きなタスクの1぀は、領収曞から取埗した補品のさたざたでわかりにくい名前を含むデヌタベヌス内の同䞀たたは非垞に近い補品を怜玢するこずです。 入力芁求には2぀のタむプがありたす。







  1. 地元のスヌパヌマヌケットのレゞ係たたは熱心なバむダヌのみが理解できる略語付きの特定の名前。
  2. ナヌザヌが怜玢文字列に入力する自然蚀語ク゚リ。


原則ずしお、ナヌザヌがより安䟡な補品を芋぀ける必芁がある堎合、第1皮の芁求はチェック自䜓の補品から送信されたす。 私たちの仕事は、近くの他の店のチェックから最も類䌌した補品アナログを遞択するこずです。 最も適切なブランドの補品ず、可胜であればボリュヌムを遞択するこずが重芁です。













2番目のタむプのリク゚ストは、最も近い店舗で特定の補品を怜玢する単玔なナヌザヌリク゚ストです。 芁求は、補品の非垞に䞀般的で䞀意ではない説明にするこずができたす。 芁求からわずかな逞脱がある堎合がありたす。 たずえば、ナヌザヌが牛乳3.2を怜玢し、デヌタベヌスでは牛乳2.5のみを怜玢する堎合、少なくずもこの結果を衚瀺する必芁がありたす。













フィヌチャデヌタセット-解決すべき問題



補品の領収曞の情報は理想ずはほど遠いものです。 略語、文法䞊の誀り、タむプミス、さたざたな翻蚳、キリル文字の途䞭にあるラテン文字、および特定の店舗の内郚組織にのみ意味のある文字セットが垞に明確ずは限りたせん。

たずえば、カッテヌゞチヌズ入りのリンゎずバナナのベビヌピュヌレは、次のように簡単に曞くこずができたす。













技術に぀いお



Elasticsearchは、怜玢を実装するためのかなり人気のある手頃な技術です。 これは、Luceneを䜿甚し、Javaで蚘述されたJSON REST APIを備えた怜玢゚ンゞンです。 Elasticの䞻な利点は、速床、スケヌラビリティ、耐障害性です。 このような゚ンゞンは、ドキュメントのデヌタベヌスの耇雑な怜玢で䜿甚されたす。 たずえば、蚀語の圢態を考慮した怜玢や、地理座暙による怜玢。







実隓ず改善の方向



怜玢を改善する方法を理解するには、怜玢システムを構成するカスタムコンポヌネントに解析する必芁がありたす。 この堎合、システムの構造は次のようになりたす。







  1. 怜玢の入力文字列はアナラむザヌを通過し、特定の方法で文字列をトヌクンに分割したす-トヌクンにも栌玍されおいるデヌタを怜玢する怜玢ナニット。
  2. 次に、既存のデヌタベヌスの各ドキュメントでこれらのトヌクンを盎接怜玢したす。 特定のドキュメントトヌクンセットずしおデヌタベヌスに提瀺されおいるでトヌクンを芋぀けた埌、その関連性は、遞択された類䌌性モデルに埓っお蚈算されたすこれを関連性モデルず呌びたす。 これは、単玔なTF / IDF 甚語頻床-逆文曞頻床にするこずも、他のより耇雑なたたは特定のモデルにするこずもできたす。
  3. 次の段階で、個々のトヌクンによっお埗点されたポむントの数が特定の方法で集蚈されたす。 集蚈パラメヌタヌはク゚リセマンティクスによっお蚭定されたす。 そのような集玄の䟋ずしおは、特定のトヌクンの远加の重み付加䟡倀、トヌクンの必須存圚の条件などがありたす。 この段階の結果はスコアです。これは、デヌタベヌスからの特定のドキュメントの初期リク゚ストに察する関連性の最終評䟡です。








個別に蚭定可胜な3぀のコンポヌネントを怜玢デバむスず区別するこずができ、それぞれのコンポヌネントで独自の改善方法ず改善方法を匷調できたす。







  1. アナラむザヌ
  2. 類䌌モデル
  3. ク゚リ時間の改善


次に、各コンポヌネントを個別に怜蚎し、補品名の堎合の怜玢の改善に圹立぀特定のパラメヌタヌ蚭定を分析したす。







ク゚リ時間の改善



リク゚ストで改善できるこずを理解するために、最初のリク゚ストの䟋を瀺したす。







{ "query": { "multi_match": { "query": "  105", "type": "most_fields", "fields": ["name"], "minimum_should_match": "70%" } }, “size”: 100, “min_score”: 15 }
      
      





「補品名」フィヌルドには耇数のアナラむザヌの組み合わせが必芁になるず予想されるため、most_fieldsク゚リタむプを䜿甚したす。 このタむプのク゚リを䜿甚するず、さたざたな方法で分析された同じテキストを含むオブゞェクトのさたざたな属性の怜玢結果を組み合わせるこずができたす。 このアプロヌチの代替方法は、best_fieldsたたはcross_fieldsク゚リを䜿甚するこずですが、怜玢はオブゞェクトのさたざたな属性間で蚈算されるため䟋名前ず説明、これらのケヌスには適しおいたせん。 補品の名前ずいう1぀の属性のさたざたな偎面を考慮に入れるずいう課題に盎面しおいたす。







蚭定できるもの









アナラむザヌ



アナラむザヌは、入力文字列を3段階で分析し、出力でトヌクンを出力したす-怜玢単䜍













たず、文字列の文字レベルで倉曎が発生したす。 これは、文字列を眮換、削陀、たたは文字列に远加するこずができたす。 次に、文字列をトヌクンに分割するように蚭蚈されたトヌクナむザヌが登堎したす。 暙準のトヌクナむザヌは、句読点に埓っお文字列をトヌクンに分割したす。 最埌のステップでは、受信したトヌクンがフィルタリングされお凊理されたす。







この堎合、どのステップのバリ゚ヌションが有甚になったかを怜蚎しおください。







チャヌフィルタヌ




トヌクナむザヌ




トヌクンフィルタヌ










類䌌モデル



1぀のトヌクンの䞀臎が、リク゚ストに関するデヌタベヌスからのオブゞェクトの関連性にどの皋床圱響するかを刀断するには、関連性モデルが必芁です。 リク゚ストのトヌクンずデヌタベヌスの補品が䞀臎する堎合、これは確かに悪いこずではありたせんが、リク゚ストに察する補品の適合性に぀いおはほずんど語っおいたせん。 したがっお、異なるトヌクンの䞀臎は異なる倀を持ちたす。 これを考慮するには、関連性モデルが必芁です。 Elasticは倚くの異なるモデルを提䟛したす。 それらを本圓に理解しおいれば、特定のケヌスに非垞に具䜓的で適切なモデルを遞択できたす。 遞択は、頻繁に䜿甚される単語の数同じトヌクンなど、長いトヌクンの重芁性の評䟡長い方が良い悪い関係ない、最埌にどのような結果を衚瀺するかなどに基づいお決定できたす。 Elasticで提案されおいるモデルの䟋には、TF-IDF最も単玔で最も理解しやすいモデル、 Okapi BM25 拡匵TF-IDF、デフォルトモデル、ランダム性からの発散、独立性からの発散などがありたす。 各モデルにはカスタマむズ可胜なオプションもありたす。 モデルでのいく぀かの実隓の埌、Okapi BM25デフォルトモデルは最良の結果を瀺したしたが、パラメヌタヌは事前定矩されたものずは異なりたした。







カテゎリヌを䜿甚する



怜玢を䜿甚する過皋で、補品に関する非垞に重芁な远加情報-そのカテゎリ-が利甚可胜になりたした。 蚘事でカテゎリ化の実装方法に぀いお詳しく読むこずができたすが、 私が理解しおいるように、お菓子をたくさん食べたり、アプリケヌションでチェックしお商品を分類したりしおいたす 。 それたでは、補品名の比范のみに基づいお怜玢を行っおいたしたが、今ではデヌタベヌス内のリク゚ストず補品のカテゎリを比范するこずが可胜になりたした。

この情報を䜿甚するための可胜なオプションは、カテゎリフィヌルドでの必須の䞀臎結果のフィルタヌずしお曞匏蚭定、䞀臎するカテゎリヌ数字の堎合などを持぀商品のポむントの圢匏での远加の利点、およびカテゎリによる結果の䞊べ替え最初の䞀臎、次に他のすべおです。 私たちの堎合、最埌のオプションが最も効果的でした。 これは、分類アルゎリズムが2番目の方法を䜿甚するにはあたりにも優れおおり、1番目の方法を䜿甚するには䞍十分であるためです。 アルゎリズムには十分に自信があり、カテゎリマッチングが倧きな利点になるこずを望んでいたす。 速床に远加のポむントを远加する堎合2番目の方法、同じカテゎリの商品はリストの䞊䜍に衚瀺されたすが、名前でより䞀臎する商品には匕き続き倱われたす。 ただし、カテゎリ化の゚ラヌは䟝然ずしお発生する可胜性があるため、最初の方法はどちらにも適しおいたせん。 リク゚ストにカテゎリを正しく刀断するのに䞍十分な情報が含たれおいる堎合や、ナヌザヌの盎近の半埄にあるこのカテゎリの補品が少なすぎる堎合がありたす。 この堎合、結果を別のカテゎリで衚瀺したいのですが、補品名で匕き続き関連したす。

2番目の方法は、怜玢の結果ずしお補品の速床を「損なう」こずはなく、蚈算された最小速床を障害なく䜿甚し続けるこずができるため、優れおいたす。

䞊べ替えの具䜓的な実装は、最終ク゚リで確認できたす。







最終モデル



最終的な怜玢モデルの遞択には、さたざたな怜玢゚ンゞンの生成、それらの評䟡ず比范が含たれおいたした。 ほずんどの堎合、比范はパラメヌタヌの1぀に基づいおいたした。 1぀の特定のケヌスで、edgeNgramトヌクナむザヌの最適なサむズを蚈算する必芁があるず仮定したす぀たり、Nの最も効果的な範囲を遞択したす。 これを行うために、この範囲のサむズが1぀だけ異なる同じ怜玢゚ンゞンを生成したした。 その埌、このパラメヌタヌの最適倀を決定するこずができたした。

モデルは、ランキングの品質を評䟡するためのメトリックであるnDCG正芏化された割匕环積ゲむンメトリックを䜿甚しお評䟡されたした。 事前定矩されたク゚リが各怜玢モデルに送信され、その埌、受信した怜玢結果からnDCGメトリックが蚈算されたした。

最終モデルに入ったアナラむザヌ































パラメヌタヌb = 0.5のデフォルトモデルOkapi-BM25が関連性モデルずしお遞択されたした。 デフォルト倀は0.75です。 このパラメヌタヌは、補品名の長さがtf期間頻床倉数を正芏化する皋床を瀺したす。 長い名前は単䞀の単語の重芁性にほずんど圱響しないため、この䟋では小さい数字の方がうたく機胜したす。 ぀たり、「25個入りのパッケヌゞに砕いたヘヌれルナッツが入ったチョコレヌト」ずいう名前の「チョコレヌト」ずいう蚀葉は、名前が十分に長いずいう事実からその䟡倀を倱うこずはありたせん。







最終的なク゚リは次のようになりたす。













実隓的に、アナラむザヌず重量の最適な組み合わせが明らかになりたした。







䞊べ替えの結果、同じカテゎリの補品は結果の先頭に移動し、他のすべおの補品に移動したす。 ポむント数速床による゜ヌトは、各サブセット内に保存されたす。







簡単にするために、このク゚リでは速床のしきい倀を15に指定したしたが、システムでは前述の蚈算されたパラメヌタヌを䜿甚したす。







将来的には



私たちのアルゎリズムで最も恥ずかしい問題の1぀を解決するこずで怜玢を改善する考えがありたす。それは、100䞇の存圚ず5文字の単語を短瞮する別の方法です。 略語を明らかにするために、名前の最初の凊理で解決できたす。 これを解決する1぀の方法は、デヌタベヌスの短瞮名ず、デヌタベヌスの「正しい」フルネヌムの名前の1぀を比范するこずです。 この決定は明確な障害を満たしたすが、有望な倉化のようです。








All Articles