Day_37 01. 인공지능과 자연어 처리

작성일

6 분 소요

인공지능과 자연어 처리

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

1.1 자연어처리 소개

피그말리온과 갈리테리아 (B.C. 43 - A.D. 17)

  • 피그말리온이 여성의 결점을 제거해서 만든 조각상
  • 인간을 대체하는 인공물에 대한 최초의 기록

오래전부터 인간이 상상해온 인공물에 대한 상상 $\rightarrow$ 인공지능
인간의 지능이 가지는 학습, 추리, 적응, 논증 따위의 기능을 갖춘 컴퓨터 시스템

콜러서스 컴퓨터 (1943)

  • 프로그래밍이 가능한 세계 최초의 전자식 컴퓨터
  • 1500개의 진공관을 이용해 Boolean 논리 연산을 수행

인공지능은 컴퓨터의 개발에 맞춰서 황금기를 이룸

이미테이션 게임 (튜링 테스트, 1950)

  • 앨런 튜링
  • 기계에 지능이 있는지를 판별하고자 하는 실험
  • 인간의 정의나 인간의 지능을 정의하긴 어렵다!
  • 하지만, 인간이 보기에 인간 같은 것을 인간에 준하는 지능이 있다고 간주
  • 컴퓨터가 인간처럼 대화를 할 수 있다면 그 컴퓨터는 인간처럼 사고할 수 있다.

최초의 인공지능은 자연어처치를 근간으로 시작한 것을 알 수 있음

AI 의 황금기 (1956 - 1974)

  • General purpose AI 를 만들기 위해 자연어 연구가 폭발적으로 관심을 받게 됨
  • 대표적인 ELIZA (1966) 챗봇
  • 심리 상담사의 역할을 하도록 설계
    • 단순 Rule Base
  • 나 지금 너무 우울히 $\rightarrow$ 왜 우울하세요?
  • 가족 문제로 고민이야 $\rightarrow$ 가족에 대해서 말해주세요.
  • 최초의 대화형 (chitchat) 챗봇
  • 튜링 테스트를 적용할 수 있는 최초의 Human-Like AI

ELIZA 와의 대화

ELIZA 와의 대화 사이트

1.2 자연어처리의 응용분야

다양한 자연어처리 application

     
- 문서 분류 - 기계 독해 - 텍스트 압축
- 문법, 오타 교정 - 챗봇 - 패러프레이징
- 정보 추출 - 형태소 분석 - 주요 키워드 추출
- 음성 인식 결과 보정 - 개체명 분석 - 빈칸 맞추기
- 음성 합성 텍스트 보정 - 구문 분석 - 발음기호 변환
- 정보 검색 - 감성 분석 - 소설 생성
- 요약문 생성 - 관계 추출 - 텍스트 기반 게임
- 기계 번역 - 의도 파악 - 오픈 도메인 QA
- 질의 응답 - 이미지 캡셔닝 - 가설 검증

1.2.1 예시

한국 언론 재단에서 제공하는 서비스

https://www.bigkinds.or.kr

뉴스에서 개체명을 인식하고 개체명간의 상관관계와 뉴스관의 관계를 파악해서 관련 키워드를 추천해주는 서비스

인간의 자연어처리

  • 대화의 단계
    1. 화자는 자연어 형태로 객체를 인코딩
    2. 메세지의 전송
    3. 청자는 자연어를 객체로 디코딩

$\rightarrow$
화자는 청자가 이해할 수 있는 방법으로 이쁘게 인코딩
청자는 본인 지식을 바탕으로 디코딩

컴퓨터의 자연어처리

컴퓨터는 자연어처리를 바로 할 수 없어서 숫자형태로 변형되어야 함

  • 대화의 단계
    1. Encoder 는 벡터 형태로 자연어를 인코딩
    2. 메세지의 전송
    3. Decoder 는 벡터를 자연어로 디코딩

$\rightarrow$
Encoder 는 Decoder 가 이해할 수 있는 방법으로 이쁘게 인코딩 Decoder 는 본인 지식을 바탕으로 디코딩

자연어를 컴퓨터가 이해할 수 있게 수학적으로 어떻게 이쁘게 인코딩할 수 있는지를 살펴봅시다!

인코딩이 이쁘게 되면? 디코딩을 통해 무엇이든 할 수 있다!

다양한 자연어처리 application

1.3 자연어 단어 임베딩

특징 추출과 분류

  • 분류 를 위해선 데이터를 수학적으로 표현
  • 먼저, 분류 대상의 특징 (Feature) 을 파악 (Feature extraction)

  • 분류 대상의 특징 (Feature) 를 기준으로, 분류 대상을 그래프 위에 표현 가능
  • 분류 대상들의 경계를 수학적으로 나눌 수 있음 (Classification)
  • 새로운 데이터 역시 특징을 기준으로 그래프에 표현하면, 어떤 그룹과 유사한지 파악 가능

인코딩만 이쁘게되면 즉 좌표평면 위에 데이터들이 이쁘게 나열만 되면 뭐든지 다 가능해짐

  • 과거에는 사람이 직접 특징 (Feature) 를 파악해서 분류
  • 실제 복잡한 문제들에선 분류 대상의 특징을 사람이 파악하기 어려울 수 있음
  • 이러한 특징을 컴퓨터가 스스로 찾고 (Feature extraction), 스스로 분류 (Classification) 하는 것이 기계학습 의 핵심

Word2Vec

  • 자연어를 어떻게 좌표평면 위에 표현할 수 있을까?
  • 가장 단순한 표현 방법은 one-hot encoding 방식 $\rightarrow$ Sparse representation

one-hot encoding 방식을 보완하기 위한 방법이 Word2Vec

  • Word2vec (word to vector) 알고리즘: 자연어 (특히, 단어) 의 의미를 벡터 공간에 임베딩
  • 한 단어의 주변 단어들을 통해, 그 단어의 의미를 파악

주변에 힌트를 넣어봄

  • Word2vec 알고리즘은 주변부의 단어를 예측하는 방식으로 학습 (Skip-gram 방식)
  • 단어에 ㄷ해ㅏㄴ dense vector 를 얻을 수 있음

1.3.1 예제

1.3.2 정리

  • 단어가 가지는 의미 자체를 다차원 공간에 벡터화 하는 것
  • 중심 단어의 주변 단어들을 이용해 중심단어를 추론하는 방식으로 학습

  • 장점
    • 단어간의 유사도 측정에 용이
    • 단어간의 관계 파악에 용이
    • 벡터 연산을 통한 추론이 가능 (e.g. 한국 - 서울 + 도쿄 = ?)
  • 단점
    • 단어의 subword information 무시 (e.g. 서울 vs 서울시 vs 고양시)
    • Out of vocabulary (OOV) 에서 적용 불가능

OOV 문제를 보완하기 위해 나온 알고리즘이 FastText

FastText

  • 한국어는 다양한 용언 형태를 가짐
  • Word2Vec 의 경우, 다양한 용언 표현들이 서로 독립된 vocab 으로 관리

FastText 는 sub-word information 을 이용함

  • Fasttext
    • Facebook research 에서 공개한 open source library (https://research.fb.com/fasttext/, fasttext.cc)
    • C++ 11
  • Training
    • 기존의 word2vec 과 유사하나, 단어를 n-gram 으로 나누어 학습을 수행
    • n-gram 의 범위가 2-5 일 때, 단어를 다음과 같이 분리하여 학습함
      “assumption” = {as, ss, su, …, ass, ssu, sum, ump, mpt, …, ption, assumption}
    • 이 때, n-gram 으로 나눠진 단어는 사전에 들어가지 않으며, 별도의 n-gram vector 를 형성함
  • Testing
    • 입력 단어가 vocabulary 에 있을 경우, word2vec 과 마찬가지로 해당 단어의 word vector 를 return 함
    • 만약 OOV 일 경우, 입력 단어의 n-gram vector 들의 합산을 return 함
  • FastText 는 단어를 n-gram 으로 분리를 한 후, 모든 n-gram vector 를 합산한 후 평균을 통해 단어 벡터를 획득

  • 오탈자, OOV, 등장 회수가 적은 학습 단어에 대해서 강세 (https://link.apringer.com/chapter/10,1007/978-3-030-12385-7_3, https://github.com/MrBananaHuman/JamoFastText)

단어 임베딩 방식의 한계점

  • Word2Vec 이나 FastText 와 같은 word embedding 방식은 동형어, 다의어 등에 대해선 embedding 성능이 좋지 못하다는 단점이 있음
  • 주변 단어를 통해 학습이 이루어지기 때문에, 문맥 을 고려할 수 없음

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

2.1 언어모델

모델이란?

  • 모델의 종류
    • 일기예보 모델, 데이터 모델, 비즈니스 모델, 물리 모델, 분자 모델 등
  • 모델의 특징
    • 자연 법칙을 컴퓨터로 모사함으로써 시뮬레이션이 가능
    • 이전 state 를 기반으로 미래의 state 를 예측할 수 있음 (e.g. 습도와 바람 세기 등으로 내일 날씨 예측)
    • 즉, 미래의 state 를 올바르게 예측하는 방식으로 모델 학습이 가능함

언어모델

  • 자연어 의 법칙을 컴퓨터로 모사한 모델 $\rightarrow$ 언어 모델
  • 주어진 단어들로부터 그 다음에 등장한 단어의 확률을 예측하는 방식으로 학습 (이전 state 로 미래 state 를 예측)
  • 다음의 등장할 단어를 잘 예측하는 모델은 그 언어의 특성이 잘 반영된 모델이자, 문맥을 잘 계산하는 좋은 언어 모델

Markov 기반의 언어모델

  • 마코프 체인 모델 (Markov Chain Model)
  • 초기의 언어 모델은 다음의 단어나 문장이 나올 확률을 통계와 단어의 n-gram 을 기반으로 계산
  • 딥러닝 기반의 언어모델은 해당 확률을 최대로 하도록 네트워크를 학습

이 Markov 기반의 언어모델을 그대로 딥러닝 네트워크로 옮긴 예제가 바로 RNN 기반의 언어모델 임

Recurrent Neural Network (RNN) 기반의 언어모델

  • RNN 은 히든 노드가 방향을 가진 엣지로 연결돼 순환구조를 이룸 (directed cycle)
  • 이전 state 정보가 다음 state 를 예측하는데 사용됨으로써, 시계열 데이터 처리에 특화

  • 마지막 출력은 앞선 단어들의 문맥 을 고려해서 만들어진 최종 출력 vector $\rightarrow$ Context vector
  • 출력된 context vector 값에 대해 classification layer 를 붙이면 문장 분류를 위한 신경망 모델

아래와같이 RNN 구조를 다양한 네트워크 구조로 표현할 수 있음

2.2 Sequence to sequence (seq2seq)

Recurrent Neural Network (RNN) 기반의 Seq2Seq

  • Encoder layer: RNN 구조를 통해 Context vector 를 획득
  • Decoder layer: 획득된 Context vector 를 입력으로 출력을 예측

2.3 Attention

RNN 구조의 문제점

  • 입력 sequence 의 길이가 매우 긴 경우, 처음에 나온 token 에 대한 정보가 희석
  • 고정된 context vector 사이즈로 인해 긴 sequence 에 대한 정보를 함축하기 어려움
  • 모든 token 이 영향을 미치니, 중요하지 않은 token 도 영향을 줌

Attention 모델

  • 인간이 정보처리를 할 때, 모든 sequence 를 고려하면서 정보처리를 하는 것이 아님
  • 인간의 정보처리 마찬가지로, 중요한 feature 는 더욱 중요하게 고려하는 것이 Attention 의 모티브

  • 문맥에 따라 동적으로 할당되는 encode 의 Attention weight 로 인한 dynamic context vector 를 획득
  • 기존 Seq2Seq 의 encoder, decoder 성능을 비약적으로 향상시킴

  • 하지만, 여전히 RNN 이 순차적으로 연산이 이뤄짐에 따라 연산 속도가 느림

그래서 연구자들이 생각한 게 이 연결구조를 없애면 되지 않을까? 라고 생각하게 됨
그래서 Transformer self-attention 구조가 만들어지게 됨

2.4 Self-Attention

Self-attention 모델

  • RNN 구조에 있었던 이전 state 를 다음 state 로 전달하는 구조를 없애고 모든 token 들을 all-to-all 로 연결하게 됨
  • 그래서 만들어진 모델이 Transformer 임

Transformer

  • 기존 seq2seq 모델은 Encoder RNN 구조가 따로 존재하고 그 다음에 Decoder RNN 구조가 따로 존재했음
    • Encoder 의 역할은 Context vector 를 만들어내고 Decoder 의 역할은 Context vector 를 디코딩하는 역할
  • Transformer 는 Encoder 와 Decoder 를 따로 분리해놓는 것이 아니라 하나의 network 내에 Encoder 와 Decoder 를 합쳐서 구조가 구성이 됨

Transformer Revolution!

다양한 언어모델

댓글남기기