朱 俊
(歐冶工業(yè)品股份有限公司,上海 201900)
在采購任務的背景下,企業(yè)或組織通常需要采購大量的工業(yè)品,以滿足生產(chǎn)和運營的需求。這些工業(yè)品可以包括原材料、零部件、設備和其他必要的物資。為了高效地完成采購任務,采購商經(jīng)常依賴于工業(yè)品電商平臺,這些平臺提供了一個集中展示和銷售各種工業(yè)品的市場。
然而,傳統(tǒng)基于分詞索引的搜索方法在處理這類批量檢索任務時面臨許多困難,這些困難點限制了采購商在工業(yè)品電商平臺上的效率和準確性:
(1)大規(guī)模查詢:采購商需要查詢大量的商品以了解不同產(chǎn)品的特性、價格和供應商等信息。傳統(tǒng)的搜索方法在處理大規(guī)模查詢時往往效率低下,需要耗費大量時間和資源。
(2)搜索時間長:采購商需要盡快獲得關(guān)于大量商品的信息,以便做出及時的決策。然而傳統(tǒng)的搜索方法由于基于分詞索引和詞條匹配的方式,搜索時間較長,無法滿足采購商的快速查詢需求。
(3)意圖理解困難:傳統(tǒng)搜索方法無法理解采購商的意圖。它們只依賴于詞條匹配,而無法準確捕捉采購商的具體需求和意圖。這導致搜索結(jié)果可能不夠準確,使采購商在評估和比較商品時面臨困難。
(4)不準確的搜索結(jié)果:傳統(tǒng)方法的詞條匹配搜索可能產(chǎn)生不準確的結(jié)果,因為它們無法考慮商品的多維特征和相似性。這使得采購商在選擇合適的商品時可能遇到困難,增加了采購決策的風險。
綜上所述,批量采購任務在工業(yè)品電商平臺上存在一些挑戰(zhàn)和困難。為了解決這些問題,引入向量搜索技術(shù)可以提供快速、準確的商品檢索,同時能夠更好地理解采購商的意圖,提升搜索結(jié)果的準確性和效率。
向量搜索技術(shù)也被稱為近似最近鄰搜索(approximate nearest neighbor search,ANN),是一種針對海量高維數(shù)據(jù)進行快速查詢的算法技術(shù)。該技術(shù)的基礎(chǔ)是將復雜的對象或數(shù)據(jù)轉(zhuǎn)換成高維空間中的向量,通過計算向量之間的距離來進行相似性比較。在人工智能和機器學習領(lǐng)域,數(shù)據(jù)通常被表示為高維向量。例如,在自然語言處理中,詞語和句子可以被表示為高維向量,這就需要使用向量搜索技術(shù)來查找最相關(guān)的信息。
向量搜索技術(shù)可應用于較多場景,例如在推薦系統(tǒng)中,需要找出與用戶歷史行為最相似的物品來進行推薦,可以將用戶的行為和物品的屬性都轉(zhuǎn)化為向量,然后通過計算向量之間的距離來找出最相似的物品;在圖像和視頻搜索中,可以將圖像和視頻的特征提取出來,轉(zhuǎn)化為向量,然后通過向量搜索技術(shù)來找出最相似的圖像或視頻;在自然語言處理里,可以將詞語和句子轉(zhuǎn)化為向量(詞向量和句向量),然后通過向量搜索技術(shù)來完成諸如語義搜索,文本相似度計算,機器翻譯等任務。在生物信息學領(lǐng)域,基因序列、蛋白質(zhì)序列等也可以被表示為高維向量,通過向量搜索技術(shù)快速找出具有相似特性的基因或蛋白質(zhì)。
向量搜索能夠?qū)⒄Z義信息映射到高維向量空間中,通過向量間的相似度計算,在檢索過程中找到與查詢條件相似的對象。向量搜索框架通常包括以下幾個部分:
(1)向量表示:利用深度學習模型(如Word2Vec、GloVe、BERT等)進行嵌入,將被搜索文本轉(zhuǎn)換成高維向量。這些模型通過對大量文本數(shù)據(jù)進行訓練,學習到每個詞匯(或短語)在語義空間中的表示,從而捕捉詞匯間的關(guān)系和上下文信息[1]。
(2)索引構(gòu)建:以哈希表等數(shù)據(jù)結(jié)構(gòu)構(gòu)建好文本向量索引,并采用近似的搜索策略[2]。例如FAISS、Annoy、HNSW等都是流行的向量索引庫。
(3)查詢處理:將用戶的查詢轉(zhuǎn)換為相應的向量表示,然后在索引中檢索與該查詢向量相似的結(jié)果。相似性通過計算查詢向量與索引中向量之間的距離來實現(xiàn)。
(4)結(jié)果排序與優(yōu)化:對檢索到的結(jié)果進行排序和優(yōu)化,以提供更準確的檢索結(jié)果。
相較于傳統(tǒng)搜索方法,向量搜索在批量檢索方面支持批量快速運行,可高效地在大規(guī)模向量空間中查找最相似的結(jié)果。此外向量搜索方法能夠捕捉詞匯和語義信息,使得向量搜索能夠更好地理解用戶輸入的搜索語句,并在搜索結(jié)果中體現(xiàn)語義相關(guān)性。
本文提出了一種基于FAISS的向量搜索方案,用于快速搜索大規(guī)模向量數(shù)據(jù)集中與給定向量最相似的項[3],具體步驟如下:
(1)商品的文本嵌入。
首先通過內(nèi)部商品數(shù)據(jù)產(chǎn)生一個文本嵌入模型。這里采用Sentence-BERT模型作為文本嵌入工具,Sentence-BERT能夠結(jié)合人工整理后的商品專業(yè)詞庫按詞進行嵌入,相比BERT按token嵌入有更好的效果[4]。方案中采用1 790 100條商品數(shù)據(jù)進行微調(diào),包含商品名稱、型號規(guī)格、品牌、技術(shù)屬性信息、商品類別信息等。
(2)建立FAISS索引。
通過微調(diào)后將每個商品嵌入768維的向量并建立FAISS indexFlatL2索引,即通過計算搜索文本與商品向量的歐幾里得距離進行索引(圖1)。
圖1 商品嵌入及FAISS索引建立
(3)搜索文本加強。
借助積累好的品牌、型號規(guī)格詞庫,通過對搜索文本進行處理以加強搜索文本的特征,處理內(nèi)容包括:
① 基于型號規(guī)格詞庫,使用jieba分詞提取文本中的型號規(guī)格信息。
② 基于商品專業(yè)詞庫,使用Sentence-BERT分詞對搜索文本進行分詞。
③ 使用Sentence-BERT對搜索文本進行嵌入。
(4)FAISS召回。
使用FAISS對搜索文本進行召回,取相較于搜索文本向量的歐幾里得距離最近的1 000條商品作為召回結(jié)果,并對計算得到的歐幾里得距離進行歸一作為距離權(quán)重。搜索文本對第i個召回結(jié)果的距離權(quán)重S1i的計算方法為:
(1)
式中:Dmax為1 000個召回結(jié)果中的最大距離;Di為第i個召回結(jié)果的距離。
(5)型號規(guī)格權(quán)重計算。
對搜索文本中提取出來的型號規(guī)格進行切詞,得到一系列切開的型號規(guī)格,并去除空格、逗號等無意義符號。計算搜索文本對第i個召回結(jié)果的型規(guī)權(quán)重S2i:
(2)
式中:Ci為搜索的型號規(guī)格切詞在第i個召回結(jié)果中出現(xiàn)的個數(shù);L為搜索文本切詞的數(shù)量。
(6)加權(quán)排序。
將距離權(quán)重S1i和型規(guī)權(quán)重S2i加權(quán)相加,得到第i個召回的排序權(quán)重Si(圖2):
圖2 搜索文本召回及排序
Si=0.3S1i+0.7S2i
(3)
因為應用場景中對型號精確匹配有較高的要求,故此處經(jīng)人工試驗后距離權(quán)重S1i的加權(quán)設置為0.3,型規(guī)權(quán)重S2i的加權(quán)設置為0.7,加權(quán)可以根據(jù)實際場景需求進行調(diào)整。計算每個商品的排序權(quán)重后,根據(jù)排序權(quán)重進行降序排序,取前五個結(jié)果作為匹配結(jié)果。
上述步驟為針對單條搜索文本的處理過程,在批量搜索的場景中,采用FAISS的批量索引方法進行批量召回及距離權(quán)重計算,再針對每條搜索文本進行常規(guī)權(quán)重計算和加權(quán)排序即可。
基于FAISS的向量搜索方案與傳統(tǒng)基于分詞索引的ES搜索從如下兩個方面進行對比:
(1)準確率Precision。
取Precision@20、Precision@10、Precision@5,即分別取20、10、5個返回結(jié)果,判斷它們是否都符合搜索意圖,若有不符合的則認為此條結(jié)果不準確,取正確結(jié)果數(shù)量/n作為準確率。
(2)搜索耗時。
以100條商品搜索信息(包含搜索商品名稱與主要型號規(guī)格信息,且每條商品均有5條以上可匹配商品)為輸入,從170 W商品集合中進行數(shù)據(jù)匹配,此外,ES搜索和FAISS向量搜索部署在同一臺服務器上,算力及網(wǎng)絡環(huán)境相同。本次采用FAISS-CPU模式,未使用GPU資源進行加速。搜索準確率對比如表1所示。
表1 基于ES和FAISS的批量檢索準確率對比
試驗結(jié)果表明,在搜索速度上向量搜索有較大優(yōu)勢,在100條搜索文本下向量搜索僅需4.40 s就能完成搜索,而ES需要耗時約18.21 s。但FAISS相對ES搜索的召回率略低,經(jīng)結(jié)果分析發(fā)現(xiàn),主要問題在于文本嵌入模型無法很好地學習一些低頻專業(yè)詞的語義,尤其是型號規(guī)格,而當搜索文本僅包含型號規(guī)格時,向量搜索無法召回全部正確結(jié)果,此問題后續(xù)可以通過針對這些語義理解效果差的詞進行數(shù)據(jù)增強,并再次微調(diào)Sentence-BERT以優(yōu)化語義嵌入表現(xiàn)。這仍將導致FAISS檢索在Precision@20的準確率略低于ES搜索。但由于FAISS檢索在召回階段后可以加入更精細的排序策略,因此排序效果優(yōu)于ES搜索,在Precision@10以及Precision@5上均高于ES搜索。
本文針對電商商品批量檢索場景,提出了一種基于FAISS的向量搜索方案。相較于傳統(tǒng)搜索方法,該方案具有搜索速度快、能夠理解搜索語義及針對召回結(jié)果進行精確排序的優(yōu)勢。本文提出的方案仍有改進空間,例如可嘗試更多的預訓練模型,以及在后處理排序階段可以考慮更多的特征進行加權(quán)。