[金融科技] 如何用AI撰寫高品質的文章(2) — 使用MongoDB結合向量資料庫與全文搜尋

MondoDB Vector Search (資料來源: https://www.mongodb.com/products/platform/atlas-vector-search)

在RAG (Retrieval-Augmented Generation)模型中,關鍵在於檢索適當的資訊,確保輸入是有價值的資料而非雜訊。本文說明在如何運用MongoDB,整合向量資料庫(Vector Database)和全文檢索(Full-Text Search)兩種不同的檢索技術,提升RAG模型的準確性。透過有效地檢索相關資訊,能夠增強RAG模型的生成能力,避免garbage in garbage out的窘境。相關文獻可見MongoDB官方文件

這系列非入門文章,需具有語言模型、embedding等基礎觀念,共有三篇:
(1) 基礎概念與品質指標
(2) 使用MongoDB結合向量資料庫與全文搜尋 (本文)
(3) 使用LangGraph打造素材選擇與審稿的流程

RAG模型的第一步是將相關文件轉換為向量後儲存於向量資料庫中,以供檢索。是利用文字向量模型將文件內容映射為向量特徵,再將這些向量存入資料庫。當使用者提出問題時,系統會計算問題與資料庫中向量的相似度,檢索出最相關的文件,最後將檢索結果提供給語言模型進行生成。

RAG 流程(圖片來源: https://towardsdatascience.com/retrieval-augmented-generation-rag-from-theory-to-langchain-implementation-4e9bd5f6a4f2)

市面上有多種向量資料庫可供選擇,我過去使用Pinecone一段時間,但準確度一直受到限制。後來改用MongoDB後,準確度大幅提升,主因是運用了MongoDB的兩大功能: 全文檢索(Full-Text Search)元數據過濾(Metadata Filtering)。透過全文檢索可以有效找到與問題相關的文件,元數據過濾則可一開始就縮小搜尋範圍,兩者並用能夠更準確地檢索出所需的資訊,比其他單純的向量資料庫有更多功能。

全文檢索

全文檢索(Full-Text Search)的概念類似於Google搜尋,可從文件中找出與查詢相關的內容,最知名的全文檢索引擎是ElasticSearch,但它並不提供向量資料庫功能。相較之下,MongoDB同時具備全文檢索和向量資料庫的能力。全文檢索和向量檢索的差異在於方法不同,各有優缺點,這邊

接下來我將舉例說明如何利用MongoDB的向量資料庫和全文搜尋,來提升檢索的準確度。在評估準確度時,我將沿用之前介紹的Ragas (RAG Assessment)指標,詳見《從AI撰寫高品質的文章(1) — 基礎概念與指標介紹》一文。透過Ensemble結合這多種檢索方式,我們能夠優化資訊檢索的效果,進而提升RAG模型的生成品質。同樣撰寫一篇「台積電股價及五項新聞摘要」投資訊息,不同檢索方式的Ragas品質指標如下:

(1) 僅使用向量資料庫中的相似度(similar)檢索相關文件,context precision=1.00,context recall=0.17。

(2) 僅使用向量資料庫中的最大邊際相關性(MMR)排序檢索結果,Ragas品質指標為context precision=1.00,context recall=0.00 (這邊數字怪怪的,但Ragas算出來就是如此)。

(3) 僅使用全文檢索(Full-Text Search)的方式,Ragas品質指標為precision=1.00,context recall=0.33。

(4) 將上述三種不同檢索方法的結果進行綜合(Ensemble)。Ensemble是機器學習中常見且有效的技術,可輕易提升模型的準確性,在自然語言處理領域,也可以對檢索結果做Ensemble,常用的方法是對不同檢索方式得到的排名分數,計算加權綜合後得到新的排名序列。例如,可以將相似度、MMR和全文檢索三種檢索結果,根據其權重組合出新的綜合排名。Ensemble後檢索結果的Ragas品質指標為context precision=1.00,context recall=0.5,比起單一檢索方式,有更好的檢索結果,而且更為穩定,可以減少variance (細節可見機器學習Ensemble相關數學)。

通過Ensemble的方式將多種檢索策略融合,能夠發揮各自的長處,有效彌補單一檢索方式的缺陷,從而提高整體的檢索準確率和穩定度。最後我們再融合 更多Retriever技巧,如前一篇提到的MultiQueryRetriever等等,可以得到以下的答案,比直接使用ChatGPT都要準確許多。可至FindBillion投資助手測試。

FindBillion投資助手

Metadata的過濾

這種方法並不複雜,只需在資料庫中事先建立股價代碼等相關資訊欄位。舉例來說,如果已知要檢索的是台積電公司,只要在資料庫中新增股價代碼為2330的欄位,檢索時就能快速找到相關文件,資料示意如下。

{
股價代碼: 2330,
名稱: 台積電,
向量: [0.5, 0.3, 0.14, 0.2 … ],
內容: 台積電今日上漲25元….,
}

MongoDB是一種NoSQL資料庫,擅長處理這類非結構化且靈活的資料結構,很容易新增或修改欄位。但大部分的向量資料庫要做到類似功能,彈性較差、限制很多。

結論

本文著重於介紹如何運用MongoDB的強大功能來提升AI撰寫或對話系統的檢索準確度。透過有效結合向量相似度計算、全文檢索,以及對Metadata的過濾,MongoDB可以比其他單一向量資料庫提供更準確的檢索結果。

此外,MongoDB作為一種NoSQL資料庫,擁有處理非結構化資料的優勢,能夠輕鬆新增欄位並存儲各種補充資訊,例如股價代碼等關鍵詞,進一步強化檢索的效率和準確性。我們已經將此方法應用在AI證券分析系統,整合量化和質化等不同類型的數據,產生金融相關的報告,並已申請金融科技相關專利。目前,該系統正處於實驗階段,希望系統最終能夠具備撰寫個股研究報告等功能,現階段提供台積電研究報告聯發科研究報告中信金研究報告玉山金研究報告以及投資幫手等實驗。未來我們將擴展應用範疇,包括徵信報告撰寫、理財機器人等。

總括而言,MongoDB展現出了在自然語言處理和人工智能應用中作為向量資料庫和全文檢索引擎的優秀能力,不僅在速度和準確度上獲得顯著提升,更具備靈活擴展的潛力,值得在相關領域中廣泛地加以應用和探索。下一章節,我們還可以引入LangGraph等工具,透過流程控制的設計素材選擇與審稿,有助於開發出更準確的檢索流程。

— — — — — — — — — — — — — — — -

作者: 王淳恆 (Andrew Wang)
奇享智能創辦人兼執行長
FindBillion.com創辦人
Kaggle(Google旗下資料科學與人工智慧競賽平台)競賽Expert等級

曾任:
台灣人工智慧學校 經理人班/醫療專班 講師
沐恩生醫 技術長
台灣生醫人工智慧研究發展協會 秘書長
聯發科技 人工智慧智能技術群 技術副理

學歷:
交通大學 電信工程研究所 碩士

金融證照:
證券商高級業務員

專長領域:
人工智慧與財務分析 (2010~至今)
人工智慧與影像分析 (2015~至今)
人工智慧與醫療分析 (2018~至今)
10年以上人工智慧研發經驗
20年以上通訊與影像的晶片設計、訊號處理與演算法相關工作經驗

經歷:
Kaggle(Google旗下資料科學與人工智慧競賽平台)三銀二銅
Kaggle史上最高獎金的競賽銀牌
2018 RSNA肺炎偵測競賽銀牌
2017年人工智慧年會 講者
政治大學/成功大學/台科大/高雄科大/東海大學/世新大學業界講師
9項台灣專利/3項美國專利/3項日本專利
與醫師合作 6篇醫學AI期刊論文/多篇會議論文

--

--