treelistview 所有節點失去焦點_垃圾詢盤過濾,焦點科技的 Milvus 實踐

4cd70238c91364b3c6decb491b6a4406.png

文章作者:

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

李成龍,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 中進行搜索,返回檢索向量的相似結果。

5d0b880d61a151ba0014c76d1be9d70f.png

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

|?系統實現

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

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

5075e5d190a283d83a3f716cf3e53890.png

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

(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 |?Bilibili2df29f171ee61ec62ea22200929ea9d4.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454171.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454171.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454171.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《操作系統》OS學習(四):計算機體系結構、內存層次和地址生成

計算機除了計算能力之外還有存儲能力,存儲能力即計算機擁有一系列的存儲介質,我們可以在存儲介質上存儲我們的代碼和數據。計算機體系結構中約定了哪些地方可以用來存儲數據:CPU內的寄存器、內存和外存。不同的存儲介質,容量、速度…

GCC中SIMD指令的應用方法

X86架構上的多媒體應用開發,如果能夠使用SIMD指令進行優化, 性能將大大提高。目前,IA-32的SIMD指令包括MMX,SSE,SSE2等幾級。 在GCC的開發環境中,有幾種使用SIMD指令的方式,本文逐一介紹。X86的…

使用angular4和asp.net core 2 web api做個練習項目(二), 這部分都是angular

上一篇: http://www.cnblogs.com/cgzl/p/7755801.html 完成client.service.ts: import { Injectable } from angular/core; import { Http, Headers } from angular/http; import { Observable } from rxjs/Observable; import { ErrorHandler } from angular/core; import rxj…

leelen可視對講怎么接線_樓宇對講系統怎么布線 樓宇對講系統布線方式【介紹】...

隨著智能小區規模不斷增加,樓宇可視對講系統應用越來越廣泛,因而視頻信號的傳輸方式與布線設計顯得越來越重要。視頻信號與數據和音頻信號不同,可行的一種傳輸方式為視頻信號基帶傳輸,下面小編就簡要介紹一下這種傳輸方式和布線方…

路由匯總實例

5.2.2.2 路由匯總策略 之前提到過,在網絡管理員計劃好子網選擇并進行預期地路由匯總時,手動路由匯總工作能取得最佳效果。例如,之前的例子設定好了一個考慮周全的計劃,管理員只使用遠離Yosemite路由器并以10.2開頭的子網。這個規定…

《操作系統》OS學習(五):連續內存分配 內存碎片、動態分配、碎片整理、伙伴系統

內存碎片 在沒有其他方式輔助的情況下,我們分配給一個進程的內存是連續的。在分配時候我們需要有動態分配與碎片處理。如何理解呢?就是每個進程需要一塊內存,我們要選取合適的位置的內存分配給它。當有的進程先結束了內存還給操作系統&#…

GCC 中文手冊 - 摘自純C論壇

GCC Section: GNU Tools (1) Updated: 2003/12/05 Index Return to Main Contents NAME gcc,g-GNU工程的C和C編譯器(egcs-1.1.2) 總覽(SYNOPSIS) gcc[option|filename ]... g[option|filename ]... 警告(WARNING) 本手冊頁內容摘自GNU C編譯器的完整文檔,僅限于解釋選項的含義…

python如何實現支持中文

#codingutf-8print("我要python支持中文") 默認情況下,python是不支持中文的。 如果要實現python支持中文(我是從python3.6開始學習的),只要在python文檔的開頭加入:“#codingutf-8"就可以了。轉載于:h…

世界之窗瀏覽器刪除文本框信息_文本框——Excel里的便利貼

工作表里面的單元格應該是足夠我們來記錄數據和信息了。但是文本框這個功能在工作表中還是存在,可以理解為便利貼功能。插入文本框1.點擊“插入”選項卡。2.然后點擊“文本框”。3.在下拉菜單里面,有兩種可供選擇:橫排文本框和垂直文本框。在…

RHEL 5服務篇—常用網絡配置命令

常用網絡配置命令 在“Linux系統管理”的文章中,大家已經學習了Linux系統的基本管理命令和技巧,為了進一步學習Linux網絡服務打下了良好的基礎。所以我作者以后將陸續推出Linux網絡服務的相關文章。希望大家能給與我大大的支持。 今天我們就來學習一下…

清華大學《操作系統》(六):非連續內存分配 段式、頁式、段頁式存儲管理

背景 連續內存分配給內存分配帶來了很多不便,可能所有空閑片區大小都無法滿足需求大小,這個分配就會失敗。基于這種現狀,就有了非連續內存分配的需求。非連續分配成功的幾率更高,但也面對更多的問題,比如分配時是不是…

python監控文件內容變化_Python監控文件內容變化

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云文件存儲NAS是一個可共享訪問&#xf…

C語言第三次博客作業---單層循環結構

一、PTA實驗作業。 題目1 1.實驗代碼 int n,i; double height1,height2;//1為輸入身高&#xff0c;2為輸出身高。 char sex; //1<height1<3; //N<1; scanf("%d",&n); while(n--){getchar();scanf("%c%lf",&sex,&height1);switch(sex)…

函數和函數式編程

python的過程就是函數&#xff0c;因為解釋器會隱式地返回默認值None。 實際編程中大部分偏函數更接近過程&#xff0c;不顯示地返回任何東西。 當沒有顯示地返回元素或者如果返回None時&#xff0c;python會返回一個None。 * 元組 ** 字典 def子句的剩余部分包括了一個雖…

清華大學《操作系統》(七):虛擬存儲、覆蓋、交換

接下來幾節都是對虛擬存儲的講解。虛擬存儲是非連續存儲管理的擴展。通過將內存中的數據暫存到外存的方式&#xff0c;為進程提供更大的內存空間。虛擬存儲出現的主要原因是因為程序規模的增長速度遠遠大于存儲器容量的增長速度&#xff0c;導致內存空間不夠用。其實針對內存空…

遵義大數據中心項目工程概況_市委書記張新文到曹州云都大數據中心等項目現場調研建設情況...

4月25日&#xff0c;市委書記張新文到曹縣調研重點項目建設情況&#xff0c;研究推進措施。市委常委、秘書長任仲義參加活動。張新文首先來到曹州云都大數據中心項目建設現場&#xff0c;查看項目推進情況。曹州云都大數據中心&#xff0c;是涵蓋云計算區、研發辦公區、公寓生活…

linux 可執行文件的分析(gcc GUN BUILEIN)

1、GCC The History of GCC 1984年&#xff0c;Richard Stallman發起了自由軟件運動&#xff0c;GNU (Gnus Not Unix)項目應運而生&#xff0c;3年后&#xff0c;最初版的GCC橫空出世&#xff0c;成為第一款可移植、可優化、支持ANSI C的開源C編譯器。GCC最初的全名是GNU C Com…

Cassandra 的數據存儲結構——本質是SortedMapRowKey, SortedMapColumnKey, ColumnValue

Cassandra 的數據存儲結構 Cassandra 的數據模型是基于列族&#xff08;Column Family&#xff09;的四維或五維模型。它借鑒了 Amazon 的 Dynamo 和 Googles BigTable 的數據結構和功能特點&#xff0c;采用 Memtable 和 SSTable 的方式進行存儲。在 Cassandra 寫入數據之前&a…

清華大學《操作系統》(八):置換算法

功能&#xff1a;置換算法是指當出現缺頁異常時&#xff0c;需要調入新頁面而內存已滿時&#xff0c;置換算法選擇被置換的物理頁面。 設計目標&#xff1a; 盡可能減少頁面的調入調出次數&#xff1b;把未來不再訪問或短期內不訪問的頁面調出。 頁面鎖定&#xff1a; 了解具…

python email模塊詳解_python模塊之email: 電子郵件編碼解碼 (一、解碼郵件)

python自帶的email模塊是個很有意思的東西&#xff0c;它可以對郵件編碼解碼&#xff0c;用來處理郵件非常好用。處理郵件是一個很細致的工作&#xff0c;尤其是解碼郵件&#xff0c;因為它的格式變化太多了&#xff0c;下面先看看一個郵件的源文件&#xff1a;Received: from …