treelistview 所有节点失去焦点_垃圾询盘过滤,焦点科技的 Milvus 实践
文章作者:
黎陽(yáng),焦點(diǎn)科技軟件開(kāi)發(fā)工程師
李成龍,Zilliz 數(shù)據(jù)工程師
Milvus?(https://milvus.io/) 向量搜索引擎開(kāi)源半年以來(lái),全球已經(jīng)有數(shù)百家企業(yè)或組織用戶。焦點(diǎn)科技是一家以 B2B 外貿(mào)交易為主營(yíng)業(yè)務(wù)的科技公司,也是 Milvus 的用戶。|?應(yīng)用場(chǎng)景
焦點(diǎn)科技旗下多條產(chǎn)品線的商品搜索服務(wù)均由搜索平臺(tái)支撐。但在信息爆炸的背景下,越來(lái)越多的信息以非文本的形式出現(xiàn),傳統(tǒng)基于分詞與規(guī)則匹配的搜索服務(wù)已經(jīng)滿足不了對(duì)大量非文本數(shù)據(jù)的搜索場(chǎng)景。為了拓展業(yè)務(wù)覆蓋場(chǎng)景,提高流量,焦點(diǎn)科技開(kāi)展了擴(kuò)展向量搜索服務(wù)平臺(tái)的項(xiàng)目。
在 B2B 電商網(wǎng)站中國(guó)制造網(wǎng)中,有效過(guò)濾掉重復(fù)的“廣告式”詢價(jià)、推銷等垃圾詢盤對(duì)提升詢盤質(zhì)量有很大幫助,垃圾詢盤的過(guò)濾精度直接影響用戶的口碑。而提升詢盤質(zhì)量就等于改善了用戶體驗(yàn),無(wú)論買家還是賣家都能獲取更真實(shí)有效的交易信息,完成更多交易。
傳統(tǒng)的垃圾詢盤過(guò)濾很難通過(guò)文本匹配規(guī)則產(chǎn)生很好的效果,很長(zhǎng)一段時(shí)間垃圾詢盤過(guò)濾都需要靠人工完成,效率低下且耗費(fèi)人力資源。焦點(diǎn)科技通過(guò) Milvus 建立的向量搜索業(yè)務(wù),對(duì)已知的垃圾詢盤向量進(jìn)行了底庫(kù)的建立,每當(dāng)有可疑詢盤產(chǎn)生時(shí)就進(jìn)入向量匹配階段,根據(jù)結(jié)果和業(yè)務(wù)規(guī)定的臨界值等規(guī)則進(jìn)行判斷,智能且自動(dòng)化地完成垃圾詢盤的過(guò)濾。
|?關(guān)鍵技術(shù)
MinHash
在過(guò)去通過(guò)人工過(guò)濾垃圾詢盤的時(shí)代中,焦點(diǎn)科技累積下了一定數(shù)量的已知的垃圾詢盤模板。由于功能需求是尋找與既往詢盤以及詢盤模板在語(yǔ)句和結(jié)構(gòu)上相似的詢盤郵件,不存在語(yǔ)義匹配的需求,因此考慮使用文本字符串相似度計(jì)算方法。兩個(gè)集合的相似度可以使用 Jaccard 相似度進(jìn)行計(jì)算,即兩個(gè)集合的交并比,但在海量數(shù)據(jù)的情況下計(jì)算兩兩之間的交并比對(duì)計(jì)算資源要求很高。考慮到既往詢盤量為千萬(wàn)級(jí),對(duì)計(jì)算實(shí)時(shí)性要求較高,因此選擇使用 MinHash 算法將詢盤文本轉(zhuǎn)換為哈希編碼來(lái)進(jìn)行最近鄰檢索。MinHash 算法的主要思想為:(1)一個(gè)文本從字符串的角度可以近似看做由字(詞)或字(詞)的 2-gram 構(gòu)成的集合。(2)用相同的隨機(jī)方式從兩個(gè)集合中抽取一個(gè)元素,兩個(gè)元素相等的概率等同于 Jaccard 相似度。隨機(jī)的哈希函數(shù)對(duì)兩個(gè)集合中的所有元素進(jìn)行哈希運(yùn)算,取兩個(gè)集合的最小哈希值判斷是否相等,重復(fù)該操作多次即可近似評(píng)估最小哈希值相等的概率,這種方式就是隨機(jī)抽取的一種實(shí)現(xiàn)。
(3)多種哈希函數(shù)所計(jì)算得到的最小哈希值構(gòu)成的向量序列即為該集合的MinHash,可作為該集合的哈希編碼。計(jì)算兩個(gè)哈希編碼之間的歐式距離作為源文本字符串的相似度。
MinHash 本質(zhì)上是對(duì)文本對(duì)應(yīng)的字(詞)集合進(jìn)行了降維,目標(biāo)是降低 Jaccard 相似度計(jì)算的復(fù)雜度,并盡可能保持計(jì)算精度。
在本例中對(duì)詢盤文本使用 jieba 工具(https://github.com/fxsjy/jieba)加載業(yè)務(wù)詞表的方式進(jìn)行分詞,ngram 為 1 的方式構(gòu)建文本對(duì)應(yīng)詞集合,采用 200 種不同的哈希編碼構(gòu)建長(zhǎng)度為 200 的 MinHash 向量,在目前的業(yè)務(wù)場(chǎng)景中表現(xiàn)出了較好的近鄰檢索能力。
Milvus
Milvus 是一款開(kāi)源的特征向量相似度搜索引擎,具有使用方便、實(shí)用可靠、易于擴(kuò)展、穩(wěn)定高效和搜索迅速等特點(diǎn)。Milvus 可以對(duì)接包括圖片識(shí)別,視頻處理,聲音識(shí)別,自然語(yǔ)言處理等深度學(xué)習(xí)模型,為向量化后的非結(jié)構(gòu)數(shù)據(jù)提供搜索分析服務(wù)。
Milvus 的數(shù)據(jù)處理流程通常有以下幾個(gè)步驟:
通過(guò)深度學(xué)習(xí)模型或者其他算法將非結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)化為特征向量;
將特征向量導(dǎo)入 Milvus 庫(kù)進(jìn)行存儲(chǔ)并建立索引;
在 Milvus 中進(jìn)行搜索,返回檢索向量的相似結(jié)果。
在垃圾詢盤過(guò)濾的場(chǎng)景中,通過(guò) MinHash 算法將已知的垃圾詢盤數(shù)據(jù)向量化并導(dǎo)入 Milvus 庫(kù),Milvus 對(duì)向量進(jìn)行存儲(chǔ)并建立索引,再通過(guò) Milvus 進(jìn)行搜索即可返回相似向量的結(jié)果。另外,提供 Java SDK 和 Docker 部署方式的 Milvus 對(duì)開(kāi)發(fā)十分友好,不僅搜索效率高,部署也十分簡(jiǎn)單。
|?系統(tǒng)實(shí)現(xiàn)
作為一個(gè)統(tǒng)一的服務(wù)接口平臺(tái),焦點(diǎn)科技在開(kāi)發(fā)的時(shí)候盡量回避了向量搜索對(duì)業(yè)務(wù)的定制,將 Milvus 實(shí)例抽象成搜索服務(wù)節(jié)點(diǎn),嵌入原有的搜索平臺(tái)中,當(dāng)有向量搜索業(yè)務(wù)場(chǎng)景需求時(shí),則向這些節(jié)點(diǎn)建立業(yè)務(wù)。
在系統(tǒng)構(gòu)建層面,焦點(diǎn)科技將 Milvus 實(shí)例與文本搜索實(shí)例放在了同一層級(jí),通過(guò)一個(gè)業(yè)務(wù)控制器分別進(jìn)行向量搜索結(jié)果的召回、文本信息回查等流程,上層通過(guò)路由分發(fā)器進(jìn)行負(fù)載均衡與讀寫分離的處理。
?整個(gè)業(yè)務(wù)流程中大致可以分為三個(gè)流程:
(1)向量化流程
在查詢客戶端中,將待判斷的詢盤利用 MinHash 算法轉(zhuǎn)化為特征向量。
(2)向量查詢流程
查詢向量首先進(jìn)入 Milvus 服務(wù)集群,通過(guò)在指定的節(jié)點(diǎn)上進(jìn)行臨近匹配,召回前 TopK 個(gè)向量與向量 ID;
(3)信息回查流程:
業(yè)務(wù)控制器控制 Milvus 的結(jié)果向量 ID 進(jìn)入文本搜索服務(wù)集群中進(jìn)行相關(guān)信息的收集(向量 ID 即相關(guān)信息的主鍵,通過(guò)自定義向量 ID 實(shí)現(xiàn))。通過(guò)相關(guān)信息的分析,從發(fā)送地址、身份、是否標(biāo)記為垃圾詢盤模板等多個(gè)維度進(jìn)行分析,如果出現(xiàn)以下兩種情況,則可以確定該詢盤為垃圾詢盤:
如果查詢向量匹配到的結(jié)果向量多來(lái)自同一地址的不同身份或未認(rèn)證身份;
結(jié)果向量中多為已標(biāo)記垃圾詢盤的模板。
當(dāng)然,此邏輯可被定制,根據(jù)不同業(yè)務(wù)的需求可以增加更多判斷邏輯。
未來(lái) Milvus 版本中會(huì)加入富文本和高級(jí)搜索,那么相關(guān)信息可以通過(guò)在 document 中帶入,不需要回調(diào)文本搜索服務(wù)來(lái)獲取,期待早日上線。
|?結(jié)語(yǔ)
對(duì)于程序員來(lái)說(shuō),頭疼的手撕向量搜索問(wèn)題迎來(lái)了救世主,經(jīng)過(guò)多版本的迭代 Milvus 增加了越來(lái)越多的新功能,大大簡(jiǎn)化了對(duì)業(yè)務(wù)需求實(shí)現(xiàn)的難度。Milvus 正在以肉眼可見(jiàn)的速度茁壯成長(zhǎng),在開(kāi)源的世界開(kāi)辟自己的地盤,未來(lái)可期。
希望 Milvus 在非結(jié)構(gòu)化數(shù)據(jù)處理的道路上走得更遠(yuǎn),為企業(yè)帶去更多的價(jià)值。同時(shí)也希望更多志同道合的伙伴加入 Milvus 開(kāi)源社區(qū),一起參與、見(jiàn)證 Milvus 的成長(zhǎng)。
|?歡迎加入 Milvus 社區(qū)github.com/milvus-io/milvus |?源碼milvus.io |?官網(wǎng)milvusio.slack.com |?Slack 社區(qū)zhihu.com/org/zilliz-11/columns |?知乎zilliz.blog.csdn.net |?CSDN?博客space.bilibili.com/478166626 |?Bilibili總結(jié)
以上是生活随笔為你收集整理的treelistview 所有节点失去焦点_垃圾询盘过滤,焦点科技的 Milvus 实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Qt编译Android库
- 下一篇: 2021SC@SDUSC Zxing开源