(1강) 인공지능과 자연어 처리

💡
인공지능의 발전에 따른 자연어 처리 분야의 발전을 알아본다.

인공지능의 탄생과 자연어처리

인공지능에 대해서는 다양한 정의를 내릴 수 있다. 앨런 튜링은, 기계에 대한 지능을 '인간과 대화 할 수 있는가'에 대한 여부로 제시했다.

튜링 테스트(이미테이션 게임)의 예시

ELIZA는 비록 Rule Based Model이지만, 튜링 테스트를 적용할 수 있는 최초의 Human-Like AI로 알려져 있는 Chat Bot이다. 위에서 살펴보았듯, 자연어 처리는 인공지능의 발전과 매우 깊은 상관관계가 있음을 알 수 있다. 마찬가지로, 자연어처리는 매우 다양한 응용 분야를 갖는다.

인간이 자연어를 통해 의사소통을 하는 과정을 살펴보면, 다음과 같이 이해할 수 있다.

인간의 자연어 처리에 대한 예시

이를 Computer에 대입하면 다음과 같다.

인간의 자연어 처리와 과정은 동일하다.

단, Computer의 경우 Text 그 자체로서는 이 정보를 처리할 수 없기 때문에, 이를 벡터의 형태로 Encoding해야 한다. Computer가 Text를 잘 이해할 수 있도록 Encoding 하기만 한다면, 대부분의 문제를 분류의 형태로 치환하여 생각할 수 있다. 즉, Encoding은 자연어 처리의 핵심이다.

자연어 처리의 응용 분야를 분류로 치환하여 생각하는 예시

위와 같이 분류의 형태로 치환하기 위해서는, Data의 특징을 잘 표현한 채로 Embedding이 수행되어야 한다. 분류 대상의 특징을 잘 파악하여 이를 Mapping하는 것이 중요하다는 의미이다. 이렇게 Vector 공간 상에 Data를 잘 Mapping하기만 한다면, 분류를 수행하는 것은 어려운 일이 아니다. 하지만, 자연어라는 Data는 Feature를 잡아내기가 매우 어렵다. 그렇기 때문에, 이 과정을 Machine Learning의 형태로 해결하고자 하는 것이다.

자연어 Embedding의 예시

가장 기초적인 Encoding 방식은 One-Hot Encoding이다. n개의 단어를 n개 차원의 Vector로 표현하는 것이다. 하지만, 이는 단순한 만큼 단어가 가지는 '의미'를 벡터공간에서 표현할 수 없다는 단점을 갖는다.

Word2Vec은, 주변 단어와의 관계를 통해서 단어의 '의미'를 표현하고자 한다.

Word2Vec의 Idea 예시

이를 통해 단어의 의미를 포함한 Dense Vector를 얻을 수 있다. 이 Dense Vector를 통해 단어간의 유사도나 관계 등을 파악할 수 있고, 연산을 통한 추론까지 가능해졌다. 단, 이는 단어의 Subword의 정보는 포함하지 못하고 다량의 OOV가 발생할 여지가 많다.

FastText는 단어를 N-Gram으로 분리해, 단어 내의 Subword의 정보를 포함시킨다.

FastText에서 <Orange>에 대한 Encoding 예시

위와 같은 과정을 통해, 이 Algorithm은 오탈자, OOV 등에 매우 강건한 모습을 보인다. 하지만, 이 역시 단어의 Level에서 이루어지는 Encoding이기 때문에, 문맥을 고려하지 못한다는 단점이 존재한다.

딥러닝 기반의 자연어처리와 언어모델

언어 모델이란, 자연어의 법칙처럼 주어진 단어로부터 다음에 등장할 단어를 예측하는 모델이다. 이를 잘 수행하는 모델은 언어적 특성과 문맥을 잘 반영된 모델이라고 판단할 수 있다.

Markov Chain Model은 주어진 단어 중 N개를 고려하여, 가장 높은 확률을 갖는 단어를 예측하는 모델이다.

Markov Chain Model의 예시

위와 같은 가정을 기반으로 제시된 모델은 RNN이다. 이전 State 정보가 다음 State에 영향을 미치도록 설계된 것이다. 이전의 Hidden State가 다음 Hidden State에 영향을 주기 때문에, 마지막으로 출력된 출력은 문장의 문맥을 담고 있는 Context Vector가 된다. 이 Context Vector를 활용하면, 문장 분류와 같은 Task를 수행할 수 있다.

Seq2Seq는 RNN구조의 Encoder Layer를 통해 Context Vector를 생성하고, 이를 Decoder Layer에 입력해 문장을 출력하는 형태의 Model이다. Seq2Seq의 Encoder Decoder 구조는, 이론적으로 모든 Task를 포함할 수 있다.

입력 Sequence가 매우 긴 경우, 일찍 등장한 Token에 대한 정보가 희석되기 쉽고 문장 전체의 의미를 포함하기가 어려운 단점이 존재한다. 이를 해결하기 위해, 각 Feature의 중요도를 고려한 Attention 개념이 도입되었다. Attention의 도입으로, 기계번역 등과 같은 Task에서는 비약적인 성과를 얻을 수 있었다.

Seq2Seq는 구조적으로 RNN을 기반에 두고 있기 때문에, 연산 속도가 느린 등의 구조적 한계를 가지고 있다. 이를 극복하기 위해 Self-Attention Model인 Transformer가 등장했다. Transformer의 등장 이후에 NLP는 새로운 변화를 맞이하고 있으며, 다양한 언어모델이 등장하게 되었다.

Transformer 이후의 Model의 예시


Reference

자연어처리

FastText

Seq2Seq

Seq2Seq + Attention


Project

오늘의 목표 및 진척상황

  • SSH 연결 등 Python IDLE Project 준비
  • Wandb Tutorial 및 활용방안 강구
  • U Stage NLP 과제 복습
  • 김성현 Master의 Youtube 강의 수강
  • Baseline Code 이해
  • Task에 대한 공부

직면했던 문제와 학습한 내용

  1. Python IDLE Project 준비

    기존에 IPython 형태의 Notebook으로만 Project를 수행했었기 때문에, Python IDLE의 형태에 대한 준비가 필요했다. VSCode로 SSH Remote Server 연결 등의 작업을 수행했는데, Permission Deny와 같은 이슈가 발생하기도 했다. 해당 문제는 이 링크 등을 통해 해결했다.

  1. 실험관리 Tool 학습

    이전 Stage 등에서 언급되었던, 'Wandb', 'NeptuneAI', 'Mlflow' 등의 Service를 확인하고 사용법을 익혔다. 최종적으로 선택한 Tool은 Wandb이다. 먼저, Tutorial이 꼼꼼하게 설계되어 있었다. 기능적으로도, Logging과 시각화 기능이 잘 되어 있었다. 또한, Sweeps를 통해 Hyper Parameter Search도 수행할 수 있고, HuggingFace와의 연계도 가능하기에 이를 선택했다.

  1. U Stage NLP 과제 복습

    U Stage 당시 진행했던 과제 영상과 Code를 복습하며, 아주 기본적인 내용부터 학습을 시작했다. NLP 분야에서는 당연한 Code의 흐름이더라도 내게는 사뭇 낯선 흐름이었기 때문이다. 기본적인 전처리부터, 각 필요성 등을 이해하기 위해 많은 시간을 들였다.

  1. 김성현 Master의 Youtube 강의

    Youtube에 게시되어 있는 김성현 Master의 강의를 수강하며, BERT에 대해 조금 더 공부했다. 해당 강의는 P Stage의 강의와 유사한 부분도 많았지만, 비슷한 내용에 대한 다른 비유 등을 들을 수 있어서 이해에 큰 도움이 됐다. (Link)

  1. Baseline Code의 이해

    이번 Stage에서 제공된 Baseline Code를 이해하기 위해 각 흐름을 Notebook으로 옮겨 확인해보고 있다. 어떤 Input과 Output이 생기고 있고, 각 함수의 필요성은 무엇인지 등을 확인하고 공부하고 있다.

  1. Task에 대한 이해

    이번 Stage에서 가장 어렵게 느끼고 있는 부분은 Task에 대한 이해이다. 이를 이해하기 위해 다양한 정보를 확인해보고 있는데, 아직까지는 명확하게 이해하지는 못했다. 현재 내가 의문을 갖는 부분은 다음과 같다.

    1. 한 개의 Entity가 여러 개의 Token으로 분리될 경우, 여러 개의 Vector가 그 Entity를 표현하는 것이 맞는가?
    1. 두 Entity의 관계라 함은 어떻게 유도 되는 것인가? 각 Entity의 Query Vector에 대한 Score라면, 이 Score의 값만 가지고 해당 Entity의 속성을 표현할 수 있는가? 각 Entity를 표현하는 Token과 Vector가 여러 개인 경우는 어떻게 이 연산이 일어나는가?
    1. Embedding된 Vector간 어떤 연산이 일어나는 것인가? 최종 Output 이전에 어떤 정보들이 선택되고 연산이 일어나는가?
    1. 어떤 Layer가 학습되는 것인가? Embedding Layer에도 변화가 생기는가? Classification Layer에만 변화가 생기는가?

    위와 같은 의문을 해결하기 위해 Baseline Code를 한 줄 한 줄 따라가고 있으며, 위와 같은 이해를 통해 성능 개선을 위한 실험을 계획해볼 예정이다.

추가로 진행 할 사항

  • Baseline Code 이해
  • Default로 주어진 Model의 Architecture 및 동작 확인
  • Wikipedia Data 등 외부 Data 정보 확인

'네이버 부스트캠프 AI Tech' 카테고리의 다른 글

[P2] Day 53  (0) 2021.04.26
[P2] Day 52  (0) 2021.04.26
[P1] 이미지 분류 Wrap-up Report  (0) 2021.04.11
[P1] Day 50  (0) 2021.04.11
[P1] Day 49  (0) 2021.04.11

+ Recent posts