-
부스트캠프 ai tech 2기 11주차 학습 정리 노트Boostcamp AI Tech 2기 2021. 10. 15. 23:08
강의 복습
1강 MRC Intro & Python Basics
Machine Reading Comprehension (MRC, 기계독해) :
주어진 지문 (Context)를 이해하고, 주어진 질의 (Query/Question)의 답변을 추론하는 문제
1) Extractive Answer Datasets :
질의 (question)에 대한 답이 항상 주어진 지문 (context)의 segment (or span)으로 존재 ex) SQuAD, KorQuAD, NewsQA, Natural Questions, etc.
2) Descriptive/Narrative Answer Datasets :
답이 지문 내에서 추출한 span이 아니라, 질의를 보고 생성 된 sentence (or free-form)의 형태 ex) MS MARCO, Narrative QA
3) Multiple-choice Datasets:
질의에 대한 답을 여러 개의 answer candidates 중 하나로 고르는 형태 ex) MCTest, RACE, ARC, etc.
MRC의 평가방법 :
1) Exact Match (EM) : 예측한 답과 ground-truth이 정확히 일치하는 샘플의 비율
2) F1 score : 예측한 답과 ground-truth 사이의 token overlap을 F1으로 계산
3) ROUGE-L : 예측한 값과 ground-truth 사이의 overlap recall. LCS (Longest common subsequence)를 기반으로 한다.
4) BLEU (Bilingual Evaluation Understudy) : 예측한 답과 ground-truth 사이의 precision. BLEU-n ⇒ uniform n-gram weight
Unicode : 전 세계의 모든 문자를 일관되게 표현하고 다룰 수 있도록 만들어진 문자셋. 각 문자마다 숫자 하나에 매핑한다. 유니코드를 뜻하는 접두어인 U+와 16진수 Code point로 이루어진다. ex) 가 : U+AC00
인코딩 : 문자를 컴퓨터에서 저장 및 처리할 수 있게 이진수로 바꾸는 것
UTF-8 (Unicode Transformation Format) :
현재 가장 많이 쓰는 인코딩 방식으로, 문자 타입에 따라 다른 길이의 바이트를 할당한다.
1 byte: Standard ASCII
2 bytes: Arabic, Hebrew, most European scripts
3 bytes: BMP(Basic Multilingual Plane) - 대부분의 현대 글자 (한글 포함)4 bytes: All Unicode characters - 이모지 등
Unicode와 한국어 :
한국어는 한자 다음으로 유니코드에서 많은 코드를 차지하고 있는 문자이다.
완성형 : 현대 한국어의 자모 조합으로 나타낼 수 있는 모든 완성형 한글 11,172자(가, 각, ..., , ) (U+AC00 ~ U+D7A3)
조합형 : 조합하여 글자를 만들 수 있는 초·중·종성 (U+1100 ~ U+11FF, U+A960 ~ U+A97F, U+D7B0 ~ U+D7FF)
Tokenizing (토크나이징) : 텍스트를 토큰 단위로 나누는 것. 단어(띄어쓰기 기준), 형태소, subword 등 여러 토큰 기준이 사용된다.
Subword 토크나이징 :
자주 쓰이는 글자 조합은 한 단위로 취급하고, 자주 쓰이지 않는 조합은 subword로 쪼갠다. "##"은 디코딩 (토크나이징의 반대 과정)을 할 때 해당 토큰을 앞 토큰에 띄어쓰기 없이 붙인다는 것을 뜻한다.
BPE (Byte-Pair Encoding) :
데이터 압축용으로 제안된 알고리즘. NLP에서 토크나이징용으로 활발하게 사용되고 있다.
1. 가장 자주 나오는 글자 단위 Bigram (or Byte pair) 를 다른 글자로 치환한다.
2. 치환된 글자를 저장해둔다.
3. 1~2번을 반복한다
KorQuAD : LG CNS가 AI 언어지능 연구를 위해 공개한 질의응답/기계독해 한국어 데이터셋
- 인공지능이 한국어 질문에 대한 답변을 하도록 필요한 학습 데이터셋
- 1,550개의 위키피디아 문서에 대해서 10,649 건의 하위 문서들과 크라우드 소싱을 통해 제작한 63,952 개의 질의응답 쌍으로 구성되어 있음 (TRAIN 60,407 / DEV 5,774 / TEST 3,898)
- 누구나 데이터를 내려받고, 학습한 모델을 제출하고 공개된 리더보드에 평가를 받을 수 있음 -> 객관적인 기준을 가진 연구 결과 공유가 가능해짐
- 현재 v1.0, v2.0 공개 : 2.0은 보다 긴 분량의 문서가 포함되어 있으며, 단순 자연어 문장 뿐 아니라 복잡한 표와 리스트 등을 포함하는 HTML 형태로 표현되어 있어 문서 전체 구조에 대한 이해가 필요
2강 Extraction-based MRC
Extraction-based MRC 문제 정의 : 질문(question)의 답변(answer)이 항상 주어진 지문(context)내에 span으로 존재 e.g. SQuAD, KorQuAD, NewsQA, NaturalQuestions, etc.
Pre-processing
WordPiece Tokenizer : BPE 방법론 중 하나. ex) “미국 군대 내 두번째로 높은 직위는 무엇인가?” -> [‘미국’, ‘군대’, ‘내’, ‘두번째’, ‘##로’, 높은, ‘직’, ‘##위는’, ’무엇인가’, ‘?’]
Attention Mask :
입력 시퀸스 중에서 attention을 연산할 때 무시할 토큰을 표시.
0은 무시, 1은 연산에 포함.
보통 [PAD]와 같은 의미가 없는 특수토큰을 무시하기 위해 사용.
Token Type IDs :
입력이 2개이상의 시퀸스일 때 (예: 질문 & 지문), 각각에게 ID를 부여하여 모델이 구분해서 해석하도록 유도.
모델 출력값 :
정답은 문서내 존재하는 연속된 단어토큰 (span)이므로, span의 시작과 끝 위치를 알면 정답을 맞출 수 있음.
Extraction-based에선 답안을 생성하기 보다, 시작 위치와 끝 위치를 예측하도록 학습함. 즉 Token Classification문제로 치환.
Post-processing
불가능한 답 제거하기 : 다음과 같은 경우 candidatelist에서 제거
- Endposition이 startposition보다 앞에 있는 경우 (e.g.start=90,end=80)
- 예측한 위치가 context를 벗어난 경우 (e.g.question위치쪽에 답이 나온 경우)
- 미리 설정한 max_answer_length 보다 길이가 더 긴 경우
최적의 답안 찾기 :
1. Start/end position prediction에서 score(logits)가 가장 높은 N개를 각각 찾는다.
2. 불가능한 start/end조합을 제거한다.
3. 가능한 조합들을 score의 합이 큰 순서대로 정렬한다.
4. Score가 가장 큰 조합을 최종 예측으로 선정한다.
5. Top-k가 필요한 경우 차례대로 내보낸다
3강 Generation-based MRC
Generation-based MRC 문제 정의 :
MRC 문제를 푸는 방법
1) Extraction-based mrc: 지문 (context) 내 답의 위치를 예측 ⇒ 분류 문제 (classification)
2) Generation-based mrc: 주어진 지문과 질의 (question)를 보고, 답변을 생성 ⇒ 생성 문제 (generation), Loss 계산 시 F1 계산을 위해 text로의 별도 변환 과정이 필요하다.
Pre-processing
토큰화 : Extraction-based MRC 와 같이 WordPiece Tokenizer를 사용. 입력 텍스트를 토큰화한 뒤, 각 토큰을 미리 만들어둔 단어 사전에 따라 인덱스로 변환함.
- 사전학습 단계에서 먼저 학습에 사용한 전체 데이터 집합 (코퍼스)에 대해서 구축되어 있어야함
- 구축 과정에서 미리 각 단어 토큰들에 대해 순서대로 번호(인덱스)를 부여해둠
Special Token :
Extraction-based MRC에선 CLS, SEP, PAD 토큰을 사용하지만, Generation-based MRC에서는 주로 PAD 토큰만을 사용하고, 대신 자연어를 이용하여 정해진 텍스트 포맷(format)으로 데이터를 생성한다.
Attention mask :
Extraction-based MRC 와 똑같이 어텐션 연산을 수행할 지 결정하는 어텐션 마스크 존재
Token type ids :
BERT 와 달리 BART 에서는 입력시퀀스에 대한 구분이 없어 token_type_ids가 존재하지 않는다.
정답 출력 :
전체 시퀀스의 각 위치마다 모델이 아는 모든 단어들 중 하나의 단어를 맞추는 classification문제
1. 모델의 출력을 선형 레이어에 넣음
2. seq_length 내 각 위치마다 들어가야할 단어를 하나씩 선택
3. 정해진 횟수 또는 전체 길이의 수 만큼 반복
Bart
기계 독해, 기계 번역, 요약, 대화 등 sequence to sequence 문제의 pre-training을 위한 denoising autoencoder. Bart는 Bert와 달리 Pre-training 단계에서 마스크된 단어를 맞추는 것이 아닌, 텍스트에 노이즈를 주고 원래 텍스트를 복구하는 문제를 푸는 방식으로 학습한다.
- BART의 인코더는 BERT처럼 bi-directional
- BART의 디코더는 GPT처럼 uni-directional(autoregressive)
Post-processing
Decoding : 디코더에서 이전 스텝에서 나온 출력이 다음 스텝의 입력으로 들어간다. (augoregressive) 맨 처음 입력은 문장 시작을 뜻하는 스페셜 토큰이다.
Searching : 주로 Beam Search와 유사한 방법을 취한다.
4강 Passage Retrieval - Sparse Embedding
Passage Retrieval : 질문(query)에 맞는 문서(passage)를 찾는 것. Query와 Passage를 임베딩한 뒤 유사도로 랭킹을 매기고, 유사도가 가장 높은 Passage를 선택한다.
Open-domain Question Answering : 대규모의 문서 중에서 질문에 대한 답을 찾기. Passage Retrieval과 MRC를 이어서 2-Stage로 만들 수 있음.
Passage Embedding and Sparse Embedding
Passage Embedding Space :
Passage Embedding의 벡터 공간. 벡터화된 Passage를 이용하여 Passage 간 유사도 등을 알고리즘으로 계산할 수 있음.
Sparse Embedding 소개 :
1. BoW를 구성하는 방법 -> n-gram
- unigram (1-gram): It was the best of times => It, was, the, best, of, time
- bigram (2-gram): It was the best of times => It was, was the, the best, best of, of times
2. Term value 를 결정하는 방법
- Term이 document에 등장하는지 (binary)
- Term이 몇번 등장하는지 (term frequency), 등. (e.g. TF-IDF)
Sparse Embedding 특징 :
1. Dimension of embedding vector = number of terms
- 등장하는 단어가 많아질수록 증가
- N-gram의 n이 커질수록 증가
2. Term overlap을 정확하게 잡아 내야 할 때 유용.
3. 반면, 의미(semantic)가 비슷하지만 다른 단어인 경우 비교가 불가
TF-IDF
TF-IDF (Term Frequency – Inverse Document Frequency) :
Term Frequency (TF): 단어의 등장빈도
1. Raw count
2. Adjusted for doc length: raw count / num words (TF)
3. Other variants: binary, log normalization, etc.
Inverse Document Frequency (IDF): 단어가 제공하는 정보의 양
TF-IDF(t, d): TF-IDF for term t in document d. TF(t, d)와 IDF(t)의 곱으로 이루어진다.
i) ‘a’, ‘the’ 등 관사 ⇒ Low TF-IDF :
TF는 높을 수 있지만, IDF가 0에 가까울 것 (거의 모든 document에 등장 ⇒ N ≈ DF(t) ⇒ log(N/DF) ≈ 0)
ii) 자주 등장하지 않는 고유 명사 (ex. 사람 이름, 지명 등) ⇒ High TF-IDF :
IDF가 커지면서 전체적인 TF-IDF 값이 증가
TF-IDF를 이용한 유사도 계산 :
계산한 문서별 TF-IDF를 가지고 사용자가 물어본 질의에 대해 가장 유사한 문서를 검색하기
1. 사용자가 입력한 질의를 토큰화
2. 기존에 단어 사전에 없는 토큰들은 제외
3. 질의를 하나의 문서로 생각하고, 이에 대한 TF-IDF 계산
4. 질의 TF-IDF 값과 각 문서별 TF-IDF 값을 곱하여 유사도 점수 계산
5. 가장 높은 점수를 가지는 문서 선택
TF-IDF Score BM25 : TF-IDF 의 개념을 바탕으로, 문서의 길이까지 고려하여 점수를 매김
- TF 값에 한계를 지정해두어 일정한 범위를 유지하도록 함
- 평균적인 문서의 길이 보다 더 작은 문서에서 단어가 매칭된 경우 그 문서에 대해 가중치를 부여
- 실제 검색엔진, 추천 시스템 등에서 아직까지도 많이 사용되는 알고리즘
BM25 Score 5강 Passage Retrieval - Dense Embedding
Passage Embedding : 구절(Passage)을 벡터로 변환하는 것
Sparse Embedding : TF-IDF벡터는 Sparse 하다.
1. 차원의 수가 매우 크다 -> compressed format으로 극복 가능
2. 유사성을 고려하지 못한다
3. 중요한 term들이 정확히 일치해야 하는 경우 성능이 뛰어남
4. 임베딩이 구축되고 나서는 추가적인 학습이 불가능함
Dense Embedding :
Complementary to sparse representations by design
1. 더 작은 차원의 고밀도 벡터 (length = 50-1000)
2. 각 차원이 특정 term에 대응되지 않음
3. 대부분의 요소가 non-zero값
4. 단어의 유사성 또는 맥락을 파악해야 하는 경우 성능이 뛰어남
5. 학습을 통해 임베딩을 만들며 추가적인 학습 또한 가능
Training Dense Encoder
학습 목표 :
연관된 question과 passage dense embedding 간의 거리를 좁히는 것 (또는 inner product를 높이는 것). 즉 higher similarity.
Challenge:
연관된 question / passage를 어떻게 찾을 것인가? -> 기존 MRC 데이터셋을 활용해 연관된 question과 passage 간의 dense embedding 거리는 좁히고 연관 되지 않은 question과 passage간의 embedding 거리는 멀어지게 한다.
Choosing negative examples :
1. Corpus 내에서 랜덤하게 뽑기
2. 좀 더 헷갈리는 negative 샘플들 뽑기 (ex. 높은 TF-IDF 스코어를 가지지만 답을 포함하지 않는 샘플)
Objective function :
Positive passage 에 대한 negative log likelihood (NLL) loss 사용
Evaluation Metric for Dense Encoder :
Top-k retrieval accuracy : retrieve 된 passage 중에 답을 포함하는 passage의 비율
6강 Scaling up with FAISS
Passage Retrieval and Similarity Search
MIPS(Maximum Inner Product Search) :
주어진 질문(query) 벡터 q에 대해 Passage 벡터 v들 중 가장 질문과 관련된 (내적이 큰) 벡터를 찾아야함. 그러나 실제로 검색해야할 데이터는 훨씬 방대하므로 더이상 모든 문서 임베딩을 일일히 보면서 검색할 수 없음.
Tradeoffs of similarity search :
1) Search Speed :
쿼리 당 유사한 벡터를 k개 찾는데 얼마나 걸리는지?
-> 가지고 있는 벡터량이 클수록 더 오래걸림
2) Memory Usage :
벡터를 사용할 때, 어디에서 가져올 것인지?
-> RAM에 모두 올려둘 수 있으면 빠르지만, 많은 RAM용량을 요구함. 디스크에서 계속 불러와야 한다면 속도가 느려짐.
3) Accuracy :
brute-force 검색 결과와 얼마나 비슷한지?
-> 속도를 증가시키려면 정확도를 희생해야하는 경우가 많음
Approximating Similarity Search
Compression : vector를 압축하여, 하나의 vector가 적은 용량을 차지 -> 압축량&정보 손실 up, 메모리 down
ex) Scalar Quantization (SQ) : 4-byte floating point -> 1-byte (8bit) unsigned integer로 압축
Pruning : Search space를 줄여 search 속도 개선 (dataset의 subset만 방문)
Pruning - Inverted File (IVF) : Clustering + Inverted file을 활용한 search
1) Clustering : 전체 vector space를 k개의 cluster로 나눔 ex) k-means clustering
2) Inverted file (IVF) : Vector의 index = inverted list structure
-> 각 cluster의 centroid id와 해당 cluster의 vector들이 연결되어 있는 형태
Searching with clustering and IVF :
1. 주어진 query vector에 대해 근접한 cetroid 벡터를 찾음
2. 찾은 cluster의 inverted list 내 vector들에 대해 search 수행
Introducion to FAISS
FAISS : Library for efficient similarity search
Passage Retrieval with FAISS :
1) Train index and map vectors
2) Search based on FAISS index
7강 Linking MRC and Retrieval
Retriever-Reader Approach
Retriever : 데이터베이스에서 관련있는 문서를 검색(search) 함
- 입력 : 문서셋, 질문(query)
- 출력 : 관련성 높은 문서
Reader: 검색된 문서에서 질문에 해당하는 답을 찾아냄
- 입력 : Retrieved된 문서(document), 질문(query)
- 출력 : 답변(answer)
Distant supervision : 질문-답변만 있는 데이터셋에서 MRC 학습 데이터 만들기. Supporting document가 필요함
1. 위키피디아에서 Retriever를 이용해 관련성 높은 문서를 검색
2. 너무 짧거나 긴 문서, 질문의 고유명사를 포함하지 않는 등 부적합한 문서 제거
3. answer가 exact match로 들어있지 않은 문서 제거
4. 남은 문서 중에 질문과 (사용 단어 기준) 연관성이 가장 높은 단락을 supporting evidence로 사용함
Inference :
1. Retriever가 질문과 가장 관련성 높은 5개 문서 출력
2. Reader는 5개 문서를 읽고 답변 예측
3. Reader가 예측한 답변 중 가장 score가 높은 것을 최종 답으로 사용함
Issues & Recent Approaches
Different granularities of text at indexing time :
1. 위키피디아에서 각 Passage의 단위를 문서, 단락, 또는 문장으로 정의할지 정해야 함.
2. Retriever 단계에서 몇개 (top-k)의 문서를 넘길지 정해야 함. Granularity에 따라 k 가 다를 수 밖에 없음 (e.g. article -> k=5, paragraph -> k=29, sentence -> k=78)
Single-passage training vs Multi-passage training :
Single-passage : k개의 passages 들을 reader가 각각 확인하고 특정 answer span에 대한 예측 점수 중 가장 높은 점수를 가진 answer span 을 고르도록 함. 이 경우 각 retrieved passages 들에 대한 직접적인 비교라고 볼 수 없음
Multi-passage: retrieved passages 전체를 하나의 passage 로 취급하고, reader 모델이 그 안에서 answer span 하나를 찾도록 함. 문서가 너무 길어지므로 GPU에 더 많은 메모리를 할당해야하며 처리해야하는 연산량이 많아짐
Importance of each passage :
Retriever 모델에서 추출된 top-k passage들의 retrieval score를 reader 모델에 전달
과제 수행 과정 및 결과
실습 및 스페셜 미션 코드를 유심히 보긴 했으나, 가장 중요한 목표였던 베이스라인 코드에 적용하는 단계까지 나가지 못하였다. 생각보다 이번 대회의 베이스라인이 기존의 대회들에 비해 이해가 어려워, 빠르게 베이스라인을 자유롭게 다룰 수 있을 정도가 되는 것이 중요한 것 같다. 주말동안 이를 중점적으로 공부해야겠다.
피어 세션
피어세션 시간에는 주로 강의를 듣고 생긴 질문을 받는 시간과 함께 이번 대회를 어떻게 풀어나가면 좋을지에 대한 이야기를 나눴다. 또 한가지 좋았던 점은 협업 방식에 대한 토의였는데, Pull Request를 이용하여 하나의 코드로 가기로 해 앞으로가 더욱 기대된다. 팀에 도움이 되는 팀원이 되기 위해 부지런히 노력해야겠다.
학습 회고
3번째 대회의 첫 주가 지나갔다. 이전 2번의 대회들보다 내용도 어려워지고 2개의 모델을 요구하기 때문에 2배의 기간의 배정되었음을 체감하고 있다. 이번 주에는 강의를 열심히 들은 것 외엔 크게 한 것이 없어 다음주가 되면 마음이 조금은 조급해질 것 같지만, 지금껏 잘해온만큼 조급해지지말고 꾸준히 가도록 해야겠다.
'Boostcamp AI Tech 2기' 카테고리의 다른 글
부스트캠프 ai tech 2기 15주차 학습 정리 노트 (0) 2021.11.13 부스트캠프 ai tech 2기 12주차 학습 정리 노트 (2) 2021.10.22 부스트캠프 ai tech 2기 9주차 학습 정리 노트 (0) 2021.10.01 부스트캠프 ai tech 2기 8주차 학습 정리 노트 (0) 2021.09.24 부스트캠프 ai tech 2기 7주차 학습 정리 노트 (0) 2021.09.15