毎日何十億もの検索を行うMeituanは、どのようにして効率的な検索システムを構築していますか?

ご存知のように、Meituanはユーザーに、食品の配達、旅行、さらには小売りや生鮮食品を含む、あらゆるライフサービスを提供しています。


image.png

多数の複雑なサービスとオプションに直面した場合、ユーザーはどのようにして必要な結果をすばやく見つけることができますか?これには、Meituanプラットフォームの検索サービスの助けが必要です。

image.png

2018年11月30日から12月1日まで、51CTOが主催するWOTグローバル人工知能技術サミットがJWマリオットホテル北京ユエカイで盛大に開催されました。


このサミットのテーマは人工知能です。Meituanの上級アルゴリズム技術専門家であるJiangQianchengが、特別な検索セッションを推奨しています。MeituanSearchの主な機能と、独自のアルゴリズムモデルを使用して課題に対処する方法から、紹介します。 「MeituanO2Oサービス検索のディープラーニングプラクティス」。


Meituan検索ビジネスステータス


image.png

現在、Meituan Searchは、プラットフォーム上のトランザクションの40%をカバーしており、いわゆる数千万のPOI(Point of Interest)と数十億のSPU(Standard Product Unit)、およびユーザーの1日の検索頻度(つまり、毎日のPV)、1億に達することもあります。

image.png

では、Meituan検索に関係する特定の側面は何ですか?上の写真のように、左上のホームページの検索バーに加えて、その下のさまざまなビジネスチャネルの検索サービスも私たちのチームによって処理されます。


したがって、検索するサービスターゲットは、メインPOI、各POIの下でさまざまなビジネスによって提供されるさまざまなサービス(有料サービス、持ち帰りサービス、従来のグループ購入ビジネス、プリペイドビジネス、ホテルプリペイドビジネスなど)など、さまざまなタイプに分類できます。 。


Meituan Searchのプラットフォームとして、私たちの使命は、ユーザートラフィックを効率的に分散し、分散されたコンテンツに基づいて検索エクスペリエンスを向上させることです。


ユーザーの粘着性を維持しながら、ユーザートランザクションの効率を向上させるだけでなく、ユーザーが意思決定を行うのに役立つより多くの情報を提供する必要があります。


一方、マーチャントの場合、変換効率を高めるために、より良いユーザートラフィックをマーチャントに転送する必要があります。これがメイトゥアンへの入り口としての私たちの使命です。


Meituan検索の機能と課題


O2O検索と他のWebページおよびeコマース検索の類似点と相違点、および私たちが直面している課題について説明しましょう。

image.png

まず、目標に関しては、さまざまな業種があり、開発段階ごとに最適化の目標が異なります。クリックスルー率を最適化する必要があるもの、コンバージョン率を最適化する必要があるもの、GMV(Gross Merchandise)を最適化する必要があるものがあります。ボリューム、総売上高)。


したがって、プラットフォームに関する限り、既存の大規模なトラフィックを使用し、ビジネスサイドにサービスを提供し、効率を向上させ、プラットフォームのトランザクションを強化することが全体的な目標です。


次に、ユーザーの場合、さまざまなユーザー属性に基づいてパーソナライズされた結果を検索する必要があります。さらに、検索の時間と空間に基づいて差別化された結果を提供する必要もあります。


繰り返しますが、企業の場合:

  • 不均一性は非常に大きいです。各事業とその分野の焦点は異なります。それらが提供するサービスの違いのために、それらのデータと検索レベルも従来の検索とは大きく異なります。

  • 非標準の属性。プラットフォームのケータリングショップからわかるように、商人自身の料理はいくつかの標準化されていない製品です。これは、テレビやエアコンなどの標準的な製品とは根本的に異なります。


ユーザーと企業がリアルタイムで関連していることがわかります。言い換えれば、ユーザーのニーズは、場所や朝食、昼食、夕食の時間によって異なります。


企業の輸送能力は、1日のさまざまな時間帯に雨が降っているかどうかなどの気象要因によっても異なります。したがって、これらはMeituanSearchの特徴と課題と見なされます。


要約すると、私たちの検索サービスのビジョンは、より多くの人々がより多くのライフサービスを見つけやすくすることです。


その中で、「欲しいものをもっと見つける」はインテリジェントなマッチング技術によって達成でき、「もっと便利に見つける」にはパーソナライズされたランキングが必要です。これらの2つの重要な道に直面して、私たちは深層学習において以下の調査を実施しました。


Meituan Search Deep Learning Exploration Practice


スマートマッチング



一般的に、ユーザーの意図表現は、明示的入力と暗黙的入力の2つのタイプに分けられます。

  • Explicitは、彼がフィルター基準を直接通過した検索要求です。

  • 暗黙的には、ユーザーの検索時間、地理的な場所、個人的な好みが含まれます。


したがって、スマートマッチングでは、検索結果を通じて一連のユーザーのニーズを表示する必要があります。


では、どうすればスマートマッチングを実行できますか?要約すると、次の2つの側面が含まれます。

  • ユーザーの意図のマッチング。

  • 多次元マッチング。


ユーザーの意図に関しては、検索は同じ語彙を対象としていますが、異なるタイプのユーザーの期待される結果は異なります。


例:「北京南鉄道駅」という用語:

  • 北京に住む地元のユーザーの場合、検索は主に飲食物の配達の需要に基づいています。

  • 北京に住んでいるがほとんど行かないユーザーの場合、検索は主にバス転送のニーズを対象としています。

  • 町外の観光客の場合、検索は主に電車と宿泊施設のニーズに基づいています。


したがって、これには、異なる「背景」を持つユーザーに対して異なるコンテンツを表示する必要があります。


ユーザーの意図は大きく2つの次元に分けることができることがわかります。

  • シーンの意図、つまりユーザーの暗黙の条件に基づいて、ユーザーのニーズが食べ物、ホテル、または観光に基づいているかどうかを調査する必要があります。これはビジネスレベルの要件です。

  • コンポーネント分析、つまり、ユーザーの明示的な入力については、途中で有効なコンポーネントを分析し、これを使用して対象となる標準を策定する必要があります。


ビジネスID


image.png

ビジネス識別の基本的なプロセスを見てみましょう。まず、業界の知識ベース、つまり語彙が必要です。


次に、いくつかの一般的な語彙を掘り下げて、各単語が特定の需要とトップ関連の問題に対応できるようにします。


システムが稼働した後、クリック数、注文、カテゴリ、その他のビジネス分布など、ユーザーのフィードバックを繰り返し照合します。次に、そのような需要分布の確率を導き出し、さまざまなリコールを実行します。


もちろん、この単純な統計的振る舞いの一般化能力にはいくつかの問題があります。ユーザーの行動特性が十分にフィードバックされていない場合、ユーザーのニーズは明確ではなくなります。


現時点では、当然、さまざまな機械学習モデルを使用してテキストとユーザー行をベクトル化し、FastTextやCNNなどの分類モデルを使用してユーザーのさまざまな機能を分類し、ユーザーの意図を取得することを考えました。一般化の問題を解決します。


ただし、機械学習によって得られた分布は全体としては妥当であるものの、一部のユーザーにとっては妥当ではないこともわかりました。


そのため、最近、いくつかの強化学習方法を採用しました。微妙な点で、ユーザーからのフォローアップフィードバックを収集するために、ユーザーにビジネスニーズへのアクセスを探索的に提供します。


このタイプの反復を通じて、ユーザーが特定の領域で強いビジネスニーズを持っているかどうかを識別できます。

image.png

これまでのところ、ビジネス全体が明確に特定されていると思いますか?実際、ユーザーが検索のために1つの単語を入力するだけの場合、大量のユーザーデータに基づいてプラットフォームによって計算された需要分布がユーザーの意図を正確に反映していない可能性があることを見つけるのは難しくありません。


另外,用户的历史意图是否会影响他的实时意图呢?面对此类时序化的问题,我们需要基于此前他在我们系统中发生过的搜索行为,采用大数据统计来提取相关特征,利用 RNN 模型去预测他的下一个行为。


当然,我们也会参照上述一些非业务方面的因素。


成分分析



第二个方面是成分分析。考虑到用户可能会搜索各种短语,如:“中关村火锅”,其中,“中关村”是地址,“火锅”是品类,那么我们需要做好针对性的检索。


例如:我们将地址信息转化成地图上的坐标画圈,将品类信息转呈到已有成品类的检索中,进而实现成分分析和智能匹配的完美结合。


由于成分识别实际上是一个序列标注的问题,因此我们起初采用的是传统的 CRF 模型。


虽然该模型的精度与召回尚可,但是它对于语义的理解,以及相关性的考虑是不够的,而且它需要人工进行特征提取与数据标注。因此,我们想到了使用基于 LS 的深度学习与 CRF 结合的方法。


初期,由于数据量太小,算法不能很好地学习到各种标签的正确性,因此效果不如 CRF。


于是,我们采用了如下的方法来扩充数据量:

  • 我们将已训练的 CRF 模型扩展出更多的语料,使之将预测出来的结果作为标志数据。

  • 对于已总结的数据库,我们根据用户反馈的规则,挖掘出更多的数据。


通过各种扩充,待样本增长了百万级的规模时,我们再运用深度学习模型进行实体识别。


在实体识别的过程中,我们所用到的输入特征包括:值向量特征,以及以前 CRF 所用到的人工特征,通过 BiLSTM 再进行 CIF,最后达到了实体识别。而由此所产生的效果相对于 CRF,已经有了大幅的提升。


当然根据业务属性,由于商家的名称以及微信地址都是五花八门的,因此我们无法做到及时的全面覆盖,召回也就不那么的理想。


前面提到的是用户意图在智能匹配上的作用。下面我们来看为何要进行多维匹配。


例如:某个用户输入了“减肥餐”,那么我们仅仅使用文本匹配予以返回显然是不够的。


他的潜在需求,可能还包括:低油、低脂、轻食、蔬菜、水果等一系列方面。因此,这就产生了需求之间的语义 Gap。


为了弥补该 Gap,我们需要建立向量化的召回框架结构,由上方的示意图可见,我们将文本数据和用户行为序列数据,导入语义模型,处理完毕后得到了 Query、POI、User 三者的向量,再根据这些向量执行召回。


如今,该框架已经能够被在线使用到了。


语义模型


下面我们来介绍一下美团在语义模型方面的具体尝试。


首先是 DSSM 模型。我们在其原生模型的基础上进行了一些修改。在输入方面,我们采用的是文档(Doc)和查询(Query)的双塔结构。此处,我们已经做好了文本的过滤(包括低频次的过滤)。


通常情况下,系统会经过两个隐藏层。而在此处,我们改进为:让第二层将第一层向量选出来的隐性层转到第三层,以便数据能够更好地向下传递。


而在输出层,我们会更细腻地考虑两者之间的权重。我们会做一个相似度的矩阵,同时将这两个向量传递到最后的输出层,以线性加权的方式得到最终的分数,这便是我们在 DSSM 语义模型上的探索。


前面我们讨论了监督的模型,其实我们也尝试了一些非监督的模型。非监督模型主要是基于用户的行为序列。


例如:用户会在某个查询会话中会点击多处(POI1、POI2),那么我们就将此序列当成一个文档。


相比前面提及的主要体现在文本上的模型,此处则更偏向于推荐的思想。如果用户既点了 A,又点了 B,那么两者之间就存在相似性,因此我们采用了单独的模型来训练此类序列。


而且,我们在输入层不只是把 POI 进行了向量化,还将与 POI 相关的品类信息、GU 哈希信息等都拼接成额外的向量。这便是我们所做的简单的改动。


上图右侧是一个向量的展现,可见系统能够把一些相关的信息学习出来,以便我们进行各种相关性的召回。


针对上述智能匹配技术,我们总结起来有两个方面:

  • 怎么做好用户的意图识别。

  • 怎么实现多维度匹配,即:在传统文本匹配的基础上,加入了向量化召回的思路。


个性化排序


在完成了用户匹配之后,我们帮用户搜到大量的匹配结果。那么,我们势必需要通过个性化排序,来优先显示用户最需要的结果信息。


如上图所示,排序的整体流程为:

  • 我们使用召回层进行简单的粗排,它适用于一些简单的特征,即通过线性模型对结果进行初步过滤。

  • 把少量的结果送到模型层,执行点击率和转化率的预估。

  • 在业务层会有一些可解释性、业务规则的排序。


其中,模型层的演进过程是:线性模型→决策树模型(如 GBDT)PairWise 模型实时模型深度学习,以满足个性化的特征。


下面,我们来重点讨论实时模型和深度学习的实现方式。

image.png

为了更好地满足用户的需求。我们有两种实时化的方向:

  • 许多公司会将包括实时行为、实时库存、实时转化等在内的特征放入模型,以进行实时更新。

  • 通过在线学习,拼接各种实时流,实时更新参数,根据模型的评估,判断是否要替换成新训练的模型。


实时特征


image.png

同时,在提取实时特征的过程中,我们需要将用户实时的数据,如:点击流、下单流等请求数据缓存到 Storm 里。


接着,基于这些数据,我们需要提取到用户的实时行为特征,包括:品类偏好、价格偏好、距离偏好等。


另外,我们会对序列区分不同的时段,并逐一“兑换”特征,当然,我们也会考虑该用户会话(Session)内部的 01 特征。结合业务特点的挖掘,我们最终把实时特征提取了出来。


深度模型


image.png

对于美团而言,深度模型的需求源自如下三个方面:

  • 场景非常复杂,每个业务的需求都存在着巨大差异。

  • 前面提到的树模型虽然有较好的泛化能力,但是缺少针对用户行为的记忆能力。

  • 需要对一些稀疏特征,以及特征组合进行处理。


因此,基于业务和工程师的实际需求,我们有必要采用深度学习模型。


上图是我们的深度学习框架。其特点在于如下三个方面:

  • 能够更好地在线支持超大规模的数据和模型,如:几十个 G 的模型。

  • 能够方便地支持多种模型的定义。

  • 能够很好地支持流式模式的训练与上线。


简单来看,该模型也分为三个部分:

  • 离线训练,即Base模型,是从日志数据表里提取特征,通过训练,将参数存到离线集群之中。

  • 流式训练,将实时收集到的数据作为日志予以拼接,通过特征的提取,最后执行训练。

  • 在线预测,通过实时优先级对模型进行评估。如果通过,则更新到 PS 在线集群里进行预测。


有了上述框架的感念,我们再来看看在该深度模型上的探索路径。起初,我们直接将 Dense 特征拿过来,扔到简单的 MLP 里执行快速迭代。


凭借着更强的特征拟合能力,我们能够实时地迭代出参数的模型,进而实现了在线式的实时更新。因此,相比之前的树模型,深度学习模型的效果有了明显的提升。


而针对稀疏特征,我们采用了如下两种方法:

  • 直接用模型去学习和训练 Embedding 特征,进而输入到模型之中。

  • 通过 Wide 记录模型来实现深度学习。


如上图所示,在特征组合方面,我们尝试了一些知名的模型。其实它们之间并无明显的优劣势,就看哪个更适合业务项目罢了。


例如:PNN 是将特征作为一个组合放在了输入层;DeepFM 则多了一个 FM 值;而 DCN 是做到了特征高阶的模型。


因此,我们在不同的业务场景中,都尝试了上述这些模型。一旦发现效果较好,我们就会将其替换成当前业务的主模型。


总的说来,我们现在的主体模型是:流式的深度学习模型。从上图的各项指标可以看出,其整体效果都有了正向的提升。


未来展望



展望未来,我们会在如下两大方面继续个性化排序的探索:

  • 智能匹配。在深度上,我们会深耕成分分析、用户意图、以及业务预测等方面。

    在广度上,我们会针对文本匹配效果不佳的场景,补充一些向量召回,进而实现根据用户的不同属性,达到多维度个性化召回的效果。

  • ソートモデル。AliのDIENモデルと同様に、ユーザーの関心を個別にモデル化してから、ランキングモデルと組み合わせます。

    さまざまなカテゴリの関連性、テキストの関連性、および実際のビジネスシナリオの不確実性を考慮して、深層学習における多目的共同最適化を試みます。


おすすめ

転載: blog.51cto.com/14410880/2551141