초봉5센티미터

TIL 38. 딥러닝 - 자연어처리 (NLP) 3 본문

교육/멋쟁이사자처럼 AI School 7기

TIL 38. 딥러닝 - 자연어처리 (NLP) 3

삶은돼지고기 2022. 12. 15. 00:49
728x90

시퀀스 데이터(sequence data)란?

  • 시퀀스 데이터는 연관된 연속의 데이터로 순서가 있는 자료
    • 시계열 자료나 영상, 텍스트 자료가 대표적이다.
  • 실제 사용하는 데이터들 중에는 시퀀스 데이터가 대부분을 차지(음성인식, 자연어, 주가 등)
  • 연속된 데이터이므로 순서가 매우 중요하게 작용하며, 과거의 영향을 받기 때문에 과거 정보의 맥락을 고려하는 새로운 모델이 필요하게 되었다. (CNN → RNN)

NLP Preprocessing란?

- 단어, 문장, 문서의 vector를 모델의 입력으로 넣어주기 위해 데이터 전처리를 수행한다.

  1. EDA - 데이터를 불러온 후 문장 또는 문서들을 눈으로 확인하며 특수문자, 불용어 그리고 문장 구조에 대한 감을 잡는다.
  2. 문제의 목적과 분석자의 재량에 따라 불용어를 설정하고 리스트에 저장한다.
  3. 불용어 이외의 특수 문자들을 제거한다.
    - 정규표현식(re)을 사용하면 한글과 영어 소문자를 제외한 모든 글자들을 쉽게 제거할 수 있다.
  4. 형태소 분석을 통해 문장을 형태소 단위의 *토큰**으로 분리한다.
    - 설정한 불용어들을 결과로 반환해주는 형태소 분석기를 사용할 수 있다.
  5. 형태소 단위의 토큰들을 기반으로 리스트에 저장된 불용어를 제거한다.

형태소 분석(Stemming)

  • 단어나 문장의 언어적 속성을 파악
  • 보통 품사의 태깅(PoS) 을 통해 이루어지며 한국어 형태소 분석을 위해 *Konlpy** 패키지를 활용할 수 있다.
  • 형태소 단위로 의미있는 단어를 가져오고, 품사를 태깅하여 형용사나 명사 등을 추출하고 싶을 때 사용한다.

Python에서 사용 가능한 형태소 분석기

  • Mecab: 굉장히 속도가 빠르면서도 좋은 분석 결과를 보여준다.
  • Komoran: 댓글과 같이 정제되지 않은 글에 대해서 먼저 사용해보면 좋다.(오탈자를 어느정도 고려해준다.)
  • Kkma: 분석 시간이 오래걸리기 때문에 잘 이용하지 않게 된다.
  • Okt: 품사 태깅 결과를 Noun, Verb등 알아보기 쉽게 반환해준다.
  • khaiii: 카카오에서 가장 최근에 공개한 분석기, 성능이 좋다고 알려져 있으며 다양한 실험이 필요하다.

Vectorization 이란?

  • NLP를 컴퓨터가 이해할 수 있게 수치로 바꾸는 작업
    • vocabulary란 ? : 벡터로 변환된 고유의 토큰들이 모인 집합
      • vocabulary가 크면 클수록 학습이 오래 걸린다.
  • 토큰들을 벡터화하기 이전에 형태소 분석기를 사용하여 문장을 원하는 토큰들로 분리한다.

벡터화 과정

  • Tokenizer 인스턴스를 생성
  • fit_on_texts와 word_index를 사용하여 key value로 이루어진 딕셔너리를 생성
  • texts_to_sequences를 이용하여 text 문장을 숫자로 이루어진 리스트로 변경
  • 마지막으로 pad_sequences를 이용하여 리스트의 길이를 통일화

Padding

  • 문장의 길이를 맞춰주기 위해 부족한 길이만큼 0을 채우는 것
    • 문장 1의 길이와 2의 길이가 서로 다를 때 뒤쪽에 0을 padding해주어 같은 길이로 맞춰줄 수 있다.
  • 가변 길이의 입력을 받는 모형들이 존재하지만 문장의 길이를 동일하게 맞춰줄 필요가 있다

RNN의 유형

입력 개수와 출력 개수에 따른 유형

  • One to one : simpleRNN
  • One ot many : 하나의 이미지를 문장으로! ex) sitting cat
  • Many to one : 단어 시퀀스에 대해서 하나의 출력 ex) 감정 분류, 주가 등락을 통한 회사 파산 여부
  • Many to many : 입력 시퀀스가 다른 시간 단계에서 비디오 분류 가능
  • Many to man : 여러개의 단어 입력, 여러 개의 단어로 구성된 문장 -> 명사, 동사, 형용사 등으로 구분 반환하는 번역기
Comments