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

TAG:定義自然語言查詢的高效解決方案

原創(chuàng) 精選
人工智能 數(shù)據(jù)分析
TAG 模型的出現(xiàn)填補了傳統(tǒng)數(shù)據(jù)查詢技術(shù)與現(xiàn)代語義推理需求之間的空白。通過結(jié)合 SQL 查詢和大語言模型,TAG 在復(fù)雜查詢、推理和結(jié)果生成方面展現(xiàn)了強大的能力。

作者 | 崔皓

審校 | 重樓

摘要

TAG(Table-Augmented Generation)模型通過結(jié)合關(guān)系型數(shù)據(jù)庫的精準計算能力和大語言模型的語義推理能力,為復(fù)雜的自然語言查詢提供了高效解決方案。TAG 的核心流程分為查詢合成、查詢執(zhí)行和答案生成三步,能夠靈活處理多數(shù)據(jù)源的交互式查詢?nèi)蝿?wù)。通過引入語言模型,TAG 不僅可以執(zhí)行傳統(tǒng) SQL 查詢,還能在情感分析、趨勢總結(jié)等語義推理任務(wù)中展現(xiàn)卓越性能。本文詳細解析了 TAG 的功能和機制,同時引入 LOTUS 系統(tǒng)作為其具體實現(xiàn),展示了如何通過模塊化語義操作符進一步優(yōu)化數(shù)據(jù)查詢效率與推理能力。

什么是 TAG

在現(xiàn)代商業(yè)和數(shù)據(jù)分析場景中,許多重要的信息都存儲在關(guān)系型數(shù)據(jù)庫中,用戶需要通過自然語言查詢來獲取反饋。例如,一個零售經(jīng)理可能會問:“過去一個月,某個商品類別的銷售趨勢是什么?”或者“客戶對新產(chǎn)品的評價有哪些共性?”這些問題的答案不僅需要從數(shù)據(jù)庫中提取相關(guān)信息,還需要進一步結(jié)合上下文進行語義推理和總結(jié)。

為了解決這些復(fù)雜的問題,Table-Augmented Generation (TAG) 應(yīng)運而生。TAG 模型不僅能夠高效處理結(jié)構(gòu)化數(shù)據(jù),還通過引入語言模型實現(xiàn)語義推理和復(fù)雜的多步推斷。這一特性使 TAG 成為解決復(fù)雜查詢的強大工具。

TAG 模型通過三個主要步驟——查詢合成(Query Synthesis)、查詢執(zhí)行(Query Execution)和答案生成(Answer Generation)——結(jié)合了語言模型(LM)和數(shù)據(jù)庫系統(tǒng)的優(yōu)點。例如,在電商分析場景中,TAG 可以從多個數(shù)據(jù)源提取銷售記錄,結(jié)合時間信息進行趨勢分析,并進一步利用語言模型總結(jié)出關(guān)鍵洞察,例如“本月銷售額增長的主要原因是某爆款商品的熱銷”。

此外,在情感分析場景中,TAG 也展現(xiàn)了獨特的優(yōu)勢。例如,用戶查詢“客戶對某產(chǎn)品的評價是正面還是負面?”時,TAG 能夠提取評價文本,結(jié)合語言模型進行情感分類,并生成總結(jié),例如“90%的客戶反饋是正面的,主要提到產(chǎn)品的性價比和質(zhì)量”。TAG 在處理多樣化的查詢時比傳統(tǒng)方法表現(xiàn)更好,尤其是在涉及到情感分析、趨勢總結(jié)等需要推理和通用知識的任務(wù)時,表現(xiàn)尤為突出。

為什么需要使用TAG

大家有沒有遇到過這種場景,用戶提出比較復(fù)雜的問題,而系統(tǒng)需要通過關(guān)系型數(shù)據(jù)庫進行搜索并給予反饋。比如“總結(jié)經(jīng)典最賣座浪漫電影的評論”。我們需要搜索出最賣座的電影,然后找到該電影的評論信息(多條),最后將這些信息進行匯總形成摘要返回給用戶?;舅悸肥?,在數(shù)據(jù)庫中進行多表查詢、匯總、聚合等操作,還需要配合大語言模型結(jié)合上下文給出答復(fù)。

其中最容易讓人想到的方式是,通過將自然語言請求轉(zhuǎn)化為數(shù)據(jù)庫查詢,執(zhí)行查詢后返回相關(guān)結(jié)果。這種方式可以準確定位符合條件的數(shù)據(jù)記錄,但這種方式無法進一步總結(jié)或推理。這類功能背后的技術(shù)實現(xiàn)被稱為 Text2SQL,它將自然語言翻譯為 SQL 查詢語句并在數(shù)據(jù)庫中執(zhí)行。然而,Text2SQL 的能力僅限于數(shù)據(jù)的直接檢索,對于更復(fù)雜的分析或多層次推理,它顯得力不從心。

另一種方法是通過語義檢索技術(shù)實現(xiàn)。這種方法將文本信息存儲在向量數(shù)據(jù)庫中,隨后通過相似度計算(如余弦相似度)來找到最相關(guān)的記錄。這一技術(shù)被稱為 RAG (Retrieval-Augmented Generation)。RAG 的優(yōu)勢在于,它能夠結(jié)合語言模型生成自然語言答案,并通過向量檢索高效處理文本匹配問題。然而,當需要對來自多個數(shù)據(jù)表的信息進行聚合或復(fù)雜推理時,RAG 同樣面臨挑戰(zhàn)。

為了克服這些局限性,TAG (Table-Augmented Generation) 提供了更強大的解決方案,特別是在多數(shù)據(jù)源和跨表操作場景中展現(xiàn)了其獨特的優(yōu)勢。TAG 不僅能夠像 Text2SQL 一樣將自然語言查詢轉(zhuǎn)化為 SQL 并高效執(zhí)行,還可以靈活地處理來自多個表的數(shù)據(jù)關(guān)聯(lián),同時引入語言模型的推理能力,進一步豐富查詢結(jié)果的語義表達。

例如,針對“總結(jié)經(jīng)典最賣座浪漫電影的評論”這一請求,TAG 不僅能找到“泰坦尼克號”的相關(guān)評論,還能利用語言模型深入分析這些評論內(nèi)容并生成總結(jié),例如“泰坦尼克號的評論主要提到其出色的敘事和視覺效果”。通過結(jié)合數(shù)據(jù)庫的精確計算能力與語言模型的語義推理能力,TAG 成為處理復(fù)雜查詢和提供上下文豐富答案的最優(yōu)選擇。

Text2SQL、RAG和TAG之間的區(qū)別

通過上面“浪漫電影”的例子,我們提到了三個技術(shù),分別是:Text2SQL、RAG以及TAG,他們是AIGC發(fā)展不同時代的產(chǎn)物。下面,我們對他們進行一個橫向比較。

Text2SQL

它主要通過將自然語言查詢轉(zhuǎn)換為SQL查詢來執(zhí)行,適用于那些有明確數(shù)據(jù)庫關(guān)系映射的查詢。它的問題很明顯,無法處理需要語義推理、情感分析或其他復(fù)雜推理的查詢。例如,無法理解用戶查詢中的隱含含義,如“哪些客戶對產(chǎn)品X的評價是正面的”。

RAG (Retrieval-Augmented Generation)

基于檢索的生成方法,它從外部數(shù)據(jù)庫中檢索與查詢相關(guān)的信息,然后通過LM生成答案。通常用于執(zhí)行基于相關(guān)性簡單查找的任務(wù)。RAG只能處理點查找類問題,不能有效地進行數(shù)據(jù)聚合、復(fù)雜計算或多步推理。例如,無法處理“為什么我的銷售在這段時間下降”這樣的查詢,它涉及到復(fù)雜的數(shù)據(jù)匯總和推理。

TAG (Table-Augmented Generation)

TAG結(jié)合了Text2SQL和RAG的優(yōu)點,通過三個主要步驟(查詢合成、查詢執(zhí)行和答案生成)高效地回答自然語言查詢。其優(yōu)勢比較明顯: 

查詢合成:將用戶的自然語言查詢轉(zhuǎn)換為可執(zhí)行的數(shù)據(jù)庫查詢(SQL)。

查詢執(zhí)行:在數(shù)據(jù)庫中高效執(zhí)行查詢,獲取相關(guān)數(shù)據(jù)。

答案生成:結(jié)合數(shù)據(jù)庫中的數(shù)據(jù)和語言模型生成最終的自然語言答案,進行復(fù)雜的推理和總結(jié)。

TAG的創(chuàng)新在于,除了處理傳統(tǒng)數(shù)據(jù)庫查詢(如SQL),它還能夠處理需要推理、推斷世界知識的查詢,適用于需要復(fù)雜推理和多層次數(shù)據(jù)交互的查詢。

我們將三者的區(qū)別整理為如下表格。

從表格可以看出,Text2SQL 的強項在于直接提取結(jié)構(gòu)化數(shù)據(jù),RAG 在文本相關(guān)性查找方面表現(xiàn)優(yōu)異,而 TAG 通過結(jié)合 SQL 查詢和語言模型的語義推理能力,實現(xiàn)了前兩者無法完成的復(fù)雜查詢。TAG 特別適合需要跨表分析、數(shù)據(jù)聚合和復(fù)雜推理的場景,例如總結(jié)最經(jīng)典的浪漫愛情電影評論,或分析客戶對新產(chǎn)品的綜合反饋。

TAG 的內(nèi)部機制

TAG 系統(tǒng)在解決復(fù)雜自然語言查詢時,與傳統(tǒng)方法的處理流程有顯著不同,特別是在引入推理能力和豐富上下文答案方面表現(xiàn)卓越。

如下圖所示,TAG通過以下三個主要步驟, 實現(xiàn)了高效的自然語言查詢回答:

查詢合成(Query Synthesis): 首先,將用戶的自然語言請求轉(zhuǎn)換為可執(zhí)行的數(shù)據(jù)庫查詢。與 Text2SQL 不同,TAG 不僅可以生成 SQL 查詢,還能夠合成結(jié)合多個數(shù)據(jù)源和類型的復(fù)雜查詢。例如,請注意以下示例:

用戶查詢“總結(jié)被認為是‘經(jīng)典’的最賣座浪漫電影的評論”,TAG 將其翻譯為如下 SQL 查詢:

WITH CRM AS (SELECT * FROM movies WHERE genre = 'Romance' 
AND LLM('{movie_title} is a classic') = 'True')
SELECT * FROM CRM 
WHERE revenue = (SELECT MAX(revenue) FROM CRM);

在此過程中,TAG 使用 LLM 調(diào)用 LLM('{movie_title} is a classic') = 'True' 來引入新的推理能力。這一步驟被稱為“增強”步驟,因為它擴展了 SQL 查詢的能力,讓其能夠結(jié)合數(shù)據(jù)庫之外的上下文信息(例如電影是否被認為是“經(jīng)典”)。

查詢執(zhí)行(Query Execution): 一旦查詢被合成,它就會在數(shù)據(jù)庫中高效執(zhí)行。TAG 利用數(shù)據(jù)庫的計算能力來處理大規(guī)模數(shù)據(jù)檢索和精確計算,而這是語言模型難以直接執(zhí)行的。

答案生成(Answer Generation): 在最后一步,AI 模型基于檢索到的數(shù)據(jù)生成上下文的答案。通過增強步驟提供的語義推理能力,TAG 能夠?qū)⑸舷挛男畔?、通用知識以及特定領(lǐng)域的理解融入答案中,從而顯著提升回答的準確性和自然性。例如,TAG 在答案生成過程中,利用大語言模型的多層次推理能力,對檢索到的內(nèi)容進行深度語義解析,并結(jié)合額外的上下文知識(如領(lǐng)域術(shù)語和用戶查詢背景)生成自然語言答案。

在上述示例中,TAG 系統(tǒng)可以總結(jié)返回的電影評論,生成答案如“泰坦尼克號的評論主要提到其出色的敘事和視覺效果”,而這種總結(jié)得益于語言模型對評論內(nèi)容的多步推理與聚合分析能力。

下面讓我們近距離解析,TAG 處理自然語言查詢的三個步驟:

查詢合成(Query Synthesis)

查詢合成的核心是將用戶的自然語言請求轉(zhuǎn)化為數(shù)據(jù)庫可以執(zhí)行的查詢 。這一過程包含兩個關(guān)鍵任務(wù):

推斷相關(guān)數(shù)據(jù):確定回答查詢所需的數(shù)據(jù),例如從數(shù)據(jù)庫表的模式(schema)中推斷出相關(guān)字段。

語義解析:利用語言模型的語義推理能力,將自然語言請求轉(zhuǎn)化為可執(zhí)行的查詢(例如 SQL)。

當用戶查詢:“總結(jié)最高票房的經(jīng)典浪漫電影的評論”,系統(tǒng)生成的 SQL 查詢:結(jié)合了關(guān)系表字段(如 movie_title、review、revenue 和 genre),并利用語言模型過濾符合“經(jīng)典”條件的記錄。

查詢執(zhí)行(Query Execution)

查詢執(zhí)行步驟的核心是利用數(shù)據(jù)庫引擎高效地執(zhí)行生成的查詢 ,并返回相關(guān)數(shù)據(jù)表 。此步驟可以通過支持 LM(語言模型) 操作的數(shù)據(jù)庫 API 實現(xiàn)更復(fù)雜的計算和推理。在上述示例中,生成的 SQL 查詢首先過濾出浪漫電影,并通過 LM 判斷哪些電影屬于“經(jīng)典”范疇,接著按票房排名找到最高票房的電影,并返回與該電影相關(guān)的評論數(shù)據(jù)表 。

答案生成(Answer Generation)

答案生成步驟通過語言模型的語義推理能力,根據(jù)用戶請求 和查詢結(jié)果數(shù)據(jù) 生成最終的自然語言答案 。

TAG 系統(tǒng)對返回的 (例如“泰坦尼克號”的評論數(shù)據(jù))進行語義分析,總結(jié)評論內(nèi)容,并生成自然語言答案,例如“泰坦尼克號的評論大多是積極的,觀眾對其敘事和視覺效果贊譽有加”。

TAG 的研究方向

除了上面對多表查詢方面的表現(xiàn)以外,TAG 模型在查詢類型、數(shù)據(jù)模型、執(zhí)行引擎以及生成模式等多個方面都展現(xiàn)了獨特的優(yōu)勢和擴展可能性。

首先,TAG 在查詢類型的多樣性上表現(xiàn)出色。它不僅能夠處理簡單的點查詢,比如用戶希望快速檢索單行或少量數(shù)據(jù)的任務(wù),還能應(yīng)對復(fù)雜的聚合查詢。例如,一個零售經(jīng)理可能需要總結(jié)過去一個月內(nèi)的銷售趨勢,這需要 TAG 在數(shù)據(jù)庫中整合多行數(shù)據(jù)并利用語言模型進行邏輯推理。此外,TAG 還能勝任情感分析和分類等需要語義推理的高級任務(wù)。

其次,TAG 的底層數(shù)據(jù)模型設(shè)計靈活,能夠適配多種數(shù)據(jù)類型。傳統(tǒng)的結(jié)構(gòu)化數(shù)據(jù),如關(guān)系型數(shù)據(jù)庫中的表格信息,能夠通過 TAG 得到高效處理。同時,TAG 還能處理半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù),比如自由文本、圖像、視頻和音頻,這為多模態(tài)數(shù)據(jù)的集成提供了可能性。這種靈活性讓 TAG 在多樣化的數(shù)據(jù)場景中都有應(yīng)用空間。

TAG 的數(shù)據(jù)庫執(zhí)行引擎支持多種實現(xiàn)方式,使其適用于不同的查詢需求。對于結(jié)構(gòu)化數(shù)據(jù),TAG 通過 SQL 查詢的生成和執(zhí)行實現(xiàn)高效數(shù)據(jù)檢索。對于語義檢索場景,TAG 能夠?qū)⒆匀徽Z言查詢轉(zhuǎn)化為向量嵌入,并通過相似性匹配實現(xiàn)高效數(shù)據(jù)查找。此外,TAG 還可以集成新興的增強型執(zhí)行方法,比如語義操作符模型,它允許開發(fā)者在數(shù)據(jù)庫中直接執(zhí)行復(fù)雜的語義過濾和排序操作。

在生成模式方面,TAG 提供了從簡單到復(fù)雜的多種實現(xiàn)選項。簡單的生成模式如單次語言模型調(diào)用,適用于快速回答的任務(wù)。而復(fù)雜的生成模式則通過多步迭代或遞歸的方式實現(xiàn)更深層次的推理和數(shù)據(jù)整合。例如,對于需要在多行數(shù)據(jù)中發(fā)現(xiàn)隱含關(guān)系的任務(wù),TAG 能夠利用語言模型多次調(diào)用生成完整且語義豐富的答案。

TAG功能雖然強大,如果需要落地應(yīng)用必須經(jīng)過最佳實踐,于是就有了 LOTUS。LOTUS 構(gòu)建在 TAG 的理論基礎(chǔ)之上,進一步優(yōu)化了查詢執(zhí)行的效率,并提供了類似 Pandas 的直觀 API,使開發(fā)者可以通過聲明式的語義操作符快速實現(xiàn)復(fù)雜的數(shù)據(jù)查詢?nèi)蝿?wù)。LOTUS 還通過模塊化設(shè)計支持擴展,能夠集成不同的數(shù)據(jù)源和多種 AI 模型,從而為復(fù)雜自然語言查詢提供了更加高效的解決方案。

LOTUS:基于LLM的數(shù)據(jù)查詢引擎

LOTUS 是一個結(jié)合了結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)處理能力的查詢引擎,它讓基于大語言模型(LLM)的數(shù)據(jù)處理變得快速且簡單。

基本介紹

LOTUS(LLMs Over Tables of Unstructured and Structured Data)提供了一種聲明式編程模型和優(yōu)化的查詢引擎,可以針對結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)構(gòu)建強大的基于推理的查詢管道。LOTUS 通過類似 Pandas 的簡單直觀 API 實現(xiàn)語義操作符,簡化了開發(fā)人員編寫 AI 驅(qū)動查詢的復(fù)雜性。

基本概念

LOTUS 的核心是語義操作符(Semantic Operator)編程模型:

  • 語義操作符:對一個或多個數(shù)據(jù)集進行聲明式轉(zhuǎn)換,這些轉(zhuǎn)換通過自然語言表達式參數(shù)化,并可由多種 AI 算法實現(xiàn)。
  • 擴展關(guān)系模型:語義操作符能夠?qū)Π瑐鹘y(tǒng)結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化字段(如自由文本)的表操作。
  • 模塊化與組合性:操作符支持編寫高級邏輯的 AI 管道,查詢引擎負責高效執(zhí)行。

LOTUS 支持的主要語義操作符包括:

  • sem_map:將每條記錄映射為基于自然語言描述的屬性。例如,可以將商品描述轉(zhuǎn)換為更具體的類別標簽,例如將“iPhone 13”映射為“智能手機”。
  • sem_filter:篩選符合自然語言謂詞的記錄。例如,篩選出所有“價格大于100元且評分高于4星”的商品,通過語言模型解析謂詞條件進行精確篩選。
  • sem_agg:對所有記錄進行聚合,例如總結(jié)出“所有商品的平均價格”和“評分最高的商品”。
  • sem_topk:根據(jù)自然語言指定的排序規(guī)則選出前K條記錄。例如,“找出評分最高的前5個商品”。
  • sem_join:基于自然語言謂詞連接兩個數(shù)據(jù)集。例如,將訂單數(shù)據(jù)與用戶數(shù)據(jù)通過自然語言謂詞“匹配下單金額大于500元的用戶及其訂單”進行跨表關(guān)聯(lián)。
  • sem_sim_join:基于語義相似性連接兩個數(shù)據(jù)集。例如,將一列文章標題與另一列新聞?wù)ㄟ^內(nèi)容相似度進行匹配。
  • sem_search:在文本列中執(zhí)行語義搜索。例如,“在評論列中查找提到‘服務(wù)很好’的所有記錄”。

支持模型

LOTUS 支持以下三種主要模型類別:

LM(語言模型):

基于 LiteLLM 庫構(gòu)建,支持所有 LiteLLM 支持的模型(如 OpenAI、Ollama 和 vLLM)。

可參考 LiteLLM 文檔了解更多使用示例。

RM(檢索模型):

使用 SentenceTransformers 提供的模型進行語義檢索。

可通過 SentenceTransformersRM 類加載任意模型。

Reranker(重排序模型):

使用 SentenceTransformers 提供的 CrossEncoder 模型進行語義重排序。

安裝指南

要安裝 LOTUS,請按照以下步驟操作:

創(chuàng)建 Conda 環(huán)境:

conda create -n lotus python=3.10 -y
conda activate lotus

使用 pip 安裝 LOTUS:

pip install lotus-ai

如果在 Mac 上運行,請通過 Conda 安裝 FAISS:

僅 CPU 版本:

conda install -c pytorch faiss-cpu=1.8.0

GPU (+CPU) 版本:

conda install -c pytorch -c nvidia faiss-gpu=1.8.0

通過上述步驟,你即可快速搭建 LOTUS 環(huán)境,為后續(xù)的代碼開發(fā)和測試做好準備。

LOTUS 的模塊化設(shè)計使得它能夠靈活支持各種應(yīng)用場景,并為復(fù)雜自然語言查詢提供了高效解決方案。

示例代碼與解釋

以下代碼展示了 LOTUS 的一個簡單用例,通過 sem_join 操作實現(xiàn)課程和技能的語義匹配。用戶通過自然語言定義查詢邏輯,LOTUS 結(jié)合語言模型執(zhí)行查詢,最終返回結(jié)果。

import pandas as pd
import lotus
from lotus.models import LM

# configure the LM, and remember to export your API key
lm = LM(model="gpt-4o-mini")
lotus.settings.configure(lm=lm)

# create dataframes with course names and skills
courses_data = {
    "Course Name": [
        "History of the Atlantic World",
        "Riemannian Geometry",
        "Operating Systems",
        "Food Science",
        "Compilers",
        "Intro to computer science",
    ]
}
skills_data = {"Skill": ["Math", "Computer Science"]}
courses_df = pd.DataFrame(courses_data)
skills_df = pd.DataFrame(skills_data)

# lotus sem join 
res = courses_df.sem_join(skills_df, "Taking {Course Name} will help me learn {Skill}")
print(res)

# Print total LM usage
lm.print_total_usage()

我們將上述代碼代碼進行詳細拆解如下:

初始化環(huán)境和數(shù)據(jù):

import pandas as pd

courses_data = {
    "Course Name": [
        "History of the Atlantic World",
        "Riemannian Geometry",
        "Operating Systems",
        "Food Science",
        "Compilers",
        "Intro to computer science",
    ]
}
skills_data = {"Skill": ["Math", "Computer Science"]}

courses_df = pd.DataFrame(courses_data)
skills_df = pd.DataFrame(skills_data)
print("Courses DataFrame:")
print(courses_df)
print("\nSkills DataFrame:")
print(skills_df)

配置 gpt-4o-mini 作為語言模型。創(chuàng)建兩個數(shù)據(jù)框 courses_df 和 skills_df,分別包含課程名稱和技能。courses_df 包含課程名稱,這些課程可能涉及到多個領(lǐng)域。skills_df 列出了技能名稱,這些技能對應(yīng)課程的學(xué)習(xí)目標。數(shù)據(jù)框為后續(xù)的語義連接操作提供了清晰的輸入。兩個集合的對象"Course Name"和"Skill" 會在后面的代碼中進行語義關(guān)聯(lián)。

語義連接操作:

from lotus.models import LM
import lotus

# 配置語言模型
lm = LM(model="gpt-4o-mini")
lotus.settings.configure(lm=lm)

# 語義連接
res = courses_df.sem_join(skills_df, "Taking {Course Name} will help me learn {Skill}")
print("\nResult of Semantic Join:")
print(res)

sem_join 操作基于自然語言模板,通過語言模型解析 Course Name 和 Skill 之間的語義關(guān)系。這里通過”{}” 包括兩個數(shù)據(jù)集中的對象,用來表示需要處理具體對象的語義關(guān)系。想判斷課程(Course Name)與技能(Skill)之間的關(guān)系,“History of the Atlantic World” 是否與“Math”匹配由語言模型判斷。

執(zhí)行上述代碼得到如下結(jié)果:

清楚地看到課程(Course Name)與技能(Skill)之間的關(guān)系。Sem_join是LOTUS眾多操作之中的一種,它的功能就是將兩個不同數(shù)據(jù)集的數(shù)據(jù)進行關(guān)聯(lián)。通過執(zhí)行過程我們發(fā)現(xiàn)它也遵循TAG的三個步驟:

查詢合成(Query Synthesis):

自然語言模板定義了匹配邏輯(如 "Taking {Course Name} will help me learn {Skill}")。

查詢執(zhí)行(Query Execution):

LOTUS 的 sem_join 調(diào)用語言模型完成語義匹配,并返回匹配結(jié)果。

答案生成(Answer Generation):

匹配結(jié)果以 Pandas 數(shù)據(jù)框形式返回,便于進一步分析和使用。

深入源代碼

由于好奇sem_join 功能是如何實現(xiàn)的,我們通過Github查看了對應(yīng)的源碼。

通過分析,sem_join 的功能主要通過以下五個步驟實現(xiàn),每個步驟對應(yīng)不同的核心函數(shù)和邏輯。

第一步:輸入數(shù)據(jù)的準備與轉(zhuǎn)換

首先,sem_join 接收兩個輸入數(shù)據(jù)序列(l1 和 l2),并將它們轉(zhuǎn)換為多模態(tài)信息,為后續(xù)的語義處理提供基礎(chǔ)。

代碼中使用了 task_instructions.df2multimodal_info 函數(shù),將輸入的 Pandas Series 轉(zhuǎn)換為模型可處理的格式:

left_multimodal_data = task_instructions.df2multimodal_info(l1.to_frame(col1_label), [col1_label])
right_multimodal_data = task_instructions.df2multimodal_info(l2.to_frame(col2_label), [col2_label])

這一步的主要作用是將數(shù)據(jù)框的列名與具體的上下文綁定,為語言模型生成語義匹配提供豐富的背景信息。

第二步:構(gòu)造語義連接任務(wù)

通過自然語言模板描述連接邏輯,例如 "Taking {Course Name} will help me learn {Skill}",并將其傳遞給語言模型進行解析和處理。

在代碼中,模板被注入到語義過濾器中,通過調(diào)用

task_instructions.merge_multimodal_info 函數(shù)合并多模態(tài)數(shù)據(jù):
modified_docs = task_instructions.merge_multimodal_info([i1], right_multimodal_data)

合并后的數(shù)據(jù)被傳遞給語言模型,用于執(zhí)行語義匹配任務(wù)。

第三步:語義過濾與模型推理

語義過濾是 sem_join 的核心部分。通過調(diào)用 sem_filter 函數(shù),sem_join 利用語言模型對數(shù)據(jù)對進行語義推理,判斷哪些記錄匹配。

語義過濾的核心代碼如下:

output = sem_filter(
    modified_docs,
    model,
    user_instruction,
    examples_multimodal_data=examples_multimodal_data,
    examples_answers=examples_answers,
    cot_reasoning=cot_reasoning,
    default=default,
    strategy=strategy,
    show_progress_bar=False,
)

模型的輸出包括匹配結(jié)果、原始輸出和解釋信息,為最終的連接結(jié)果提供依據(jù)。

第四步:結(jié)果組合與優(yōu)化

在語義過濾的基礎(chǔ)上,sem_join 將所有匹配記錄整合為一個結(jié)果集合。對于高置信度和低置信度的匹配記錄,系統(tǒng)通過優(yōu)化策略減少模型調(diào)用次數(shù),提升運行效率。

結(jié)果組合部分的代碼如下:

join_results.extend(
    [
        (id1, ids2[i], explanation)
        for i, (output, explanation) in enumerate(zip(outputs, explanations))
        if output
    ]
)

優(yōu)化邏輯通過函數(shù) join_optimizer 實現(xiàn),選擇成本最低的連接計劃,進一步提升連接效率。

第五步:輸出結(jié)果與分析

最后,sem_join 將語義連接的結(jié)果封裝為 SemanticJoinOutput 對象,包含匹配記錄、過濾結(jié)果、模型原始輸出和解釋信息。用戶可以通過返回的數(shù)據(jù)框進一步分析連接結(jié)果。

返回結(jié)果的代碼如下:

return SemanticJoinOutput(
    join_results=join_results,
    filter_outputs=filter_outputs,
    all_raw_outputs=all_raw_outputs,
    all_explanations=all_explanations,
)

總結(jié)

TAG 模型的出現(xiàn)填補了傳統(tǒng)數(shù)據(jù)查詢技術(shù)與現(xiàn)代語義推理需求之間的空白。通過結(jié)合 SQL 查詢和大語言模型,TAG 在復(fù)雜查詢、推理和結(jié)果生成方面展現(xiàn)了強大的能力。本文不僅分析了 TAG 的理論基礎(chǔ),還通過 LOTUS 系統(tǒng)的實例演示了其實際應(yīng)用潛力。LOTUS 的模塊化設(shè)計和直觀 API 為開發(fā)者實現(xiàn)復(fù)雜語義查詢提供了便利工具,表明 TAG 和 LOTUS 在多數(shù)據(jù)源、跨領(lǐng)域數(shù)據(jù)分析中的重要地位和廣闊前景。

作者介紹

崔皓,51CTO社區(qū)編輯,資深架構(gòu)師,擁有18年的軟件開發(fā)和架構(gòu)經(jīng)驗,10年分布式架構(gòu)經(jīng)驗。

責任編輯:姜華 來源: 51CTO內(nèi)容精選
相關(guān)推薦

2023-02-06 14:44:08

人工智能自然語言開發(fā)

2020-12-07 08:16:39

自然語言查詢數(shù)據(jù)庫數(shù)據(jù)庫查詢

2020-04-24 10:53:08

自然語言處理NLP是人工智能

2023-10-27 09:00:00

人工智能ChatGPT大型語言模型

2021-05-13 07:17:13

Snownlp自然語言處理庫

2017-10-19 17:05:58

深度學(xué)習(xí)自然語言

2021-08-17 15:47:12

機器學(xué)習(xí)自然語言神經(jīng)網(wǎng)絡(luò)

2024-04-24 11:38:46

語言模型NLP人工智能

2018-07-08 07:08:07

2011-09-14 10:56:52

服務(wù)器虛擬化數(shù)據(jù)中心

2009-03-12 09:57:24

APC英飛VMware

2024-02-05 14:18:07

自然語言處理

2009-11-25 14:25:14

PHP自然語言排序

2021-03-26 11:02:20

Python自然語言API

2017-04-17 15:03:16

Python自然語言處理

2021-05-17 09:00:00

自然語言人工智能技術(shù)

2021-05-18 07:15:37

Python

2011-06-27 20:48:38

打印機解決方案

2017-05-05 15:34:49

自然語言處理

2020-02-25 12:00:53

自然語言開源工具
點贊
收藏

51CTO技術(shù)棧公眾號