自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

RAG開發(fā)新技術(shù):利用語義相似度提升標(biāo)簽過濾質(zhì)量 原創(chuàng)

發(fā)布于 2024-9-23 14:31
瀏覽
0收藏

本文旨在介紹如何利用語義相似度改進(jìn)標(biāo)簽過濾以提升RAG應(yīng)用開發(fā)質(zhì)量。

要理解本文中的內(nèi)容,你需要掌握J(rèn)accard相似性和向量搜索等預(yù)備知識(shí)。本文算法的實(shí)現(xiàn)已在GitHub(https://github.com/atlantis-nova/simtag)上發(fā)布,并且是完全開源的。

簡(jiǎn)介

多年來,我們已經(jīng)發(fā)現(xiàn)了如何從諸如數(shù)字、原始文本、圖像和標(biāo)簽等不同類型的模式數(shù)據(jù)中檢索信息。

隨著應(yīng)用程序定制用戶接口的日益普及,標(biāo)簽搜索系統(tǒng)已成為一種方便、準(zhǔn)確的信息過濾方式。通常,使用標(biāo)簽搜索的一些代表性場(chǎng)景包括檢索社交媒體帖子、文章、游戲、電影,甚至簡(jiǎn)歷等領(lǐng)域。

然而,傳統(tǒng)的標(biāo)簽搜索缺乏靈活性。如果我們要過濾完全包含給定標(biāo)簽的樣本,可能會(huì)出現(xiàn)以下情況,特別是對(duì)于僅包含幾千個(gè)樣本的數(shù)據(jù)庫,可能沒有任何(或只有少數(shù))與我們的查詢匹配的樣本。

RAG開發(fā)新技術(shù):利用語義相似度提升標(biāo)簽過濾質(zhì)量-AI.x社區(qū)

缺乏有關(guān)信息時(shí)兩種搜索方案的搜索結(jié)果差異(作者本人提供圖片)

通過下面的內(nèi)容,我將介紹幾種新的搜索算法。就我所知,目前我還沒有在網(wǎng)絡(luò)上找到與此相同的算法。

傳統(tǒng)標(biāo)簽搜索是如何工作的?

傳統(tǒng)系統(tǒng)采用一種稱為Jaccard相似度的算法(通常通過Minhash算法執(zhí)行),該算法能夠計(jì)算兩組元素之間的相似度(在我們的例子中,這些元素是標(biāo)簽)。如前所述,這樣的搜索根本不靈活(無論集合中包含或是不包含查詢的標(biāo)簽)。

RAG開發(fā)新技術(shù):利用語義相似度提升標(biāo)簽過濾質(zhì)量-AI.x社區(qū)

一個(gè)簡(jiǎn)單的AND位操作示例(盡管這里給出的并非是Jaccard相似性,但是能夠展示過濾方法的大致概念)(作者本人提供圖片)

我們能做得更好嗎?

如果我們不只是從匹配的標(biāo)簽中過濾樣本,而是考慮樣本中所有其他不相同但與我們選擇的標(biāo)簽相似的標(biāo)簽,那么情況會(huì)怎么樣呢?我們可以使算法更加靈活,將結(jié)果擴(kuò)展到非完美匹配,但仍然是良好的匹配。我們的思路是:直接將語義相似性應(yīng)用于標(biāo)簽,而不是文本。

語義標(biāo)簽搜索算法

正如文章開頭提到的那樣,這種新方法試圖將語義搜索的功能與標(biāo)簽過濾系統(tǒng)相結(jié)合。為了構(gòu)建這個(gè)算法,我們只需要做一件事:

  • 創(chuàng)建一個(gè)標(biāo)記樣本的數(shù)據(jù)庫

在本文示例項(xiàng)目中,我將使用的參考數(shù)據(jù)是Steam游戲庫的開源集合(可從Kaggle下載:https://www.kaggle.com/datasets/fronkongames/steam-games-dataset,遵循MIT許可證)——大約有40000個(gè)樣本,這是用于測(cè)試我們算法的不錯(cuò)的樣本。正如我們從顯示的數(shù)據(jù)幀中看到的,每個(gè)游戲都對(duì)應(yīng)幾個(gè)已分配的標(biāo)簽,我們的數(shù)據(jù)庫中共有400多個(gè)唯一的標(biāo)簽。

RAG開發(fā)新技術(shù):利用語義相似度提升標(biāo)簽過濾質(zhì)量-AI.x社區(qū)

示例源文件中提供的Steam數(shù)據(jù)幀截圖(作者本人提供圖片)

現(xiàn)在,我們已經(jīng)準(zhǔn)備好了初始數(shù)據(jù),就可以繼續(xù)接下來的工作了。

我們的算法將通過以下步驟進(jìn)行闡述:

  • 提取標(biāo)簽關(guān)系
  • 對(duì)查詢和樣本進(jìn)行編碼
  • 使用向量檢索執(zhí)行語義標(biāo)簽搜索
  • 驗(yàn)證

在本文中,我將只分析這種新方法背后的數(shù)學(xué)原理(有關(guān)代碼的深入解釋和工作演示,請(qǐng)參閱本文示例工程源碼:https://github.com/atlantis-nova/simtag/blob/main/notebooks/steam_example.ipynb。有關(guān)如何使用simtag的說明,請(qǐng)參閱源碼工程根目錄下的README.md文件)。

1.提取標(biāo)簽關(guān)系

首先想到的問題是,我們?nèi)绾握业綐?biāo)簽之間的關(guān)系。請(qǐng)注意,目前已經(jīng)存在幾種算法可用于獲得相同的結(jié)果:

  • 使用統(tǒng)計(jì)方法

我們可以用來提取標(biāo)簽關(guān)系的最簡(jiǎn)單的方法稱為共現(xiàn)矩陣(co-occurrence matrix),這是我將在本文中使用的格式(出于其有效性和簡(jiǎn)單性)。

  • 使用深度學(xué)習(xí)

最先進(jìn)的都是基于嵌入神經(jīng)網(wǎng)絡(luò)(如過去使用的Word2Vec;現(xiàn)在通常使用轉(zhuǎn)換器,如LLM),可以提取樣本之間的語義關(guān)系。創(chuàng)建一個(gè)神經(jīng)網(wǎng)絡(luò)來提取標(biāo)簽關(guān)系(以自動(dòng)編碼器的形式)是可能的,而且在面對(duì)某些情況時(shí)通常也是明智的方案。

  • 使用預(yù)訓(xùn)練模型

因?yàn)闃?biāo)簽是使用人類語言定義的,所以可以使用現(xiàn)有的預(yù)訓(xùn)練模型來計(jì)算已經(jīng)存在的相似性。這可能會(huì)更快,而且減少了麻煩。然而,每個(gè)數(shù)據(jù)集都有其獨(dú)特性。不足的一點(diǎn)是,使用預(yù)先訓(xùn)練的模型將忽略客戶行為。

例如,我們稍后將看到2D與Fantasy有著密切的關(guān)系:但是,使用預(yù)先訓(xùn)練的模型永遠(yuǎn)不會(huì)發(fā)現(xiàn)這樣的匹配對(duì)。

算法的選擇可能取決于許多因素,特別是當(dāng)我們必須處理龐大的數(shù)據(jù)池或有可擴(kuò)展性問題時(shí)(如果我們擁有太多的標(biāo)簽,那么我們需要使用機(jī)器學(xué)習(xí)來解決這個(gè)問題)。

a.使用Michelangiolo相似性構(gòu)建共現(xiàn)矩陣

如前所述,我將使用共現(xiàn)矩陣作為提取這些關(guān)系的手段。我的目標(biāo)是找到每對(duì)標(biāo)簽之間的關(guān)系。為此,我將使用IoU(聯(lián)合上的交集)對(duì)所有樣本集(S)應(yīng)用以下計(jì)數(shù):

RAG開發(fā)新技術(shù):利用語義相似度提升標(biāo)簽過濾質(zhì)量-AI.x社區(qū)

計(jì)算一對(duì)標(biāo)簽之間相似度的公式(作者本人提供圖片)

該算法與Jaccard相似度非常相似。雖然這種算法針對(duì)樣本進(jìn)行操作(而我介紹的那種算法針對(duì)元素進(jìn)行操作),但是由于(據(jù)我所知)這個(gè)特定的應(yīng)用程序尚未被編程實(shí)現(xiàn)過;因此,我們可以將其命名為Michelangiolo相似性。(公平地說,這個(gè)算法的使用以前在StackOverflow問題中已經(jīng)提到過,但從未被編程實(shí)現(xiàn)過)。

RAG開發(fā)新技術(shù):利用語義相似度提升標(biāo)簽過濾質(zhì)量-AI.x社區(qū)

Jaccard相似性和Michelangiolo相似性的差異(作者本人提供圖片)

對(duì)于40000個(gè)樣本,提取相似性矩陣大約需要一個(gè)小時(shí),結(jié)果如下:

RAG開發(fā)新技術(shù):利用語義相似度提升標(biāo)簽過濾質(zhì)量-AI.x社區(qū)

樣本列表S中所有唯一標(biāo)簽的共現(xiàn)矩陣(作者本人提供圖片)

接下來,讓我們手動(dòng)檢查前10個(gè)樣本中一些比較常見的標(biāo)簽,看看結(jié)果是否有意義:

RAG開發(fā)新技術(shù):利用語義相似度提升標(biāo)簽過濾質(zhì)量-AI.x社區(qū)

從共現(xiàn)矩陣中提取的樣本關(guān)系(作者本人提供圖片)

結(jié)果看起來很有希望!我們從簡(jiǎn)單的分類數(shù)據(jù)(只能轉(zhuǎn)換為0和1)開始,但我們提取了標(biāo)簽之間的語義關(guān)系(甚至沒有使用神經(jīng)網(wǎng)絡(luò))。

b.使用預(yù)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)

同樣,我們可以使用預(yù)訓(xùn)練的編碼器(https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2)提取樣本之間的現(xiàn)有關(guān)系。然而,這種解決方案忽略了只能從我們的數(shù)據(jù)中提取的關(guān)系,只關(guān)注人類語言的現(xiàn)有語義關(guān)系。注意,這種算法可能不是一個(gè)非常適合基于零售數(shù)據(jù)的工作解決方案。

另一方面,通過使用神經(jīng)網(wǎng)絡(luò),我們不再需要構(gòu)建關(guān)系矩陣。因此,當(dāng)關(guān)注可擴(kuò)展性時(shí),這是一種比較適當(dāng)?shù)慕鉀Q方案。例如,如果我們必須分析大量的推特?cái)?shù)據(jù),我們會(huì)得到53.300個(gè)標(biāo)簽。根據(jù)這個(gè)數(shù)量的標(biāo)簽計(jì)算共現(xiàn)矩陣將得到大小為2500000000的稀疏矩陣(這是一個(gè)非常不切實(shí)際的壯舉)。相反,通過使用輸出向量長(zhǎng)度為384的標(biāo)準(zhǔn)編碼器,得到的矩陣的總大小將為19200200。

RAG開發(fā)新技術(shù):利用語義相似度提升標(biāo)簽過濾質(zhì)量-AI.x社區(qū)

使用預(yù)訓(xùn)練編碼器對(duì)一組標(biāo)簽進(jìn)行編碼的快照數(shù)據(jù)

2.對(duì)查詢和樣本進(jìn)行編碼

我們的目標(biāo)是構(gòu)建一個(gè)能夠支持語義標(biāo)簽搜索的搜索引擎:根據(jù)我們一直在構(gòu)建的格式,唯一能夠支持這種方案的技術(shù)是使用向量搜索。因此,我們需要找到一個(gè)合適的編碼算法,將樣本和查詢轉(zhuǎn)換為向量。

在大多數(shù)編碼算法中,我們都會(huì)使用相同的算法對(duì)查詢和樣本進(jìn)行編碼。然而,每個(gè)樣本都包含多個(gè)標(biāo)簽,而每個(gè)標(biāo)簽都由一組不同的關(guān)系表示;因此,我們需要在單個(gè)向量中捕獲這些關(guān)系。

RAG開發(fā)新技術(shù):利用語義相似度提升標(biāo)簽過濾質(zhì)量-AI.x社區(qū)

協(xié)變量編碼(作者本人提供圖片)

此外,我們需要解決上述可擴(kuò)展性問題,我們將通過使用PCA模塊來實(shí)現(xiàn)(當(dāng)我們使用共現(xiàn)矩陣時(shí),我們可以跳過PCA,因?yàn)椴恍枰獕嚎s我們的向量)。

當(dāng)標(biāo)簽的數(shù)量變得太大時(shí),我們需要放棄計(jì)算共現(xiàn)矩陣的可能性,因?yàn)樗云椒剿俾士s放。因此,我們可以使用預(yù)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)提取每個(gè)現(xiàn)有標(biāo)簽的向量(PCA模塊的第一步)。例如,all-MiniLM-L6-v2模型將每個(gè)標(biāo)簽轉(zhuǎn)換為長(zhǎng)度為384的向量。

然后,我們可以轉(zhuǎn)置獲得的矩陣,并對(duì)其進(jìn)行壓縮:我們最初將使用1和0對(duì)可用標(biāo)簽索引對(duì)查詢/樣本進(jìn)行編碼,從而得到與初始矩陣(53300)長(zhǎng)度相同的初始向量。此時(shí),我們可以使用預(yù)先計(jì)算的PCA實(shí)例在大小為384的維度中壓縮相同的稀疏向量。

編碼樣本

就我們的樣本而言,該過程在PCA壓縮(激活時(shí))后立即結(jié)束。

編碼查詢:協(xié)變量編碼

我們的查詢需要以不同的方式編碼:我們需要考慮與每個(gè)現(xiàn)有標(biāo)簽相關(guān)的關(guān)系。這個(gè)過程是通過首先將壓縮向量與壓縮矩陣(所有現(xiàn)有關(guān)系的總和)相加來執(zhí)行的。現(xiàn)在,我們已經(jīng)獲得了一個(gè)矩陣(384x384),我們需要對(duì)其進(jìn)行平均計(jì)算,從而獲得我們的查詢向量。

因?yàn)槲覀儗⑹褂脷W幾里德搜索,它將首先優(yōu)先搜索得分最高的特征(理想情況下,我們使用數(shù)字1激活的特征),但它也會(huì)考慮額外的次要得分情況。

加權(quán)搜索

因?yàn)槲覀儗⑾蛄科骄谝黄?,所以我們甚至可以?duì)此計(jì)算應(yīng)用權(quán)重,向量將受到與查詢標(biāo)簽不同的影響。

3.使用向量檢索執(zhí)行語義標(biāo)簽搜索

你可能會(huì)問這樣的問題:為什么我們要經(jīng)歷這個(gè)復(fù)雜的編碼過程,而不僅僅是將這對(duì)標(biāo)簽輸入到函數(shù)f(query, sample)中并獲得一個(gè)分值?

如果你熟悉基于向量的搜索引擎,你已經(jīng)知道答案了。通過成對(duì)執(zhí)行計(jì)算,在只有40000個(gè)樣本的情況下,所需的計(jì)算能力是巨大的(單個(gè)查詢可能需要長(zhǎng)達(dá)10秒):這不是一種可擴(kuò)展的做法。然而,如果我們選擇對(duì)40000個(gè)樣本進(jìn)行向量檢索,搜索將在0.1秒內(nèi)完成:這是一種高度可擴(kuò)展的做法,在我們的應(yīng)用情況下這是非常完美的辦法。

4.驗(yàn)證

為了使算法有效,需要對(duì)其進(jìn)行驗(yàn)證。目前,我們?nèi)狈m當(dāng)?shù)臄?shù)學(xué)驗(yàn)證(乍一看,對(duì)M的相似性得分進(jìn)行平均已經(jīng)顯示出非常有希望的結(jié)果,但需要進(jìn)一步的研究來獲得有證據(jù)支持的客觀指標(biāo))。

然而,當(dāng)使用比較示例并可視化比較時(shí),現(xiàn)有結(jié)果的優(yōu)勢(shì)是非常直觀的。以下是兩種搜索方法的最靠近頂部的搜索結(jié)果比較(你看到的是分配給此游戲的標(biāo)簽)。

RAG開發(fā)新技術(shù):利用語義相似度提升標(biāo)簽過濾質(zhì)量-AI.x社區(qū)

傳統(tǒng)標(biāo)簽搜索與語義標(biāo)簽搜索的比較

  • 傳統(tǒng)標(biāo)簽搜索

我們可以看到傳統(tǒng)搜索可能會(huì)(在沒有額外規(guī)則的情況下,樣本會(huì)根據(jù)所有標(biāo)簽的可用性進(jìn)行過濾,而不是排序)返回具有更多標(biāo)簽的樣本,但其中許多標(biāo)簽可能并不相關(guān)。

  • 語義標(biāo)簽搜索

語義標(biāo)簽搜索根據(jù)所有標(biāo)簽的相關(guān)性對(duì)所有樣本進(jìn)行排序。簡(jiǎn)單來說,它取消了包含不相關(guān)標(biāo)簽的樣本的資格。

這個(gè)新系統(tǒng)的真正優(yōu)勢(shì)在于,當(dāng)傳統(tǒng)搜索無法返回足夠的樣本時(shí),我們可以使用語義標(biāo)簽搜索來選擇任意數(shù)量的樣本。

RAG開發(fā)新技術(shù):利用語義相似度提升標(biāo)簽過濾質(zhì)量-AI.x社區(qū)

兩次搜索結(jié)果稀缺前的差異(作者本人提供圖片)

在上面的例子中,使用傳統(tǒng)的標(biāo)簽過濾不會(huì)從Steam庫中返回任何游戲。然而,通過使用語義標(biāo)簽過濾,盡管我們?nèi)匀粫?huì)得到不完美的結(jié)果,但會(huì)得到與我們的查詢最匹配的結(jié)果。你看到的是與我們的搜索匹配的前5個(gè)游戲的標(biāo)簽。

結(jié)論

在此之前,如果不采用復(fù)雜的方法,如聚類、深度學(xué)習(xí)或多個(gè)K近鄰算法(KNN)搜索,就不可能在考慮標(biāo)簽語義關(guān)系的情況下對(duì)標(biāo)簽進(jìn)行過濾。

本文中給出的算法提供的靈活性應(yīng)允許與傳統(tǒng)的手動(dòng)標(biāo)記方法分離,后者迫使用戶在一組預(yù)定義的標(biāo)簽之間進(jìn)行選擇,并開辟了使用視覺語言模型的LLM自由地將標(biāo)簽分配給文本或圖像的可能性,而不局限于預(yù)先存在的結(jié)構(gòu),從而為可擴(kuò)展和改進(jìn)的搜索方法開辟了新的選擇方案。

最后,我懷著最美好的祝愿決定向全世界開放這個(gè)算法,我也十分希望它能得到充分的利用。

譯者介紹

朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計(jì)算機(jī)教師,自由編程界老兵一枚。

原文標(biāo)題:??Introducing Semantic Tag Filtering: Enhancing Retrieval with Tag Similarity??,作者:Michelangiolo Mazzeschi

?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦