Question Answering
질의응답(QA) 시스템은 자연어 질문에 직접 답변합니다. 추출형, 오픈 도메인, 생성형 및 시각 질의응답을 다룹니다.
질의응답(QA)은 자연어로 제기된 질문에 대해 웹 페이지 목록이 아니라 "호주의 수도는 어디인가요?"라는 질문에 "캔버라"라고 답하는 것처럼 답변 자체를 제공하는 자연어 처리(NLP) 작업입니다. QA 시스템은 질문을 해석하고 구절, 문서 컬렉션, 데이터베이스 또는 자체 파라미터에서 답에 필요한 정보를 찾아 답변을 반환하거나 작성합니다. 검색 엔진의 답변 상자, 가상 비서, 고객 지원 봇, 회사 문서에 관한 질문에 답하는 대규모 언어 모델(LLM) 어시스턴트는 모두 QA 시스템입니다.
초기 시스템은 범위가 좁은 데이터베이스에 관한 질문에 답했습니다. BASEBALL(1961)은 한 시즌의 아메리칸 리그 경기 관련 질문을 처리했고, LUNAR(1971)는 아폴로 달 암석 표본에 관한 지질학자들의 질문에 답했습니다. TREC 질의응답 트랙은 1999년에 오픈 도메인 QA 벤치마킹을 시작했습니다. 2011년 2월 IBM Watson은 단서마다 여러 후보 답변을 생성하고 수백 개의 알고리즘으로 각 답변의 근거를 채점해 Jeopardy! 챔피언 Ken Jennings와 Brad Rutter를 이겼습니다.
QA 시스템 유형#
- 추출형 QA: 질문에 답하는 구절을 주어진 문단에서 선택합니다.
- 오픈 도메인 QA: 답변하기 전에 위키백과 전체와 같은 대규모 컬렉션을 검색해 관련 구절을 찾습니다.
- 검색 증강 생성(RAG): 검색된 구절을 조건으로 LLM이 답변을 작성하므로, 여러 출처의 사실을 조합하고 인용할 수 있습니다.
- 폐쇄형 QA: 문서 없이 모델 가중치에 저장된 지식만으로 답변하므로, 지어낸 답변을 감지하기가 더 어렵습니다.
- 지식 그래프 QA: 질문을 개체와 관계로 이루어진 그래프 또는 데이터베이스에 대한 구조화된 쿼리로 변환합니다.
- 시각 질의응답(VQA): 이미지나 비디오에 관한 질문에 답합니다.
추출형 QA와 SQuAD#
2016년 Pranav Rajpurkar와 동료들이 공개한 스탠퍼드 질의응답 데이터셋 (SQuAD)은 추출형 QA를 표준 벤치마크로 자리 잡게 했습니다. 크라우드워커들은 Wikipedia 문서에 관한 질문을 100,000개 이상 작성했으며, 모든 답변은 문서의 일부 구간이었습니다. 로지스틱 회귀 기준 모델은 F1 점수 51.0%를 기록했으며, 사람은 86.8%를 기록했습니다. 점수는 예측 답변과 정답 간의 완전 일치와 토큰 수준의 F1 점수를 사용하며, BERT는 2018년에 테스트 F1 점수 93.2를 기록했습니다. 추출형 모델은 문단의 모든 토큰을 답변의 시작점 및 끝점 후보로 채점합니다:
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]]}")모델은 "Pranav Rajpurkar"와 "문서의 일부 구간"이라고 답합니다. 문단에는 언어에 관한 내용이 없지만, SQuAD 1.1로 학습한 모델은 항상 어떤 구간이든 반환하기 때문에 세 번째 질문에 "100,000"이라고 답합니다. SQuAD 2.0(2018)에는 답변할 수 없어 보이지 않도록 작성된 질문 50,000개 이상이 추가되었으며, SQuAD 1.1에서 F1 점수 86%를 기록한 시스템은 SQuAD 2.0에서 66%로 하락했습니다. 모델은 이제 답변을 유보할 시점을 판단해야 했기 때문입니다.
오픈 도메인 QA와 RAG#
오픈 도메인 시스템은 수백만 개의 문서 중 관련 문서 몇 개를 찾는 검색기와 검색된 문서에서 답변하는 리더가 작업을 나눠 수행합니다. DrQA(2017)는 TF-IDF로 Wikipedia 문서를 검색하고 순환 신경망으로 읽었습니다. Dense Passage Retrieval(2020)은 TF-IDF를 BERT 임베딩과 벡터 검색으로 대체했으며, RAG(2020)는 검색된 문서를 답변을 생성하는 생성기에 전달했습니다. 리더가 문서를 확인하기 전에 재순위화 모델이 검색된 문서의 순서를 다시 정하는 경우가 많습니다. RAG 논문 저자들은 검색된 텍스트를 조건으로 사용하면 검색을 사용하지 않는 유사 모델보다 더 구체적이고 다양하며 사실에 부합하는 문장을 생성한다고 밝혔고, 인용된 문서를 통해 독자가 답변의 환각 여부를 확인할 수 있다고 설명했습니다.
시각 질의응답#
VQA는 "정류장에서 기다리는 사람은 몇 명인가요?"와 같은 질문과 이미지를 입력으로 받아, 컴퓨터 비전과 언어 이해를 결합하는 멀티모달 AI를 필요로 합니다. 이때 일반적으로 비전-언어 모델 (VLM)을 사용합니다. Ultralytics Platform Agents에서는 LLM 블록이 이미지와 YOLO26 탐지 결과와 같은 상위 단계의 컨텍스트를 프롬프트와 함께 비전-언어 모델에 전달하므로, 장면에 관한 질문에 탐지 결과를 컨텍스트로 활용해 답변합니다.










