Linking MRC and Retrieval

홍찬우·2023년 7월 29일

Introduction to ODQA

ODQA (Open-domain Question Answering)

  • MRC는 지문이 주어진 상황에서 질의응답

  • ODQA는 지문이 따로 주어지지 않으며, 방대한 world knowledge에 기반한 질의응답

    • e.g., 현대 검색 엔진들은 연관 문서뿐만 아니라 질문에 대한 답을 같이 제공

History of ODQA

1) Question processing

  • Query formulation: 질문으로부터 키워드를 선택

2) Passage retrieval

  • 기존 IR 방법을 활용해 연관된 document를 뽑고 passage 단위로 자른 후 선별

3) Answer processing

  • 주어진 question과 선별된 passage들 내에서 답을 선택

  • 현재 기술처럼 span을 선별하긴 어려웠음


Retriever-Reader Approach

Retriever-Reader 접근 방식

Retriever

  • 데이터베이스에서 관련있는 문서를 검색

  • 입력-document corpus, 질문(query)

  • 출력-관련성 높은 문서

Reader

  • 검색된 문서에서 질문에 해당하는 답을 찾아 냄

  • 입력-Retrieved된 문서, 질문(query)

  • 출력-해당 문서 내 답변


학습 단계

Retriever

  • TF-IDF, BM25 (학습 X)

  • Dense (학습 O)

Reader

  • SQuAD와 같은 MRC dataset으로 학습

  • 학습 데이터를 추가하기 위해 distant supervision 활용


Distant Supervision

질문-답변만 있는 dataset에서 MRC 학습 데이터 만들기

과정

  1. 위키피디아에서 Retriever를 이용해 관련성 높은 문서 검색

  2. 너무 짧거나 긴 문서, 질문의 고유명사를 포함하지 않는 등 부적합 문서 제거

  3. answer가 exact match로 들어있지 않은 문서 제거

  4. 남은 문서 중 질문과 연관성이 가장 높은 단락을 supporting evidence로 사용


Inference

  1. Retriever가 질문과 가장 관련성 높은 n개 문서 출력

  2. Reader는 n개 문서를 읽고 답변 예측

  3. Reader가 예측한 답변 중 가장 score가 높은 것을 최종 답으로 사용



Issue & Recent Approaches

Different granularities of text at indexing time

  • 위키피디아에서 각 Passage 단위를 문서, 단락 또는 문장으로 정의할 지 정해야 함

  • Retriever 단계에서 몇 개의 문서를 넘길 지 정해야 함

    • Granularity에 따라 k가 다를 수 밖에 없음

    • e.g., article → k=5, paragraph → k=29, sentence → k=78


Single-passage training vs Multi-passage training

  • Single-passage

    • k개의 passage들을 reader가 각각 확인하고, 특정 answer span에 대한 예측 점수를 나타냄

    • 그 후 가장 높은 점수를 가진 answer span을 고르도록 함

      ⇒ 각 retrieved passage들에 대한 직접적인 비교라고 볼 수 없음

      ⇒ 따로 reader model이 보는 것이 아닌, 전체를 한 번에 보게 하자

  • Multi-passage

    • retrieved passages 전체를 하나의 passage로 취급하고, reader model이 그 안에서 answer span search

    • 문서가 너무 길어지므로 GPU 리소스가 더 필요함


Importance of each passage

  • Retriever model에서 추출된 top-k passage들의 retrieval score를 reader model에 전달

    • reader가 passage retrieval score까지 고려해 답을 선택



실습

MRC model

outputs = model(**inputs)
start, end = torch.max(outputs.start_logits, axis=1).indices.item(), torch.max(outputs.end_logits, axis=1).indices.item()
answer = tokenizer.decode(encoded_dict['input_ids'][start:end+1])
  • MRC model의 output은 start, end index의 logit 값이 나옴

  • logit 값이 max인 것을 찾고, 해당 인덱스를 start와 end로 해서 문서 내 answer을 찾음


Linking Retrieval and MRC

def open_domain_qa(query, corpus, vectorizer, model, tokenizer, k=1):
    # 1. Retrieve k relevant docs by usign sparse matrix
    _, doc_id = get_relevant_doc(vectorizer, query, k=1)
    context = corpus[doc_id.item()]

    # 2. Predict answer from given doc by using MRC model
    answer = get_answer_from_context(context, query, mrc_model, tokenizer)
  • get_relevant_doc 함수로 연관성이 높은 k개의 문서를 찾음

  • 해당 문서를 get_answer_from_context 함수에 넘겨 그 안에서 답을 검색







※ 모든 이미지 및 코드 출처는 네이버 커넥트재단 부스트캠프 AI Tech 5기입니다. ※

profile
AI-Kid

0개의 댓글