NLP 1-1. EDA + 전처리

EDA + 전처리

자연어 처리 수행 : 우리가 원하는 자연어처리 작업을 대신 수행하는 인공지능 모델을 만드는 과정

  1. 문제정의
  2. 데이터수집 및 분석
  3. 데이터 전처리
  4. 모델링
  5. 모델 학습 및 평가

1. 문제정의

어떤문제를 풀것인지 정하는 단계

자연어 처리 기술은 여기서 정한 문제에 대한 솔루션이 되어야함

2. 데이터 수집 및 분석

자연어 처리작업을 잘 수행할수 있는 모델이 필요

결국 이 작업을 잘 설명해줄 수 있는 학습 데이터가 필요

Public / Benchmark Dataset

이미 잘 설명한 공개된 사용가능한 데이터를 찾기

실제 문제 상황을 설명 잘 못할 수 있음

특정 시점에 만들어져서 업데이트가 지속적으로 진행되지 않을 수 있음

연구목적으로 사용되는 데이터라면 일반화된 환경에서는 사용하기 쉽지 않음

web crawling

대량의 데이터 존재 but 정제되지 않은 데이터, 데이터 편향의 존재 가능성

-> EDA

분포, 기초통계량등을 확인 + 문제점도 확인

3. 데이터 전처리

문제점을 바탕으로 학습에 용이하게 데이터를 수정/보완하는 작업

자연어 처리에서는

  1. 토큰화 : 주어진 data나 문장을 token으로 나누는 작업
  2. 정제 : 갖고있는 데이터에서 노이즈를 제거
  3. 정규화 : 표현방법이 다른 데이터들을 통합시켜서 같은 항목으로 합침

4. 모델링

일련의 단어 토큰을 결과로 표현

따라서 언어모델 사용

언어모델 : 문장 혹은 단어에 확률을 할당하여 컴퓨터가 처리할 수 있도록 하는 모델

언어 모델도 인간처럼 텍스트 기반의 수많은 문장을 통해 어떤 단어가 어떤 순서로 쓰이는 것이 가장 자연스러운지 학습할 수 있음

어순을 고려해서 단어 시퀀스를 만들고 이를 확률로 표현함

단어 시퀀스 확률은 문장이 완전히 완료되었을 때에 알 수 있음

확률로 표현할 수 있다는 특징 -> 자연어 처리 작업들에 활용가능

ex) 번역 모델, chatbot 모델

언어모델이 다양하기 때문에, 내가 풀고자하는 문제에 가장 적합한 언어 모델을 찾아야함

모델구조, 학습방법에 대해 데이터를 추가 수집해야하는 경우가 있음

따라서 문제 정의 이후, 모델 구조 및 학습 방법을 사용할 지 정하고, 데이터셋을 준비하는 경우도 있음

GPU환경을 준비, 가용한 인프라에 맞춰 학습 파라미터를 설정하고 학습을 시작할 수 있음

5. 모델 학습 평가

시점에 따라 1. 학습 도중 2. 학습 종료 후 방법에 따라 1. 정량 평가(Auto evaluation) 2. 정성 평가(human evaluation)


시점 1. 학습 도중

데이터의 양이 많거나, 모델의 크기가 커서 학습이 오래걸리면, 학습이 잘 진행되는지 검증


시점 2. 학습 종료 후

정의한 문제를 실제로 잘 풀 수 있는지 검증해야함

test data를 활용


방법 1. 정량 평가

정량적인 수치로 평가 (ex 정확도)

사람의 개입없이 성능을 평가

채점기준이 상대적으로 명확한 도메인에서는 신뢰도가 높음


방법 2. 정성 평가

확실한 정답을 결정할 수 없고, 채점에 명확한 기준이 없을 때에 사용

미묘한 차이를 구분하여 높은 것을 채점 가능

요약

train/valid/test로 split

train으로 학습, 중간중간 valid로 학습 진행상황 체크

학습 종료 시 test로 정량성능 지표 측정

정성 평가 수행, 블라인드 테스트 진행

정성, 정량 평가의 결과에 따라 모델 사용 여부 결정

자연어처리 프레임워크 소개

환경설정

  1. anaconda
    다양한 패키지를 모아놓은 파이썬 배포버젼
    작업환경 내 가상환경 구축 가능 (패키지 설치가 필요함)

  2. Docker
    가상환경을 도커 파일(이미지)로 만들어서 Docker hub로 보내면 누구나 환경 다운로드 가능
    관리가 어렵고, 유연함이 떨어지므로, 재현성을 유지하면서 패키지를 관리하고 싶을 때 사용하는 옵션

  3. Google Colab
    Jupyter notebook과 매우 유사한 실습 환경을 제공

cf) Framework : 응용 프로그램을 개발하기 위한 라이브러리, 모듈의 패키지

  1. TensorFlow
    google
    데이터 플로우 그래프 구조를 사용
    최적화가 잘되어있어 빠르고 안정적, 대규모 모델 학습 및 추론 가능
    최적화 부분을 활용하기 위해서는 관련한 개념을 익혀야해서 입문자가 사용하기 어려움

  2. Pytorch
    코드가 파이썬과 유사해서 진입장벽이 낮음
    쉽고 간결해서 빠른 구현가능
    자료와 예제가 충분함
    그래프를 만들면서 값을 할당할 수 있어서 define by run 방식 코드 가능
    최적화부분에서 조금 문제

  3. Keras
    단순한 인터페이스
    직관적인 API 제공
    일반 사용사례에 최적화된 일관된 인터페이서 제공
    모듈이 독립성을 가져 새로운 모델을 만들때 모듈을 조합해 쉽게 새로운 모델 생성 가능
    확장성이 낮음
    벡엔드 위에서 동작하므로, 오류시 벡엔드의 문제인지 케라스의 문제인지 모름

Library

  1. Scikit-Learn
    파이썬 머신러닝 라이브러리
    분류, 회귀, 클러스터링 모델 선택가능
    연습하기 위한 데이터도 제공

  2. NLTK (Natural Language Toolkit)
    자연어 처리 기능을 제공하는 라이브러리

  3. KoNLPy
    한국어 자연어 처리를 위한 파이썬 패키지
    어절 단위는 NLTK 가능하지만
    한국어 형태소 단위의 토크나이징이 필요할 때 사용 가능