iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0

每天的專案會同步到 GitLab 上,可以前往 GitLab 查看,有興趣的朋友歡迎留言或來信討論,我的信箱是 nickchen1998@gmail.com

RAG 的內容我們分享得差不多了,接下來今天和明天想和大家分享一些相關的資訊,算是比較近期又新出來的觀念,今天想和大家分享一下 TAG 這個東西!文末有附上論文出處。

什麼是 Table-Augmented Generation (TAG)?

Table-Augmented Generation (TAG) 是一種結合語言模型(LLMs)和結構化資料庫的查詢系統。TAG 能夠超越傳統的檢索方法,不僅檢索結構化數據,還能進行語義推理,從而更準確地回答使用者的自然語言查詢。其設計目的是克服現有技術如 Text2SQL 和 RAG(Retrieval-Augmented Generation)的局限性,尤其在面對複雜、多層次的查詢時展現了強大的應用潛力。

為什麼我們需要 TAG?

隨著數據量不斷增長,許多查詢的複雜性增加。傳統的查詢方法如 Text2SQL 只能解決簡單的結構化查詢,RAG 雖然能檢索文本和非結構化數據,但無法處理需要多層推理的情況。這些限制使得我們需要 TAG 這樣的系統來處理這些需求。TAG 通過結合資料庫的計算能力和語言模型的語義推理能力,實現了資料檢索與答案生成的無縫銜接。

當查詢需要跨越多行數據進行推理、聚合,或涉及情感分析、排序等語義操作時,TAG 能夠提供更準確、更全面的結果。

TAG 的運作機制

TAG 的運作流程分為三個步驟:

1. 查詢生成 (Query Synthesis)

這一步將使用者的自然語言問題轉換為可執行的 SQL 查詢或語義運算。語言模型會解析使用者的語義,生成適當的 SQL 查詢或其他形式的數據庫操作,從而獲取相關資料。例如,面對“哪部電影的票房最高且被認為是經典?”的問題,TAG 系統能生成複雜的查詢以捕捉語義細節。

2. 查詢執行 (Query Execution)

生成的查詢會在資料庫中執行,檢索相關資料。TAG 不僅能進行常規的資料檢索,還能透過語義運算符(例如過濾、排序、聚合等)來處理多行數據。這一步能夠結合資料庫的高效計算能力,精確返回結果。

3. 答案生成 (Answer Generation)

最後,語言模型根據檢索到的數據進行推理,生成自然語言答案。這使得 TAG 不僅僅是數據檢索系統,還是一個能夠從數據中產生語義豐富答案的工具,適合處理如趨勢總結、情感分析等複雜查詢。

使用 LOTUS 來實作 TAG

在實現 TAG 的過程中,LOTUS 是關鍵技術之一。LOTUS(LLMs Over Tables of Unstructured and Structured Data) 是一個查詢引擎,能夠讓開發者使用語義運算符來進行複雜的查詢與推理。LOTUS 提供了一個類似 Pandas 的 API,結合了語言模型和資料庫操作,使查詢過程變得直觀且強大。

程式碼範例

以下是一個簡單的範例,展示了如何使用 LOTUS 的語義運算符來實作 TAG 系統:

pip install lotus-ai

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

# 配置語言模型,請記得設置 API key
lm = OpenAIModel()
lotus.settings.configure(lm=lm)

# 建立課程名稱和技能數據
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 的語義 join 運算符來進行查詢
res = courses_df.sem_join(skills_df, "Taking {Course Name} will help me learn {Skill}")
print(res)

程式碼說明

這段程式碼展示了如何利用 LOTUS 的 sem_join 語義運算符來實現查詢。這裡的 join 運算符根據自然語言描述進行表格之間的匹配,從而生成所需的數據結果。

通過語義運算符,TAG 系統能夠靈活地處理多種查詢需求,例如語義過濾、排序以及聚合。這些運算符將語言模型與資料庫結合,使我們能夠處理更複雜的語義查詢【5†source】。

TAG 與現有技術的比較

相較於傳統的 Text2SQLRAG 方法,TAG 提供了更高的靈活性和精確性:

  • Text2SQL 僅能處理簡單的結構化查詢,無法進行高階語義推理。
  • RAG 雖然可以檢索非結構化文本,但無法對大規模結構化數據進行複雜計算。

TAG 不僅能結合語義推理與資料檢索,還能生成精確的自然語言答案,這使得它成為一個功能強大的解決方案,能夠處理需要推理、多層次查詢的問題。

結論

今天我們介紹了 Table-Augmented Generation (TAG) 以及其基於 LOTUS 的實作範例。TAG 系統的強大之處在於結合了資料庫的精確檢索和語言模型的語義推理能力,為使用者提供了更靈活且精確的查詢結果。隨著資料和查詢需求的不斷增長,TAG 將成為一個不可或缺的查詢技術。

參考文獻:

  1. Liana Patel, Siddharth Jha, Carlos Guestrin, and Matei Zaharia. "LOTUS: Enabling Semantic Queries with LLMs Over Tables of Unstructured and Structured Data". arXiv preprint arXiv:2407.11418, 2024.

上一篇
Day 18 - MultiQueryRetriever 多重查詢檢索器
下一篇
Day 20 - GraphRAG 與 RAG 技術整合的未來
系列文
初探 Langchain 與 LLM:打造簡易問診機器人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言