個性化搜尋需要滿足:
• 具備較強的語義了解能力,精準命中搜尋需求;
• 滿足搜尋關鍵詞和内容的多樣性特點,可根據使用者行為優化排序,實作個性化搜尋;
例如:
- 搜尋“吃雞”,可能是遊戲吃雞内容搜尋,也可以能是新聞内容搜尋;
- 使用者點贊過的店鋪優先排序出現;
開放搜尋tag_match 函數在個性化搜尋中的應用
功能介紹:
tag_match : 用于對查詢語句和文檔做标簽比對,使用比對結果對文檔進行算分權重。涉及query和文檔比對的很多需求都可以使用或者轉化為tag_match來滿足,對實作搜尋個性化需求尤其有用。
産品文檔:
https://help.aliyun.com/document_detail/51259.html?spm=a2c4g.11186623.6.618.28f833251UOr7V适用場景
内容搜尋:
一個大型的綜合性論壇,文章可以被打上各種各樣的标簽(搞笑,體育,新聞,音樂,科普..)。我們在推送給開放搜尋的文檔中,可以為每個标簽賦予一個标簽id(例如搞笑-1, 體育-5, 新聞-3, 音樂-6..), 然後通過一個tag字段存儲這些标簽。 如果我們對文章做過預處理,甚至能得到每個文章每個标簽的權重。
例如:
- 一個搞笑體育新聞的文章可以得到搞笑的權重為0.5,體育的權重為0.5,新聞權重為0.1,則這個文章的tag字段的值為[1 0.5 5 0.5 3 0.1]對會員使用者,通過長時間的積累,我們能獲知每個使用者的興趣标簽。
- 使用者是nba_fans,對體育和搞笑很感興趣,他對應的體育和搞笑标簽的權重分别為0.6和0.3。那麼這個使用者查詢時,我們就可以通過kv_pairs子句把這個資訊加到query裡面。假如這個kv_pairs子句名字為user_tag, 那麼nba_fans的user_tag的值5=0.6:1=0.3。這樣,我們隻要在精排表達式中配置了tag_match(user_tag, tag, mul, sum), 我們就能夠實作對使用者感興趣的文章權重,把使用者更感興趣的文章排到前面。
- nba_fans搜尋到上面那個文章時,搞笑和體育這兩個标簽能夠比對到。通過指定kv_op參數為mul,我們會把query和doc中的值相乘,他們各自的計算分數分别為(體育:0.5 0.6 = 0.3, 搞笑:0.5 0.3 = 0.15)。通過指定merge_op參數為sum,我們會把體育和搞笑的分數加和(0.3+0.15 = 0.45),這個加和的分數會加到最終的排序分數上。這樣,我們就能夠實作了對這個使用者感興趣文章的排序權重。
商品搜尋:
商品可以具有多個屬性标簽,例如1表示年輕人(年齡)、2表示中年人(年齡)、3表示小清新(風格)、4表示時尚(風格)、5表示女性(性别)、6表示男性(性别)等。
- 假設我們隻想表示商品有沒有某個标簽,不想區分哪個标簽更重要。這個标簽通過options字段來儲存。那麼年輕時尚女性的衣服的options字段可以表示為[1 4 5], 注意這裡隻有标簽key,沒有value。使用者也都有自己的屬性标簽,和商品标簽對應。例如年輕女性使用者,曆史成交中多購買小清新風格衣服。這該使用者的查詢可以寫為user_options=1:3:5。注意這裡kv_pair中也是隻有标簽key,沒有value的。
- 要實作對符合使用者标簽喜好的商品權重,我們可以在formula中使用tag_match(user_options, options, 10, sum, false, false)。這裡我們通過user_options和options指定了query和doc的标簽資訊。kv_op設為常數10,表示隻要有标簽比對到,那麼比對的計算結果就是10。has_default為false,表示我們不需要初始值。doc_kv為false,表示我們doc中隻存儲了key資訊,沒有value。這樣,上面的年輕女使用者查詢到上面的衣服時,女性和年輕兩個标簽能夠比對上,這兩個标簽的計算結果都是10。通過sum這個merge_op,能夠得到這件商品的最終權重分數為20。通過這種方式,即使我們沒有标簽的權重資訊,也能夠實作對比對到的文檔做排序權重。
标簽權重優化案例實踐:
假設文檔内容共有如下10類型的标簽:
1-财經, 2-科技 ,3-體育 ,4-娛樂 ,5-時尚, 6-教育 ,7-旅遊 ,8-遊戲 ,9-科普 ,10-醫療
案例1:關鍵詞相同,但是标簽不同的title
如圖,搜尋“吃雞”出現兩篇doc,但是二者的類型不同,分别是1-财經、8-遊戲;

實踐應用
如果想将“8-遊戲”标簽的文檔在前面展示,可設定tag_match函數
以下分别示範配置在排序表達式或sort子句中的方法:
• 排序表達式展示的結果:
• sort子句展示的結果:
案例2:多标簽綜合得分展示(可針對使用者的個性化推薦)
如圖,搜尋“運動員",在一級标簽相同的情況下,需要比對二級标簽的得分
如果想優化二級标簽,把“10-醫療”标簽的文檔在前面展示,可設定tag_match函數
配置在排序表達式或sort子句中的方法:
案例3:多标簽同類型,不同得分
如圖,搜尋“運動員",紅框展示的内容,都同屬于同樣的标簽,但是每個标簽的打分不同;
如果想根據标簽整體的綜合分進行排序,可設定tag_match函數
示範配置在排序表達式或sort子句中的方法:
如果你想與更多開發者們進行交流、了解最前沿的搜尋與推薦技術,可以釘釘掃碼加入社群~
【開放搜尋】新使用者活動:阿裡雲實名認證使用者享1個月免費試用~
https://www.aliyun.com/product/opens