페이지

2021년 12월 31일 금요일

딥러닝을 통한 한글 문장의 질의응답 예측은 어떻게 할까? – 1편

 질의응답(question&answer)

질의응답이란 자연어처리 기술을 활용하여 주어진 문장에 대하여 질문을 던졌을 때 이에 대한 답을 예측하는 인공지능의 분야를 뜻한다. 한국어 Machine Reading Comprehension 분야에서 발전해 왔다. 아래 그림 1과 같이 60,407 행의 index, 질문, 원문, , 정답이 원문에서 시작하는 위치 등의 컬럼이 있는 데이터세트를 가지고 질의응답 예측을 살펴본다. 원문과 질문 그리고 정답에서도 알 수 있듯이, AI에 이러한 데이터세트를 훈련시키면, 새로운 질문에 대하여 AI는 원문으로부터 정답이 시작되고 끝나는 위치를 반환한다.


   <그림 1. Korean Question Answering Dataset >

 

한국어 질의응답 과제를 위한 데이터세트

 위의 그림 1 에 데이터세트는 LGCNS 가 미국 스탠포드대학의 기계 독해 기반의 표준데이터세트인 SQuAD v1.0 이라는 데이터 생성방식을 벤치마크하여 표준성을 확보하여 KorQuAD v1.1 이라는 이름으로 생성한 데이터세트다. 이 의미는 SQuAD에서 train dev .json 파일을 로드하는 방식을 KorQuAD에서 똑같이 사용할 수 있다는 뜻이다.  여기 에서 다운로드 받을 수 있으며 KorQuAD_v1.0_train.json KorQuAD_v1.0_dev.json 파일을 받을 수 있다. 훈련용은 60,407 행의 데이터, 테스트용 dev 5,774 행의 데이터이다. 이 외에도, 우리가 이후에 살펴볼 Huggingface Transformers 라이브러리에 등재된 monologg/kobert 모델을 사용할 때 git clone 으로 data 디렉토리 밑에 이들 데이터세트들도 포함되어 있으니 미리 다운로드 받지 않아도 된다. 평가할 수 있는 스크립트도 함께 다운로드 되는데 TEST 데이터에서 EM 80.17% / F1 91.20% SQuAD v1.1 에 대한 인간의 성능이라고 한다. 아래 그림 2 KorQUAD v1.0 의 테스트 세트로 평가한 Exact Match(EM) F1 스코어가 있다.

<그림 2. KorQuAD 1.0 리더보드>

 

리더보드를 보면 추출형 질의응답에서 이미 EM F1 점수에서 인간의 성능을 훨씬 넘어선 것을 알 수 있다. Exact Match(EM)는 정답과 예측 값이 얼마나 정확히 예측하는지에 대한 비율을 나타내고, F1 은 음절 기준으로 얼마나 중복되는지를 고려한 점수이다. KorQuAD 2.0 KorQuAD 1.0 과 는 다르게 1~2 문단이 아닌 위키피디아 문서 전체에서 답을 찾는 것과 같이 매우 긴 문서와 함께 표와 리스트도 포함된 데이터로 보다 실제 업무현장 환경과 같은 질의응답이 가능해진다. KorQuAD 2.0에서 인간 성능은 EM 68.82/F1 83.86 에 비해 리더보드의 1위는 EM 77.86/F1 89.82 로 이 역시 인간 성능을 앞선다.

 

질의응답 처리 절차

딥러닝을 통한 대략적인 질의응답 처리 절차는 아래 그림 3과 같다. Huggingface Transformers 라이브러리를 이용하여 구현하였으며 monologg/KoBERT-Transformers repo 를 사용하였다. README 파일을 보면 transformers 는 반드시 3.0 이상을 설치할 것을 권고하고 있다. 그리고 tokenizer 는 설치된 kobert_transformers /tokenization_kobert.py 를 사용해야 한다. Tokenizer를 사용하려면, kobert_transformers/tokenization_kobert.py 파일을 복사한 후, KoBertTokenizer 를 임포트하면 된다. Monologg/koBERT 모델을 훈련하는데 NVIDIA A100-PCIE-40GB GPU 1 개를 사용하였다. NVIDIA 벤치마크에서 V100 32GB 대비 약 4배의 처리성능을 보이는 것으로 되어있다. Torch 1.10.0, Python 3.8, Cuda 11.3 의 환경에서 훈련하였다.

1.    repo 에 있는 github 주소로부터 repository 를 복사하여 git clone 한다.

2.    Transformers3.0 이상으로 하여 torch 등의 관련 라이브러리들을 설치한다. 저자는 초기 훈련은 README 권고 환경으로 하고 나중에 파인튜닝 이후에 transformers 4.1.0 환경을 사용하였다. Transformers 4.0 까지는 이슈가 없는 걸로 나와있다.

3.    python3 run_squad.py 를 통하여 README 에 명기된 데로 훈련을 시행한다. 참고로 disk 용량은 10GB에서 용량부족을 만났으므로 여유 있게 30GB 정도로 잡아주는 것이 좋다. 이때 data 폴더 밑에는 한글 KorQuAD 데이터세트인 KorQuAD_v1.0_train.json KorQuAD_v1.0_dev.json 이 있어야 한다. Repo 에 담겨있지만, 혹시 없으면 KorQuAD github repo 에서 다운로드 받아야 한다.


<그림 3. 질의응답 처리 절차>

 

훈련이 진행되면 models 폴더 밑에 checkpoint-xxxx 같은 체크포인트 파일들이 생 긴다. models 폴더의 weight 값들을 가지고 나중에 전이학습을 통해 KoBERT 모델이 한글 질의응답을 진행하게 되므로 checkpoint-24000 까지 완성이 되었는지 확인이 필요하다.

1.    위에 모델이 생성된 이후에 KorQuAD 데이터세트에서 함께 다운로드 받은 evaluate_v1.0.py (repo clone 시 이미 파일에 담겨있음)로 성능을 평가한다.

2.    위의 사전 훈련된 모델을 사용하여 한글 tokenizer 기반의 질문과 원문이 입력이 되어 정답의 시작 포인트와 끝 포인트를 출력하는 모듈을 사용하여 질의응답 모듈을 작성

 

한글 질의응답 시스템

  자연어처리 분야 중에서 질의응답 혹은 기계독해(Machine Reading Comprehension)는 주어진 본문과 질문을 컴퓨터가 이해하고 스스로 해답을 제시하는 인공지능 태스크로 질의응답, 챗봇, 계약서 및 약관리스크 분석, 그리고 금융권의 컴플라이언스 등 다양한 분야에서 응용될 수 있다.

RNN 기반의 언어모델을 보완한 트랜스포머 언어모델인 BERT의 등장은 자연어처리 기술에 획기적인 발전을 가져왔다. 아래 그림 3과 같이 트랜스포머 기반 모델의 사전학습과 전이학습은 기계번역, 문장 분류, 기계 독해, 개체명 인식 등의 다양한 자연어 처리 분야에서 SOTA(State-Of-The-Arts)를 달성하는 업적을 이루었다. 특히, 기계 독해의 객관적인 지표로 활용되는 SQuAD 데이터셋의 리더 보드에서는 BERT 기반의 사전학습 모델이 대부분을 차지하고 있을 정도로 BERT의 대외적인 성능 과 활용도는 실질적으로 입증되고 있다. 2018 10월 구글에서 기존 SQuAD 1.1 task에서 human performance를 넘어서는 BERT 모델에 대한 논문을 발표했다. BERT 모델에 대해서는 이전 뉴스레터 16를 참고하기 바란다.

  본 과제에서의 한글 질의응답시스템은 기계 독해의 객관적인 지표로 활용되고 있는 KorQuAD 1.0 을 대상으로 최대 512 바이트 길이의 한글 본문과 질문을 입력하면 질의응답시스템이 본문중에서 질문에 해당하는 정답의 단어 나 문장의 처음 위치와 마지막 위치를 리턴하는 시스템을 구현하는 것이다.

 


<그림 3. BERT 사전학습을 통한 downstream 태스크 예>

 

Huggingface KoBert Transformers 라이브러리

  HuggingfaceTransormers 기반의 BERT, BART, ELECTRA 등등의 최신 자연어처리 알고리즘들을 Tensorflow, Torch로 구현한 transformers repository 를 제공할 뿐 아니라, 한글 토크나이저를 지원하는 우리가 사용하는 molonogg/KoBERT-Transformers 같은 개인이 만든 모델을 transformers를 통해 직접 업로드/다운로드하여 사용할 수 있게 되었다.

Tokenizer를 사용하려면 `tokenization_kobert.py`에서 `KoBertTokenizer`를 임포트해야 하며 아래와 같이 사용한다. BertModel KoBertTokenizer 를 임포트 한 후에 각각을 .from_pretrained(‘monologg/kobert’) 로 사전학습모델을 불러 사용한다.

 

KorQuAD 1.0 데이터세트

KorQuAD(The Korean Question Answering Dataset, 한국어 질의응답 데이터셋)는 한국어 기계독해(MRC)를 위해 LGCNS에서 구축한 대규모 질의응답데이터셋으로 한국어MRC 모델을 학습하고 그 성능을 평가하는 일에 사용되고 있다. 아래 그림 4 와 같이 버전 1.0 2.0 은 차이가 있고 본 시스템에서는 1.0 데이터세트를 사용한다.

<그림 4. KorQuAD 1.0 2,0 비교>

 

한글 질의응답 성능평가

Huggingface KoBERT 사전학습 모델을 이용한 한글 질의응답 성능 결과는 아래 그림 5 와 같다. 사람 성능 이 EM 80.17, F1 91.2 인 것을 감안하면 성능이 아직 못 미침을 알 수 있다

<그림 5. Huggingface BERT 모델 별 한글 질의응답 성능>

Huggingface 의 한글 질의응답의 다른 모델로 HanBERT EM 78.74, F1 92.02, 그리고 문장의 mask 훈련을 generator discriminator 로 가장 그럴듯한 문장을 맞추는 형태로 학습하는 KoELECTRA-base 의 경우는 EM 61.10, F1 89.59 를 나타내어 현재는 HanBERT 가 가장 사람의 능력에 근접한 것으로 보인다.

  지금까지 한글 질의응답 시스템, 질의응답 처리절차, 데이터세트, 성능평가까지 살펴보았다. 2편에서 KorQuAD 데이터를 통한 훈련, 파인튜닝, 및 평가까지 살펴보겠다.


댓글 없음:

댓글 쓰기