본문 바로가기

코딩/자연어처리

[NLP] Down-stream 모델 개발 과정(Flow chart)

반응형

※ 개인적으로 공부한 내용을 정리한 글입니다. 잘못 된 정보가 있을 수 있는 점 참고해주세요.
※ 틀린 부분이나 문의 사항은 댓글로 피드백해주시면 감사하겠습니다.


 

  자연어처리를 공부하는 과정에서 큰 흐름을 한번 정리가 필요할 것아 작성하는 글. 각 과정을 상세히 기록하면서 공부하는 것도 좋겠지만 먼저, 큰 그림을 그려놓고 키워드 중심으로 자료를 정리하면 좋을 것 같아서 먼저 이 글을 작성한다.

 

   아래 이미지는 데이터 수집이 완료되었다는 전제로 작성한 것이다. 내가 이해한 일반적인 자연어처리 모델 개발 과정은 아래와 같다.

제목의 down-stream은 내가 직접 풀고자 하는 문제라고 이해하면 된다. 예를 들어, 뉴스 기사를 topic에 따라 분류하는 예측 모델이 필요하다고 해보자. 그럼 여기서 down-stream은 '뉴스 분류 모델'이라고 할 수 있겠다.

 

자연어 처리 모델 개발 과정 예시

 

 

1. Text 전처리 :

 

  수집 된 데이터를 전처리하는 과정이다. 자연어 처리에서는 이 대상이 되는 text들을 코퍼스(Corpus)라고 표현한다. 처리 할 task에 따라 다르겠지만 일반적으로 코퍼스를 토큰화 하기 전에 불필요 한 문자, 숫자 등을 제거하는 과정이다. Text 전처리에는 대표적으로 아래와 같은 종류가 있다.

 

  - 불필요 문자, 숫자, 특수기호 제거

  - 불용어 제거 : 여기서 불용어란, 영어에서 the,a와 같이 관사와 같이 task에 따라 무의미한 단어를 의미)

  - 대소문자 통일 : 컴퓨터는 대소문자를 다르게 인식하므로 통일 필요.

  - Lemmatizaiton : 표제어 추출

     ex) 'am', 'are', 'is' -> 'be'

  - Stemming : 어간 추출

     ex) 'fishing', 'fished', 'fisher' -> 'fish'

  - 웹 크롤링을 통한 데이터 수집시 HTML 태그 제거 등

 

※ Stemming이나 Lemmatization의 경우 다른 형태의 단어들을 하나로 통일하는 과정이다.
   : 모델의 복잡성을 줄이고 계산 효율성을 높일 수 있음. 일관 된 데이터로 학습하므로 모델 성능 향상을 기대해볼 수 있음.

※ BERT, GPT와 같이 사전 학습 모델을 사용하는 경우 Stemming이나 Lemmatizaiton은 생략될 수 있다.

 

 

2. 토큰화(Tokenization)

 

  토큰화는 주어진 데이터셋의 텍스트를 단어별로 구분하는 작업이다. 모델의 입력은 한 문장이 될 수 도 있고 한번에 여러 문장이 입력될 수 있는데 토큰화에는 여러 형태가 있어서 task에 맞는 토큰화 방법을 적용해야 한다. 구현 방식은 직접 구현할 수도 있겠지만, Mecab, NLTK와 같은 라이브러리를 사용한다거나 사전학습  된 토큰화 라이브러리를 적용할 수 있다.

 

  사전 학습 된 토큰화 라이브러리는 사전 학습 모델 중 BERT의 BERTTorkeizer와 같은 라이브러리를 말한다.  일반적으로 토큰화 과정은 아래와 같은 이미지를 예시로 들 수 있다.

 

 

 

3. 단어 집합 구축

 

  토큰화 된 단어를 빈도수에 따라 정렬하고 숫자를 매핑한다. 이 과정에서  빈도수가 적은 단어를 제거한다거나 추가적인 전처리 과정을 거칠 수 있다. 단어 집합에 없는 단어가 나올 경우 'OOV(Out Of Vocabulary)'와 같이 별도 매핑을 통해 처리할 수 있다.

 

 

 

  주어진 task에 따라 단어 사전에 추가적인 special token이 추가될 수 있다. 아래와 같은 예시가 있으며, BertTorkenizer, RobertaTokenizer 등 사전학습된 토큰화 라이브러리를 사용하는 경우 아래와 같은 special token이 자동으로 추가된다.

 

Special token 예시

 

 

4. 정수 인코딩 & 패딩

  

  정수 인코딩은 각 단어에 고유한 정수를 할당하는 방식이다. 3번에서 진행했던 단어 사전을 통해 각 토큰화 된 데이터들을 정수로 매핑한다. 정수 인코딩을 하는 이유는 워드 임베딩을 진행할 때, 임베딩 레이어를 거치게 되는데 이 때 각 단어들을 숫자로 변경함으로써 NN(Neural net)의 입력으로 변경하는 과정이 필요하기 때문이다. 

   One-hot encoding이나 DTM, TF-IDF 등도 단어 데이터들을 수치로 변경하는 여러가지 방식 중 하나로 이해하면 된다. 어떤 task에 적용할건지에 따라 사용할 방식이 달라질 수 있다.

 

정수인코딩 및 패딩 과정

 

 

  패딩의 경우 단어의 길이에 맞춰 임의의 입력값을 정수 인코딩 결과에 넣어주는 과정이다. 워드 임베딩시 결국 인공 신경망 입력에는 같은 크기의 입력값이 들어가야 한다. 따라서, '0'과 같이 임의의 입력값을 통해 사이즈를 맞춰준다.

 

 

5. 워드 임베딩

 

  인공 신경망 구조를 통해 단어 벡터를 학습한다. 이 때 인공 신경망의 입력은 앞 정수 인코딩 결과가 될 수 있다. 정수 인코딩 결과를 임베딩 레이어에 입력하면 고정 된 크기의 밀집 벡터로 변환한다. 원핫 인코딩(One-hot encoding) 방식은 간단하지만 단어간 유사도를 표현할 수 없는 단점이 있다. 유사도를 반영한 단어의 의미를 수치화할 수 있는 방법이 필요해지면서 인공 신경망 구조를 통해 임베딩 레이어를 학습시키는 방법론이 개발되었다.

 

※ 대표적인 워드 임베딩 방법론

- Word2Vec : skip-gram, CBOW

- LSA

- FastText

- Glove

 

  워드 임베딩 방법론에 대해서는 추후 필요에 따라 추가로 내용을 정리해보도록 하겠다.

 

 

6. Down-stream task에 따른 모델 생성

 

  단어 간의 유사도를 반영 한 워드 임베딩 벡터가 생성이 되었다면 이를 입력으로 추가적인 모델을 구현할 수 있다. 예를 들어, 뉴스 본문 글을 통해 해당 기사의 topic을 분류하는 모델을 개발한다고 해보자. 그럼, 분류를 위한 지도학습 모델이므로 머신러닝 중 SVM, Random Forest 등의 모델을 통해 분류 모델을 구현해볼 수 있겠다. 혹은, 추가적인 NN(Neural Net) 구현을 통해 분류 모델 개발을 고려해볼 수 있다. 이 때, NN은 분류를 위해 구성되어야 하므로 softmax 를 활용한 구조가 될 것이다.

 

 

 

 

 

※ 참고서적 및 링크

1) 위키독스 - 딥 러닝을 이용한 자연어 처리 입문

 

딥 러닝을 이용한 자연어 처리 입문

많은 분들의 피드백으로 수년간 보완된 입문자를 위한 딥 러닝 자연어 처리 교재 E-book입니다. 오프라인 출판물 기준으로 코드 포함 **약 1,000 페이지 이상의 분량*…

wikidocs.net

2) dev-hunmim 티스토리

 

NLP 전처리 과정 & 단어 임베딩

NLP 전처리 과정 & 단어 임베딩 1. Introduction 자연어 데이터는 다른 데이터(Ex:이미지)와 달리 컴퓨터가 이해 할 수 있는 숫자로 변환해야만 한다. 정제되지 않은 입력 데이터와 모델을 연결시켜줄

dev-hunmin.tistory.com

 

 

 

 

 

728x90