搜索中的 Query 理解及應(yīng)用(引用https://mp.weixin.qq.com/s/rZMtsbMuyGwcy2KU7mzZhQ)

導(dǎo)讀:Query 理解 ( QU,Query Understanding )欢嘿,簡單來說就是從詞法、句法也糊、語義三個層面對 query 進(jìn)行結(jié)構(gòu)化解析。這里 query 從廣義上來說涉及的任務(wù)比較多羡宙,最常見的就是我們在搜索系統(tǒng)中輸入的查詢詞狸剃,也可以是 FAQ 問答或閱讀理解中的問句,又或者可以是人機(jī)對話中用戶的聊天輸入狗热。本文主要介紹在搜索中的 query 理解钞馁,會相對系統(tǒng)性地介紹 query 理解中各個重要模塊以及它們之間如何 work 起來共同為搜索召回及排序模塊服務(wù)虑省,同時簡單總結(jié)個人目前了解到業(yè)界在各個模塊中的一些實現(xiàn)方法。

01

相關(guān)概念

1. NLP

自然語言處理 ( NLP僧凰,Natural Language Processing ) 是集語言學(xué)探颈、統(tǒng)計學(xué)、計算機(jī)科學(xué)训措,人工智能等學(xué)科于一體的交叉領(lǐng)域伪节,目標(biāo)是讓計算機(jī)能在處理理解人類自然語言的基礎(chǔ)上進(jìn)一步執(zhí)行結(jié)構(gòu)化輸出或語言生成等其他任務(wù),其涉及的基礎(chǔ)技術(shù)主要有:詞法分析绩鸣、句法分析怀大、語義分析、語用分析呀闻、生成模型等化借。諸如語音識別、機(jī)器翻譯捡多、QA 問答蓖康、對話機(jī)器人、閱讀理解垒手、文本分類聚類等任務(wù)都屬于 NLP 的范疇蒜焊。

這些任務(wù)從變換方向上來看,主要可以分為自然語言理解 ( NLU淫奔,Natural Language Understanding ) 和自然語言生成 ( NLG山涡,Natural Language Generation ) 兩個方面,其中 NLU 是指對自然語言進(jìn)行理解并輸出結(jié)構(gòu)化語義信息唆迁,而 NLG 則是多模態(tài)內(nèi)容 ( 圖像鸭丛、語音、視頻唐责、結(jié)構(gòu)/半結(jié)構(gòu)/非結(jié)構(gòu)化文本 ) 之間的相互生成轉(zhuǎn)換鳞溉。

一些任務(wù)同時涵蓋 NLU 和 NLG,比如對話機(jī)器人任務(wù)需要在理解用戶的對話內(nèi)容 ( NLU 范疇 ) 基礎(chǔ)上進(jìn)行對話內(nèi)容生成 ( NLG 范疇 )鼠哥,同時為進(jìn)行多輪對話理解及與用戶交互提示這些還需要有對話管理模塊 ( DM熟菲,Dialogue Management ) 等進(jìn)行協(xié)調(diào)作出對話控制。本文要介紹的搜索 query 理解大部分模塊屬于 NLU 范疇朴恳,而像 query 改寫模塊等也會涉及到一些 NLG 方法抄罕。

圖片

2. 搜索引擎

在介紹搜索 query 理解之前,先簡單介紹下搜索引擎相關(guān)知識于颖。除了傳統(tǒng)的通用搜索 Google呆贿、Baidu、Bing 這些,大部分互聯(lián)網(wǎng)垂直產(chǎn)品如電商做入、音樂冒晰、應(yīng)用市場、短視頻等也都需要搜索功能來滿足用戶的需求查詢竟块,相較于推薦系統(tǒng)的被動式需求滿足壶运,用戶在使用搜索時會通過組織 query 來主動表達(dá)訴求,為此用戶的搜索意圖相對比較明確浪秘。但即便意圖相對明確蒋情,要做好搜索引擎也是很有挑戰(zhàn)的,需要考慮的點(diǎn)及涉及的技術(shù)無論在深度還是廣度上都有一定難度秫逝。

一個基本的搜索系統(tǒng)大體可以分為離線挖掘和在線檢索兩部分恕出,其中包含的重要模塊主要有:Item 內(nèi)容理解、Query 理解违帆、檢索召回浙巫、排序模塊等。整個檢索系統(tǒng)的目標(biāo)可以抽象為給定 query刷后,檢索出最能滿足用戶需求的 item的畴,也即檢索出概率:P(Ii|Q) 最大的 item Ii

根據(jù)貝葉斯公式展開:

圖片

其中 P(Ii) 表示 item 的重要程度尝胆,對應(yīng) item 理解側(cè)的權(quán)威度丧裁、質(zhì)量度等挖掘,P(Q|Ii) 表示 item Ii 能滿足用戶搜索需求 Q 的程度含衔,對 query 分詞后可以表示為:

P(Q|Ii)=P(t1,...,tn|Ii)

這部分概率對應(yīng)到基于 query 理解和 item 理解的結(jié)果上進(jìn)行 query 和 item 間相關(guān)性計算煎娇,同時涉及到點(diǎn)擊調(diào)權(quán)等排序模塊。

圖片

① 離線挖掘

在離線側(cè)贪染,我們需要做一些基礎(chǔ)的離線挖掘工作缓呛,包括 item 內(nèi)容的獲取、清洗解析杭隙、item 內(nèi)容理解 ( 語義 tag哟绊、權(quán)威度計算、時間因子痰憎、質(zhì)量度等 )票髓、用戶畫像構(gòu)建、query 離線策略挖掘铣耘、以及從搜索推薦日志中挖掘 item 之間的語義關(guān)聯(lián)關(guān)系洽沟、構(gòu)建排序模型樣本及特征工程等。進(jìn)行 item 內(nèi)容理解之后蜗细,對相應(yīng)的結(jié)構(gòu)化內(nèi)容執(zhí)行建庫操作玲躯,分別構(gòu)建正排和倒排索引庫。其中,正排索引簡單理解起來就是根據(jù) itemid 能找到 item 的各個基本屬性及 term 相關(guān) ( term 及其在 item 中出現(xiàn)的頻次跷车、位置等信息 ) 的詳細(xì)結(jié)構(gòu)化數(shù)據(jù)。

相反地橱野,倒排索引就是能根據(jù)分詞 term 來找到包含該 term 的 item 列表及 term 在對應(yīng) item 中詞頻朽缴、位置等信息。通常會對某個 item 的 title水援、keyword密强、anchor、content 等不同屬性域分別構(gòu)建倒排索引蜗元,同時一般會根據(jù) item 資源的權(quán)威度或渤、質(zhì)量度等縱向構(gòu)建分級索引庫,首先從高質(zhì)量庫中進(jìn)行檢索優(yōu)先保證優(yōu)質(zhì)資源能被檢索出來奕扣,如果高質(zhì)量檢索結(jié)果不夠再從低質(zhì)量庫中進(jìn)行檢索薪鹦。為了兼顧索引更新時效性和檢索效率,一般會對索引庫進(jìn)行橫向分布式部署惯豆,且索引庫的構(gòu)建一般分為全量構(gòu)建和增量更新池磁。常見的能用于快速構(gòu)建索引的工具框架有 Lucene 全文檢索引擎以及基于 Lucene 的 Solr、ES ( Elastic Search ) 等楷兽。

除了基本的文本匹配召回地熄,還需要通過構(gòu)建 query 意圖 tag 召回或進(jìn)行語義匹配召回等多路召回來提升搜索語義相關(guān)性以及保證召回的多樣性。

② 在線檢索

線上執(zhí)行檢索時大體可以分為基礎(chǔ)檢索 ( BS ) 和高級檢索 ( AS ) 兩個過程芯杀,其中 BS 更注重 term 級別的文本相關(guān)性匹配及粗排端考,AS 則更注重從整體上把控語義相關(guān)性及進(jìn)行精排等處理。以下面這個框圖為例揭厚,介紹下一個相對簡單的在線檢索過程却特。對于從 client 發(fā)起的線上搜索請求,會由接入層傳入 SearchObj ( 主要負(fù)責(zé)一些業(yè)務(wù)邏輯的處理 )棋弥,再由 SearchObj 傳給 SearchAS ( 負(fù)責(zé)協(xié)調(diào)調(diào)用 qu核偿、召回和排序等模塊 ),SearchAS 首先會去請求 SearchQU 服務(wù) ( 負(fù)責(zé)搜索 query 理解 ) 獲取對 query 理解后的結(jié)構(gòu)化數(shù)據(jù)顽染,然后將這些結(jié)構(gòu)化數(shù)據(jù)傳給基礎(chǔ)召回模塊 BS漾岳,BS 根據(jù)切詞粒度由粗到細(xì)對底層索引庫進(jìn)行一次或多次檢索,執(zhí)行多個索引隊列的求交求并拉鏈等操作返回結(jié)果粉寞。

同時 BS 還需要對文本尼荆、意圖 tag、語義召回等不同路召回隊列根據(jù)各路召回特點(diǎn)采用多個相關(guān)性度量 ( 如:BM25 文本相似度唧垦、tag 相似度捅儒、語義相關(guān)度戈擒、pagerank 權(quán)威度、點(diǎn)擊調(diào)權(quán)等 ) 進(jìn)行 L0 粗排截斷以保證相關(guān)性映挂,然后再將截斷后的多路召回進(jìn)行更精細(xì)的 L1 相關(guān)性融合排序瓮孙,更復(fù)雜一些的搜索可能會有 L0 到 LN 多層排序,每層排序的側(cè)重點(diǎn)有所不同麸祷,越高層次 item 數(shù)變得越少澎怒,相應(yīng)的排序方法也會更復(fù)雜。

BS 將經(jīng)過相關(guān)性排序的結(jié)果返回給 SearchAS阶牍,SearchAS 接著調(diào)用 SearchRank 服務(wù)進(jìn)行 ctr/cvr 預(yù)估以對 BS 返回的結(jié)果列表進(jìn)行 L2 重排序喷面,并從正排索引及摘要庫等獲取相應(yīng) item 詳情信息進(jìn)一步返回給 SearchObj 服務(wù),與此同時 SearchObj 服務(wù)可以異步去請求廣告服務(wù)拉取這個 query 對應(yīng)的廣告召回隊列及競價相關(guān)信息走孽,然后就可以對廣告或非廣告 item 內(nèi)容進(jìn)行以效果 ( pctr惧辈、pcvr、pcpm ) 為導(dǎo)向的排序從而確定各個 item 內(nèi)容的最終展示位置磕瓷。

最后在業(yè)務(wù)層一般還會支持干預(yù)邏輯以及一些規(guī)則策略來實現(xiàn)各種業(yè)務(wù)需求盒齿。在實際設(shè)計搜索實驗系統(tǒng)時一般會對這些負(fù)責(zé)不同功能的模塊進(jìn)行分層管理,以上面介紹的簡單檢索流程為例主要包括索引召回層生宛、L0 排序截斷層县昂、L1 相關(guān)性融合排序?qū)印2 效果排序?qū)酉菥恕earchAS 層倒彰、業(yè)務(wù)層等,各層流量相互正交互不影響莱睁,可以方便在不同層進(jìn)行獨(dú)立的 ABtest 實驗待讳。

圖片

當(dāng)然,具體實現(xiàn)搜索系統(tǒng)遠(yuǎn)比上面介紹的流程更為復(fù)雜仰剿,涉及的模塊及模塊間的交互會更多创淡,比如當(dāng)用戶搜索 query 沒有符合需求的結(jié)果時需要做相關(guān)搜索 query 推薦以進(jìn)行用戶引導(dǎo)、檢索無結(jié)果時可以根據(jù)用戶的畫像或搜索歷史做無結(jié)果個性化推薦等南吮,同時和推薦系統(tǒng)一樣琳彩,搜索周邊涉及的系統(tǒng)服務(wù)也比較龐雜,如涉及日志上報回流部凑、實時計算能力露乏、離/在線存儲系統(tǒng)、ABtest 實驗平臺涂邀、報表分析平臺瘟仿、任務(wù)調(diào)度平臺、機(jī)器學(xué)習(xí)平臺比勉、模型管理平臺劳较、業(yè)務(wù)管理后臺等驹止,只有這些平臺能 work 起來,整個搜索系統(tǒng)才能正常運(yùn)轉(zhuǎn)起來观蜗。

③ 多模語義搜索

隨著資源越來越豐富臊恋,如何讓用戶從海量的信息及服務(wù)資源中能既準(zhǔn)確又快速地找到訴求變得越來越重要,如2009年百度提出的框計算概念目標(biāo)就是為了能更快更準(zhǔn)地滿足用戶需求墓捻。同時捞镰,隨著移動互聯(lián)網(wǎng)的到來,用戶的輸入方式越來越多樣毙替,除了基本的文本輸入檢索,實現(xiàn)通過語音践樱、圖片厂画、視頻等內(nèi)容載體進(jìn)行檢索的多模態(tài)搜索也變得越來越有必要。由于用戶需求的多樣或知識背景不同導(dǎo)致需求表達(dá)的千差萬別拷邢,要做到極致的搜索體驗需要漫長的優(yōu)化過程袱院,畢竟目前真正的語義搜索還遠(yuǎn)未到來。

02

Query 理解

從前面的介紹可以知道瞭稼,搜索三大模塊的大致調(diào)用順序是從 query 理解到檢索召回再到排序忽洛,作為搜索系統(tǒng)的第一道環(huán)節(jié),query 理解的結(jié)果除了可以用于召回也可以給排序模塊提供必要的基礎(chǔ)特征环肘,為此 QU 很大程度影響召回和排序的質(zhì)量欲虚,對 query 是進(jìn)行簡單字面上的理解還是可以理解其潛在的真實需求很大程度決定著一個搜索系統(tǒng)的智能程度。目前業(yè)界的搜索 QU 處理流程還是以 pipeline 的方式為主悔雹,也即拆分成多個模塊分別負(fù)責(zé)相應(yīng)的功能實現(xiàn)复哆,pipeline 的處理流程可控性比較強(qiáng),但存在缺點(diǎn)就是其中一個模塊不 work 或準(zhǔn)確率不夠會對全局理解有較大影響腌零。為此梯找,直接進(jìn)行 query-item 端到端地理解如深度語義匹配模型等也是一個值得嘗試的方向。

1. Pipeline 流程

搜索 Query 理解包含的模塊主要有:query 預(yù)處理益涧、query 糾錯锈锤、query 擴(kuò)展、query 歸一闲询、聯(lián)想詞久免、query 分詞、意圖識別嘹裂、term 重要性分析妄壶、敏感 query 識別、時效性識別等寄狼。以下圖為例丁寄,這里簡單介紹下 query 理解的 pipeline 處理流程:線上來一個請求 query氨淌,為緩解后端壓力首先會判斷該 query 是否命中 cache,若命中則直接返回對該 query 對應(yīng)的結(jié)構(gòu)化數(shù)據(jù)伊磺。若不命中 cache盛正,則首先會對 query 進(jìn)行一些簡單的預(yù)處理,接著由于 query 糾錯可能會用到分詞 term 信息進(jìn)行錯誤檢測等先進(jìn)行 query 分詞并移除一些噪音符號屑埋,然后進(jìn)行 query 糾錯處理豪筝,一些情況下局部糾錯可能會影響到上下文搭配的全局合理性,為此還可能會需要進(jìn)行二次糾錯處理摘能。

對 query 糾錯完后可以做 query 歸一续崖、擴(kuò)展及聯(lián)想詞用于進(jìn)行擴(kuò)召回及幫助用戶做搜索引導(dǎo)。接著再對 query 做分詞及對分詞后的 term 做重要性分析及緊密度分析团搞,對無關(guān)緊要的詞可以做丟詞等處理严望,有了分詞 term 及對應(yīng)的權(quán)重、緊密度信息后可以用于進(jìn)行精準(zhǔn)和模糊意圖的識別逻恐。除了這些基本模塊像吻,有些搜索場景還需要有對 query 進(jìn)行敏感識別及時效性分析等其他處理模塊。最后還需要能在 cms 端進(jìn)行配置的人工干預(yù)模塊复隆,對前面各個模塊處理的結(jié)果能進(jìn)行干預(yù)以快速響應(yīng) badcase 處理拨匆。

當(dāng)然,這個 pipeline 不是通用的挽拂,不同的搜索業(yè)務(wù)可能需要結(jié)合自身情況做 pipeline 的調(diào)整定制惭每,像百度這些搜索引擎會有更為復(fù)雜的 query 理解 pipeline,各個模塊間的依賴交互也更為復(fù)雜轻局,所以整個 QU 服務(wù)最好能靈活支持各個模塊的動態(tài)熱插拔洪鸭,像組裝樂高積木一樣進(jìn)行所需模塊的靈活配置,下面對各個模塊做進(jìn)一步詳細(xì)的介紹仑扑。

圖片

2. Query 預(yù)處理

Query 預(yù)處理這個模塊相對來說比較簡單览爵,主要對 query 進(jìn)行以下預(yù)處理從而方便其他模塊進(jìn)行分析:

  • 全半角轉(zhuǎn)換:將在輸入法全角模式下輸入的 query 轉(zhuǎn)換為半角模式的,主要對英文镇饮、數(shù)字蜓竹、標(biāo)點(diǎn)符號有影響,如將 "wechat123" 全角輸入轉(zhuǎn)成半角模式下的 "wechat 123"储藐。

  • 大小寫轉(zhuǎn)換:統(tǒng)一將大寫形式的字母轉(zhuǎn)成小寫形式的俱济。

  • 繁簡體轉(zhuǎn)換:將繁體輸入轉(zhuǎn)成簡體的形式,當(dāng)然考慮到用戶群體的差異以及可能存在繁體形式的資源钙勃,有些情況還需要保留轉(zhuǎn)換前的繁體輸入用于召回蛛碌。

  • 無意義符號移除:移除諸如火星文符號、emoji 表情符號等特殊符號內(nèi)容辖源。

  • Query 截斷:對于超過一定長度的 query 進(jìn)行截斷處理蔚携。

3. Query 分詞

① 分詞技術(shù)

Query 分詞就是將 query 切分成多個 term希太,如:"手機(jī)淘寶"切分成"手機(jī) 淘寶"兩個 term。分詞作為最基礎(chǔ)的詞法分析組件酝蜒,其準(zhǔn)確性很大程度影響 QU 后面的各個處理誊辉,如分詞及對應(yīng)詞性信息可以用于后續(xù)的 term 重要性分析和意圖識別等多個模塊。同時亡脑,QU 的分詞及其粒度需要與 item 側(cè)索引構(gòu)建的分詞及粒度保持一致堕澄,從而才能進(jìn)行有效地召回。目前分詞技術(shù)相對來說已經(jīng)比較成熟霉咨,主要做法有基于詞典進(jìn)行前后向最大匹配蛙紫、對所有成詞情況構(gòu)造 DAG、hmm/crf 序列標(biāo)注模型以及深度學(xué)習(xí)模型+序列標(biāo)注等途戒。

目前無論學(xué)術(shù)界還是工業(yè)界開放的分詞工具或服務(wù)還是比較多的惊来,如主要有騰訊內(nèi)部的 QQSeg、百度 LAC棺滞、Jieba 分詞、清華 THULAC矢渊、北大 pkuseg继准、中科院 ICTCLAS、哈工大 PyLTP矮男、復(fù)旦 FNLP移必、Ansj、SnowNLP毡鉴、FoolNLTK崔泵、HanLP、斯坦福 CoreNLP猪瞬、Jiagu憎瘸、IKAnalyzer 等。這些分詞工具在功能和性能上會存在一定的差異陈瘦,具體使用時要結(jié)合業(yè)務(wù)需求定制選擇幌甘,需要考慮的點(diǎn)主要包括:切詞準(zhǔn)確性、粒度控制痊项、切詞速度锅风、是否帶有 NER、NER 識別速度鞍泉、是否支持自定義詞典等皱埠,由于沒對所有這些分詞工具做各項性能指標(biāo)的具體評測,這里暫時不做過多的比較咖驮。

在搜索中的 query 切詞一般會做粒度控制边器,分為細(xì)粒度和 phrase 粗粒度兩個級別训枢,比如 query "下載深海大作戰(zhàn)"按 phrase 粗粒度切分可以為"下載 深海大作戰(zhàn)",按細(xì)粒度切分為"下載 深海 大 作戰(zhàn)"饰抒。在進(jìn)行召回時可以優(yōu)先用 phrase 粗粒度的切詞結(jié)果進(jìn)行召回能得到更精準(zhǔn)相關(guān)的結(jié)果同時減少多個 term 拉鏈合并的計算量肮砾。當(dāng) phrase 粗粒度分詞進(jìn)行召回結(jié)果不夠時,可以采用拆分后的細(xì)粒度分詞進(jìn)行二次重查擴(kuò)召回袋坑。

② 新詞發(fā)現(xiàn)

一般來說仗处,使用已有的開源切詞工具已經(jīng)有比較好的切分精度了,但是對于一些新出現(xiàn)的網(wǎng)絡(luò)詞匯可能不能及時識別覆蓋枣宫,尤其是對于一些垂直搜索有比較多業(yè)務(wù)專名詞的情況婆誓,這時候需要對這些未登錄詞做新詞發(fā)現(xiàn)。一些切詞工具自帶有新詞發(fā)現(xiàn)功能也颤,比如 Jieba 采用 HMM 進(jìn)行新詞發(fā)現(xiàn)洋幻。此外簡單地,可以采用基于統(tǒng)計的方法來進(jìn)行新詞發(fā)現(xiàn)翅娶,通過統(tǒng)計語料中的詞語 tfidf 詞頻文留、凝聚度和自由度等指標(biāo)來進(jìn)行無監(jiān)督新詞挖掘,當(dāng)詞語的凝聚度和自由度達(dá)到一定閾值且已有分詞不能切分到一起時可以人工評估后加進(jìn)詞庫竭沫。其中凝聚度即點(diǎn)互信息:

圖片

用于衡量兩個 term 共現(xiàn)的概率燥翅,兩個 term 經(jīng)常出現(xiàn)在一起,則可以將它們組合成一個詞語整體的可能性也更大蜕提。自由度取 term 左右鄰熵的較小值:

Freedeg=min(entropy(wleft),entropy(wright))

衡量當(dāng)前 term 左右兩邊字集合的隨機(jī)程度森书,如果左右字集合越隨機(jī)則這個 term 獨(dú)立成詞的可能性也更大。還有的做法是對 query 進(jìn)行切詞后構(gòu)建詞之間的關(guān)系矩陣谎势,然后進(jìn)行矩陣分解凛膏,得到各個詞在主特征空間的投影向量,通過投影向量計算詞之間的相似度并設(shè)定相應(yīng)閾值構(gòu)造0-1切分矩陣脏榆,基于該矩陣進(jìn)行是否成詞的判斷猖毫。再有就是可以將新詞發(fā)現(xiàn)轉(zhuǎn)化為序列標(biāo)注問題,訓(xùn)練 BiLSTM-CRF须喂、BERT-CRF 等模型預(yù)測成詞的起始鄙麦、中間及結(jié)束位置,或者轉(zhuǎn)化為 ngram 詞在給定句子語境中是否成詞或不成詞二分類問題镊折。

4. 緊密度分析

Term 緊密度胯府,主要用于衡量 query 中任意兩個 term 之間的緊密程度,如果兩個 term 間緊密度比較高恨胚,則這兩個 term 在召回 item 中出現(xiàn)的距離越近相對來說越相關(guān)骂因。以相鄰的兩個 term 為例,由于分詞工具本身存在準(zhǔn)確率問題赃泡,某兩個 term 可能不會被分詞工具切分到一起寒波,但它們之間的關(guān)系比較緊密乘盼,也即緊密度比較高,如果在召回時能將在 item 中同時出現(xiàn)有這兩個 term 且出現(xiàn)位置挨在一起或比較靠近的 item 進(jìn)行召回俄烁,相關(guān)性會更好绸栅。

以前面的搜索 query "下載深海大作戰(zhàn)"為例,經(jīng)分詞工具可能切分成"下載 深海 大 作戰(zhàn)"页屠,但其實"大"和"作戰(zhàn)"的緊密度很高粹胯,從文本相關(guān)性角度來看,召回"喵星大作戰(zhàn)" app 要一定程度比"大人物作戰(zhàn)"會更相關(guān)辰企。當(dāng)然风纠,在 query 中并不是兩個 term 的距離越近緊密度越高,可以通過統(tǒng)計搜索 log 里 term 之間的共現(xiàn)概率來衡量他們的緊密程度牢贸。

在進(jìn)行召回時竹观,傳統(tǒng)的相關(guān)性打分公式如 OkaTP、BM25TP潜索、newTP臭增、BM25TOP 等在 BM25 基礎(chǔ)上進(jìn)一步考慮了 proximity 計算,但主要采用兩個 term 在 item 中的距離度量竹习,如:

圖片

有了 query 中的 term 緊密度速址,在召回構(gòu)造查詢索引的邏輯表達(dá)式中可以要求緊密度高的兩個 term 需共同出現(xiàn)以及在 proximity 計算公式中融合考慮進(jìn)去,從而保證 query 中緊密度高的兩個 term 在 item 中出現(xiàn)距離更近更相關(guān)由驹。

5. Term 重要性分析

考慮到不同 term 在同一文本中會有不一樣的重要性,在做 query 理解及 item 內(nèi)容理解時均需要挖掘切詞后各個 term 的重要性昔园,在進(jìn)行召回計算相關(guān)性時需要同時考慮 query 及 item 側(cè)的 term 重要性蔓榄。如對于 query "手機(jī)淘寶",很明顯 term "淘寶"要比"手機(jī)"更重要默刚,為此賦予"淘寶"的權(quán)重應(yīng)該比"手機(jī)"高甥郑。Term 重要性可以通過分等級或0.0~1.0的量化分值來衡量,如下圖的 case 所示我們可以將 term 重要性分為4個級別荤西,重要性由高到低分別是:核心詞澜搅、限定詞、可省略詞邪锌、干擾詞勉躺。對于重要級別最低的 term 可以考慮直接丟詞,或者在索引庫進(jìn)行召回構(gòu)造查詢邏輯表達(dá)式時將對應(yīng)的 term 用 "or" 邏輯放寬出現(xiàn)限制觅丰,至于計算出的在 query 和 item 內(nèi)容中的 term 重要性分值則可以用于召回時計算基礎(chǔ)相關(guān)性饵溅,如簡單地將 BM25 公式:

圖片

中 term 在 item 及 query 中的詞頻 tf(t)、qf(t) 乘上各自的 term 權(quán)重妇萄。

圖片

其中 item 內(nèi)容側(cè)的 term 重要性可以采用 LDA 主題模型蜕企、TextRank 等方法來挖掘咬荷,至于 query 側(cè)的 term 重要性,比較容易想到的方法就是把它視為分類或回歸問題來考慮轻掩,通過訓(xùn)練 svm幸乒、gbdt 等傳統(tǒng)機(jī)器學(xué)習(xí)模型即可進(jìn)行預(yù)測。模型樣本的構(gòu)造除了進(jìn)行人工標(biāo)注還可以通過用戶的搜索點(diǎn)擊日志來自動構(gòu)造唇牧。大概做法是將某個 query 對應(yīng)搜索結(jié)果的用戶點(diǎn)擊頻次作為同時出現(xiàn)在 query 及搜索結(jié)果 title 中相應(yīng) term 的重要性體現(xiàn)罕扎,首先通過共同點(diǎn)擊信息或二部圖方法對 query 進(jìn)行聚類,再將一個 query 對應(yīng)有不同點(diǎn)擊 title 以及同一 term 在簇內(nèi)不同 query 中的點(diǎn)擊 title 頻次結(jié)果加權(quán)考慮起來奋构,同時排除掉一些搜索 qv 比較不置信的 query 及 title 對應(yīng)的結(jié)果壳影,最后將累計頻次進(jìn)行歸一化及分檔得到樣本對應(yīng) label。

至于特征方面弥臼,則可以從詞法宴咧、句法、語義径缅、統(tǒng)計信息等多個方向進(jìn)行構(gòu)造掺栅,比如:term 詞性、長度信息纳猪、term 數(shù)目氧卧、位置信息、句法依存 tag氏堤、是否數(shù)字沙绝、是否英文、是否停用詞鼠锈、是否專名實體闪檬、是否重要行業(yè)詞、embedding 模長购笆、刪詞差異度粗悯、前后詞互信息、左右鄰熵同欠、獨(dú)立檢索占比 ( term 單獨(dú)作為 query 的 qv / 所有包含 term 的 query 的 qv 和)样傍、iqf、文檔 idf铺遂、統(tǒng)計概率:

圖片

以及短語生成樹得到 term 權(quán)重等衫哥。

其中刪詞差異度的做法是先訓(xùn)練得到 query 的 embedding 表示,然后計算移除各個 term 之后的 query 與原 query 的 embedding 相似度差值用于衡量 term 的重要性襟锐,如果移除某個 term 之后相似度差異很大炕檩,代表這個 term 比較重要。而短語生成樹的做法是通過從搜索 session 序列及搜索點(diǎn)擊行為中挖掘出 query 之間的相關(guān)關(guān)系按 query 長度降序自頂向下進(jìn)行構(gòu)造得到,其中樹的邊和結(jié)點(diǎn)均有一定的權(quán)重笛质。

這里假設(shè)在一定共現(xiàn)關(guān)系情況下越短的 query 越是整體意圖的核心表達(dá)泉沾,所以和越下層結(jié)點(diǎn)連接越多的 term 重要性越大,僅和較上層或根結(jié)點(diǎn)有連接的 term 重要性相對較小妇押,通過用 iqf 等初始化葉子結(jié)點(diǎn)跷究,然后自底向上進(jìn)行結(jié)點(diǎn)分值計算并進(jìn)行多輪迭代使得 term 權(quán)重相對穩(wěn)定。如下圖所示 query "好玩的5v5策略競技游戲"構(gòu)造的短語生成樹示例敲霍。

圖片

分類回歸的方法很好地利用了用戶的點(diǎn)擊行為反饋俊马,通過精細(xì)的特征工程往往能得到比較好的結(jié)果。還有的方法就是利用深度學(xué)習(xí)模型來學(xué)習(xí) term 重要性肩杈,比如通過訓(xùn)練基于 BiLSTM+Attention 的 query 意圖分類模型或基于 eq2Seq/Transformer 訓(xùn)練的 query 翻譯改寫模型得到的 attention 權(quán)重副產(chǎn)物再結(jié)合其他策略或作為上述分類回歸模型的特征也可以用于衡量 term 的重要性柴我。

圖片

6. 搜索引導(dǎo)

受限于用戶的先驗知識的參差不齊或輸入設(shè)備引入的噪音,用戶輸入的 query 可能不足以表達(dá)用戶真正的需求進(jìn)而影響用戶搜到想要的結(jié)果扩然。為此艘儒,除了保證搜索結(jié)果的相關(guān)性,一個完善的搜索引擎還需要給用戶提供一系列搜索引導(dǎo)功能夫偶,以減少用戶的搜索輸入成本界睁,縮短用戶找到訴求的路徑。搜索引導(dǎo)按功能的不同主要可以分為:搜索熱詞兵拢、搜索歷史翻斟、query 改寫、搜索聯(lián)想詞说铃,一些電商等垂搜可能還帶有類目屬性等搜索導(dǎo)航功能访惜。由于搜索熱詞及搜索歷史功能相對比較好理解,這里不做過多闡述腻扇。

① Query 改寫

Query 改寫這個概念比較泛债热,簡單理解就是將源 query 改寫變換到另一個 query。按照改寫功能的不同衙解,query 改寫可以分為 query 糾錯、query 歸一焰枢、query 擴(kuò)展三個方向蚓峦。其中 query 糾錯負(fù)責(zé)對存在錯誤的 query 進(jìn)行識別糾錯,query 歸一負(fù)責(zé)將偏門的 query 歸一變換到更標(biāo)準(zhǔn)且同義的 query 表達(dá)济锄,而 query 擴(kuò)展則負(fù)責(zé)擴(kuò)展出和源 query 內(nèi)容或行為語義相關(guān)的 query 列表推薦給用戶進(jìn)行潛在需求挖掘發(fā)現(xiàn)暑椰。

Query 糾錯:

Query 糾錯,顧名思義荐绝,也即對用戶輸入 query 出現(xiàn)的錯誤進(jìn)行檢測和糾正的過程朱灿。用戶在使用搜索過程中罢屈,可能由于先驗知識掌握不夠或輸入過程引入噪音 ( 如:語音識別有誤弃酌、快速輸入手誤等 ) 輸入的搜索 query 會存在一定的錯誤缩多。如果不對帶有錯誤的 query 進(jìn)行糾錯,除了會影響 QU 其他模塊的準(zhǔn)確率动羽,還會影響召回的相關(guān)性及排序的合理性,最終影響到用戶的搜索體驗。

除了搜索場景纱意,query 糾錯還可以應(yīng)用于輸入法、人機(jī)對話鲸阔、語音識別偷霉、內(nèi)容審核等應(yīng)用場景。不同的業(yè)務(wù)場景需要解決的錯誤類型會不太一樣褐筛,比如 ASR 語音識別主要解決同諧音类少、模糊音等錯誤,而輸入法及搜索等場景則需要面臨解決幾乎所有錯誤類型渔扎,如同諧音硫狞、模糊音 ( 平舌翹舌、前后鼻音等 )赞警、混淆音妓忍、形近字 ( 主要針對五筆和筆畫手寫輸入法 )、多漏字等錯誤愧旦。根據(jù) query 中是否有不在詞典中本身就有錯誤的詞語 ( Non-word )世剖,可以將 query 錯誤類型主要分為 Non-word 和 Real-word 兩類錯誤。

其中笤虫,Non-word 錯誤一般出現(xiàn)在帶英文單詞或數(shù)字的 query 中旁瘫,由于通過輸入法進(jìn)行輸入,不會存在錯誤中文字的情況琼蚯,所以中文 query 如果以字作為最小語義單元的話一般只會存在 Real-word 錯誤酬凳,而帶英文數(shù)字的 query 則可能存在兩類錯誤。下圖對這兩大類的常見錯誤類型進(jìn)行歸類及給出了相應(yīng)的例子遭庶。

圖片

從原理上宁仔,Query 糾錯可以用噪音信道模型來理解,假設(shè)用戶本意是搜索 Qreal峦睡,但是 query 經(jīng)過噪音信道后引進(jìn)了一定的噪音翎苫,此時糾錯過程相當(dāng)于構(gòu)建解碼器將帶有噪音干擾的 query Qnoise 進(jìn)行最大去噪還原成 Qdenoise,使得 Qdenoise≈Qreal榨了。

對應(yīng)的公式為:

圖片

其中 P(Qdenoise) 表示語言模型概率煎谍,P(Qnoise|Qdenoise) 表示寫錯概率,進(jìn)行糾錯一般都是圍繞著求解這兩個概率來進(jìn)行的龙屉。

圖片

糾錯任務(wù)主要包含錯誤檢測和錯誤糾正兩個子任務(wù)呐粘,其中錯誤檢測用于識別錯誤詞語的位置,簡單地可以通過對輸入 query 進(jìn)行切分后檢查各個詞語是否在維護(hù)的自定義詞表或挖掘積累的常見糾錯 pair 中,若不在則根據(jù)字型作岖、字音或輸入碼相近字進(jìn)行替換構(gòu)造候選并結(jié)合 ngram 語言模型概率來判斷其是否存在錯誤唆垃,這個方法未充分考慮到上下文信息,可以適用于常見中文詞組搭配鳍咱、英文單詞錯誤等的檢測降盹。進(jìn)一步的做法是通過訓(xùn)練序列標(biāo)注模型的方法來識別錯誤的開始和結(jié)束位置。

至于錯誤糾正谤辜,即在檢測出 query 存在錯誤的基礎(chǔ)上對錯誤部分進(jìn)行糾正的過程蓄坏,其主要包括糾錯候選召回、候選排序選擇兩個步驟丑念。在進(jìn)行候選召回時涡戳,沒有一種策略方法能覆蓋所有的錯誤類型,所以一般通過采用多種策略方法進(jìn)行多路候選召回脯倚,然后在多路召回的基礎(chǔ)上通過排序模型來進(jìn)行最終的候選排序渔彰。

對于英文單詞錯誤、多漏字推正、前后顛倒等錯誤可以通過編輯距離度量進(jìn)行召回恍涂,編輯距離表示從一個字符串變換到另一個字符串需要進(jìn)行插入、刪除植榕、替換操作的次數(shù)再沧,如 "apple" 可能錯誤拼寫成 "appel",它們的編輯距離是1尊残。由于用戶的搜索 query 數(shù)一般是千萬甚至億級別的炒瘸,如果進(jìn)行兩兩計算編輯距離的話計算量會非常大,為此需要采用一定的方法減小計算量才行寝衫。比較容易想到的做法是采用一些啟發(fā)式的策略顷扩,如要求首字 ( 符 ) 一樣情況下將長度小于等于一定值的 query 劃分到一個桶內(nèi)再計算兩兩 query 間的編輯距離,此時可以利用 MapReduce 進(jìn)一步加速計算慰毅。

當(dāng)然這種啟發(fā)式的策略可能會遺漏掉首字 ( 符 ) 不一樣的 case隘截,如在前面兩個位置的多漏字、顛倒等錯誤汹胃。還有的辦法就是利用空間換時間婶芭,如對 query 進(jìn)行 ngram 等長粒度切分后構(gòu)建倒排索引,然后進(jìn)行索引拉鏈的時候保留相似度 topN 的 query 作為候選统台。又或者利用編輯距離度量滿足三角不等式 d(x,y)+d(y,z)≥d(x,z) 的特性對多叉樹進(jìn)行剪枝來減少計算量雕擂。

首先隨機(jī)選取一個 query 作為根結(jié)點(diǎn)啡邑,然后自頂向下對所有 query 構(gòu)建多叉樹贱勃,樹的邊為兩個結(jié)點(diǎn) query 的編輯距離。給定一個 query,需要找到與其編輯距離小于等于 n 的所有 query贵扰,此時自頂向下與相應(yīng)的結(jié)點(diǎn) query 計算編輯距離 d仇穗,接著只需遞歸考慮邊值在 d-n 到 d+n 范圍的子樹即可。如下圖所示需要查找所有與 query "十面埋弧"編輯距離小于等于1的 query戚绕,由于"十面埋弧"與"十面埋伏"的編輯距離為1纹坐,此時只需考慮邊值在1-1到1+1范圍的子樹,為此"十面埋伏怎么樣"作為根結(jié)點(diǎn)的子樹可以不用繼續(xù)考慮舞丛。

圖片

對于等長的拼音字型錯誤類型還可以用 HMM 模型進(jìn)行召回耘子,HMM 模型主要由初始狀態(tài)概率、隱藏狀態(tài)間轉(zhuǎn)移概率及隱藏狀態(tài)到可觀測狀態(tài)的發(fā)射概率三部分組成球切。如下圖所示谷誓,將用戶輸入的錯誤 query "愛奇義"視為可觀測狀態(tài),對應(yīng)的正確 query "愛奇藝"作為隱藏狀態(tài)吨凑,其中正確 query 字詞到錯誤 query 字詞的發(fā)射關(guān)系可以通過人工梳理的同諧音捍歪、形近字混淆詞表、通過編輯距離度量召回的相近英文單詞以及挖掘好的糾錯片段對得到鸵钝。

至于模型參數(shù)糙臼,可以將搜索日志中 query 進(jìn)行采樣后作為樣本利用 hmmlearn、pomegranate 等工具采用 EM 算法進(jìn)行無監(jiān)督訓(xùn)練恩商,也可以簡單地對搜索行為進(jìn)行統(tǒng)計得到变逃,如通過 nltk、srilm痕届、kenlm 等工具統(tǒng)計搜索行為日志中 ngram 語言模型轉(zhuǎn)移概率韧献,以及通過統(tǒng)計搜索點(diǎn)擊日志中 query-item 及搜索 session 中 query-query 對齊后的混淆詞表中字之間的錯誤發(fā)射概率。訓(xùn)練得到模型參數(shù)后研叫,采用維特比算法對隱藏狀態(tài)序列矩陣進(jìn)行最大糾錯概率求解得到候選糾錯序列锤窑。

圖片
圖片

進(jìn)一步地,我們還可以嘗試深度學(xué)習(xí)模型來充分挖掘搜索點(diǎn)擊行為及搜索 session 進(jìn)行糾錯候選召回嚷炉,如采用 Seq2Seq渊啰、Transformer、Pointer-Generator Networks 等模型進(jìn)行端到端的生成改寫申屹,通過引入 attention绘证、copy 等機(jī)制以及結(jié)合混淆詞表進(jìn)行受限翻譯生成等優(yōu)化,可以比較好地結(jié)合上下文進(jìn)行變長的候選召回哗讥。

另外結(jié)合 BERT 等預(yù)訓(xùn)練語言模型來進(jìn)行候選召回也是值得嘗試的方向嚷那,如在 BERT 等預(yù)訓(xùn)練模型基礎(chǔ)上采用場景相關(guān)的無監(jiān)督語料繼續(xù)預(yù)訓(xùn)練,然后在錯誤檢測的基礎(chǔ)上對錯誤的字詞進(jìn)行 mask 并預(yù)測該位置的正確字詞杆煞。Google 在2019年提出的 LaserTagger 模型則是另辟蹊徑將文本生成建模為序列標(biāo)注任務(wù)魏宽,采用 BERT 預(yù)訓(xùn)練模型作為 Encoder 基礎(chǔ)上預(yù)測各個序列位置的增刪留標(biāo)簽腐泻,同樣適用于 query 糾錯這種糾錯前后大部分文本重合的任務(wù)。

另外队询,愛奇藝在同一年提出的適用于繁簡體中文拼寫檢糾錯的 FASPell 模型嘗試在利用 BERT 等預(yù)訓(xùn)練語言模型生成糾錯候選矩陣 ( DAE ) 的基礎(chǔ)上結(jié)合生成候選的置信度及字符相似度對候選進(jìn)行解碼過濾 ( CSD ) 出候選糾錯目標(biāo)派桩,在中文糾錯任務(wù)上也取得了一定進(jìn)展。

圖片

在多路召回的基礎(chǔ)上蚌斩,可以通過從詞法铆惑、句法、語義及統(tǒng)計特征等多個方面構(gòu)造特征訓(xùn)練 GBDT送膳、GBRank 等排序模型將預(yù)測出最優(yōu)的糾錯候選员魏。由于進(jìn)行多路糾錯候選召回計算量相對比較大且直接進(jìn)行線上糾錯會存在較大的風(fēng)險,可以在離線挖掘好 query 糾錯 pair 后按搜索 qv 優(yōu)先進(jìn)行對頭中部 query 進(jìn)行人工審核準(zhǔn)入叠聋,然后放到線上存儲供調(diào)用查詢逆趋。線上應(yīng)用時,當(dāng) QU 識別到用戶輸入 query 存在錯誤并進(jìn)行相應(yīng)糾錯后晒奕,對于不那么置信的結(jié)果可以將糾錯結(jié)果透傳給召回側(cè)進(jìn)行二次檢索使用闻书,對于比較置信的糾錯結(jié)果可以直接展示用糾錯后 query 進(jìn)行召回的結(jié)果并給到用戶搜索詞確認(rèn)提示 ( 如下圖所示 ),如果糾錯 query 不是用戶真實意圖表達(dá)的話脑慧,用戶可以繼續(xù)選擇用原 query 進(jìn)行搜索魄眉,此時用戶的反饋行為也可以用于進(jìn)一步優(yōu)化 query 糾錯。

圖片

Query 擴(kuò)展:

Query 擴(kuò)展闷袒,即通過挖掘 query 間的語義關(guān)系擴(kuò)展出和原 query 相關(guān)的 query 列表坑律。Query 列表的結(jié)果可以用于擴(kuò)召回以及進(jìn)行 query 推薦幫用戶挖掘潛在需求,如下圖在百度搜索"自然語言處理"擴(kuò)展出的相關(guān)搜索 query:

圖片

搜索場景有豐富的用戶行為數(shù)據(jù)囊骤,我們可以通過挖掘搜索 session 序列和點(diǎn)擊下載行為中 query 間的語義關(guān)系來做 query 擴(kuò)展晃择。如用戶在進(jìn)行搜索時,如果對當(dāng)前搜索結(jié)果不滿意可能會進(jìn)行一次或多次 query 變換重新發(fā)起搜索也物,那么同一搜索 session 內(nèi)變換前后的 query 一般存在一定的相關(guān)性宫屠,為此可以通過統(tǒng)計互信息、關(guān)聯(lián)規(guī)則挖掘等方法來挖掘搜索 session 序列中的頻繁共現(xiàn)關(guān)系滑蚯。

或者把一個用戶搜索 session 序列當(dāng)成文章浪蹂,其中的每個 query 作為文章的一個詞語,作出假設(shè):如果兩個 query 有相同的 session 上下文告材,則它們是相似的坤次,然后通過訓(xùn)練 word2vec、fasttext 等模型將 query 向量化斥赋,進(jìn)而可以計算得到 query 間的 embedding 相似度缰猴。

對于長尾復(fù)雜 query,通過 word2vec 訓(xùn)練得到的 embedding 可能會存在 oov 的問題疤剑,而 fasttext 由于還考慮了字級別的 ngram 特征輸入進(jìn)行訓(xùn)練滑绒,所以除了可以得到 query 粒度的 embedding胰舆,還可以得到字、詞粒度的 embedding蹬挤,此時通過對未登錄 query 切詞后的字、詞的 embedding 進(jìn)行簡單的求和棘幸、求平均也可以得到 query 的 embedding 表示焰扳。還可以參考 WR embedding 的做法進(jìn)一步考慮不同 term 的權(quán)重做加權(quán)求平均,然后通過減去主成分的映射向量以加大不同 query 間的向量距離误续,方法簡單卻比較有效吨悍。

圖片

至于搜索點(diǎn)擊下載行為,可以通過構(gòu)建 query-item 的點(diǎn)擊下載矩陣蹋嵌,然后采用協(xié)同過濾或 SVD 矩陣分解等方法計算 query 之間的相似度育瓜,又或者構(gòu)建 query 和 item 之間的二部圖 ( 如下圖示例 ),若某個 query 節(jié)點(diǎn)和 item 節(jié)點(diǎn)之間存在點(diǎn)擊或下載行為則用邊進(jìn)行連接栽烂,以 ctr躏仇、cvr 或歸一化的點(diǎn)擊下載次數(shù)等作為連接邊的權(quán)重,然后可以訓(xùn)練 swing腺办、simrank/wsimrank++ 等圖算法迭代計算 query 間的相似度焰手,也可以采用 Graph Embedding 的方法來訓(xùn)練得到 query 結(jié)點(diǎn)間的 embedding 相似度。

更進(jìn)一步地怀喉,我們還可以利用搜索點(diǎn)擊下載行為構(gòu)造弱監(jiān)督樣本訓(xùn)練基于 CNN/LSTM/BERT 等子網(wǎng)絡(luò)的 query-item 語義匹配模型得到 query 和 item 的 embedding 表示书妻,如此也可以計算 query pair 間的 embedding 相似度。對于將 query 進(jìn)行 embedding 向量化的方法躬拢,可以先離線計算好已有存量 query 的 embedding 表示躲履,然后用 faiss 等工具構(gòu)建向量索引,當(dāng)線上有新的 query 時通過模型 inference 得到對應(yīng)的 embedding 表示即可進(jìn)行高效的近鄰向量檢索以召回語義相似的 query聊闯。

圖片
圖片

在給用戶做搜索 query 推薦時工猜,除了上面提到的跟用戶當(dāng)前輸入 query 單點(diǎn)相關(guān) query 推薦之外,還可以結(jié)合用戶歷史搜索行為及畫像信息等來預(yù)測用戶當(dāng)前時刻可能感興趣的搜索 query菱蔬,并在搜索起始頁等場景進(jìn)行推薦展示域慷。此時,可以通過 LSTM 等網(wǎng)絡(luò)將用戶在一段 session 內(nèi)的搜索行為序列建模為用戶 embedding 表示汗销,然后可以通過構(gòu)建 Encoder-Decoder 模型來生成 query犹褒,或采用語義匹配的方法將用戶 embedding 及 query embedding 映射到同一向量空間中,然后通過計算 embedding 相似度的方法來召回用戶可能感興趣的 query弛针。

Query 歸一:

Query 歸一和 query 糾錯在概念上容易混淆叠骑,相較于 query 糾錯是對存在錯誤的 query 進(jìn)行糾正,query 歸一則主要起到對同近義表達(dá)的 query 進(jìn)行語義歸一的作用削茁。一些用戶的 query 組織相對來說比較冷門宙枷,和 item 側(cè)資源的語義相同但文字表達(dá)相差較大掉房,直接用于召回的話相關(guān)性可能會打折扣,這時如果能將這些 query 歸一到相對熱門同義或存在對應(yīng)資源的 query 會更容易召回相關(guān)結(jié)果慰丛。如將"騰訊臺球"歸一到"騰訊桌球"卓囚,"華仔啥時候出生的?"诅病、"劉德華出生年月"哪亿、"劉德華什么是出生的"這些 query 都可以歸一到"劉德華出生日期"相對標(biāo)準(zhǔn)的 query。其中涉及到的技術(shù)主要有同義詞挖掘及語義對齊替換贤笆,如"華仔"對應(yīng)的同義詞是"劉德華"蝇棉,"啥時候出生的"對應(yīng)的同義詞是"出生日期"。

同義詞的挖掘是一個積累的過程芥永,最直接的獲取方式是利用業(yè)界已經(jīng)有一些比較有名的知識庫篡殷,如英文版本的 WordNet、中文版本的知網(wǎng) HowNet埋涧、哈工大的同義詞詞林等板辽,或者可以利用一些開放的中文知識圖譜 ( 如:OpenKG、OwnThink 等 ) 或從抓取百度/維基百科站點(diǎn)數(shù)據(jù)然后提取出其中的別名棘催、簡稱等結(jié)構(gòu)化信息直接獲得戳气,對于百科中無結(jié)構(gòu)化數(shù)據(jù)可以簡單通過一些模板規(guī)則 ( 如:"XX俗稱XX"、"XX又名XX"等 ) 來提取同義詞巧鸭。同時瓶您,還可以在知識庫中已有同義詞種子的基礎(chǔ)上通過一些方法進(jìn)一步擴(kuò)充同義詞,如韓家煒老師團(tuán)隊提出的通過構(gòu)建分類器來判斷實體詞是否屬于某個同義詞簇的方法來進(jìn)一步擴(kuò)充同義詞集纲仍。

除了利用結(jié)構(gòu)化數(shù)據(jù)或規(guī)則模板呀袱,還可以在構(gòu)造平行語料基礎(chǔ)上通過語義對齊的方式來挖掘同義詞。對于搜索場景來說郑叠,可以通過挖掘豐富的行為數(shù)據(jù)來構(gòu)造平行語料夜赵,如利用搜索 session 行為相關(guān)語料訓(xùn)練無監(jiān)督的 word2vec、wordrank 等詞向量模型來衡量詞語間的相似度乡革,不過這些模型更多是學(xué)習(xí)詞語間在相同上下文的共現(xiàn)相似寇僧,得到的相似度高的詞語對不一定是同義詞,有可能是同位詞沸版、上下位詞甚至是反義詞嘁傀,此時需要通過引入監(jiān)督信號或外部知識來優(yōu)化詞向量,如有方法提出通過構(gòu)建 multi-task 任務(wù)在預(yù)測目標(biāo)詞的同時預(yù)測目標(biāo)詞在句子中表示的實體類型以加入實體的語義信息來提升詞向量之間的語義相似性视粮。

進(jìn)一步地细办,還可以利用前面介紹的二部圖迭代、深度語義匹配蕾殴、Seq2Seq 翻譯生成等 query 擴(kuò)展方法從搜索點(diǎn)擊弱監(jiān)督行為中先挖掘出語義表達(dá)相近的 query-query笑撞、item-item 或 query-item 短語對岛啸,然后再將語義相近的 query/item 短語對進(jìn)行語義對齊,對齊的話可以采用一些規(guī)則的方法茴肥,也可以采用傳統(tǒng)的統(tǒng)計翻譯模型如 IBM-M2 進(jìn)行對齊坚踩,語義對齊后從中抽取出處于相同或相近上下文中的兩個詞語作為同義詞對候選,然后結(jié)合一些統(tǒng)計特征瓤狐、詞語 embedding 相似度以及人工篩選等方式進(jìn)行過濾篩選瞬铸。

考慮到同一個詞語在不同的上下文中可能表達(dá)不同的語義,同義詞語間的關(guān)系也是上下文相關(guān)的芬首,此時如果通過對齊挖掘粗粒度的同義片段對能進(jìn)一步消除歧義。線上對 query 進(jìn)行歸一時逼裆,則和離線同義詞挖掘的過程相反郁稍,對 query 進(jìn)行分詞后讀取線上存儲的同義詞表做同義詞候選替換,對替換網(wǎng)格進(jìn)行對齊生成候選 query胜宇,最后通過結(jié)合語言模型概率及在當(dāng)前上下文的替換概率或者構(gòu)造特征訓(xùn)練 GBDT 等模型的方式對候選 query 進(jìn)行排序得到最終的歸一 query耀怜。

圖片

② 搜索聯(lián)想詞

聯(lián)想詞,顧名思義桐愉,就是對用戶輸入 query 進(jìn)行聯(lián)想擴(kuò)展财破,以減少用戶搜索輸入成本及輸錯可能,能比較好地提升用戶搜索體驗从诲。聯(lián)想結(jié)果主要以文本匹配為主左痢,文本匹配結(jié)果不足可以輔以語義召回結(jié)果提升充盈率∠德澹考慮到用戶在輸入搜索 query 時意圖相對明確俊性,一般會從左到右進(jìn)行 query 組織,為此基于這個啟發(fā)式規(guī)則描扯,目前聯(lián)想詞中文本匹配召回又以前綴匹配優(yōu)先定页。

圖片

雖然聯(lián)想詞涉及的是技術(shù)主要是簡單的文本匹配,在匹配過程中還需要考慮效率和召回質(zhì)量绽诚,同時中文輸入可能會有拼音輸入的情況 ( 如上圖所示 ) 也需要考慮典徊。由于用戶在搜索框中輸入每一個字時都會發(fā)起一起請求,聯(lián)想詞場景的請求 pv 是非常大的恩够。為加速匹配效率卒落,可以通過對歷史搜索 query 按 qv 量這些篩選并預(yù)處理后分別構(gòu)建前后綴 trie 樹用于對用戶線上輸入的 query 進(jìn)行前綴及中后綴匹配召回,然后對召回的結(jié)果進(jìn)行排序蜂桶,如果是僅簡單按 qv 降序排序导绷,可以在 trie 樹結(jié)點(diǎn)中存放 qv 信息并用最小堆等結(jié)構(gòu)進(jìn)行 topK 召回。

圖片

當(dāng)然僅按 qv 排序還不夠屎飘,比如可能還需要考慮用戶輸入上文 query 后對推薦的下文 query 的點(diǎn)擊轉(zhuǎn)化妥曲、下文 query 在結(jié)果頁的點(diǎn)擊轉(zhuǎn)化以及 query 的商業(yè)化價值等因素贾费。同時一些短 query 召回的結(jié)果會非常多,線上直接進(jìn)行召回排序性能壓力較大檐盟,為此可以先通過離線召回并進(jìn)行粗排篩選褂萧,再將召回結(jié)果寫到一些 kv 數(shù)據(jù)庫如 redis、共享內(nèi)存等存儲供線上直接查詢使用葵萎。離線召回的話导犹,可以采用 AC 自動機(jī)同時進(jìn)行高效的前中后綴匹配召回。AC 自動機(jī) ( Aho-Corasic ) 是基于 trie 數(shù) + KMP 實現(xiàn)的多模匹配算法羡忘,可以在目標(biāo)文本中查找多個模式串的出現(xiàn)次數(shù)以及位置谎痢。此時,離線召回大致的流程是:

  • 從歷史搜索 query 中構(gòu)造前綴 sub-query卷雕,如 query "酷我音樂"對應(yīng)的 sub-query 有中文形式的"酷"节猿、"酷我"、"酷我音"漫雕、"酷我音樂"及拼音字符串 "ku"滨嘱、"kuwo" 等,同時可以加上一些專名實體或行業(yè)詞浸间,如應(yīng)用垂搜中的"音樂"太雨、"視頻"等功能需求詞;

  • 利用所有的 sub-query 構(gòu)建 AC 自動機(jī)魁蒜;

  • 利用構(gòu)建的 AC 自動機(jī)對歷史搜索 query 及其拼音形式分別進(jìn)行多模匹配囊扳,從中匹配出所有的前中后綴 sub-query,進(jìn)而得到 <sub-query兜看,query> 召回候選宪拥。

  • 按照一定策略 ( 一般在前綴基礎(chǔ)上 ) 進(jìn)行候選粗排并寫到線上存儲。

  • 線上來一個請求 sub-query铣减,直接查詢存儲獲取召回結(jié)果她君,然后再基于訓(xùn)練的 pctr 預(yù)估模型或 pcpm 商業(yè)化導(dǎo)向進(jìn)行重排,此時可以通過引入用戶側(cè)葫哗、context 側(cè)等特征實現(xiàn)個性化排序缔刹。

7. 意圖識別

搜索意圖識別是 QU 最重要卻也最具挑戰(zhàn)的模塊,存在的難點(diǎn)主要有:

  • 用戶輸入 query 不規(guī)范:由于用戶先驗知識的差異劣针,必然導(dǎo)致用戶在通過自然語言組織表達(dá)同一需求時千差萬別校镐,甚至可能會出現(xiàn) query 表達(dá)錯誤、遺漏等情況捺典;

  • 歧義性&多樣性:用戶的搜索 query 表達(dá)不夠明確帶來的意圖歧義性或用戶本身搜索意圖存在多樣性鸟廓,比如:搜索 query "擇天記"可能是想下載仙俠玄幻類游戲,可能是玄幻小說類 app,也可能是想看擇天記電視劇而下視頻類 app引谜。此時衍生出來的另一個問題是當(dāng)某個 query 存在多個意圖可能時牍陌,需要合理地量化各個意圖的需求強(qiáng)度;

  • 如何根據(jù)用戶及其所處 context 的不同實現(xiàn)個性化意圖员咽,比如用戶的性別毒涧、年齡不同,搜索同一 query 的意圖可能不一樣贝室,用戶當(dāng)前時刻搜索 query 的意圖可能和上一時刻搜索 query 相關(guān)等契讲。

根據(jù)用戶意圖明確程度的差別,搜索意圖識別又可以細(xì)分為精準(zhǔn)意圖和模糊意圖識別滑频。

① 精準(zhǔn)意圖

所謂精準(zhǔn)意圖捡偏,是指用戶通過 query 所表達(dá)的意圖已經(jīng)非常明確了,其需求可以比較置信地鎖定為一個資源目標(biāo)峡迷。精準(zhǔn)意圖需求在垂直搜索中尤為常見银伟,以應(yīng)用市場 app 搜索為例,用戶搜索 query "下載王者榮耀"很明確就是想下載"王者榮耀" app凉当,這時候?qū)?王者榮耀"展現(xiàn)在結(jié)果列表首位才合理枣申。當(dāng)然一般排序模型擬合足夠好的情況下也能將對應(yīng)的精準(zhǔn)資源排在首位售葡,但是以下一些情況可能會引起排序不穩(wěn)定進(jìn)而導(dǎo)致對應(yīng)精準(zhǔn)資源沒能置頂在首位的問題:

  • 長尾 query 行為特征稀疏看杭,模型學(xué)習(xí)不夠充分;

  • 引入用戶個性化特征挟伙,排序結(jié)果因人而異楼雹;

  • 以商業(yè)化為導(dǎo)向的排序影響相關(guān)性體驗。為此尖阔,需要一定策略識別出精準(zhǔn)首位意圖并將它們高優(yōu)置頂贮缅,同時可以通過直達(dá)區(qū)產(chǎn)品形態(tài)給用戶快速直達(dá)需求的搜索體驗。

對于垂直搜索來說介却,精準(zhǔn)意圖一般是給定一個 query谴供,找到與其意圖精準(zhǔn)對應(yīng)的 item,可以通過文本匹配和 top 后驗轉(zhuǎn)化篩選出候選 item齿坷,然后通過從文本匹配桂肌、行為反饋、語義相似等方向構(gòu)造樣本特征訓(xùn)練 GBDT 等模型對 <query,item> 樣本 pair 進(jìn)行是否精準(zhǔn)二分類永淌。也可以嘗試類似 DSSM 的語義匹配網(wǎng)絡(luò)對 query 和 item 進(jìn)行語義匹配崎场。對于長尾 query 且完全文本包含 item 的情況,由于行為量不夠豐富利用分類模型可能無法召回且直接進(jìn)行文本匹配提取可能存在歧義性遂蛀,此時可以視為 NER 任務(wù)通過訓(xùn)練 BiLSTM-CRF谭跨、BERT-CRF 等序列標(biāo)注模型進(jìn)行 item 實體的識別,再結(jié)合一些啟發(fā)性策略及后驗行為進(jìn)行驗證。

圖片

在 Google螃宙、百度等通用搜索中蛮瞄,用戶可能會輸入一些知識問答型的 query,此時用戶的意圖也比較明確污呼,就是問題對應(yīng)的答案裕坊。如搜索 query "劉德華的妻子是誰"秀撇,通過召回帶"劉德華"愉择、"妻子"字樣的網(wǎng)頁,用戶估計也能找到答案黄琼,但如果能直接給出這個 query 的答案的話體驗會更好苗缩,如下面百度搜索給出的結(jié)果饵蒂。

這時候可以歸為 QA 問答任務(wù)來處理,一般需要結(jié)合知識圖譜來做酱讶,也即 KBQA ( Knowledge Based Question Answer )退盯。傳統(tǒng)的的 KBQA 做法是先對 query 進(jìn)行詞法句法以及語義解析,識別出其中的主要實體概念泻肯,再基于這些主題概念構(gòu)造相應(yīng)的查詢邏輯表達(dá)式去知識庫中進(jìn)行查詢及推理得到想要的答案渊迁。之后陸續(xù)有提出將問題和知識庫中候選答案映射成分布式向量進(jìn)行匹配,以及利用 CNN灶挟、LSTM琉朽、記憶網(wǎng)絡(luò)等模型對應(yīng)問題及候選答案向量建模優(yōu)化等方法來進(jìn)行 KBQA。

圖片

2. 模糊意圖

模糊意圖就是指用戶的搜索意圖不會具體到某個目標(biāo)資源稚铣,而是代表一類或多類意圖箱叁,比如用戶搜索"視頻app",此時沒有明確想下某款 app惕医,可將其泛化到"視頻類" tag 意圖耕漱。模糊意圖識別一般可以采用基于模板規(guī)則、行為統(tǒng)計反饋抬伺、分類模型等方法螟够,這里主要會從意圖分類及槽位解析兩個方向進(jìn)行闡述。

意圖分類:

在構(gòu)建 query 意圖分類模型之前峡钓,需要先制定一套意圖標(biāo)簽體系用于全面覆蓋用戶意圖需求妓笙。這里需要對 query 側(cè)和 item 側(cè)的標(biāo)簽體系進(jìn)行統(tǒng)一以便于在預(yù)測出某個 query 的意圖 tag 分布后直接用 tag 去倒排索引中召回屬于這些 tag 的 item。

由于搜索 query 一般相對來說長度較短且意圖存在多樣性椒楣,意圖分類可以歸結(jié)為短文本多標(biāo)簽分類任務(wù)给郊。在意圖分類樣本構(gòu)造方面,可以通過關(guān)聯(lián)用戶搜索點(diǎn)擊行為分布及進(jìn)行 item 理解獲得的 tag 或站點(diǎn)所屬行業(yè)分類信息等自動構(gòu)造樣本捧灰,對于可能存在的樣本類別不平衡的問題淆九,需要對樣本進(jìn)行重降采樣等處理统锤,或采用主動學(xué)習(xí)等方法進(jìn)行高效的樣本標(biāo)注。

至于模型方面炭庙,傳統(tǒng)的文本分類主要采用向量空間模型 VSM 或進(jìn)行其他特征工程來表征文本饲窿,然后用貝葉斯、SVM焕蹄、最大熵等機(jī)器學(xué)習(xí)模型進(jìn)行訓(xùn)練預(yù)測逾雄。隨著 Word2vec、GloVe腻脏、Fasttext 等分布式詞向量技術(shù)的興起鸦泳,打破了傳統(tǒng) NLP 任務(wù)需要做大量特征工程的局面,通過分布式向量對文本進(jìn)行表示后再接入其它網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行端到端分類訓(xùn)練的做法成為了主流永品。

如采用比較簡單又實用的淺層網(wǎng)絡(luò)模型 Fasttext做鹰,F(xiàn)asttext 是從 Word2vec 衍生出來的,架構(gòu)和 Word2vec 的類似鼎姐,核心思想是將整篇文檔的詞及 n-gram 向量疊加平均得到文檔向量钾麸,然后使用文檔向量做 softmax 多分類。相對 Word2vec 的優(yōu)點(diǎn)是輸入層考慮了字符級 ngram 特征可以一定程度解決 oov 問題以及輸出層支持進(jìn)行有監(jiān)督的任務(wù)學(xué)習(xí)炕桨。使用 Fasttext 訓(xùn)練簡單饭尝,且線上 inference 性能也很高,但也正因為采用相對簡單的淺層網(wǎng)絡(luò)結(jié)構(gòu)其準(zhǔn)確率也相對較低献宫。為此钥平,進(jìn)一步地可以嘗試一些深度神經(jīng)網(wǎng)絡(luò)模型,如:TextRNN遵蚜、TextCNN帖池、Char-CNN奈惑、BiLSTM+Self-Attention吭净、RCNN、C-LSTM肴甸、HAN寂殉、EntNet、DMN 等原在。

這些模型通過 CNN/RNN 網(wǎng)絡(luò)結(jié)構(gòu)提煉更高階的上下文語義特征以及引入注意力機(jī)制友扰、記憶存儲機(jī)制等可以有效地優(yōu)化模型的分類準(zhǔn)確率。其實庶柿,對于 query 短文本分類來說采用相對簡單的 TextRNN/TextCNN 網(wǎng)絡(luò)結(jié)構(gòu)就已經(jīng)能達(dá)到較高的準(zhǔn)確率了村怪,其中 TextRNN 通過使用 GRU/LSTM 編碼單元能更好地捕獲詞序和較長長度的上下文依賴信息,但由于采用 RNN 網(wǎng)絡(luò)訓(xùn)練耗時相對較長浮庐。TextCNN 則主要通過不同 size 的卷積核捕獲不同局部窗口內(nèi)的 ngram 組合特征甚负,然后一般通過 max-pooling 或 kmax-pooling 保留變長文本中一個或多個位置的最強(qiáng)特征轉(zhuǎn)換為固定長度的向量再做 sigmoid/softmax 分類。

同時為進(jìn)一步提升網(wǎng)絡(luò)性能及加速模型收斂,還可以在網(wǎng)絡(luò)中進(jìn)一步考慮 dropout 及 batch normalize 等防過擬合機(jī)制梭域,以及考慮在輸入層融入 Word2vec斑举、GloVe、Fastext 等模型預(yù)訓(xùn)練得到的 embedding病涨,如下圖在 cnn 輸入層中加入預(yù)訓(xùn)練 embedding 組成雙通道輸入富玷。雖然 TextCNN 對于捕獲長程依賴信息方面會不如 TextRNN,考慮到 query 一般長度相對較短所以影響相對還好既穆,而且其訓(xùn)練速度及在線 inference 性能也都比較符合要求赎懦。

圖片

除了從零開始訓(xùn)練或引入無監(jiān)督預(yù)訓(xùn)練的隱式 embedding 表示,還可以通過引入顯式的知識概念進(jìn)一步豐富文本的語義表達(dá)幻工,在有比較豐富的領(lǐng)域知識庫的情況下進(jìn)行 NER 實體識別铲敛,然后在模型的輸入中可以融入這些實體知識特征,通過引入外部知識來優(yōu)化分類的模型有 KPCNN会钝、STCKA 等伐蒋。由于 Word2vec、GloVe 等模型訓(xùn)練得到的詞語 embedding 對不同的上下文來說都是固定的迁酸,無法解決一詞多義等問題先鱼,基于此陸續(xù)提出的 ELMO、GPT奸鬓、BERT 等深度預(yù)訓(xùn)練語言模型漸漸成為了 NLP 任務(wù)的標(biāo)配焙畔,這些模型及其各種演進(jìn)版本在多個 GLUE 基準(zhǔn)中均取得了進(jìn)一步的突破。

通過在大規(guī)模語料上預(yù)訓(xùn)練得到的 BERT 等模型能較好地動態(tài)捕獲詞語在不同上下文中的前后向語義表達(dá)串远,基于這些預(yù)訓(xùn)練模型在意圖分類任務(wù)上進(jìn)行 finetune 學(xué)習(xí)能進(jìn)一步提升模型分類準(zhǔn)確率宏多。同樣地,像 ERNIE 等模型通過引入外部知識也能進(jìn)一步提升模型效果澡罚,尤其在一些垂直搜索有較多特定領(lǐng)域?qū)嶓w的情況下伸但,可以嘗試將這些領(lǐng)域?qū)嶓w知識融入模型預(yù)訓(xùn)練及 finetune 過程中。由于 BERT 等模型復(fù)雜度較高留搔,進(jìn)行在線 inference 時耗時也相對較高可能達(dá)不到性能要求更胖,為此需要在模型精度和復(fù)雜度上做個權(quán)衡,從模型剪枝隔显、半精度量化却妨、知識蒸餾等方向進(jìn)行性能優(yōu)化。這里可以嘗試通過權(quán)重分解及參數(shù)共享等方法精簡優(yōu)化的 ALBERT 模型括眠,也可以嘗試諸如 DistilBERT彪标、TinyBERT 等知識蒸餾學(xué)習(xí)模型。

圖片

槽位解析:

前面介紹的各種基于深度學(xué)習(xí)模型的意圖分類能起到比較好相關(guān)性導(dǎo)航的作用掷豺,如將 query 意圖劃分到"天氣"捞烟、"酒店"账锹、"汽車"等意圖體系中。但是針對更加復(fù)雜的口語化 query坷襟,我們需要進(jìn)行識別提取出 query 中重要的意圖成分以進(jìn)行更全面的意圖理解奸柬,此時僅進(jìn)行意圖分類是不夠的。比如對于搜索 query "北京飛成都的機(jī)票"婴程,意圖分類模型可以識別出是"訂機(jī)票"的意圖廓奕,但是無法區(qū)分出 query 中的出發(fā)地和目的地信息,需要通過一定方法識別出"出發(fā)地"概念及其對應(yīng)值是"北京"档叔、"目的地"概念及其對應(yīng)值是"成都"桌粉,基于此可以作出一些決策提供更直觀的結(jié)果以提升用戶搜索體驗。

圖片

由于自然語言表達(dá)充滿著歧義性衙四,計算機(jī)肯定是無法直接理解的铃肯,需要將 query 表示成計算機(jī)能夠理解的表示。類似于計算機(jī)語言無法理解高級編程語言一樣传蹈,需要通過將高級編程語言代碼編譯成低級的匯編或二進(jìn)制代碼后計算機(jī)才能執(zhí)行押逼。所以我們也需要一個類似的"編譯器"能將 query 按一定文法規(guī)則進(jìn)行確定性的形式化表示,可以將這個過程稱之為語義解析惦界,前面提到的傳統(tǒng) KBQA 的做法也需要該技術(shù)將 query 轉(zhuǎn)換成相應(yīng)的形式化表示才能進(jìn)一步執(zhí)行推理等操作挑格。

對于 query "北京飛成都的機(jī)票",通過意圖分類模型可以識別出 query 的整體意圖是訂機(jī)票沾歪,在此基礎(chǔ)上進(jìn)一步語義解析出對應(yīng)的出發(fā)地 Depart="北京"漂彤,到達(dá)地 Arrive="成都",所以生成的形式化表達(dá)可以是:Ticket=Order(Depart,Arrive)灾搏,Depart={北京}挫望,Arrive={成都}。如果 query 換成是"成都飛北京的機(jī)票"狂窑,同樣的需要解析出 query 的意圖是訂機(jī)票媳板,但是出發(fā)地和到達(dá)地互換了,所以語義解析過程需要除了需要對概念進(jìn)行標(biāo)注識別蕾域,還可以通過對概念進(jìn)行歸一來提高泛化性拷肌,比如這里"北京"到旦、"成都"都可以歸一為 [city] 概念旨巷,形式化表達(dá)變?yōu)椋篢icket=Order(Depart,Arrive),Depart={city}添忘,Arrive={city}采呐,其中 city={北京、上海搁骑、成都…}斧吐。

形式化表達(dá)可以遞歸地定義為一些子表達(dá)式的組合的形式又固,為進(jìn)行語義解析,最主要的是確定一種形式化語言及對應(yīng)的解析器煤率,通常我們采用確定的上下文無關(guān)文法以確保形式化的每一部分都對應(yīng)有一個解析樹仰冠。得到 query 對應(yīng)的形式化表示后,還可以進(jìn)行一些解析樹歸并等形式化運(yùn)算推演蝶糯。為此洋只,除了可以用來理解搜索 query 的結(jié)構(gòu)化語義,語義解析技術(shù)也廣泛應(yīng)用于 QA 問答及聊天機(jī)器人中昼捍,如多輪對話中比較有挑戰(zhàn)的上下文省略和指代消歧問題也可以一定程度通過將下文 query 對應(yīng)的解析樹合并變換到上文 query 對應(yīng)的解析樹中來解決识虚。如下圖例子所示,當(dāng)用戶在第一輪對話詢問"成都明天氣溫妒茬?"時構(gòu)造出相應(yīng)的解析樹担锤,接著問"后天如何?"時就可以將日期進(jìn)行替換后合并到之前的解析樹中乍钻。

圖片

目前學(xué)術(shù)界和工業(yè)界在形式化語言和語義解析器方面均有一定的研究成果肛循,通過一些基于統(tǒng)計、半監(jiān)督银择、監(jiān)督的方法來訓(xùn)練得到語義解析器育拨,其中比較有名的開源語義解析器有 Google 的 SLING、SyntaxNet欢摄。簡單的做法是通過人工制定的正則表達(dá)式和槽位解析的方法來進(jìn)行語義解析熬丧,正則表達(dá)式相對好理解,槽位解析是指通過將具有相同模式的 query 歸納成模板怀挠,基于模板規(guī)則來解析用戶 query 意圖及意圖槽位值析蝴。模板構(gòu)成主要包括:槽位詞、固定詞绿淋、函數(shù)闷畸、通配符,其形式化表達(dá)變?yōu)橹胁畚辉~是指能抽象到某一概念的詞語集合吞滞,如:"北京"佑菩、"上海"、"成都"這些詞都可以抽象到城市概念裁赠,固定詞也即明確的某個詞語殿漠,可以通過函數(shù)來匹配一些諸如數(shù)字組合等詞,通配符可以匹配任意字符佩捞。

我們需要結(jié)合領(lǐng)域的業(yè)務(wù)知識來構(gòu)造模板绞幌,構(gòu)造過程需要保證模板符合語法句式規(guī)范,同時盡量保證其泛化性以覆蓋更多的 query 問法一忱。舉個簡單例子莲蜘,構(gòu)造模板:"適合[Slot:User][Wild:0-10][Slot:AppType]"及相應(yīng)的槽位詞 [Slot:User]={女生谭确,男生,小孩票渠,老人,…}逐哈、[Slot:AppType]={單機(jī)游戲,益智游戲问顷,moba游戲鞠眉,…},然后通過構(gòu)建如下圖所示的相應(yīng) trie 樹择诈,可以自上而下遍歷及回溯解析出 query "適合女生玩的單機(jī)游戲"匹配上了這個模板械蹋,從而識別出 query 整體意圖是詢問女生類單機(jī)游戲,其中用戶槽位值為"女生"羞芍,app 類型槽位值為"單機(jī)游戲"哗戈,"適合"是固定詞,"玩的"匹配通配符 [Wild:0-10]荷科,基于這些槽位解析的結(jié)果唯咬,接下來可以進(jìn)行一系列的決策。

槽位解析方法的優(yōu)點(diǎn)是準(zhǔn)確率高畏浆,可控性強(qiáng)胆胰,解釋性好,但缺點(diǎn)是需要耗費(fèi)較多地人力進(jìn)行對模板及槽位詞等進(jìn)行標(biāo)注刻获,同時維護(hù)起來也比較麻煩蜀涨。可以考慮結(jié)合一些策略方法來一定程度減少人工標(biāo)注量蝎毡,如基于前面提到的同義詞挖掘技術(shù)及詞向量化挖掘同位/上下位詞等方法來輔助槽位詞的標(biāo)注厚柳,以及在人工進(jìn)行模板標(biāo)注的基礎(chǔ)上采用 bootstrapping 迭代挖掘構(gòu)造出更多的模板。槽位解析的具體實現(xiàn)可以參考的開源項目 Snips-nlu沐兵,進(jìn)行意圖識別的同時從自然語言句子中解析提取結(jié)構(gòu)化槽位信息别垮。

圖片
圖片

8. 敏感識別

敏感識別模塊主要對 query 進(jìn)行是否帶有色情、反動扎谎、賭博碳想、暴力等敏感話題的識別,如果識別出 query 中存在敏感話題可以進(jìn)行定向改寫到相對合適的 query 或者給用戶做搜索引導(dǎo)提示等處理毁靶。敏感識別可以歸為分類問題胧奔,最簡單的做法就是詞表匹配,按不同的敏感話題人工輸入一批詞庫老充,復(fù)雜點(diǎn)就訓(xùn)練一個分類模型進(jìn)行多分類葡盗,傳統(tǒng)的 SVM、最大熵分類或者 TextCNN啡浊、TextRNN 等模型都能比較好地 work觅够。

9. 時效性分析

用戶的搜索需求可能會顯式或隱式地帶有一定的時效性要求,如:"最近上映的好看電影"帶有顯式的時間詞"最近"巷嚣,而"疫情進(jìn)展"則隱式地表達(dá)了解最新情況的需求喘先。時效性大概可以分為三種:持續(xù)時效性,周期時效性廷粒,準(zhǔn)/實時時效性窘拯。其中持續(xù)時效性是指 query 一直具有時效性,如:"美食推薦"坝茎,周期時效性是指具有周期性涤姊、季節(jié)性的事件或需求,如:"世界杯"嗤放、用戶在冬季搜索"上衣"等思喊,而準(zhǔn)/實時效性是指近期發(fā)生或突然發(fā)生的事件。

通過分析出 query 的時效性需求等級的不同次酌,在召回 item 時就可以針對性地做一些過濾或者在排序時進(jìn)行時效性調(diào)權(quán)恨课。其中顯式的時效性需求因為帶有時間關(guān)鍵詞,可以通過規(guī)則匹配或訓(xùn)練分類模型進(jìn)行判斷識別岳服,而隱式表達(dá)的時效性則可以通過按時間維度分析歷史搜索 qv 行為剂公、實時監(jiān)測最新搜索 qv 變化情況以及綜合考慮搜索意圖及當(dāng)前時間上下文等方法來判斷識別。

03

結(jié)語

人工智能的發(fā)展是循序漸進(jìn)的吊宋,需要經(jīng)歷從計算智能到記憶智能纲辽、感知智能、認(rèn)知智能璃搜,最終到達(dá)創(chuàng)造智能等多個發(fā)展階段才能稱得上是真正的人工智能文兑。目前業(yè)界在計算、記憶和感知方面已經(jīng)做得相對比較成熟腺劣,但是在認(rèn)知智能方面則還需要有進(jìn)一步突破绿贞,而 NLP 恰好是實現(xiàn)認(rèn)知智能最重要的一環(huán),為此 NLP 也被稱為人工智能皇冠上的一顆明珠橘原。同樣地籍铁,真正的語義搜索也遠(yuǎn)未到來,對 query 的語義理解能力很大程度決定著整個搜索的智能程度趾断。本文僅為個人在進(jìn)行 query 理解相關(guān)優(yōu)化項目的一些簡單總結(jié)拒名,主要從搜索的角度對 query 理解涉及的各個重要模塊的概念及其對應(yīng)的一些方法進(jìn)行闡述。文中暫未涉及太深的技術(shù)探討芋酌,希望能幫助到大家對搜索 QU 相關(guān)概念有一個初步的認(rèn)識增显,起到拋磚引玉的效果,如有錯誤及不足之處脐帝,還請不吝交流指出同云。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末糖权,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子炸站,更是在濱河造成了極大的恐慌星澳,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旱易,死亡現(xiàn)場離奇詭異禁偎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)阀坏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門如暖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人忌堂,你說我怎么就攤上這事盒至。” “怎么了浸船?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵妄迁,是天一觀的道長。 經(jīng)常有香客問我李命,道長登淘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任封字,我火速辦了婚禮黔州,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘阔籽。我一直安慰自己流妻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布笆制。 她就那樣靜靜地躺著绅这,像睡著了一般。 火紅的嫁衣襯著肌膚如雪在辆。 梳的紋絲不亂的頭發(fā)上证薇,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機(jī)與錄音匆篓,去河邊找鬼浑度。 笑死,一個胖子當(dāng)著我的面吹牛鸦概,可吹牛的內(nèi)容都是我干的箩张。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼先慷!你這毒婦竟也來了饮笛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤熟掂,失蹤者是張志新(化名)和其女友劉穎缎浇,沒想到半個月后扎拣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赴肚,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年二蓝,在試婚紗的時候發(fā)現(xiàn)自己被綠了誉券。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡刊愚,死狀恐怖踊跟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鸥诽,我是刑警寧澤商玫,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站牡借,受9級特大地震影響拳昌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钠龙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一炬藤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碴里,春花似錦沈矿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至根竿,卻和暖如春陵像,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背犀填。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工蠢壹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人九巡。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓图贸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子疏日,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容