Skip to main content

정답의 열쇠: NLP로 질문 응답의 잠재력 열기

머신러닝에서의 질문 응답을 심층적으로 탐구하며, 그 과제, 기법, 모델을 살펴보고 단계별 Python 코드 예시를 제공합니다. 이 글은 AI 번역본입니다. 오역이 의심되는 부분은 댓글로 알려주세요.
Created on September 15|Last edited on September 15
출처
이 글에서는 머신러닝에서의 질문 응답의 기본을 살펴보며, 이러한 모델을 만드는 개요와 함께 그 과정에서의 과제와 활용 분야를 소개합니다.
이 분야가 처음이든, 이해를 더 깊게 하고 싶든, 이 글은 질문 응답에 대한 종합적인 입문서를 제공합니다. 흥미로운 질문 응답의 세계와 그것이 다양한 NLP 작업을 어떻게 향상시키는지 알아볼 준비를 하세요.
이번 글에서 다룰 내용은 다음과 같습니다:

목차



AI에서의 질문 응답이란 무엇인가?

질문 응답 인공지능에서의 질문 응답(QA)은 자연어로 제기된 질문에 기계가 응답하는 능력을 뜻합니다. 이 기술의 핵심 목적은 방대한 데이터에서 관련 정보를 찾아 추출하고, 이를 간결한 답변의 형태로 제시하는 것입니다.
이를 위해 AI 연구자와 엔지니어들은 질문 응답(Question Answering, QA) 모델로 알려진 특수한 유형의 모델을 개발했습니다.
이러한 모델은 질문을 입력받아 방대한 텍스트 데이터를 처리해 가장 정확한 답을 도출합니다. 예를 들어 “세계에서 가장 높은 산봉우리는 무엇인가?”라는 질문이 주어지면, QA 모델은 관련 자료를 검색하고 “에베레스트산”이라는 답을 반환합니다.
질문 응답(QA) 모델의 궁극적인 목표는 질문에 담긴 의미를 제대로 이해하고, 맥락에 맞는 관련성 높은 답을 제시하는 것입니다. QA 모델의 성과는 다양한 질문에 대해 정확하고 의미 있는 답변을 제공하는 능력으로 평가됩니다.

NLP에서의 질문 응답이란 무엇인가?

에서의 질문 응답 자연어 처리은 자연어로 제기된 질문에 인간처럼 응답하는 것을 목표로 하는 연구·개발 분야입니다. 목표는 질문의 맥락을 이해하고, 관련 정보를 검색한 뒤, 정확한 답변을 제시할 수 있는 시스템을 만드는 것입니다.
최근 몇 년 사이 대화형 AI 시스템과 가상 비서에 대한 수요가 증가하면서 NLP 분야의 질문 응답(QA) 기술 발전이 가속화되었습니다. 이러한 시스템은 정보 검색, 텍스트 분류, 기계 학습을 비롯한 정교한 NLP 기법에 의존해 질문을 분석하고, 관련 정보를 찾아, 답변을 생성합니다. 이를 통해 사용자에게 지식이 풍부한 사람에게 질문할 때와 유사한 경험을 제공하는 것을 목표로 합니다.

질문 응답의 과제는 무엇인가?

질문 응답(QA)은 효과적으로 작동하려면 여러 과제를 극복해야 하는 어려운 작업입니다. 해결해야 할 주요 과제는 다음과 같습니다:
  1. 질문의 의미 이해하기: 첫 번째 과제는 질문의 문장이 복잡하거나 모호하더라도 그 뒤에 있는 의도를 파악하는 것입니다. 이를 위해 AI 시스템은 자연어에 대한 깊은 이해와, 비슷하게 들리는 단어와 표현을 구분하는 능력을 갖춰야 합니다. 이 지점에서 모델의 효율성이 드러납니다. 일반적으로 모델이 복잡해질수록 실제 문맥을 더 깊이 이해해 낼 수 있습니다. 이��� 매우 중요합니다. 대부분의 경우 주어진 질문은 다른 방식으로 바뀌어 표현되거나 모호할 수 있고, 효과적으로 답하려면 문서 내 떨어져 있는 여러 문장을 함께 고려해야 할 때도 있기 때문입니다.
  2. 정보 검색하기: 또 다른 중요한 과제는 방대한 데이터에서 관련 정보를 추출하는 것입니다. AI 시스템은 필요한 답변을 제공하기 위해 방대한 텍스트 데이터 속에서 필요한 정보를 효율적으로 검색할 수 있어야 합니다. 이를 위해 의미 분석과 정보 추출과 같은 정교한 정보 검색 기법을 사용합니다. 예를 들어, 혁신적인 AI 도구인 ChatGPT는 수십억 단어 규모의 데이터로 학습되었으며 텍스트 데이터 45테라바이트. 여전히 몇 초 만에 필요한 답을 반환할 수 있습니다.
  3. 지식 표현하기: 정확한 답을 제공하려면, AI 시스템은 처리하는 데이터에 담긴 지식을 이해하고 표현할 수 있어야 합니다. 이를 위해 온톨로지와 시맨틱 네트워크 같은 고급 지식 표현 기법을 사용해 정보를 분류하고 체계화합니다. 이러한 기법의 주된 목적은 문장 안에서 서로 다른 단어들이 어떻게 관계를 맺는지 모델이 파악하도록 돕는 것입니다. 이를 위해서는 단어 토크나이징이 필요하며, 이는 텍스트를 토큰이라 불리는 더 작은 단위로 분해해 컴퓨터 프로그램이 분석하고 처리할 수 있도록 하는 과정입니다.
  4. 문맥적 추론하기: 질문의 의미를 이해하는 것뿐 아니라, AI 시스템은 질문이 놓인 문맥을 파악하고 그 문맥에 적절하고 관련성 있는 답을 제공해야 합니다. 이를 위해 시스템은 서로 다른 정보 조각들 사이의 관계를 깊이 이해하고, 그 관계에 근거해 판단을 내릴 수 있어야 합니다.
  5. 정답 검증하기: 마지막으로, AI 시스템은 출처의 신뢰성과 잠재적 편향과 같은 요소를 고려해 자신의 답의 정확성을 검증할 수 있어야 합니다. 이를 위해 시스템은 정보를 비판적으로 평가하고, 여러 근거를 종합해 판단을 내려야 합니다. 또한 이러한 모델은 인간이 생성한 데이터로 학습되어 종종 부정확한 내용이 포함되어 있으므로, 그 정확성에 과도하게 의존해서는 안 함은 두말할 필요도 없습니다.

생성형 질의응답이란?

생성형 질의응답은 고전적인 질의응답 문제를 해결하는 최첨단 접근법입니다. 기존의 QA 시스템이 이미 존재하는 출처에서 정보를 단순히 검색해 오는 것과 달리, GQA 시스템은 학습한 지식을 바탕으로 스스로 답변을 만들어낼 수 있습니다.
이는 더 창의적이고 미묘한 응답의 가능성을 새롭게 열어 줍니다.
출처
OpenAI의 GPT-3, 그 구성 요소인 ChatGPT를 포함해, 생성형 질의응답 모델로 볼 수 있습니다. GPT-3는 대규모 언어 생성 모델을 사용해 질문과 프롬프트에 대한 텍스트를 생성함으로써 사실상 질문에 답변합니다. 방대한 텍스트 데이터에서 학습한 정보를 바탕으로 새로운 답변을 만들어낼 수 있으므로, 생성형 질의응답의 한 형태라 할 수 있습니다.
예를 들어 ChatGPT를 사용할 때 질문을 입력하면, 해당 모델은 학습된 데이터를 바탕으로 텍스트 형식의 답변을 생성합니다. 이 방식은 단순히 기존 출처에서 정보를 검색하는 데 그치지 않고 새로운 답변을 만들어 낼 수 있으므로, 더욱 역동적이고 창의적인 질의응답 경험을 제공합니다.

GQA 시스템은 가상 비서, 고객 지원 봇, 교육 플랫폼 등 다양한 애플리케이션에 빠르게 도입되고 있습니다. 새로운 답변을 생성하는 능력은 이러한 분야에 상호작용성과 사용자 참여를 한 차원 높여 줍니다.

질의응답 시스템은 어떻게 구축하나요?

질의응답 시스템을 구축하는 과정은 여러 단계로 나눌 수 있습니다:
  1. 데이터 수집 및 전처리: 가장 먼저 필요한 것은 시스템이 학습할 수 있는 대규모 텍스트 말뭉치입니다. 이 데이터는 뉴스 기사, 책, 데이터베이스 등에서 수집할 수 있습니다. 그다음에는 후속 처리를 위해 데이터를 정제하고 표준 형식으로 변환해야 합니다. 여기에는 불필요한 정보를 제거하고, 단어를 스테밍 또는 표제어 추출로 정규화하며, 텍스트를 개별 단어 또는 구 단위로 토크나이즈하는 작업이 포함될 수 있습니다.
  2. 정보 검색: 다음으로, 질문에 답하기 위해 텍스트 말뭉치에서 관련 정보를 추출할 수 있는 알고리즘을 개발해야 합니다. 이를 위해 키워드 검색, 텍스트 분류, 개체명 인식과 같은 기법을 사용할 수 있습니다. 예를 들어, 키워드 검색 알고리즘은 질문에 포함된 단어를 바탕으로 말뭉치에서 가장 관련성이 높은 문서를 식별하는 데 도움이 됩니다.
  3. 질문 분석: 질문의 의도를 파악하고 정보 검색 과정을 이끌 핵심 키워드와 구를 식별하기 위해 질문을 분석하는 것이 중요합니다. 이를 위해 품사 태깅, 의존 구문 분석, 개체명 인식 같은 기법을 활용해 질문 속의 중요한 단어와 구를 찾아낼 수 있습니다.
  4. 답변 생성: 관련 정보를 검색해 왔다면, Question Answering(QA) 시스템은 이를 바탕으로 자연어로 답변을 생성해야 합니다. 이 과정에는 보통 텍스트 생성과 요약 같은 기법이 활용됩니다. 예를 들어, 텍스트 생성 알고리즘은 앞선 단계에서 검색된 가장 관련성 높은 정보를 근거로 답변을 만들어낼 수 있습니다.
  5. 모델 학습: Question Answering(QA) 시스템은 성능과 정확도를 높이기 위해 전처리된 텍스트 데이터와 생성된 답변으로 학습되어야 합니다. 이를 위해 사용할 수 있는 방법으로는 지도 학습 또는 비지도 학습 데이터에서 패턴을 식별하고 생성된 답변의 정확도를 높이기 위한 알고리즘.
  6. 모델 평가: 마지막으로, 정밀도(precision), 재현율(recall), F1 점수 같은 지표를 사용해 Question Answering(QA) 시스템의 성능을 평가해야 합니다. 이를 통해 시스템이 질문에 얼마나 정확하게 답하는지 파악하고, 개선이 필요한 부분을 식별할 수 있습니다.
이 단계들은 필요에 따라 반복해 Question Answering(QA) 시스템을 지속적으로 개선할 수 있습니다. NLP와 머신러닝의 새로운 기법이 등장하면 이를 통합해 시스템의 효율과 효과를 더욱 높일 수 있습니다. 궁극적인 목표는 질문의 맥락을 이해하고 자연어로 정확하고 관련성 높은 답변을 생성하는 QA 시스템을 구축하는 것입니다.

Question Answering(QA)용 데이터셋

Question Answering(QA) 연구와 개발에는 SQuAD(Stanford Question Answering Dataset), MS MARCO(Microsoft Machine Reading Comprehension), TREC QA(Text REtrieval Conference Question Answering Track), HotpotQA, BioASQ, CoQA, MultiRC, RACE 등 여러 데이터셋이 사용됩니다.
  1. SQuAD(Stanford Question Answering Dataset)는 이 분야에서 가장 널리 사용되고 인기 있는 데이터셋 중 하나로, 위키피디아 문서를 기반으로 한 10만 개가 넘는 질문과 답변을 포함합니다.
  2. MS MARCO는 복잡한 질문을 이해하는 질문응답(QA) 시스템의 능력에 초점을 맞추며, 웹 페이지에서 답변을 제공합니다.
  3. TREC QA는 이 분야에서 20년 넘게 활용되어 온 데이터셋으로, 다양한 출처에서 수집한 질문과 답변을 포함합니다.
  4. HotpotQA는 여러 문단에 걸친 추론을 통해 답을 찾아야 하는 멀티홉 질문응답(QA) 데이터셋입니다.
  5. BioASQ는 생의학 분야의 시맨틱 색인과 질문응답(QA)을 위한 벤치마크입니다.
  6. CoQA는 대화형 질문응답(QA) 데이터셋으로, 모델이 문맥을 유지하고 질문과 답변 사이의 관계를 이해할 것을 요구합니다.
  7. MultiRC는 기계 독해에서 여러 문장을 종합해 추론하는 능력을 평가하는 데이터셋이며,
  8. RACE는 영어 기계 독해와 질문응답(QA)을 위한 대규모 데이터셋입니다.

Hugging Face를 활용한 질문응답(QA)

출처
허깅 페이스 는 NLP 연구와 개발을 위한 플랫폼을 제공하는 회사입니다. 이들은 다음과 같은 다양한 NLP 과제를 위한 대규모 사전 학습 모델 컬렉션을 제공합니다. 감성 분석, 텍스트 분류, 언어 번역, 그리고 질의응답.
이러한 모델은 딥러닝 기법으로 설계되어 대규모 데이터셋으로 학습되었습니다. 또한 특정 용도에 맞게 파인튜닝할 수도 있습니다.
Hugging Face는 사용자 친화적인 인터페이스를 제공하는 API를 통해 개발자와 연구자가 이러한 모델에 손쉽게 접근하고 활용할 수 있도록 지원합니다. 또한 파인튜닝 스크립트, 학습 데이터, 평가 지표 등 NLP 연구를 위한 다양한 리소스와 도구를 제공합니다. 사용자와 기여자 커뮤니티도 크고 활발하여 지식과 전문성을 교환하기에 매우 적합한 공간입니다.
특히 질의응답(QA)을 위해 Hugging Face는 다음과 같은 사전 학습된 모델을 제공합니다 BERT, GPT-2, 그리고 RoBERTa. 이러한 모델은 추출형과 생성형 질의응답(QA) 모두에 사용할 수 있습니다. 이들 모델을 활용하려면 모델을 로드하고, 입력 데이터를 준비한 뒤, 실행하여 답을 얻으면 됩니다.
그렇다고 해도 Hugging Face를 사용해 QA 모델을 구축하는 절차는 일반적인 접근 방식과 거의 같습니다. 먼저 Hugging Face Transformers 라이브러리를 설치하고 원하는 사전 학습 모델을 로드합니다. 다음으로 입력 데이터를 준비한 뒤 모델을 실행합니다.

튜토리얼

이 절에서는 Python을 사용해 Question Answering(QA) 모델을 만들어 보겠습니다. 이 모델에서는 사전 학습된 모델을 활용합니다. BERT Hugging Face가 만든 모델을 사용해 QA 기능을 수행합니다. 미세 조정에 널리 사용되는 데이터셋 중 하나는 BertForQuestionAnswering 모델의 미세 조정에 널리 사용되는 데이터셋으로는 Stanford Question Answering Dataset(SQuAD)이 있습니다.

1단계: 필요한 라이브러리 가져오기

이 모델의 이 부분에서는 을 사용합니다. PyTorch 라이브러리(torch) 그리고 사전 학습된 트랜스포머 2개로, 이는 BertForQuestionAnswering 그리고 BertTokenizer입니다. BertForQuestionAnswering 은 사전 학습된 BERT(Bidirectional Encoder Representations from Transformers) 모델로, Question Answering(QA) 태스크에 맞게 미세 조정된 모델입니다. The BertTokenizer 입력 텍스트를 토크나이즈하여 숫자 표현(토큰)으로 변환합니다.
import torch
from transformers import BertForQuestionAnswering, BertTokenizer

2단계: 사전 학습된 모델 불러오기

아래 두 줄의 코드는 …을(를) 인스턴스화합니다. BertForQuestionAnsweringBertTokenizer 각각 해당 클래스이며, 지정된 이름 "bert-large-uncased-whole-word-masking-finetuned-squad"의 사전 학습된 BERT 모델을 로드합니다.
model = BertForQuestionAnswering.from_pretrained("bert-large-uncased-whole-word-masking-finetuned-squad")
tokenizer = BertTokenizer.from_pretrained("bert-large-uncased-whole-word-masking-finetuned-squad")

3단계: 테스트 샘플 만들기

아래는 answer_text 모델이 지정된 질문에 대한 정답을 반환할 때 참조하는 문맥 또는 지식을 담는 문자열입니다.
answer_text = "The Great Barrier Reef is located in the Coral Sea, off the coast of Australia. It is the largest coral reef system in the world, stretching over 2,300 km and covering an area of approximately 344,400 km². The Great Barrier Reef is home to a diverse range of marine life and is considered one of the seven natural wonders of the world. It is also a UNESCO World Heritage Site threatened by climate change and other environmental factors."
question = "Where is the Great Barrier Reef located?"

4단계: Answer_text와 질문 토크나이즈하기

모델의 토크나이즈 과정과 마찬가지로, 모델에 새로 입력되는 데이터에도 토크나이즈를 수행해야 합니다. 그래야 모델이 입력을 이해할 수 있습니다.
input_ids = tokenizer.encode(question, answer_text)

5단계: 어텐션 마스크 만들기

아래 코드는 어텐션 마스크를 생성합니다. 어텐션 마스크는 입력 토큰 중에서 모델이 주의를 기울여야 하는 토큰을 1, 무시해야 하는 토큰을 0으로 표시하는 시퀀스입니다. input_ids 모델이 주의를 기울여야 하는 시퀀스입니다.
attention_mask = [1] * len(input_ids)

6단계: 모델 출력 얻기

모델의 출력은 두 부분으로 구성됩니다. 첫 번째 부분에는 시작 토큰 인덱스에 대한 로짓이, 두 번째 부분에는 종료 토큰 인덱스에 대한 로짓이 포함됩니다.
output = model(torch.tensor([input_ids]), attention_mask=torch.tensor([attention_mask]))

7단계: 시작 인덱스와 종료 인덱스 정의하기

start_indexend_index 답변의 시작 인덱스와 종료 인덱스를 결정합니다 input_ids 시퀀스입니다. 이 인덱스들은 시작 토큰 로짓(start)과 종료 토큰 로짓(end) 각각에서 로짓 점수가 가장 높은 토큰을 선택하여 찾습니다. 이러한 로짓 점수는 답변의 예측 시작 위치와 종료 위치를 나타냅니다. input_ids 시퀀스입니다. BERT 모델은 특정 분류에 대한 모델의 신뢰도를 표현하기 위해 로짓 점수를 활용합니다.
start_index = torch.argmax(output[0][0, :len(input_ids) - input_ids.index(tokenizer.sep_token_id)])
end_index = torch.argmax(output[1][0, :len(input_ids) - input_ids.index(tokenizer.sep_token_id)])

8단계: 최종 답변 디코딩하기

이 단계에서는 최종 답변의 의미를 이해할 수 있도록 토크나이즈 과정을 역으로 수행합니다.
answer = tokenizer.decode(input_ids[start_index:end_index + 1], skip_special_tokens=True)
print("Answer:", answer)

출력

특정 문맥과 질문에 대한 모델의 최종 출력입니다.
Answer: coral sea

결론

결론적으로, 질문 응답(QA)은 자연어로 제기된 질문에 답할 수 있는 알고리즘을 개발하는 것을 목표로 하는 머신러닝의 흥미로운 분야입니다. NLP(자연어 처리)는 인간의 언어를 처리하고 이해하는 데 필요한 도구와 기법을 제공한다는 점에서 QA의 핵심 요소입니다.
그렇다고 해서 여기서 멈출 필요는 없습니다. 원하는 사전 학습 모델을 활용해 직접 Question Answering(QA) 모델을 만들 수 있고, SQuAD(Stanford Question Answering Dataset)처럼 널리 사용되는 데이터셋을 포함해 원하는 데이터셋으로 모델을 학습시킬 수도 있습니다. 이러한 데이터셋은 QA 시스템의 성능을 평가하기 위한 벤치마크를 제공합니다.
인터넷과 디지털 라이브러리처럼 방대한 텍스트 데이터가 점점 더 널리 이용 가능해짐에 따라, 효율적이고 효과적인 Question Answering(QA) 시스템의 필요성은 더욱 커지고 있습니다. 이러한 시스템은 방대한 데이터를 수동으로 검색하는 데 시간을 들이지 않고도 필요한 정보를 빠르고 쉽게 찾아 접근할 수 있게 함으로써, 우리가 정보와 상호작용하는 방식을 크게 개선할 잠재력이 있습니다.



이 글은 AI로 번역되었습니다. 오역이 있을 수 있으니 댓글로 알려 주세요. 원문 보고서는 아래 링크에서 확인할 수 있습니다: 원문 보고서 보기