> For the complete documentation index, see [llms.txt](https://lswkim322.gitbook.io/til/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lswkim322.gitbook.io/til/til-ml/boostcamp/competition/2.-nlp-mrc/day1-10.25.md).

# Day1 (10.25, 월)

> * MRC Task 에 대한 이해
> * 데이터 셋 분석&#x20;

### MRC(Machine Reading Comprehension, 기계독해)란?

기계 독해란 인공지능 알고리즘이 스스로 문제를 분석하고 질문에 최적화된 답안을 찾아내는 기술을 의미한다. 이를 활용한 Task 중 이번 대회에서는 ODQA (Open-Domain Question Answering)를 구현하는 것을 목표로 하고 있다.

ODQA란, 주어지는 지문이 따로 존재하지 않고 사전에 구축되어있는 Knowledge resource 에서 질문에 대답할 수 있는 문서를 찾고, 그 안에서 질문에 대한 답을 찾는 문제이다.

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FYDsLW6ls8rSfUP7xi1Ox%2Fimage.png?alt=media\&token=9806ea72-cd9e-45e3-baaf-2e5ec2e8afc8)

지난 강의를 통해서 배웠다시피 ODQA 문제는 다음 두가지로 나누어서 볼 수 있다.

* Retriever: 질문에 관련된 문서를 찾아주는 단계
* Reader: 관련된 문서를 읽고 적절한 답변을 찾거나 만들어주는 단계

우리는 1명의 PL과 3 / 3으로 팀을 나누어서 각각 Retreiver와 Reader를 구현해보기로 하였다.

(나는 Reader를 담당하게 됨)

### 평가방법 (EM + F1 Score)

#### Exact Match

예측과 정답이 완전 일치할 때 점수가 주어진다.

* 단, 띄어쓰기나 '.' 과 같은 기호는 제거하고 평가한다.
* 답이 여러개인경우 하나만 일치해도 정답으로 처리한다.

#### **F1 Score (참고용으로만 사용됨)**

* Barack Obama 가 정답인 경우, Obama만 입력하여도 겹치는 단어를 고려하여 부분점수가 부여됨.

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FJ7lBU0qJf5myw9r6ZHAm%2Fimage.png?alt=media\&token=6c0f151c-3237-4328-a0ce-060b133a0efb)

### Dataset

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FhMkhVythy8ZQBCRybz1t%2Fimage.png?alt=media\&token=86d1e2c0-3940-45c7-8942-bbb7e68778ad)

![Ai Stage BoostCamp Competition](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FLHWZ0l6rkBRKz9UmzyIL%2Fimage.png?alt=media\&token=97a39832-0b52-4091-b84d-278b9f078e95)

* id: 질문의 고유 id
* question: 질문
* answer: 답변에 대한 정보, 하나의 질문에 하나의 답변만 존재함.
  * answer\_start: 답변 시작위치
  * text: 답변의 텍스트
* context: 답변이 포함된 문서
* title: 문서의 제목
* document\_id: 문서의 고유 id

> 외부데이터 사용금지
>
> KLUE MRC 데이터 셋으로 학습된 가중치 사용은 금지

다음은 KLUE MRC에서 학습시킨 데이터 셋의 양이다.

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FntGZT5apY8YnbHhCBxUJ%2Fimage.png?alt=media\&token=fda9281c-2bc1-4aca-ade1-a40a5a88bc37)

보다시피 약 3만개의 데이터를 가지고 작업을 한 걸 알 수 있었다. 그에 비해 지금 학습하고자하는 데이터의 양이 약 4천개로 너무 적은것 같다는 생각이 들었다.

### MRC Model

저번과 마찬가지로 모델 선정에 있어서 기본적인 base-line과 Roberta-base, large를 테스트해보기 앞서 공식 문서를 체크해보았다.

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FjfUHzajKdGNkLpkjplhk%2Fimage.png?alt=media\&token=730f1edd-9c6c-4cab-ae1a-52db74a4b1d7)

이번 Task에서도 KLUE-RoBERTa-large가 높은 점수를 가지고 있음을 확인할 수 있었다.

근데 이거를 사용해도 되는건지 잘 모르겠다...

## 1. EDA 를 위한 작업 진행

* Train Dataset에 Train과 Validation이 애초에 나눠져있다. K-Fold를 사용하기 위해 두 데이터를 합쳐서 그냥 학습하는게 좋을 것 같다.

### 1.1. 중복 데이터 체크

* 눈에 보이는 거로는 text, answer\_start, context가 모두 일치한 케이스의 데이터를 직접 검증이 필요해 보였다.&#x20;
* ![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FHPuXycOz5CVMqZryuVQL%2Fimage.png?alt=media\&token=3a528fc1-c239-4f30-89fc-f7aa3e57f980)

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FMCa9wmGZf469npewWbOn%2Fimage.png?alt=media\&token=8efa63b4-0717-445b-a1e7-5e598d456a6f)

위에 보이는것과 같은 형태로 실제로 질문이 다르고 정답이 일치한 것으로 확인할 수 있었다.

단 context와 document\_id가 일치하는 중복건수가 612건으로 제거를 해주는 것에 대해 고려가 필요할 것 같다.

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FpK6nP80uupe3a76CgnMi%2Fimage.png?alt=media\&token=dd242d88-5fcb-4be6-8648-85efae5e60f9)

validation으로 구분된 곳에서도 5건의 중복 document를 확인할 수 있었다.

~~개인적인 생각으로는 해당 데이터를 삭제해주는 편이 top-k를 했을때 다양한 결과를 가져올 수 있는 방향이 될 것이라고 생각이 되었다.~~ <mark style="color:red;">(아 질문이 다르기때문에 그냥 학습하는게 낫다는 결과)</mark>

## 2. poetry 세팅

{% content-ref url="/pages/ZUdnH77X2EB7HRql9mC0" %}
[Poetry로 dependency 관리](/til/til-ml/untitled-2/poetry-dependency.md)
{% endcontent-ref %}

멘토님이 추천주신 의존성관리자로 스프링부트를 할 시에 maven같은 역할을 해주는 툴
