Question Answering
Hệ thống hỏi đáp (QA) trả lời trực tiếp các câu hỏi bằng ngôn ngữ tự nhiên. Bài viết đề cập đến QA trích xuất, miền mở, tạo sinh và thị giác.
Hỏi đáp (QA) là tác vụ xử lý ngôn ngữ tự nhiên (NLP) trả lời câu hỏi được đặt bằng ngôn ngữ tự nhiên bằng chính câu trả lời, chẳng hạn "Canberra" cho câu hỏi "Thủ đô của Australia là gì?", thay vì đưa ra danh sách trang web. Hệ thống QA diễn giải câu hỏi, tìm thông tin trả lời trong một đoạn văn, bộ sưu tập tài liệu, cơ sở dữ liệu hoặc các tham số của chính hệ thống, rồi trả về hoặc tạo câu trả lời. Các hộp trả lời của công cụ tìm kiếm, trợ lý ảo, bot hỗ trợ khách hàng và trợ lý mô hình ngôn ngữ lớn (LLM) trả lời câu hỏi về tài liệu công ty đều là hệ thống QA.
Các hệ thống ban đầu trả lời câu hỏi về những cơ sở dữ liệu chuyên biệt: BASEBALL (1961) xử lý câu hỏi về một mùa giải của các đội thuộc American League; LUNAR (1971) trả lời câu hỏi của các nhà địa chất về mẫu đá Mặt Trăng từ chương trình Apollo. Track hỏi đáp của TREC bắt đầu đo chuẩn QA miền mở vào năm 1999; tháng 2 năm 2011, IBM Watson đánh bại các nhà vô địch Jeopardy! Ken Jennings và Brad Rutter bằng cách tạo nhiều câu trả lời ứng viên cho mỗi gợi ý rồi chấm điểm bằng chứng cho từng câu trả lời bằng hàng trăm thuật toán.
Các loại hệ thống QA#
- QA trích xuất: Chọn đoạn trong một văn bản cho trước để trả lời câu hỏi.
- QA miền mở: Tìm kiếm trong một bộ sưu tập lớn, chẳng hạn toàn bộ Wikipedia, để tìm các đoạn liên quan trước khi trả lời.
- Sinh tăng cường truy xuất (RAG): Tạo câu trả lời bằng LLM dựa trên các đoạn văn bản được truy xuất, nhờ đó câu trả lời có thể kết hợp dữ kiện từ nhiều nguồn và trích dẫn các nguồn đó.
- QA dạng closed-book: Trả lời dựa trên tri thức lưu trong trọng số model mà không dùng tài liệu, khiến các câu trả lời bịa đặt khó bị phát hiện hơn.
- QA bằng đồ thị tri thức: Chuyển câu hỏi thành truy vấn có cấu trúc trên đồ thị thực thể và quan hệ hoặc trên cơ sở dữ liệu.
- Hỏi đáp thị giác (VQA): Trả lời câu hỏi về hình ảnh hoặc video.
QA trích xuất và SQuAD#
Bộ dữ liệu Stanford về trả lời câu hỏi (SQuAD), được Pranav Rajpurkar và cộng sự công bố năm 2016, đã đưa QA trích xuất trở thành một benchmark tiêu chuẩn: những người đóng góp dữ liệu cộng đồng đã viết hơn 100.000 câu hỏi về các bài viết trên Wikipedia, và mỗi câu trả lời là một đoạn trích từ bài viết. Mô hình hồi quy logistic cơ sở đạt F1 51,0%, so với 86,8% của con người. Điểm số sử dụng exact match và điểm F1 ở cấp token giữa câu trả lời được dự đoán và câu trả lời tham chiếu; BERT đạt F1 kiểm thử 93,2 vào năm 2018. Model trích xuất chấm điểm mọi token trong đoạn văn như một vị trí bắt đầu và kết thúc câu trả lời tiềm năng:
import torch
from transformers import AutoModelForQuestionAnswering, AutoTokenizer
# DistilBERT fine-tuned on SQuAD v1.1 for extractive question answering
model_id = "distilbert/distilbert-base-cased-distilled-squad"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForQuestionAnswering.from_pretrained(model_id)
context = (
"SQuAD was released in 2016 by Pranav Rajpurkar and colleagues at Stanford University. "
"Crowdworkers wrote more than 100,000 questions about Wikipedia articles, and every answer is a span of the article."
)
for question in ["Who released SQuAD?", "Where do the answers come from?", "How many languages does SQuAD cover?"]:
inputs = tokenizer(question, context, return_tensors="pt", return_offsets_mapping=True)
offsets = inputs.pop("offset_mapping")[0]
with torch.no_grad():
outputs = model(**inputs)
# The answer is the context span between the highest-scoring start and end tokens
start, end = outputs.start_logits.argmax(), outputs.end_logits.argmax()
print(f"{question} -> {context[offsets[start][0] : offsets[end][1]]}")Model trả lời "Pranav Rajpurkar" và "một đoạn trích từ bài viết." Đoạn văn không đề cập gì đến ngôn ngữ, nhưng model vẫn trả lời "100.000" cho câu hỏi thứ ba, vì model được huấn luyện trên SQuAD 1.1 luôn trả về một đoạn trích nào đó. SQuAD 2.0 (2018) bổ sung hơn 50.000 câu hỏi không thể trả lời nhưng được viết sao cho trông như có thể trả lời; một hệ thống đạt F1 86% trên SQuAD 1.1 giảm xuống còn 66% trên phiên bản này, vì giờ đây model phải quyết định khi nào nên từ chối trả lời.
QA miền mở và RAG#
Các hệ thống miền mở phân chia công việc giữa retriever, thành phần tìm một vài đoạn văn liên quan trong hàng triệu đoạn, và reader, thành phần trả lời dựa trên các đoạn đó. DrQA (2017) truy xuất các bài viết Wikipedia bằng TF-IDF và đọc chúng bằng mạng nơ-ron hồi tiếp; Dense Passage Retrieval (2020) thay TF-IDF bằng embedding BERT và tìm kiếm vector; còn RAG (2020) chuyển các đoạn văn được truy xuất cho một bộ sinh để viết câu trả lời. Reranker thường sắp xếp lại các đoạn văn được truy xuất trước khi reader xử lý chúng. Các tác giả RAG nhận thấy việc điều kiện hóa trên văn bản được truy xuất giúp ngôn ngữ được tạo ra cụ thể, đa dạng và chính xác hơn so với model tương đương không dùng truy xuất; các đoạn trích dẫn cũng giúp người đọc kiểm tra câu trả lời có bị ảo giác hay không.
Trả lời câu hỏi bằng hình ảnh#
VQA nhận một hình ảnh và câu hỏi, chẳng hạn "Có bao nhiêu người đang chờ ở trạm dừng?", đồng thời đòi hỏi AI đa phương thức kết hợp thị giác máy tính với khả năng hiểu ngôn ngữ, thường thông qua một model thị giác-ngôn ngữ (VLM). Trong Ultralytics Platform Agents, một khối LLM gửi hình ảnh cùng ngữ cảnh đầu vào, chẳng hạn kết quả phát hiện của YOLO26, đến model thị giác-ngôn ngữ kèm prompt, để câu hỏi về cảnh được trả lời dựa trên kết quả của detector làm ngữ cảnh.
QA và các thuật ngữ liên quan#
- Tìm kiếm ngữ nghĩa: Trả về các tài liệu hoặc đoạn văn liên quan nhất đến truy vấn; đây là đầu vào mà hệ thống QA đọc để tạo câu trả lời.
- Chatbot: Giao diện hội thoại quản lý hội thoại nhiều lượt và sử dụng QA để trả lời các câu hỏi thực tế trong đó.
- Tạo văn bản: Tạo bất kỳ văn bản nào từ prompt. QA tạo sinh là quá trình tạo văn bản được giới hạn để trả lời một câu hỏi, thường dựa trên các nguồn được trích dẫn.










