VietEmbed-RAG Science: Bộ dữ liệu tiếng Việt cho Embedding và RAG

Giới thiệu VietEmbed-RAG Science: Bộ dữ liệu tiếng Việt cho Embedding và RAG

VietEmbed-RAG Science: Bộ dữ liệu tiếng Việt cho Embedding và RAG

Trong quá trình xây dựng VietEmbed-RAG, một trong những vấn đề mình gặp khá thường xuyên là dữ liệu tiếng Việt dành riêng cho Retrieval vẫn còn tương đối ít, đặc biệt là những bộ dữ liệu có sẵn positive và hard negative để có thể đưa trực tiếp vào quá trình Fine-tune Embedding Model.

Vì vậy mình xây dựng và public VietEmbed-RAG Science, một bộ dữ liệu tiếng Việt tập trung vào các nội dung khoa học và kỹ thuật, hướng đến các bài toán như Semantic Search, Information Retrieval và Retrieval-Augmented Generation (RAG).

Dataset hiện đã được public trên Hugging Face với 68.567 records, trải rộng trên 7 lĩnh vực khoa học và kỹ thuật.

I. VietEmbed-RAG Science có gì?

Mỗi record trong dataset được tổ chức theo dạng Triplet
Trong đó:

  • anchor: câu hỏi hoặc truy vấn tìm kiếm bằng tiếng Việt.
  • positive: đoạn văn có nội dung phù hợp và trả lời trực tiếp cho truy vấn.
  • hard_negative: đoạn văn có Semantic tương đối gần với truy vấn nhưng không trực tiếp trả lời câu hỏi.

Ngoài ba trường chính phục vụ quá trình Training, mỗi record còn có thêm title, topic và domain để mô tả nội dung.

Ví dụ với một câu hỏi về nguyên lý bất định Heisenberg:

json
{
  "domain": "Physics",
  "topic": "cơ học lượng tử",
  "title": "Nguyên lý bất định Heisenberg",
  "anchor": "Nguyên lý bất định Heisenberg mô tả mối quan hệ giữa những đại lượng nào?",
  "positive": "Nguyên lý bất định Heisenberg phát biểu rằng vị trí và động lượng của một hạt không thể đồng thời được xác định với độ chính xác tùy ý.",
  "hard_negative": "Cơ học lượng tử mô tả hành vi của vật chất và năng lượng ở thang nguyên tử và hạ nguyên tử bằng hàm sóng và các toán tử."
}

Điểm mình quan tâm nhất ở format này chính là hard_negative.

Nếu Negative hoàn toàn không liên quan đến Query thì Model có thể phân biệt chúng khá dễ dàng. Ngược lại, Hard Negative vẫn nằm trong cùng ngữ cảnh nhưng không phải tài liệu mà người dùng đang tìm. Model vì vậy phải học được sự khác biệt chi tiết hơn giữa "có liên quan" và "thực sự trả lời đúng truy vấn".

Đây cũng là một đặc tính khá quan trọng đối với Embedding Model dùng trong RAG.

II. 7 nhóm lĩnh vực khoa học và kỹ thuật

Dataset hiện gồm 7 domain. Mình không chỉ tập trung vào các môn khoa học cơ bản như Toán, Vật lý hay Hóa học mà còn đưa vào Information Technology, với nhiều chủ đề liên quan đến Database, Network, Operating System, Algorithm và Machine Learning.

Bên trong từng Domain tiếp tục được chia thành nhiều Topic nhỏ hơn. Mục tiêu là tạo ra các Query và Document đủ đa dạng thay vì lặp lại một số dạng câu hỏi cố định.

III. Dataset được xây dựng như thế nào?

VietEmbed-RAG Science được tạo thông qua một Pipeline sinh dữ liệu tiếng Việt có sự hỗ trợ của LLM, sau đó trải qua nhiều bước xử lý và lọc lại dữ liệu.

Tập dữ liệu ban đầu có 174.812 records. Sau Validation và Deduplication, còn lại 68.567 records được public.

Một số bước xử lý chính gồm:

  • Kiểm tra JSON và Schema.
  • Chuẩn hóa Unicode và Whitespace.
  • Loại các trường dữ liệu không đạt yêu cầu về độ dài.
  • Loại Query, Positive và Hard Negative trùng lặp hoàn toàn.
  • Kiểm tra sự trùng nhau giữa Positive và Hard Negative.
  • Chuẩn hóa Topic và Domain.
  • Semantic Deduplication trong từng Domain bằng Character N-gram TF-IDF với Threshold 0.95.

Mình chọn lọc khá mạnh tay thay vì cố giữ số lượng record lớn nhất có thể. Với Embedding Model, hàng trăm nghìn record gần giống nhau chưa chắc có giá trị bằng một tập nhỏ hơn nhưng có độ đa dạng tốt.

IV. Có thể sử dụng dataset để làm gì?

Use case trực tiếp nhất là Fine-tune một Embedding Model tiếng Việt hoặc Multilingual Embedding Model.

Ta có thể map mỗi record thành:

query = record["anchor"]
positive = record["positive"]
negative = record["hard_negative"]

Sau đó sử dụng Contrastive Learning để Model học: similarity(anchor, positive)>>similarity(anchor, hard_negative)
Ngoài Fine-tune Embedding Model, dataset cũng có thể được sử dụng cho một số bài toán như:

  • Semantic Search tiếng Việt.
  • Scientific Information Retrieval.
  • Domain Adaptation.
  • Hard Negative Training.
  • Xây dựng Retriever cho hệ thống RAG.

Có thể load dataset trực tiếp bằng Hugging Face Datasets:

python
from datasets import load_dataset

dataset = load_dataset(
    "nhminh107/VietEmbed-RAG-Science",
    split="train"
)

print(dataset)
print(dataset[0])


V. Một vài giới hạn cần lưu ý

Đây là synthetic dataset, vì vậy mình không xem nó như một nguồn kiến thức khoa học chính thống hay một Benchmark hoàn chỉnh.

Mặc dù Pipeline đã có các bước Validation, Deduplication và Filtering, toàn bộ 68 nghìn records chưa được các chuyên gia của từng lĩnh vực kiểm tra thủ công. Vì vậy vẫn có khả năng tồn tại câu hỏi mơ hồ, kiến thức chưa chính xác hoàn toàn hoặc một số Hard Negative vẫn chứa thông tin có thể gián tiếp gợi ý câu trả lời.

Dataset hiện cũng chỉ cung cấp train split. Nếu muốn Benchmark Model, nên tự tách Validation/Test và đặc biệt chú ý những Query có Semantic quá gần nhau để tránh Data Leakage giữa các Split.

Mình nghĩ đây là điều cần nói rõ khi public một Dataset sinh bằng LLM. Synthetic Data có thể giúp mở rộng dữ liệu rất nhanh, nhưng việc có nhiều dữ liệu không đồng nghĩa với dữ liệu luôn đúng.

VI. Kết luận

VietEmbed-RAG Science là một phần trong quá trình mình xây dựng VietEmbed-RAG, với mục tiêu thử nghiệm và phát triển Embedding Model phù hợp hơn cho Retrieval tiếng Việt.

Dataset hiện có 68.567 Triplets thuộc 7 lĩnh vực, đã được public để mọi người có thể sử dụng cho nghiên cứu, Fine-tune Model hoặc các project liên quan đến Semantic Search và RAG.

Nếu bạn đang làm một Embedding Model tiếng Việt, Retriever cho RAG hoặc đơn giản muốn thử nghiệm Hard Negative Training, có thể lấy dataset về và thử trực tiếp.

Mình cũng sẽ tiếp tục cập nhật quá trình xây dựng VietEmbed-RAG, cách mình thu thập và xử lý dữ liệu, Fine-tune Model cũng như kết quả Benchmark trong các bài viết tiếp theo.

Được chọn theo chủ đề và các khái niệm xuất hiện trong bài này.

Xem tất cả bài viết

Thảo luận bài viết

Câu hỏi, ghi chú và góc nhìn của bạn về nội dung này.

0 bình luận