做者|Ajit Rajasekharan 編譯|VK 來源|Towards Data Science數組
從文檔中獲取的句子片斷的嵌入能夠做爲該文檔的提取摘要方面,並可能加速搜索,特別是當用戶輸入是一個句子片斷時。這些片斷嵌入不只比傳統的文本匹配系統產生更高質量的結果,也是問題的內在驅動的搜索方法。現代向量化表示挑戰建立有效的文檔嵌入,捕捉全部類型的文檔,使其經過使用嵌入在文檔級別進行搜索。架構
例如「蝙蝠是冠狀病毒的來源」、「穿山甲中的冠狀病毒」,由介詞、形容詞等鏈接一個或多個名詞短語的短序列。這些突出顯示的鏈接詞在很大程度上被傳統搜索系統忽略,它們不只能夠在捕獲用戶意圖方面發揮關鍵做用(例如,「蝙蝠中的冠狀病毒」不一樣於「蝙蝠是冠狀病毒的來源」或「蝙蝠中不存在冠狀病毒」)的搜索意圖,可是,保留它們的句子片斷也能夠是有價值的候選索引,能夠用做文檔的摘要提取方面(子摘要)。經過將這些句子片斷嵌入到適當的嵌入空間(如BERT)中,咱們可使用搜索輸入片斷做爲對該嵌入空間的探測,以發現相關文檔。機器學習
找到一個有文獻證據支持的綜合答案來回答「COVID-19來源什麼動物?」或者「冠狀病毒與之結合的受體」,即便是在最近發佈的covid19數據集這樣的小數據集上(約500 MB的語料庫大小,約13k文檔,8500多萬單詞,文本中約有100萬個不一樣的單詞),也是一個挑戰。學習
傳統的文檔搜索方法對於經過使用一個或多個名詞短語搜索從幾個文檔中得到答案的典型用例很是有效。傳統的文檔搜索方法也知足如下對單詞和短語的用戶體驗約束:優化
咱們看到的(結果)是咱們輸入的(搜索的)搜索引擎
例如,當咱們搜索單詞和短語(連續的單詞序列,如New York,Rio De Janeiro)時,結果一般包含咱們輸入的詞彙或它們的同義詞(例如,COVID-19搜索產生Sars-COV-2或新型冠狀病毒等結果)。.net
然而,隨着搜索輸入的單詞數量的增長,搜索結果的質量每每會降低,特別是名詞短語之間使用鏈接詞的狀況下。即便搜索引擎在結果中會突出顯示術語,可是這種結果質量的降低是仍是顯而易見,3d
例如,在下圖中,當前搜索引擎選擇性地突出顯示了「蝙蝠做爲冠狀病毒的來源」(「bats as a source of coronavirus」)中的名詞,有時甚至沒有遵循輸入序列中這些單詞的順序。 儘管文檔相關性排序一般能夠在很大程度上緩解這種狀況,但咱們仍然須要檢查每一個文檔的摘要,由於文檔不知足咱們的搜索意圖。orm
本文所述的文檔搜索方法除產生更相關的結果外,還能夠減小搜索系統中存在的這種認知負擔,尤爲是在搜索句子片斷時。 做爲說明,咱們在上面的現有搜索系統中使用的相同查詢能夠產生以下所示形式的結果(該界面僅是用於說明搜索方法的示意圖)。 值得注意的是,如下示意圖中的要點是,摘要是文檔中的實際匹配項(括號中的數字是包含片斷的文檔數以及帶有輸入搜索片斷的片斷的餘弦距離),而不是在傳統搜索系統中顯示的建議查詢或相關搜索查詢。 這些摘要方面爲結果空間提供了全景視圖,減小了無用的文檔導航並加快了對感興趣文檔的聚合。blog
輸入片斷能夠是完整或部分的句子,對其組成或樣式沒有限制。 例如,與上面的確定性查詢相反,它們多是疑問詞,咱們能夠經過搜索「冠狀病毒結合的受體是什麼?」來找到冠狀病毒結合的蛋白受體
上面的搜索系統之間的比較僅用於說明文檔發現的基本方法之間的差別。 不然,鑑於語料庫大小的數量級差別,這將是不公平的比較,由於咱們必定會在一個微小的語料庫中得到更多相關的結果。
因爲向量化表示相對於傳統的純符號搜索方法的優點,它已經成爲任何搜索形式不可或缺的一部分。現代搜索系統愈來愈多地利用它們來補充符號搜索方法。若是咱們將文檔搜索普遍地視爲文檔空間的廣度優先和深度優先遍歷的組合,那麼這兩種形式的遍歷須要具備特定於這些遍歷的特徵的嵌入。例如,咱們能夠從引發冠狀病毒的動物開始,而後深刻到蝙蝠,而後再擴展到爬行動物等。
文檔的向量化表示——從Word2vec和BERT的嵌入空間中提取的單詞、短語或句子片斷都具備獨特的互補屬性,這些屬性對於執行普遍而深刻的搜索很是有用。具體地說,詞的Word2vec嵌入(詞指的是詞和短語,如蝙蝠、果子狸等)是廣度優先搜索的有效方法,基於實體的聚類應用於結果。搜索「蝙蝠」或「麝香貓」這個詞,會獲得其餘動物,如穿山甲、駱駝等。
BERT嵌入的句子片斷(「穿山甲中的冠狀病毒」,「蝙蝠做爲冠狀病毒的來源」等)是有用的,能夠發現片斷變體,很大程度上保留原始名詞,這取決於它們在語料庫中的存在。例如,「蝙蝠做爲冠狀病毒的來源」將產生片斷的變異,如「蝙蝠冠狀病毒」、「由蝙蝠產生的冠狀病毒」等。
這些嵌入雖然在很大程度上是互補的,但也有重疊的特性,word2vec嵌入能夠產生深度優先的結果,BERT嵌入在統計結果的分佈尾端產生廣度優先結果。。例如,使用word2vec嵌入搜索蝙蝠,除了能夠搜索到駱駝、穿山甲等其餘動物以外,還能夠搜索到蝙蝠物種(若是蝠、狐蝠、飛狐、翼龍等)。使用BERT對「孔雀冠狀病毒」進行片斷搜索,獲得「貓冠狀病毒病」、「獵豹冠狀病毒」,儘管結果主要是鳥類冠狀病毒。
BERT模型容許搜索輸入(術語或片斷)不在詞彙表中,從而使任何用戶輸入均可以找到相關文檔。
從word2vec/BERT嵌入中獲取的擴展術語或片斷,用於精確匹配已使用這些術語或片斷離線索引的文檔。在離線狀態下,使用詞性標記器和分塊器的組合從語料庫中獲取片斷,並使用word2vec和BERT這兩種模型爲其建立嵌入。
將用戶輸入映射到術語和片斷嵌入不只具備增長搜索廣度和深度的優點,並且還避免了建立與用戶輸入匹配的高質量文檔嵌入的問題。具體來講,片斷扮演文檔索引的雙重角色,並使單個文檔具備可搜索的多個「提取摘要」,由於片斷嵌入在文檔中。與純粹使用術語或短語查找此類文檔相比,使用片斷還會增長找到大篇幅文檔中目標關鍵詞的概率。例如尋找冠狀病毒的潛在動物來源就是在大篇幅文檔中找到目標的一個明確的案例。咱們能夠在上面的圖中看到片斷與單個文檔匹配(這在下面的notes部分中進行了詳細的檢查)。
使用嵌入純粹是爲了發現候選術語/片斷,並利用傳統的搜索索引方法來尋找匹配這些術語/片斷的文檔,這使咱們可以大規模地執行文檔搜索。
最後,在找到諸如「 COVID-19的動物來源是什麼?」之類的普遍問題的答案時鑑於此任務的範圍和處理時間很大,所以能夠自動且脫機完成此操做,此處介紹的片斷嵌入驅動的搜索方法適用於「並不太寬廣」的實時搜索用例,例如在給定足夠的計算資源和有效的散列方法的狀況下,使用「受體冠狀病毒的受體」的嵌入大規模執行嵌入空間搜索。
如前所述,word2vec嵌入擴展了單詞和短語的搜索範圍。它們不會擴展片斷搜索的廣度——鄰域區域的直方圖常常缺乏一個明顯的尾部(下面的圖)。這是由於片斷因爲其長度而沒有足夠的鄰域上下文來學習高質量的嵌入。這一缺陷能夠經過擴展訓練的窗口大小和忽略句子邊界來增長周圍的上下文來部分地解決,可是在實踐中仍然是不夠的,由於片斷的出現次數很低。
BERT嵌入在很大程度上只增長了搜索的深度,特別是對於片斷和短語(使用BERT嵌入擴展單詞的搜索深度在實踐中是沒有用的)。雖然它們確實在必定程度上增長了寬度,例如,「獼猴中的冠狀病毒」的查詢擴展爲「棕櫚果子狸中的冠狀病毒」,包含在統計結果的分佈尾端,但其寬度不如word2vec提供的單詞和短語。下面的圖說明了它的不足之處。實現註釋中還有一些關於片斷搜索缺少廣度的例子,以及一些規避這一限制的方法。
Word2vec多是大約七年前第一個明確創建向量化表示能力的模型。這個簡單模型的「架構」其實是兩個向量數組,它輸出的embeddings對於下游應用程序(如上面描述的文檔搜索方法)仍然具備巨大的價值。
Word2vec與BERT嵌入合做,爲文檔搜索提供了一種解決方案,這種解決方案在搜索結果的質量和收斂時間方面都有可能改進傳統方法(這種要求須要進行量化)。搜索系統可使用該向量表示不只選擇特定的文檔,並且還能夠找到與所選文檔相似的文檔。
在選擇文檔以前,可使用嵌入(不管是單詞、短語仍是句子片斷)來擴大/深化搜索。詞和短語的Word2vec嵌入在很大程度上增長了文檔搜索的廣度。BERT嵌入大大增長了句子片斷的搜索深度。BERT嵌入還消除了生僻詞場景,並促進了對文檔中不一樣的重要片斷的可搜索提取摘要,從而加快了對相關文檔的聚合。
詞性標記來標記一個句子(基於CRF的比目前F1度量的STOA方法快一個數量級,而且模型的召回率也已經知足任務的要求)
分塊器(chunker)建立短語
Word2vec表示單詞和短語的嵌入
BERT用於片斷嵌入(句子轉換)
BERT用於無監督實體標記
能夠經過片斷基於到輸入片斷的餘弦距離的排序。而且集中匹配每一個片斷的文檔將被優先挑選出來,並按照與輸入片斷順序相同的順序列出。
實時搜索的計算密集型步驟是嵌入空間中的類似度搜索(Word2vec或BERT)。現有的開放源碼解決方案已經能夠大規模地執行此操做。咱們能夠作一些優化來減小時間/計算週期,好比根據輸入搜索長度只搜索兩個嵌入空間中的一個,由於這些模型的優缺點依賴於搜索長度。
a)片斷本質上是一個長短語。與短語的區別之因此有用,有一個緣由,片斷能夠是完整的句子,而不僅是部分句子
b)這些模型的強度依賴於咱們前面看到的輸入長度。Word2vec在詞/短語方面表現良好。BERT在片斷區域表現最好(≥5個單詞)
如下是BERT和Word2vec的單詞、短語(3個單詞)和片斷(8個單詞)的鄰域,它們說明了這兩個模型的互補性。分佈的尾部隨着BERT單詞長度的增長而增長,而與短語或單詞相比,片斷的尾部明顯不一樣。當計數項較低時,有時分佈可能有很厚的尾部,這表示結果較差。由sentence-transformers產生的嵌入每每有一個獨特的尾巴,與bert-as-service產生的嵌入相反,儘管都使用對子詞進行求和做爲池化方法(也有其餘池方法),由於sentence-transfomers的監督訓練使用句子對的標籤帶有蘊含,中性和矛盾的語義。
Word2vec對單詞和短語很感興趣。對於長短語,即便出現的次數很高,這種向量化幾乎能夠分解爲一種「病態形式」,在高端彙集,其他的集中在低端。長短語的分佈形狀也有所不一樣。然而,無論形狀如何,鄰域結果都清楚地代表了這種質量降低。
雖然針對同一問題的不一樣變體檢索到的片斷集是不一樣的,可是檢索到的片斷集中可能有不少交集。可是,因爲前面討論的片斷的廣度有限,有些問題可能不會產生任何涉及全部搜索的名詞的片斷。例如,「做爲冠狀病毒來源的翼龍」或「翼龍冠狀病毒」可能不會產生任何含有蝙蝠的片斷(翼龍屬於蝙蝠科)。當片斷不包含全部名詞時,須要考慮的一種方法是找到該術語的Word2vec的近義詞並使用這些術語重建查詢。
Word2vec嵌入在這種狀況下並不直接有用,由於單個出現項/短語的向量沒有足夠的上下文來學習豐富的表示。BERT嵌入沒有這個缺點,單詞有足夠的上下文來學習好的表示。然而,Word2vec仍然能夠在搜索中爲一個名詞找到近義詞。例如,若是文檔空間中只有一個對果蝠冠狀病毒的引用,那麼在翼龍中搜索冠狀病毒可能不會獲得該文檔。然而,在果蝠中搜索冠狀病毒片斷(使用Word2vec建立)能夠找到該文檔。可是若是一個片斷出如今一個分佈尾部使它成爲一個候選者,那麼就可能會被篩出去。大多數片斷固有的可解釋性提供了一個優點,而一個單詞或短語不必定具有這個優點。
使用Word2vec和實體標記,大約得到了1000(998)個生物實體。這些被用來收集195個帶有病毒的片斷。這裏顯示了一個包含30個片斷的示例
這些片斷的樣本有動物做爲冠狀病毒潛在來源的證據
原文連接:https://towardsdatascience.com/document-search-with-fragment-embeddings-7e1d73eb0104
歡迎關注磐創AI博客站: http://panchuang.net/
sklearn機器學習中文官方文檔: http://sklearn123.com/
歡迎關注磐創博客資源彙總站: http://docs.panchuang.net/