作者:鑫強(qiáng) 艷萍
部門(mén):數(shù)據(jù)中臺(tái)
前言
在介紹QP前先簡(jiǎn)單介紹一下有贊搜索平臺(tái)的整體設(shè)計(jì),方便大家快速了解QP在搜索平臺(tái)中的作用。下圖簡(jiǎn)單展示了一個(gè)搜索請(qǐng)求開(kāi)始到結(jié)束的全部流程。業(yè)務(wù)通過(guò)簡(jiǎn)潔的api接入los,管理員在搜索平臺(tái)新建配置并下發(fā),完成整個(gè)搜索接入,并通過(guò)A/B Test驗(yàn)證QP帶來(lái)的優(yōu)化效果。
文章主要分為5個(gè)章節(jié):
- QP的作用
- QP應(yīng)用整體設(shè)計(jì)
- QP應(yīng)用分層設(shè)計(jì)
- QP算法插件設(shè)計(jì)
- 總結(jié)與展望
一、QP的作用
在NLP中,QP被稱(chēng)作Query理解(QueryParser),簡(jiǎn)單來(lái)說(shuō)就是從詞法、句法、語(yǔ)義三個(gè)層面對(duì)query進(jìn)行結(jié)構(gòu)化解析。這里query從廣義上來(lái)說(shuō)涉及的任務(wù)比較多,最常見(jiàn)的就是搜索系統(tǒng)中輸入的查詢(xún)?cè)~,也可以是FAQ問(wèn)答或閱讀理解中的問(wèn)句,又或者可以是人機(jī)對(duì)話(huà)中用戶(hù)的聊天輸入。
在有贊,QP系統(tǒng)專(zhuān)注對(duì)查詢(xún)內(nèi)容進(jìn)行結(jié)構(gòu)化解析,整合了有贊NLP能力,提供統(tǒng)一對(duì)外接口,與業(yè)務(wù)邏輯解耦。通過(guò)配置化快速滿(mǎn)足業(yè)務(wù)接入需求,同時(shí)將算法能力插件化,并支持人工干預(yù)插件執(zhí)行結(jié)果。
以精選搜索為例,當(dāng)用戶(hù)輸入衣服時(shí)用戶(hù)往往想要搜的是衣服類(lèi)商品,而不是衣服架,衣服配飾等衣服周邊用品。通過(guò)將衣服類(lèi)目進(jìn)行加權(quán),將衣服類(lèi)的商品排在靠前的位置,優(yōu)化用戶(hù)搜索體驗(yàn)。
QP目前應(yīng)用在新零售,微商城、精選、愛(ài)逛買(mǎi)手店、分銷(xiāo)市場(chǎng)、幫助中心知識(shí)庫(kù)、官網(wǎng)搜索等場(chǎng)景,通過(guò)類(lèi)目加權(quán),產(chǎn)品詞識(shí)別,搜索詞糾錯(cuò),同近義詞召回提升用戶(hù)搜索效果。
二、QP應(yīng)用整體設(shè)計(jì)
上圖完整描述了QP請(qǐng)求流程和配置流程的執(zhí)行情況。當(dāng)搜索請(qǐng)求到達(dá)QP時(shí),根據(jù)請(qǐng)求體中的場(chǎng)景標(biāo)記獲取QP配置。QP配置中包含搜索詞位置標(biāo)記,插件列表,dsl改寫(xiě)腳本等內(nèi)容。
QP根據(jù)配置,按序執(zhí)行相應(yīng)插件。插件在執(zhí)行后,可通過(guò)干預(yù)配置以及超參數(shù)對(duì)結(jié)果進(jìn)行人工干預(yù)。
QP在獲取到算法插件執(zhí)行結(jié)果后,根據(jù)改寫(xiě)配置,對(duì)搜索dsl進(jìn)行改寫(xiě)。如將糾錯(cuò)詞放置在搜索詞同一層級(jí),將dsl改寫(xiě)成fuction score結(jié)構(gòu)進(jìn)行類(lèi)目加權(quán)。
三、QP應(yīng)用分層設(shè)計(jì)
上圖按照請(qǐng)求流程從上到下展示了QP的分層設(shè)計(jì),接下來(lái)將簡(jiǎn)單描述各層作用:
- controller層:查詢(xún)改寫(xiě)服務(wù)入口,對(duì)請(qǐng)求做預(yù)處理。
- service層:根據(jù)場(chǎng)景獲取QP改寫(xiě)配置,獲取dsl里的搜索詞,調(diào)用相應(yīng)的插件返回qp結(jié)果。
- plugin層:負(fù)責(zé)算法插件執(zhí)行,調(diào)用插件對(duì)應(yīng)的算法實(shí)現(xiàn)handler,對(duì)算法結(jié)果做干預(yù)并針對(duì)調(diào)用成功或者失敗做處理。
- handler層:算法具體實(shí)現(xiàn)放置在該層,該層會(huì)依賴(lài)各種算法服務(wù)(如小盒子,Milvus等)。
- Intervener層:負(fù)責(zé)對(duì)handler結(jié)果做人工干預(yù)。
- processor層:根據(jù)QP改寫(xiě)配置,調(diào)用改寫(xiě)插件,完成dsl的改寫(xiě)。
四、QP算法插件設(shè)計(jì)
01
預(yù)處理preprocess插件
按照配置規(guī)則對(duì)搜索詞進(jìn)行預(yù)處理,預(yù)處理方式如下:
- 刪除特殊符號(hào) " “ 等;
- 大寫(xiě)轉(zhuǎn)小寫(xiě),全角轉(zhuǎn)半角;
- 連續(xù)英文聯(lián)合切分,連續(xù)數(shù)字聯(lián)合切分,其余單獨(dú)切分;
- 默認(rèn)截取list前50個(gè)字/詞;
- 將list拼接成一個(gè)字符串。
樣例
輸入:"史蒂夫新款時(shí)尚套裝夏修身圓領(lǐng)百搭鉤花DWF鏤空雪紡兩件套套裙;"
輸出:"史蒂夫新款時(shí)尚套裝夏修身圓領(lǐng)百搭鉤花dwf鏤空雪紡兩件套套裙"
02
糾錯(cuò)Correction插件
糾錯(cuò)插件的作用是對(duì)搜索詞中錯(cuò)誤內(nèi)容進(jìn)行識(shí)別,返回正確內(nèi)容。
樣例
輸入:[上海牛黃皂]
輸出:[上海硫磺皂]
當(dāng)用戶(hù)輸入“上海牛黃皂”時(shí),通過(guò)糾錯(cuò)插件能正確輸出“上海硫磺皂”,其技術(shù)架構(gòu)如下圖所示:
- 糾錯(cuò)模型在bert基礎(chǔ)上采用知識(shí)蒸餾,提升模型精度降低模型時(shí)延。
- 根據(jù)同音字召回候選集,使用tri-gram語(yǔ)言模型對(duì)候選集排序。
03
細(xì)粒度分詞Tokenzier插件(基礎(chǔ)分詞)
樣例
輸入:[雪地靴女2020年新款皮毛一體冬季加絨加厚防滑東北厚底保暖棉鞋子]
輸出:[雪地 靴 女 2020 年 新款 皮毛 一體 冬季 加絨 加厚 防滑 東北 厚底 保暖 棉 鞋子]
該分詞插件由JAVA版結(jié)巴 jieba-analysis 修改而來(lái),修改內(nèi)容如下:
-
- 從全網(wǎng)商品標(biāo)題數(shù)據(jù),有贊行業(yè)數(shù)據(jù),開(kāi)源數(shù)據(jù)中統(tǒng)計(jì)出詞頻,作為基礎(chǔ)分詞詞典;
- 解決詞典中由英文單詞導(dǎo)致英文字符串被分開(kāi)的問(wèn)題;
- 限制DAG的長(zhǎng)度,即匹配詞的長(zhǎng)度,以此控制分詞粒度,目前默認(rèn)是2,分出來(lái)的詞除英文和數(shù)字外,長(zhǎng)度不會(huì)超過(guò)2。
04
語(yǔ)義分詞sementicSegment插件
樣例
輸入:[雪地 靴 女 2020 年 新款 皮毛 一體 冬季 加絨 加厚 防滑 東北 厚底 保暖 棉 鞋子]
輸出:[雪地靴 女 2020年 新款 皮毛一體 冬季 加絨加厚 防滑 東北 厚底 保暖 棉鞋子]
該插件在細(xì)粒度分詞的基礎(chǔ)上,通過(guò)模型生成語(yǔ)義樹(shù)將關(guān)聯(lián)度大的詞列表進(jìn)行合并,輸出語(yǔ)義分詞結(jié)果。在樣例中,雪地與靴關(guān)聯(lián)度更大,所以在語(yǔ)義分詞中將雪地與靴合并輸出。
04
實(shí)體識(shí)別Tagging插件
樣例
輸入:["汽車(chē)","腳墊","刷子"]
輸出:[{"word":"汽車(chē)","tag":"產(chǎn)品修飾詞"},{"word":"腳墊","tag":"產(chǎn)品修飾詞"},{"word":"刷子","tag":"產(chǎn)品詞"}]
實(shí)體識(shí)別插件主要用于識(shí)別出搜索內(nèi)容中的產(chǎn)品詞。比如用戶(hù)在輸入“汽車(chē)腳墊刷子”時(shí),如果沒(méi)有做產(chǎn)品詞識(shí)別,“腳墊”相關(guān)的商品會(huì)因?yàn)樯唐贩指叨旁?ldquo;刷子”商品前面,影響用戶(hù)搜索體驗(yàn)。
反之,經(jīng)過(guò)命名實(shí)體識(shí)別,對(duì)“刷子”做產(chǎn)品詞提權(quán),刷子類(lèi)商品就可以排在腳墊類(lèi)商品前面,優(yōu)化搜索體驗(yàn)。
目前有贊規(guī)劃的實(shí)體類(lèi)別列表如下所示:
產(chǎn)品詞 eg:“修身連衣裙”中的“連衣裙”
產(chǎn)品修飾詞 eg:“汽車(chē)腳墊”中的“汽車(chē)”
普通詞
新詞
修飾
品牌
機(jī)構(gòu)實(shí)體
地點(diǎn)地域
材質(zhì)
人名
功能功效
專(zhuān)有名詞
影視名稱(chēng)
型號(hào)
文娛書(shū)文曲
系列
游戲名稱(chēng)
款式元素
顏色
場(chǎng)景
風(fēng)格
營(yíng)銷(xiāo)服務(wù)
人群
時(shí)間季節(jié)
性別
類(lèi)目
母嬰
規(guī)格
新品
前綴
后綴
數(shù)字
符號(hào)
實(shí)體識(shí)別方法
基于正則可以識(shí)別數(shù)字、符號(hào)、規(guī)格、時(shí)間季節(jié)。
private numWordRegex = "[0-9]+";
// 符號(hào)
private String symbolWordRegex = "[\[\]\{\}【】「」\\\|、|‘'"“”’;:;:>.。》/?\?<《,,~`·!\!@#\$¥%\^…&\*(\(\))\-_—=\+\s]+";
// 規(guī)格
private String unitRegex = "(?:\d+|\d+\.\d+|[一二三四五六七八九十百千萬(wàn)]+)\s*(?:m|米|cm|厘米|ml|毫升|l|升|度|平米|件|塊|元|片|張|本|條|瓶|部|輛|個(gè)|桶|包|盒|g|克|kg|千克|噸|寸|斤)";
// 時(shí)間季節(jié)
private String seasonRegex = "[春夏秋冬]+[季天]?";
private String yearRegex = "(?:18|19|20)\d{2}";
基于詞庫(kù)可以識(shí)別產(chǎn)品詞、品牌、產(chǎn)品修飾詞。
品牌:query->二級(jí)類(lèi)目->品牌,條件:在當(dāng)前類(lèi)目品牌詞庫(kù)里且模型預(yù)測(cè)不是“產(chǎn)品詞”,此時(shí)打“品牌”實(shí)體標(biāo)。
產(chǎn)品詞:在產(chǎn)品詞庫(kù)且模型預(yù)測(cè)是普通詞。
產(chǎn)品修飾詞:多個(gè)詞出現(xiàn)時(shí),除最后一個(gè),其余打“產(chǎn)品修飾詞”實(shí)體標(biāo)。
基于模型可以識(shí)別剩余23類(lèi)實(shí)體,類(lèi)別如下所示:
產(chǎn)品詞
普通詞
新詞
修飾
品牌
機(jī)構(gòu)實(shí)體
地點(diǎn)地域
材質(zhì)
人名
功能功效
專(zhuān)有名詞
影視名稱(chēng)
型號(hào)
文娛書(shū)文曲
系列
游戲名稱(chēng)
款式元素
顏色
場(chǎng)景
風(fēng)格
營(yíng)銷(xiāo)服務(wù)
人群
時(shí)間季節(jié)
模型結(jié)構(gòu)如下所示:
04
類(lèi)目預(yù)測(cè)categoryPredict插件
樣例
輸入:牛奶絨
輸出: {
"categoryId": "101000010001",
"categoryName": "被套",
"categoryChainList": [
"家居建材",
"床上用品",
"被套"
],
"parentCategoryId": "10100001",
"level": 3,
"hasChildren": true,
"percent": 0.9010684490203857
}
該插件會(huì)根據(jù)用戶(hù)的搜索內(nèi)容輸出類(lèi)目結(jié)果,主要應(yīng)用在類(lèi)目加權(quán)上。 例如當(dāng)用戶(hù)在有贊精選上輸入牛奶絨,期望返回牛奶絨床單。 未使用類(lèi)目加權(quán),返回的商品大多為牛奶相關(guān)產(chǎn)品,不符合用戶(hù)的搜索期望。 使用類(lèi)目加權(quán)后,將床上用品類(lèi)產(chǎn)品提權(quán),返回的商品牛奶絨床單,符合用戶(hù)期望。
類(lèi)目預(yù)測(cè)模型是在對(duì)比學(xué)習(xí)基礎(chǔ)上實(shí)現(xiàn),具體內(nèi)容可看 對(duì)比學(xué)習(xí)在有贊的應(yīng)用 。
04
同義詞插件
樣例
輸入:[襯衣]
輸出:[襯衫]
同近義詞插件目前非常實(shí)現(xiàn)輕量,通過(guò)離線(xiàn)同義詞表,搜索內(nèi)容中的產(chǎn)品詞作為輸入,輸出同義詞。
五、總結(jié)與展望來(lái)展望
本文從QP整體設(shè)計(jì),分層設(shè)計(jì),插件設(shè)計(jì)較為完整的介紹了QP的架構(gòu)設(shè)計(jì)。目前經(jīng)過(guò)一年多的迭代,QP已經(jīng)實(shí)現(xiàn)業(yè)務(wù)場(chǎng)景小時(shí)級(jí)接入,優(yōu)化了零售,微商城,精選,愛(ài)逛,分銷(xiāo)等場(chǎng)景搜索效果。后續(xù)將會(huì)繼續(xù)豐富算法插件能力同時(shí)完成QP可視化配置能力方便業(yè)務(wù)自主接入。
作者:鑫強(qiáng) 艷萍
來(lái)源:微信公眾號(hào):有贊coder
出處
:https://mp.weixin.qq.com/s?__biz=MzAxOTY5MDMxNA==&mid=2455764505&idx=1&sn=6aca26e994937bd3a6b0fb3fbd61e20f