垃圾詢盤過濾,焦點科技的 Milvus 實踐

文章作者:

黎陽,焦點科技軟件開發工程師

李成龍,Zilliz 數據工程師

Milvus (https://milvus.io/) 向量搜索引擎開源半年以來,全球已經有數百家企業或組織用戶。焦點科技是一家以 B2B 外貿交易爲主營業務的科技公司,也是 Milvus 的用戶。

| 應用場景

焦點科技旗下多條產品線的商品搜索服務均由搜索平臺支撐。但在信息爆炸的背景下,越來越多的信息以非文本的形式出現,傳統基於分詞與規則匹配的搜索服務已經滿足不了對大量非文本數據的搜索場景。爲了拓展業務覆蓋場景,提高流量,焦點科技開展了擴展向量搜索服務平臺的項目。

在 B2B 電商網站中國製造網中,有效過濾掉重複的“廣告式”詢價、推銷等垃圾詢盤對提升詢盤質量有很大幫助,垃圾詢盤的過濾精度直接影響用戶的口碑。而提升詢盤質量就等於改善了用戶體驗,無論買家還是賣家都能獲取更真實有效的交易信息,完成更多交易。

傳統的垃圾詢盤過濾很難通過文本匹配規則產生很好的效果,很長一段時間垃圾詢盤過濾都需要靠人工完成,效率低下且耗費人力資源。焦點科技通過 Milvus 建立的向量搜索業務,對已知的垃圾詢盤向量進行了底庫的建立,每當有可疑詢盤產生時就進入向量匹配階段,根據結果和業務規定的臨界值等規則進行判斷,智能且自動化地完成垃圾詢盤的過濾。

| 關鍵技術

MinHash

在過去通過人工過濾垃圾詢盤的時代中,焦點科技累積下了一定數量的已知的垃圾詢盤模板。由於功能需求是尋找與既往詢盤以及詢盤模板在語句和結構上相似的詢盤郵件,不存在語義匹配的需求,因此考慮使用文本字符串相似度計算方法。

兩個集合的相似度可以使用 Jaccard 相似度進行計算,即兩個集合的交併比,但在海量數據的情況下計算兩兩之間的交併比對計算資源要求很高。考慮到既往詢盤量爲千萬級,對計算實時性要求較高,因此選擇使用 MinHash 算法將詢盤文本轉換爲哈希編碼來進行最近鄰檢索。

MinHash 算法的主要思想爲:

(1)一個文本從字符串的角度可以近似看做由字(詞)或字(詞)的 2-gram 構成的集合。

(2)用相同的隨機方式從兩個集合中抽取一個元素,兩個元素相等的概率等同於 Jaccard 相似度。隨機的哈希函數對兩個集合中的所有元素進行哈希運算,取兩個集合的最小哈希值判斷是否相等,重複該操作多次即可近似評估最小哈希值相等的概率,這種方式就是隨機抽取的一種實現。

(3)多種哈希函數所計算得到的最小哈希值構成的向量序列即爲該集合的MinHash,可作爲該集合的哈希編碼。計算兩個哈希編碼之間的歐式距離作爲源文本字符串的相似度。

MinHash 本質上是對文本對應的字(詞)集合進行了降維,目標是降低 Jaccard 相似度計算的複雜度,並儘可能保持計算精度。

在本例中對詢盤文本使用 jieba 工具(https://github.com/fxsjy/jieba)加載業務詞表的方式進行分詞,ngram 爲 1 的方式構建文本對應詞集合,採用 200 種不同的哈希編碼構建長度爲 200 的 MinHash 向量,在目前的業務場景中表現出了較好的近鄰檢索能力。

Milvus

Milvus 是一款開源的特徵向量相似度搜索引擎,具有使用方便、實用可靠、易於擴展、穩定高效和搜索迅速等特點。Milvus 可以對接包括圖片識別,視頻處理,聲音識別,自然語言處理等深度學習模型,爲向量化後的非結構數據提供搜索分析服務。

Milvus 的數據處理流程通常有以下幾個步驟:

  1. 通過深度學習模型或者其他算法將非結構化數據轉化爲特徵向量;

  2. 將特徵向量導入 Milvus 庫進行存儲並建立索引;

  3. 在 Milvus 中進行搜索,返回檢索向量的相似結果。

 

在垃圾詢盤過濾的場景中,通過 MinHash 算法將已知的垃圾詢盤數據向量化並導入 Milvus 庫,Milvus 對向量進行存儲並建立索引,再通過 Milvus 進行搜索即可返回相似向量的結果。另外,提供 Java SDK 和 Docker 部署方式的 Milvus 對開發十分友好,不僅搜索效率高,部署也十分簡單。

| 系統實現

作爲一個統一的服務接口平臺,焦點科技在開發的時候儘量迴避了向量搜索對業務的定製,將 Milvus 實例抽象成搜索服務節點,嵌入原有的搜索平臺中,當有向量搜索業務場景需求時,則向這些節點建立業務。

在系統構建層面,焦點科技將 Milvus 實例與文本搜索實例放在了同一層級,通過一個業務控制器分別進行向量搜索結果的召回、文本信息回查等流程,上層通過路由分發器進行負載均衡與讀寫分離的處理。

 整個業務流程中大致可以分爲三個流程:

(1)向量化流程

在查詢客戶端中,將待判斷的詢盤利用 MinHash 算法轉化爲特徵向量。

(2)向量查詢流程

查詢向量首先進入 Milvus 服務集羣,通過在指定的節點上進行臨近匹配,召回前 TopK 個向量與向量 ID;

(3)信息回查流程:

業務控制器控制 Milvus 的結果向量 ID 進入文本搜索服務集羣中進行相關信息的收集(向量 ID 即相關信息的主鍵,通過自定義向量 ID 實現)。通過相關信息的分析,從發送地址、身份、是否標記爲垃圾詢盤模板等多個維度進行分析,如果出現以下兩種情況,則可以確定該詢盤爲垃圾詢盤:

  • 如果查詢向量匹配到的結果向量多來自同一地址的不同身份或未認證身份;

  • 結果向量中多爲已標記垃圾詢盤的模板。

當然,此邏輯可被定製,根據不同業務的需求可以增加更多判斷邏輯。

未來 Milvus 版本中會加入富文本和高級搜索,那麼相關信息可以通過在 document 中帶入,不需要回調文本搜索服務來獲取,期待早日上線。

| 結語

對於程序員來說,頭疼的手撕向量搜索問題迎來了救世主,經過多版本的迭代 Milvus 增加了越來越多的新功能,大大簡化了對業務需求實現的難度。Milvus 正在以肉眼可見的速度茁壯成長,在開源的世界開闢自己的地盤,未來可期。

希望 Milvus 在非結構化數據處理的道路上走得更遠,爲企業帶去更多的價值。同時也希望更多志同道合的夥伴加入 Milvus 開源社區,一起參與、見證 Milvus 的成長。

| 歡迎加入 Milvus 社區

github.com/milvus-io/milvus | 源碼

milvus.io | 官網

milvusio.slack.com | Slack 社區

zhihu.com/org/zilliz-11/columns | 知乎

zilliz.blog.csdn.net | CSDN 博客

space.bilibili.com/478166626 | Bilibili

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章