DataGemma: Sử dụng real-world data, RIG và RAG để giải quyết hallucinations

DataGemma là mô hình mở đầu tiên được thiết kế để giảm thiểu hallucinations trong LLMs bằng cách sử dụng RIG và RAG để kết nối LLMs với dữ liệu khổng lồ từ Google's Data Commons.


Giới thiệu

LLMs đã và đang trở thành một phần không thể thiếu đối với công việc của chúng ta trong tất cả các ngành nghề. LLMs có khả năng duyệt qua lượng lớn văn bản, tạo ra các bản tóm tắt, đề xuất những hướng sáng tạo mới, thậm chí viết code. Tuy nhiên, vấn đề lớn nhất của LLMs đó là hiện tượng ảo giác (hallucinations), là khi nó chém một cách rất tự tin về một thông tin sai bét.

Để giải quyết vấn đề này thì có nhiều cách như RAG, Self Refinement, Prompt Tuning, ... Tuy nhiên Google gần đây đã giới thiệu một cái tên mới là RIG (Retrieval Interleaved Generation), giúp tích hợp các dữ liệu thống kê thực tế từ Data Commons vào trong LLMs. Từ kĩ thuật này, Google cũng công bố DataGemma, mô hình mở đầu tiên trên thế giới được thiết kế để kết nối LLMs với dữ liệu thực tế phong phú từ Data Commons.

Data Commons

Data Commons là một kho dữ liệu mã nguồn mở khổng lồ chứa 240 tỉ data gồm các số liệu thống kê công khai từ những tổ chức đáng tin cậy như Liên Hợp Quốc (UN), Trung tâm Kiểm soát và Phòng ngừa Dịch bệnh (CDC), và các cơ quan thống kê trên toàn cầu.  Có thể coi Data Commons như một cơ sở dữ liệu khổng lồ và không ngừng mở rộng, chứa đầy thông tin công khai đáng tin cậy về nhiều chủ đề khác nhau, từ y tế, kinh tế đến nhân khẩu học và môi trường, mà bạn có thể tương tác với đống dữ liệu này bằng ngôn ngữ thông qua LLMs.

Mô hình DataGemma


Google tích hợp dữ liệu của Data Commons vào Gemma, dòng mô hình mở nhẹ và tiên tiến nhất của Google, sử dụng cùng công nghệ đã tạo ra Gemini. Mô hình mới này được gọi là DataGemma

DataGemma sẽ mở rộng khả năng của các mô hình Gemma bằng cách khai thác kiến thức từ Data Commons để nâng cao tính chính xác và khả năng lập luận của LLM thông qua hai phương pháp:

1. RIG (Retrieval-Interleaved Generation) 

Đầu tiên, họ finetune LLM để có khả năng sinh ra các truy vấn bằng ngôn ngữ tự nhiên (natural language query) liên quan tới prompt đầu vào. Có nghĩa là khi nhận prompt, mô hình sẽ xác định các dữ liệu liên quan đến prompt đó và tạo ra các truy vấn bằng ngôn ngữ tự nhiên cho các dữ liệu đó. Sau đó, một chuỗi các multi-model được dùng để chuyển đổi truy vấn bằng ngôn ngữ (natural language query) thành truy vấn dữ liệu có cấu trúc (structured data query), từ đó truy xuất câu trả lời từ cơ sở dữ liệu Data Commons.

Tóm lại RIG gồm các thành phần sau:

a. Fine-tuned LLM: 
  • Khi được hỏi về số liệu (VD: dân số Việt Nam là bao nhiêu), thì LLM sẽ trả về văn bản chứa số (VD: Dân số VN là 100 triệu người), câu trả lời này được gọi là LLM-generated statistical value (LLM-SV)
  • Từ ngữ cảnh xung quanh LLM-SV (VD: dân số, Việt Nam), mô hình sẽ truy vấn số liệu liên quan  tới ngữ cảnh nhất từ cơ sở dữ liệu Data Commons (gọi là Data Commons statistical value, DC-SV). Sau đó model sử dụng số liệu từ DC-SV để fact-checking với số liệu từ LLM-SV
  • Vậy nên cách tiếp cận là finetune một LLM để tạo ra các truy vấn ngôn ngữ tự nhiên (natural language query) miêu tả LLM-SV, đi cùng với LLM-SV gốc. Các truy vấn này sẽ giúp ta lấy được DC-SV sau này.
  • Bắt đầu với tập dữ liệu khoảng 700 câu hỏi về các thống kê khác nhau (VD: Thu nhập trung bình ở Mỹ là bao nhiêu, Có bao người người sống ở Châu Âu, ...)
  • Sau đó sử dụng mô hình LLM base để trả lời. Trong 700 câu hỏi, khoảng 400 phản hồi chứa các số liệu thống kê liên quan. 400 phản hồi này được dùng cho bước tiếp theo.
  • Các phản hồi được đưa tiếp vào một LLM nâng cao hơn (Gemini 1.5 Pro). Mô hình nâng cao này được hướng dẫn (thông qua prompt) để tạo ra các truy vấn ngôn ngữ tự nhiên (natural language query) đến Data Commons. Nói đơn giản hơn là bạn đưa phản hồi được chọn cho Gemini 1.5 Pro và viết prompt để nó sinh ra các natural language query cho Data Commons.
  • Sau đó, họ xem xét các câu trả lời của Gemini 1.5 Pro và cái nào sai thì họ sẽ viết lại thủ công cho nó đúng.
b. Query Conversion: 
  • Chuyển đổi truy vấn ngôn ngữ tự nhiên từ Gemini 1.5 Pro thành truy vấn dữ liệu có cấu trúc (structured data query)
  • Khi nhận được một truy vấn, họ phân tích nó thành nhiều phần như: biến số thống kê (statistical variables); chủ đề (VD: “tỷ lệ thất nghiệp,” “nhân khẩu học”, ...); địa điểm (VD: “California”); thuộc tính (VD: “xếp hạng,” “so sánh,” “tốc độ thay đổi”, ...).
  • Các biến số thống kê và địa điểm sau đó được ánh xạ tới các ID tương ứng trong Data Commons. Đối với mỗi thành phần, họ áp dụng các phương pháp NLP khác nhau để xử lý. Ví dụ như:
    • Đối với các biến số hoặc chủ đề thống kê, họ sử dụng chỉ mục tìm kiếm ngữ nghĩa dựa trên embeddings (embedding-based semantic search); 
    • Đối với địa điểm, họ sử dụng nhận dạng thực thể theo chuỗi văn bản (string-based named entity recognition); 
    • Đối với thuộc tính, họ sử dụng biểu thức chính quy (regex).
  • Tiếp theo, dựa trên các thành phần đã xác định, họ phân loại truy vấn vào các mẫu truy vấn cố định, ví dụ như bảng bên dưới

c. Data Retrieval Engine
  • Sau khi đã đổi truy vấn thành cấu trúc phù hợp (structured data query), họ truy xuất dữ liệu từ Data Commons bằng cách gọi API. Phản hồi của API thường là một giá trị số kèm theo đơn vị (VD: 37 năm)
  • Dựa trên mẫu truy vấn và các ID của biến số và địa điểm, họ chuyển đổi các lệnh này thành API dữ liệu có cấu trúc của Data Commons, với phản hồi cuối cùng từ Data Commons thường là một giá trị số kèm theo đơn vị (nếu có, ví dụ: "37,5 năm")
d. Result Interleaving
  • Dữ liệu trả về được lồng ghép với phản hồi ban đầu từ LLM, giúp cung cấp câu trả lời chính xác hơn

Mặc dù phương pháp RIG không mới, nhưng việc áp dụng nó trong framework của DataGemma là khá hay.

2. RAG (Retrieval-Augmented Generation) 

Cho phép LLMs tích hợp thông tin liên quan vượt ra ngoài dữ liệu huấn luyện của chúng, giúp chúng có thêm ngữ cảnh và tạo ra các phản hồi đầy đủ và thông tin hơn. Với DataGemma, điều này được thực hiện bằng cách tận dụng long context window của Gemini 1.5 Pro. DataGemma truy xuất thông tin ngữ cảnh liên quan từ Data Commons trước khi mô hình bắt đầu tạo phản hồi, giảm thiểu hallucinations và nâng độ chính xác của câu trả lời.

a. Trích xuất truy vấn ngôn ngữ tự nhiên đến Data Commons

Truy vấn của người dùng được chuyển đến một LLM nhỏ đã được finetune, LLM này sẽ tạo ra các natural language query đến Data Commons có liên quan đến truy vấn của người dùng

Để tạo dữ liệu huấn luyện, họ dùng latent knowledge của Gemini 1.5 Pro

Prompt được sử dụng yêu cầu LLM tạo ra các natural language query đến Data Commons để trả lời truy vấn của người dùng. Prompt này sẽ quy định cụ thể format mà LLM phải tuân theo để phù hợp với Natural Language Interface của Data Commons.

b. Truy xuất tables

Chuyển đổi các natural language query bằng phương pháp đã được giới thiệu ở phần "Query Conversion" của RIG: Xác định các biến số, địa điểm và thuộc tính trong truy vấn ngôn ngữ tự nhiên, sau đó ánh xạ nó tới các mẫu truy vấn đã biết và thực hiện truy vấn bằng API tới Data Commons.

c. Prompting

Sau khi nhận được các tables trả về từ Data Commons dựa trên query, họ sẽ viết một prompt mới bao gồm truy vấn ban đầu của người dùng và các tables trả về. Sau đó câu trả lời của LLM được gửi lại cho người dùng

Kết quả thử nghiệm

a. Đánh giá RIG

Google sử dụng mô hình 7B và 27B (cả hai đã được finetune) để đánh giá

Nhìn chung, RIG cải thiện độ chính xác từ 5-17% lên khoảng 58%. Các số liệu không chính xác (hàng cuối cùng trong bảng) có thể được là do hai lý do sau:


  • Vấn đề về độ chính xác của Data Commons NL interface: Data Commons NL trả về câu trả lời có liên quan một phần, thường là do thiếu dữ liệu cho câu trả lời gần nhất.
  • Irrelevant LLM generated questions: LLM không tạo ra câu hỏi đủ chính xác để bao quát hoàn toàn các số liệu thống kê.

b. Đánh giá RAG

Finetune mô hình Gemma-2 9B IT để tạo ra các câu hỏi chi tiết hơn ở bước đầu tiên, tương thích tốt hơn với NL interface của Data Commons.

Phản hồi từ Data Commons được cung cấp dưới dạng bảng, sau đó được chuyển tiếp tới mô hình Gemini 1.5 Pro (chưa được finetune) được truy cập thông qua API của Gemini.


  • LLM có xu hướng chính xác khi trích dẫn các con số (99%).
  • Khi đưa ra các suy luận dựa trên những số liệu này, độ chính xác giảm, với LLM đưa ra suy luận sai khoảng 6-20% trường hợp hoặc đưa ra suy luận không được chứng minh bởi dữ liệu.

Chi tiết hơn về kết quả đánh giá, các bạn có thể đọc thêm từ paper của Google tại đây.

Data và code

Repo của DataGemma: https://github.com/datacommonsorg/llm-tools

Ngoài ra, bạn có thể thử nghiệm với embedding weights của DataGemma trên HuggingFace hoặc Kaggle:
RIG: