PStage MRC 7강 - Linking MRC and Retrieval

Introduction to Open-domain Question Answering (ODQA)

MRC는 지문이 주어진 상황에서 질의응답을 하는 과제이다. 이에 반해 ODQA는 비슷한 형태이지만, 지문 부분이 주어지는 것이 아니라 위키 혹은 웹 전체가 주어지게 되기 때문에 매우 많은 지문을 봐야하는 Large Scale 과제가 된다.

ODQA라는 문제는 꽤 예전부터 다루었던 문제이며, short answer with support의 형태를 목표로 했었다.

1) Question processing

질문으로부터 키워드를 선택하여 답변의 타입을 선택할 수 있도록 했다.

2) Passage Retrieval

기존 IR 방법을 활용하여 연관된 document를 뽑고, passage 단위로 자른 후 선별한다.

3) Answer processing

주어진 질문과 passage들 내에서 답을 선택하는 휴리스틱한 분류문제로 진행했다.

ODQA는 꽤 역사가 길며, 지금까지는 위와 같은 방식으로 진행되고 있었는데, 2011년 IBM Watson을 통해 발전하게 된다.

자세히 보기

PStage MRC 6강 - Scaling up with FAISS

저번 강의에서 임베딩을 통해 리트리벌을 진행하려고 할 때 질문과 지문 쪽 각각 인코더가 존재했다는 것을 배웠다. 질문은 그때그때 임베딩을 하며, 지문은 미리 임베딩을 해놓지만 새로운 것이 들어올 때 추가하여 적절한 임베딩을 반환하게 된다.

Nearest Neighbor Search에서는 Passage 개수가 늘어날 수록 Top-k 때 Dot product 연산이 부담스러워질 수 있는데, 이러한 과정에서 Similarity Search를 아는 것이 중요하다.

기본적으로 Nearest Neighbor Search보다, Inner product Search가 더 많이 사용되고 있다. Nearest Neighbor와 같은 L2 유클리디언 거리를 계산하는 것보다 Dot Product의 Maximum을 찾는 문제로 돌리는 것이 더 수월하기 때문이다. 가장 가까운 벡터를 찾겠다는 것은 Maximum Inner Product를 찾겠다는 것으로 이해하면 된다. 하지만 개념 정리나 상상을 할 때는 Nearest Neighbor Search를 떠올리는 것이 더 쉽긴 한다.

MIPS는 주어진 질문(query) 벡터 q에 대해 Passage 벡터 v들 중 가장 질문과 관련된 벡터를 찾는 문제이며, 관련성은 내적이 가장 큰 값으로 찾는다.

하지만 실제 검색해야할 데이터는 위키피디아에만 5백만개이며, 수십억, 수십조까지 커질 수 있기 때문에 사실상 모든 문서 임베딩을 Bruteforce로 찾는 것은 불가능하다.

1) Search Speed - 쿼리당 유사한 벡터 k개를 찾는 시간. 많은 벡터를 가지고 있을수록 당연히 시간이 오래걸린다.

Pruning 을 사용하면 속도 개선 가능

자세히 보기

PStage MRC 4-5강 - Passage Retrieval - Sparse Embedding, Dense Embedding

Introduction to Passage Retrieval

Passage Retrieval

Passage Retrieval은 질문에 맞는 문서를 찾는 것을 의미한다. 데이터베이스에 따라서 형태가 달라질 수는 있지만, 일반적으로 웹 상에 존재하는 모든 문서를 대상으로 한다. 예를들어 토트넘이라는 쿼리에 대해서 토트넘의 역사, 우승기록, 손흥민 등에 대한 문서를 가져오는 시스템을 의미한다.

Passage Retrieval with MRC

Passage Retrieval을 MRC와 연결지어 생각했을 때, Open-domain Question Answering이 가능해진다. Passage Retrieval과 MRC를 이어서 2-Stage로 만들어버리는 것을 의미하는데, 쿼리가 들어왔을 때 데이터베이스에서 적절한 문서를 가져온 후, MRC 모델을 통해 가져온 문서에서 답을 찾는 프로세스이다.

이 때 중요한 것은 정답이 있을 만한 문서를 적절하게 찾아서 가져오는 과정이며, Query와 Passage를 미리 임베딩한 뒤 유사도로 랭킹을 매겨놓고, 유사도가 가장 높은 Passage를 선택한다.

Passage Embedding and Sparse Embedding

Passage Embedding Space

Passage Embedding의 벡터 공간을 의미하며, 벡터화된 Passage를 이용하여 Passage 간 유사도도 계산할 수 있다.

Sparse Embedding

자세히 보기

PStage MRC 3강 - Generation-based MRC

Generation-based MRC

Generation-based MRC 문제 정의

Extraction-based mrc와 다르게 주어진 질문의 답이 지문 내에 존재하지 않을 수도 있기 때문에 기본적으로 답변을 ‘생성’하는 문제로 분류한다.

input은 Extraction-based mrc와 동일하지만, generation-based mrc에서는 fine-tuning 시 정답 text까지 생성하는 seq2seq 모델로 분류할 수 있다.

Generation-based MRC vs. Extraction-base MRC

  1. MRC 모델 구조
    • Seq-to-Seq PLM 구조 (Generation) vs. PLM + Classifier 구조 (Extraction)
  2. Loss 계산을 위한 답의 형태 / Prediction의 형태
    • Free-form text 형태 (Generation) vs. 지문 내 답의 위치 (Extraction)
    • Extraction-based MRC는 f1 계산을 위해 text로의 별도의 전환 과정이 필요하다.

Pre-processing

Tokenize

Extraction과 같이 토큰화를 진행한 뒤 input_ids(또는 input_token_ids)를 생성한다.

Generation 모델에서는 PAD 토큰은 사용되지만, CLS와 SEP 토큰의 경우 사용할 수는 있지만 보통 자연어를 이용한 텍스트 포맷으로 대신하는 경우가 많다. ex) CLS -> Question, SEP -> Context

자세히 보기

PStage MRC 2강 - Extraction-based MRC

Extraction-based MRC

Extraction-based MRC의 문제 정의

질문의 답변이 항상 주어진 지문 내에 span으로 존재한다고 가정한다.

평가방법은 크게 EM과 f1이 존재한다. f1은 조금 더 soft한 metric으로 보통 EM보다 점수가 높게 형성된다. EM score는 정답과 조금이라도 다르면 0점을 부여하고, F1은 정답과의 overlap 비율을 계산하여 부분점수를 부여한다.

모델의 input은 Context, Question 두 개의 벡터가 임베딩의 형태로 들어가게 되며 start index와 end index이 존재하는 벡터가 output이 된다.

Pre-processing

Tokenization

텍스트를 작은 단위(token)로 나누어야 한다.

띄어쓰기, 형태소, subword 등 여러 단위의 토큰 기준이 사용되는데, 최근엔 OOV(out of vocab) 문제를 해결해주고 정보학적 이점을 가진 BPE가 주로 사용되며, WordPiece Tokenizer 역시 BPE 방법론 중 하나이다.

input으로 들어갈 때 SEP 라는 special 토큰으로 context와 질문을 구분하게 된다.

자세히 보기

PStage MRC 1강 - MRC Intro

Introduction to MRC

Machine Reading Comprehension (기계독해)는 주어진 지문(Context)를 이해하고, 주어진 질의(Query/Question)의 답변을 추론하는 문제이다.

예를들어 서울특별시에 대한 지문에서 서울의 GDP는 세계 몇 위야? 라는 질문을 했을 때, 세계 4위 라는 답변을 하는 과제이다.

주로 질문(쿼리)가 들어오면 문서에서 답을 낼 수 있는 시스템(구글, 인공지능 스피커)에서 사용되며, 관련 문서를 찾고 -> 정답을 찾는 방식으로 구성된다.

MRC의 종류들은 아래와 같다.

1) Extractive Answer Datasets

질의에 대한 답이 항상 주어진 지문의 segment(or span)으로 존재하는 경우. 이런 방식을 채택하는 데이터셋으로는 SQuAD, KorQuAD, NewsQA 등이 있다.

2) Descriptive/Narrative Answer Datasets

답이 지문 내에 존재하지 않고, 질의를 보고 생성된 sentence(or free-form)의 형태. MS MARCO, Narrative QA 등의 데이터셋이 이러한 방식을 채택한다.

3) Multiple-choice Datasets

자세히 보기

시각화 이해하기

1. 데이터 이해하기

1.1 데이터 시각화

데이터 시각화를 위해서는 ‘데이터’가 우선적으로 필요하다. 데이터를 어떻게 시각화하냐는 데이터를 로컬하게 보냐 글로벌하게 보냐에 따라 다르다. 개별 데이터를 보여줄 것인지 전체 데이터에 대한 구성을 보여줄 것인지를 정해야 하고, 그러기 위해서는 어떤 데이터가 있고 어떤 데이터셋이 있는지 알아야 한다.

데이터에 대해서 어떤 것들을 전달할 수 있고, 어떤 데이터셋이 있는지 알아보자.

1.2 데이터의 종류

수많은 데이터셋이 있고, 데이터들은 여러 특징들로 나눌 수 있다.

  • 정형 데이터
    • 일반적으로 csv 파일로 제공되는 데이터이다.
    • Row: 데이터 한 개 (item)
    • Column: Attribute (feature)
    • 가장 쉽게 시각할 수 있는 데이터셋이며 통계적 특성과 Feature 사이의 관계들로 많이 이야기할 수 있다.
    • 데이터 간 비교하고, 통계적 특성들을 비교할 수 있음.
  • 시계열 데이터
    • 시간 흐름에 따른 데이터이며, Time-Series Data라고 한다.
    • 기온, 주가 등의 정형데이터와 음성, 비디오와 같은 비정형 데이터가 존재한다.
    • 시간 흐름에 따른 추세(Trend), 계절성(Seasonality), 주기성(Cycle) 등을 살필 수 있다.
  • 지리 데이터
    • 지도 정보와 보고자 하는 정보간의 조화가 중요하며, 지도 정보를 단순화 시키는 경우도 존재한다.
    • 거리, 경로, 분포 등 다양하게 실사용에 이용되고 있다.
    • 정형데이터 시각화와 다르게 실제로 어떻게 사용될 수 있을지가 중요하고, 거리 정보가 굉장히 중요하다.
    • 위도 경도 등도 추가로 학습해야한다.
  • 관계형(네트워크) 데이터
    • 객체와 객체 간의 관계를 시각화할 수 있으며 객체는 Node로 표현하고 관계는 Link로 표현한다.
    • 크기와 색, 수에 따라서 객체와 관계의 가중치를 표현한다.
    • 직관적이지 않아서 Mapping 방법이 굉장히 중요하며 네트워크를 구성할 때 Huristic 하게 이용한다.
  • 계층적 데이터
    • 회사 조직도나 집안의 가계도 등인 Hirarchy 를 강조하는 시각화이며 보통 Tree 구조로 표현한다.
    • 한국 수출 아이템에 대한 분야별 분포 등을 계층적 데이터로 시각화할 수 있다.
  • 다양한 비정형 데이터

데이터는 굉장히 다양하기 때문에 대표적으로 4가지로 분류한다.

  • 수치형 데이터 (Numerical)
    • 연속형 (Continuous): 길이, 무게, 온도 등 데이터 간 실수값들이 존재하는 데이터
    • 이산형 (Discrete): 주사위 눈금, 사람 수 등 중간이 없고 떨어져 있는 한 단위들이 데이터인 것.
  • 범주형 데이터 (Categorical) - 문자열로 나타나는 것들
    • 명목형 (Nominal): 혈액형, 종교, MBTI 등 순서가 딱히 중요하지 않은 데이터
    • 순서형 (Ordinal): 학년, 학점, 등급 등 순서가 존재하는 데이터. 이산형으로 볼 수도 있지만 스케일 자체가 비율이 있다면 이산형, 수치가 절대적이지 않으면 순서형으로 표현하는 편이다.

시각화 이전에 이 데이터는 어떤형 데이터이기 때문에 이런 시각화를 해야겠다! 라는 접근이 필요하다.

자세히 보기

Generative Models 소개

What I cannot create, I do not understand. - Richard Feynman

생성 모델을 학습한다는 것에 대해서 가장 처음에 생각하는 것은 그럴듯한 문장 혹은 이미지를 만드는 것이라고 생각한다. 하지만 이것이 전부가 아니라, 생성모델은 그것보다 많은 것을 포함하는 개념이다.

Generation: 강아지와 같은 이미지를 만드는 것도 생성모델이 하는 일이지만, Density estimation 어떤 이미지가 들어왔을 때 확률값 하나가 튀어나와서 이미지가 고양이 같은지 강아지 같은지 강아지가 아닌 것 같은지 구분하고 싶은 것임. 이상행동감지로 활용될 수 있다. 엄밀히 생성모델은 Discrimity 모델을 포함하고 있다. 즉 생성해내는 것만 아니라 구분하는 것까지 포함하고 있다.

이러한 모델을 보통 explicit model 이라고 한다. 확률값을 얻을 수 있는 모델을 뜻함.

Unsupervised representation learning 이라고 강아지가 있으면 강아지는 귀가 두개고 꼬리가 있고 등의 특성이 있을텐데 이것을 feature learning 이라고 한다. 이 feature learning이 생성모델이 할 수 있는 것으로 표현하기도 함.

Basic Discrete Distributions

  • Bernoulli distribution
    • 이것을 포함하는 확률분포에는 숫자가 하나 필요함. 동전을 던졌을 때 앞 뒤가 나오는 것. 카테고리면 n개가 필요한 것. 주사위를 던졌을 때 n개가 필요한 것이 아니라 n - 1개가 필요함.
  • Categorical distribution

RGB 이미지 하나를 픽셀로 표현할 때 (r, g, b) ~ p(R, G, B) 는 256 256 256 가지가 있다. 그렇다면 이것을 표현하는 파라미터는 256 256 (256 - 1) 개가 필요함.

자세히 보기

Transformer 소개

What makes sequential modeling a hard problem to handle?

문장은 항상 길이가 달라질 수도 있고 문장 어순을 바꾸는 등 문법에 항상 완벽하게 대응하는 문장을 만들지 않듯이 중간에 뭐 하나가 빠져있을 수 있음. 또한 permuted sequence라고 뭐 하나가 밀리거나 하는 등의 문제가 있을 수 있어서, 중간에 무언가가 바뀐 시퀀셜 데이터가 들어간다면 모델링이 굉장히 어려워진다. 이것을 해결하기 위해 Transformer가 등장하였고, self-attention 이라는 구조를 사용하게 된다.

Attention is all you need - Transformer is the first sequence transduction model based entirely on attention.

RNN이라는 구조에서 (하나의 입력이 들어가고, 다른 입력이 들어갈 때 이전 뉴런에서 가지고 있던 cell state가 다음 뉴런으로 들어가는 재귀적 구조) Transformer에는 재귀적인 구조가 없고, attention 구조를 활용했다는 것이 가장 큰 변화이다.

From a bird’s-eye view, this is what the Transformer does for machine translation tasks.

트랜스포머 방법론은 시퀀셜한 데이터를 처리하고 인코딩하는 문제이기 때문에 NMT에만 적용되지 않고, 이미지 분류, detection, 이미지분류, Dall-e(문장에 맞는 이미지 생성) 등 여러 태스크에서 활용되고 있다.

어떠한 문장이 주어졌을 때 (불어문장) 그것을 다른 문장으로 바꾸는 것을 하려고 하는 것임. 시퀀셜 데이터를 넣었을 때 시퀀셜 데이터가 나오게 하는 것.

입력 시퀀스와 출력시퀀스의 단어 숫자가 다를 수 있고, 입력 시퀀스와 출력 시퀀스의 도메인이 다를 수 있는 하나의 모델구조임.

원래 RNN에서는 세 개의 단어가 들어가면 세 번의 작동을 했는데, 트랜스포머에서는 세 개든 백 개든 한 번에 인코딩을 할 수 있게 된다. 이렇듯 self-attention 구조에서는 n개의 단어를 한 번에 처리할 수 있다.

자세히 보기

RNN 소개

Sequential Model

  • 일상에서 다루는 대부분의 데이터가 시퀀셜 데이터다. (말, 영상 등)
  • 시퀀셜 데이터를 다루는 가장 큰 어려움은, 우리가 가장 얻고 싶은 것은 어떤 영역에 어떤 정보가 있다와 같은 것인데, 시퀀셜 데이터는 길이가 얼마나 될지 모르는 것이다. 즉 데이터가 몇개의 차원으로 되어있을지 모른다는 것인데, 이것은 시퀀셜 모델은 몇 개의 데이터가 들어오든 동작할 수 있어야 한다.
  • 이전에 어떤 데이터가 들어왔을 때 다음에 어떤 데이터가 들어올 지 예측하는 것이 가장 기본적인 모형이다.
  • 과거에 고려해야 하는 정보량이 계속 늘어난다는 것이 가장 큰 어려움이다.

시퀀셜 모델을 가장 간단히 만들 수 있는 방법은, Fix the past timespan 과거의 데이터를 몇 개만 보겠다고 정해두는 것이다.

  • Autoregressive model
  • Markov model (first-order autoregressive model) 가장 큰 특징은 가정을 할 때 바로 이전 과거에만 dependent 한다는 것이다. 이러한 마르코프 모델은 과거의 많은 정보를 버릴 수밖에 없다는 단점이 있다.

Latent autoregressive model

  • 위의 모델들은 과거의 많은 정보를 사용할 수 없기에 대안으로 나온 것이 Latent autoregressive model이다.
  • 중간에 Hidden state가 들어가 있는데, 이것은 과거의 정보를 요약하고 있다고 생각하면 됨.
  • 즉 바로 직전 과거에 의존하는 것이 아닌 hidden state에 의존하는 구조이다.

Recurrent Neural Network

자기 자신으로 돌아오는 구조가 하나 있다. 나의 h_t 에서의 t에서의 hidden state는 x_t에 의존하는 것이 아니라 t - 1에서 얻어진 cell state에 의존하는 구조임.

Recurrent 구조를 시간순으로 풀게 되면 입력이 많은 FC Layer로 표현할 수 있다.

자세히 보기