文字匹配 multi-view —smn—dua—dam
dssm
1)q-q匹配:召回候選答案
倒排索引+tfidf/bm25
tfidf
bm25
2)q-a匹配:深度文字匹配模型
utterance-response matching
從單輪q-r的匹配擴充套件到多輪呢?最簡單的想法就是直接把多輪對話首尾連線變成乙個長長的單輪
對應這種將長長的word embedding sequence,
上圖的綠色->黃色->紅色的部分,
可以看到utterance-level確實是明顯比word-level work的,而且整合一下提公升效果更顯著。
matchpyramid(aaai2016中科院計算所)
smn給定乙個candidate response,在生成word-level的每個utterance的向量表示的時候,
之後就是使用前面multi-view中的做法,
在計算對齊矩陣和得到context embedding的時候,用了更複雜一些的方法。如圖
在計算對齊矩陣的時候,
從實驗效果來看,smn相比較之前的multi-view有很大的提公升,這也說明了:
在q-r匹配上,基於互動的模型相比基於表示的模型有更大的優勢
對文字進行多粒度表示是很有必要的。
以往的想法是,無論怎樣都要先encode成一條向量才可以開始算相似度。
將特徵矩陣做矩陣乘法得到相似度矩陣(對於segment還是用乙個可訓練矩陣來乘)
import levenshtein
lsh
區域性敏感hash(lsh)實現方式有多種,常用的就是simhash。
計算出simhash值後,再計算hash值的漢明距離,即可得到文字的相似性。
漢明距離
漢明距離計算文字相似性主要6個步驟為:分詞、hash、加權、合併、降維、計算漢明距離,前5個步驟本質上是simhash演算法的流程,思路很簡單易懂。
漢明距離為乙個整數,似乎不能很直觀的反應兩個文字的相似度(0 ~ 1),所以這裡通過實驗的方法找了條類似正態分佈的函式來將漢明距離轉化為乙個0~1之間的數來表示相似度
(jaccard系數值越大,相似度越高)
分詞:a = [今天,天氣,真好],b = [今天,天氣,不錯]
上游的query預處理、糾錯拓展、意圖識別,到下游的召回、精排
對於原始query,需要處理:
nlu,如文字分類、實體識別、文字匹配之類
nlg,即文字生成但是在查詢拓展、糾錯等方面
使用者query進來,一般要做如下處理:
query理解其實是乙個非常重要的模組,好的query理解能為後續的工作提供很大的支援。這部分往往不直接應對下游,而是按需使用,有點像輔助吧。
改寫模組其實非常關鍵,這是連線使用者query和資料庫底層資料的橋梁,資料庫的儲存有特定的形式,但是使用者不會按照你的底層資料結構去寫,例如,使用者不見得會輸入和平精英,而是吃雞,資料庫裡可不見得會存吃雞對吧,所以這塊很重要。
結合命名實體識別、改寫結果,然後開始召回,模式比較多,包括但不限於下面形式:
說白了,就是把用上面流程處理過的query放到資料庫裡面查,這個其實就是召回。
document層面。
綜合層面:
其他層面:
模型上,dssm系列似乎是比較流行的方法,但是提取一些特定的特徵,有的時候簡單的lr、xgboost就能一定程度把問題解決好了。
而在排序模組中,還會涉及一些硬規則等。
顯然,整個搜尋系統遠遠不止這些內容,在演算法視角下,其實還需要很多輔助模組協助我們進行演算法開發。
lucene學習筆記2 檢索
對已經建立好的索引庫進行檢索 功能詳細描述 param keyword 搜尋條件 param indexpath 索引路徑 throws ioexception throws parseexception see 類 類 方法 類 成員 public void search string keywo...
全文檢索初步學習筆記
本文主要是學習oracle text 對伺服器本地檔案進行檢索的學習筆記,主要參考oracle全文檢索這個電子書和網上的一些例子。首先將dba許可權賦予你的登入賬號 begin ctx ddl.create preference my datastore prefs file datastore c...
Hibernate學習筆記 三 檢索方式
一 提高查詢效能 1 盡量使用迫切連線,以減少查詢資料庫的次數。2 對使用延遲載入或者立即檢索策略設定批量 查詢數目,以檢索查詢資料庫的次數。3 使用查詢快取 4 有的時候資料量較大,只負責顯示的資料可使用sql查詢,以減少快取空間。5 儘量減少返回記錄集欄位的數目,只返回所需要的字段。6 使用集合...