정리 노트

34일 차(2022/08/18) 본문

[TIL]국민대X프로그래머스 여름방학 인공지능 과정

34일 차(2022/08/18)

꿈만 꾸는 학부생 2022. 8. 19. 14:00
728x90

언어 모델

문장(시퀀스)에 확률을 부여하는 모델로 특정 상황에서의 적절한 문장이나 단어를 예측할 수 있습니다.

ex) P(난 널 사랑해 | I love you) > P(난 널 싫어해 | I love you)

      P(먹었다 | 나는 밥을) > P(싸웠다 | 나는 밥을)

 

하나의 문장(W)은 여러 단어들(w)로 구성된다. P(W) = P(w1, w2, w3, ..., wn) (n은 자연수) 그래서 이를 결합 확률로 표현할 수 있고 연쇄 법칙을 적용할 수 있습니다.

연쇄 법칙

P(w1, w2, w3, ..., wn) = P(w1) * P(w2 | w1) * P(w3 | w1, w2), ..., P(wn | w1, w2, ..., w(n-1)) (n은 자연수)

ex) P(친구와 친하게 지낸다) = P(친구와, 친하게, 지낸다)

     = P(친구와) * P(친하게 | 친구와) * P(지낸다 | 친구와, 친하게)

 

전통 통계적 언어 모델은 카운트 기반의 접근 방식을 사용합니다.

ex) P(지낸다 | 친구와 친하게) = count(친구와 친하게 지낸다) / count(친구와 친하게)

이 모델을 적용하려면 사전에 매우 방대한 양의 데이터가 필요하고 시퀀스가 학습 데이터에 없는 경우도 생각해야합니다. 또한 긴 문장에서는 처리하기 매우 어렵습니다.

여기서 현실적인 해결책인 N-gram 언어 모델(인접한 일부 단어들만 고려)이 등장했습니다.

 

Seq2Seq

LSTM을 활용한 효율적인 기계 번역 아키텍처로 기계 번역의 돌파구 같은 역할 수행했습니다. Transformer 전까지 SOTA(State of the art)로 사용됐다고 합니다.

단어를 하나의 token으로서 처리 이 token이 모인걸 sequence라 합니다.

시퀀스(일반적으로 하나의 문장(여러 단어))에서 시퀀스로 번역하는 아키텍처고 Encoder와 Decoder로 이루어져 있으며, Encoder는 번역하고자 하는 문장을 처리 결과적으로 하나의 context vector(고정 크기)를 생성하고 context vector가 Decoder에 들어가서 번역이 진행됩니다.

Seq2Seq 아키텍처는 context vector의 크기가 고정되어 있어서 일종의 bottle neck으로 사용된다는 단점이 있습니다.

 

초창기 RNN 기반의 언어 모델에서는 입력과 출력의 크기가 같다고 가정하기 때문에 현실적으로는 적용이 쉽지 않고 값 예측도 힘듭니다. 이를 해결하기 위해 Seq2Seq 등장합니다. Encoder의 마지막 hidden state만 context vector로 사용한다는 특징이 있습니다.

Encoder와 Decoder는 서로 다른 가중치(parameter)를 가집니다.

 

RNN 기반 Seq2Seq 모델의 목표 공식

- yt값이 <eos(end of sequence)>일 때 종료

- p(y1, y2, ..., yt' | x1, x2, ..., xt) = ∏p(yt | v, y1, y2, ..., y(t-1)) (v: context vector, t: 자연수(토큰의 수), xt: 현재의 입력 단어, yt: 현재의 출력 단어)

LSTM 활용할 때 더 높은 정확도를 보이고, 학습 및 테스트 과정에서 입력 문장의 순서를 거꾸로 할 때 더 높은 정확도를 보입니다.

 

세션

- 베이즈 정리

  P(Y | X) = ( P(X | Y) * P(Y) ) / P(X)    (P(X): 특정 텍스트 나올 확률, P(Y): 특정 클래스 나올 확률)

  스팸 분류기를 예로 들면 P(Y = 햄 | X)와 P(Y = 스팸 | X)를 매 텍스트마다 비교해야 하는데 이를 바로 계산하는 게

  어려운 경우가 많습니다. 하지만 충분한 데이터를 수집했다면 P(X | Y)는 구할 수 있는 경우가 많습니다.

  이때 베이즈 정리를 적용할 수 있습니다.

 

- 차원 축소

  높은 차원상의 데이터를 낮은 차원상의 데이터로 차원 줄이는 작업입니다.

  이를 통해 dense 한 vector 생성이 가능합니다.

 

RNN에서 파라미터를 공유한다고 하더라도 back propagation의 속도가 변하지 않습니다. forward횟수와 back propagation 횟수는 비례하기 때문이고 내부 구현이 어떻게 되어있는지에 따라 다를 것 같다고 멘토님께서 예상하셨습니다.

728x90

'[TIL]국민대X프로그래머스 여름방학 인공지능 과정' 카테고리의 다른 글

36일 차(2022/08/22)  (0) 2022.08.22
35일 차(2022/08/19)  (0) 2022.08.19
33일 차(2022/08/17)  (0) 2022.08.17
32일 차(2022/08/16)  (0) 2022.08.17
31일 차(2022/08/15)  (0) 2022.08.15