淺談有贊搜索 QP 架構設計

作者: 數據中臺

前言

在介紹 QP 前先簡單介紹一下有贊搜索平臺的整體設計,方便大家快速瞭解 QP 在搜索平臺中的作用。下圖簡單展示了一個搜索請求開始到結束的全部流程。業務通過簡潔的 api 接入 los,管理員在搜索平臺新建配置並下發,完成整個搜索接入,並通過 A/B Test 驗證 QP 帶來的優化效果。

圖片

文章主要分爲 5 個章節:

  1. QP 的作用

  2. QP 應用整體設計

  3. QP 應用分層設計

  4. QP 算法插件設計

  5. 總結與展望

一、QP 的作用

在 NLP 中,QP 被稱作 Query 理解(QueryParser),簡單來說就是從詞法、句法、語義三個層面對 query 進行結構化解析。這裏 query 從廣義上來說涉及的任務比較多,最常見的就是搜索系統中輸入的查詢詞,也可以是 FAQ 問答或閱讀理解中的問句,又或者可以是人機對話中用戶的聊天輸入。

在有贊,QP 系統專注對查詢內容進行結構化解析,整合了有贊 NLP 能力,提供統一對外接口,與業務邏輯解耦。通過配置化快速滿足業務接入需求,同時將算法能力插件化,並支持人工干預插件執行結果。

以精選搜索爲例,當用戶輸入衣服時用戶往往想要搜的是衣服類商品,而不是衣服架,衣服配飾等衣服周邊用品。通過將衣服類目進行加權,將衣服類的商品排在靠前的位置,優化用戶搜索體驗。

圖片

QP 目前應用在新零售,微商城、精選、愛逛買手店、分銷市場、幫助中心知識庫、官網搜索等場景,通過類目加權,產品詞識別,搜索詞糾錯,同近義詞召回提升用戶搜索效果。

二、QP 應用整體設計

圖片

上圖完整描述了 QP 請求流程和配置流程的執行情況。當搜索請求到達 QP 時,根據請求體中的場景標記獲取 QP 配置。QP 配置中包含搜索詞位置標記,插件列表,dsl 改寫腳本等內容。

QP 根據配置,按序執行相應插件。插件在執行後,可通過干預配置以及超參數對結果進行人工干預。

QP 在獲取到算法插件執行結果後,根據改寫配置,對搜索 dsl 進行改寫。如將糾錯詞放置在搜索詞同一層級,將 dsl 改寫成 fuction score 結構進行類目加權。

三、QP 應用分層設計

圖片

上圖按照請求流程從上到下展示了 QP 的分層設計,接下來將簡單描述各層作用:

四、QP 算法插件設計

** 預處理 preprocess 插件**

按照配置規則對搜索詞進行預處理,預處理方式如下:

  1. 刪除特殊符號 " “ \ 等;

  2. 大寫轉小寫,全角轉半角;

  3. 連續英文聯合切分,連續數字聯合切分,其餘單獨切分;

  4. 默認截取 list 前 50 個字 / 詞;

  5. 將 list 拼接成一個字符串。

樣例

輸入:"史蒂夫新款\時尚套裝夏修身圓領百搭鉤花DWF鏤空雪紡兩件套套裙;"
輸出:"史蒂夫新款時尚套裝夏修身圓領百搭鉤花dwf鏤空雪紡兩件套套裙"

02 糾錯 Correction 插件

糾錯插件的作用是對搜索詞中錯誤內容進行識別,返回正確內容。

樣例

輸入:[上海牛黃皁]
輸出:[上海硫磺皁]

當用戶輸入 “上海牛黃皁” 時,通過糾錯插件能正確輸出“上海硫磺皁”,其技術架構如下圖所示:

圖片

  1. 糾錯模型在 bert 基礎上採用知識蒸餾,提升模型精度降低模型時延。

  2. 根據同音字召回候選集,使用 tri-gram 語言模型對候選集排序。

03 細粒度分詞 Tokenzier 插件(基礎分詞)

樣例

輸入:[雪地靴女2020年新款皮毛一體冬季加絨加厚防滑東北厚底保暖棉鞋子]
輸出:[雪地 靴 女 2020 年 新款 皮毛 一體 冬季 加絨 加厚 防滑 東北 厚底 保暖 棉 鞋子]

該分詞插件由 Java 版結巴 jieba-analysis 修改而來,修改內容如下:

04 語義分詞 sementicSegment 插件

樣例

輸入:[雪地 靴 女 2020 年 新款 皮毛 一體 冬季 加絨 加厚 防滑 東北 厚底 保暖 棉 鞋子]
輸出:[雪地靴 女 2020年 新款 皮毛一體 冬季 加絨加厚 防滑 東北 厚底 保暖 棉鞋子]

該插件在細粒度分詞的基礎上,通過模型生成語義樹將關聯度大的詞列表進行合併,輸出語義分詞結果。在樣例中,雪地與靴關聯度更大,所以在語義分詞中將雪地與靴合併輸出。

圖片

05 實體識別 Tagging 插件

樣例

輸入:["汽車","腳墊","刷子"]
輸出:[{"word":"汽車","tag":"產品修飾詞"},{"word":"腳墊","tag":"產品修飾詞"},{"word":"刷子","tag":"產品詞"}]

實體識別插件主要用於識別出搜索內容中的產品詞。比如用戶在輸入 “汽車腳墊刷子” 時,如果沒有做產品詞識別,“腳墊”相關的商品會因爲商品分高而排在 “刷子” 商品前面,影響用戶搜索體驗。

反之,經過命名實體識別,對 “刷子” 做產品詞提權,刷子類商品就可以排在腳墊類商品前面,優化搜索體驗。

目前有贊規劃的實體類別列表如下所示:

產品詞 eg:“修身連衣裙”中的“連衣裙”
產品修飾詞 eg:“汽車腳墊”中的“汽車”
普通詞
新詞
修飾
品牌
機構實體
地點地域
材質
人名
功能功效
專有名詞
影視名稱
型號
文娛書文曲
系列
遊戲名稱
款式元素
顏色
場景
風格
營銷服務
人羣
時間季節
性別
類目
母嬰
規格
新品
前綴
後綴
數字
符號

實體識別方法

基於正則可以識別數字、符號、規格、時間季節。

private numWordRegex = "[0-9]+";
// 符號
private String symbolWordRegex = "[\\[\\]\\{\\}【】「」\\\\\\|、|‘'\"“”’;:;:>.。》/?\\?<《,,~`·!\\!@#\\$¥%\\^…&\\*(\\(\\))\\-_—=\\+\\s]+";
// 規格
private String unitRegex = "(?:\\d+|\\d+\\.\\d+|[一二三四五六七八九十百千萬]+)\\s*(?:m|米|cm|釐米|ml|毫升|l|升|度|平米|件|塊|元|片|張|本|條|瓶|部|輛|個|桶|包|盒|g|克|kg|千克|噸|寸|斤)";
// 時間季節
private String seasonRegex = "[春夏秋冬]+[季天]?";
private String yearRegex = "(?:18|19|20)\\d{2}";

基於詞庫可以識別產品詞、品牌、產品修飾詞。

品牌:query->二級類目->品牌,條件:在當前類目品牌詞庫裏且模型預測不是“產品詞”,此時打“品牌”實體標。
產品詞:在產品詞庫且模型預測是普通詞。
產品修飾詞:多個詞出現時,除最後一個,其餘打“產品修飾詞”實體標。

基於模型可以識別剩餘 23 類實體,類別如下所示:

產品詞
普通詞
新詞
修飾
品牌
機構實體
地點地域
材質
人名
功能功效
專有名詞
影視名稱
型號
文娛書文曲
系列
遊戲名稱
款式元素
顏色
場景
風格
營銷服務
人羣
時間季節

模型結構如下所示:

圖片

06 類目預測 categoryPredict 插件

樣例

輸入:牛奶絨
輸出: {
        "categoryId": "101000010001",
        "categoryName": "被套",
        "categoryChainList": [
            "家居建材",
            "牀上用品",
            "被套"
        ],
        "parentCategoryId": "10100001",
        "level": 3,
        "hasChildren": true,
        "percent": 0.9010684490203857
    }

該插件會根據用戶的搜索內容輸出類目結果,主要應用在類目加權上。例如當用戶在有贊精選上輸入牛奶絨,期望返回牛奶絨牀單。未使用類目加權,返回的商品大多爲牛奶相關產品,不符合用戶的搜索期望。使用類目加權後,將牀上用品類產品提權,返回的商品牛奶絨牀單,符合用戶期望。

類目預測模型是在對比學習基礎上實現,具體內容可看**對比學習在有讚的應用。**

07 同義詞插件

樣例

輸入:[襯衣]
輸出:[襯衫]

同近義詞插件目前非常實現輕量,通過離線同義詞表,搜索內容中的產品詞作爲輸入,輸出同義詞。

五、總結與展望來展望

本文從 QP 整體設計,分層設計,插件設計較爲完整的介紹了 QP 的架構設計。目前經過一年多的迭代,QP 已經實現業務場景小時級接入,優化了零售,微商城,精選,愛逛,分銷等場景搜索效果。後續將會繼續豐富算法插件能力同時完成 QP 可視化配置能力方便業務自主接入。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/1Qg8dFRqQhnsGBPf8bO6Rg