210902 EXPLORATION 15. 대화형 챗봇

문소정·2021년 9월 8일
0

AIFFEL

목록 보기
42/66

챗봇의 유형

대화형트리형(버튼)추천형시나리오형결합형
정의자연어처리를 기반으로 자연스럽게 대화가 가능한 챗봇입정해진 트리구조를 따라 답변을 얻는 형태사전에 정의된 답변의 리스트를 알고리즘 결과의 우선순위별로 보여줌정해진 시나리오를 수행비즈니스 목적에 따라 위의 챗봇 유형들을 결합해서 설계
비용매우 높음매우 낮음보통보통조합에 따라 다름
전문성매우 높음낮음보통보통조합에 따라 다름
시간매우 높음보통많음보통조합에 따라 다름
이미지

1. 인코더와 디코더

  • 번역기를 만드는 데 사용한 대표적인 모델
  • 인코드 : 입력문장이 들어감
  • 디코더 : 이에 상응하는 문장 출력
  • 병렬 구조로 구성한 데이터 셋을 훈련

2. 트랜스포머

  • 번역기와 마찬가지로 인코더와 디코더 구성

1)포지셔널 인코딩(positional Encoding)



입력을 받을 때, 문장에 있는 단어들을 1개씩 순차적으로 받는 것이 아니라, 문장에 있는 모든 단어를 한꺼번에 입력으로 받음. 그래서 같은 단어라도 그 단어가 문장의 몇 번째 어순으로 입력되었는지를 단어의 임베딩 벡터에다가 위치 정보를 가진 벡터(Positional Encoding) 값을 더해서 모델의 입력으로 삼음

  • dmodeld_{model} : 임베딩 벡터의 차원
  • pospos : 입력문장의 임베딩 벡터의 위치
  • ii : 임베딩 벡터 내의 차원의 인덱스
  • 각 단어 백터 위치 정보 = 임베딩 행렬 + 포지셔널 행렬

2) 어텐션

  • 단어들 간의 유사도를 구하는 메커니즘
  • 단어 (정보를 함축한) 벡터 : 어텐션 함수에서 사용되는 쿼리(query), 키(key), 값(value)을 나타냄
  • 단어백터 : 트랜스포머의 여러 연산을 거친 후의 단어 벡터(초기 입력된 임베딩 벡터는 X)
  • 어텐션의 종류
    • 인코더 셀프 어텐션(Encoder Self Atention)
      • 문장 내 단어들의 유사도 계산
      • (in Encoder)
    • 디코더 셀프 어텐션(Decoder Self Atention)
      • 이미 생성된 앞 단어들과의 유사도 계산
      • (in Decoder)
    • 인코더-디코더 어텐션(Encoder-Decoder Atention)
      • 디코더가 인코더에 입력된 단어들과 유사도 계산
      • in Decoder
  • 셀프 어텐션(Self Attention)
    • 유사도를 구하는 대상이 다른 문장의 단어가 아니라 현재 문장 내의 단어들이 서로 유사도를 구하는 경우

3) 스케일드 닷 프로덕트 어텐션

  • 유사도를 구하는 방법(⛔이부분 말이 이해 안감)
    • 어텐션 함수 : 주어진 쿼리의 모든 키의 유사도를 구함
    • 어텐션 값(Attention Value) : 유사도가 반영된 값의 합
  • 스케일드 닷 프로덕트 어텐션(Scaled Dot Product Attention)
    Attention(Q,K,V)=softmax(QKTdk)VAttention(Q, K, V) = softmax\left(\frac{QK^T}{\sqrt{d_k}}\right)V
    • 내적(dot product)을 통해 단어 벡터 간 유사도를 구한 후에, 특정 값을 분모로 나눠주는 방식으로 QQKK의 유사도를 구함
      • QQKK의 행렬곱 : 벡터의 내적(dot product)
      • 특정값으로 나눔
      • 특정 값을 분모로 사용하는 것은 값의 크기를 조절하는 스케일링(Scaling)을 위함이다
    • QQ : 쿼리(Query), KK : 키(Key), VV : 값(Value) ⇨ 문장 행렬
    • softmax() : 유사도를 0과 1로 Normalize
  • 닷 프로덕트 어텐션(dot product attention) : 분모 나누줘는 것만 제외
    Attention(Q,K,V)=softmax(QKT)VAttention(Q, K, V) = softmax(QK^T)V

4) 병렬 어텐션

  • num_heads : 병렬적으로 몇 개의 어텐션 연산을 수행할지를 결정하는 하이퍼파라미터
  • d_model : 임베딩 벡터의 차원
  • 멀티-헤드 어텐션
    • nn개의 머리(어텐션)을 각자 다른 관점에서 수행한 결과

3. 마스킹(Masking)

  • 특정 값들을 가려서 실제 연산에 방해가 되지 않도록 하는 기법

1) 패딩 마스킹(Padding Masking)

  • 자연어 처리 전치리 과정에서 모든 문장길이를 동일하게 만들어주는 패딩(padding)을 통해 생성된 숫자 0의 위치를 체크하는 것
    • 자연어 처리에서 패딩(Padding) : 문장의 길이가 서로 다를 때, 모든 문장의 길이를 동일하게 해주는 과정에서 가장 긴 문장(정해준 길이)을 기준으로 그보다 짧은 문장의 경우에는 숫자 0을 채워서 문장의 길이를 맞춰주는 자연어 처리 전처리 방법

2) 룩 어헤드 마스킹(Look-ahead masking, 다음 단어 가리기)

RNN과 트랜스포머의 차이

RNN트랜스포머
개념STEP마다 단어가 순서대로 입력되는 구조문장 행렬을 만들어 한 번에 행렬 형태로 입력되는 구조
구조앞의 단어를 참고하여 다음 단어 예측
모든 단어를 참고하여 다음 단어 를 예측
- 빨간색 : 마스킹을 표현
- 행은 Query, 열은 Key 로 표현된 행렬
디코더

4. 인코더

  • 하나의 인코더 층은 크게 총 2개의 서브 층(sublayer)으로 나눔
    • 셀프 어텐션 : 멀티 헤드 어텐션으로 병렬적으로 이룸
    • 피드 포워드 신경망

  • 트랜스포머의 인코더 : 임베딩 층(Embedding layer) 과 포지셔널 인코딩(Positional Encoding) 을 연결하고, 사용자가 원하는 만큼 num_layers개의 인코더 층을 쌓음
  • Layer Normalization : 인코더와 디코더 내부에서는 각 서브 층 이후에 훈련을 도움

5. 디코더

  • 세 개의 서브 층으로 구성 : 셀프 어텐션, 인코더-디코더 어텐션, 피드포워드 신경망
    • 인코더-디코더 어텐션
      + 인코더 디코더로 입력문장을 전달하는 과정
      + Query가 디코더의 벡터인 반면에 Key와 Value가 인코더의 벡터라
  • 디코더의 셀프 어텐션, 인코더-디코더 어텐션 두 개의 어텐션 모두 스케일드 닷 프로덕트 어텐션을 멀티 헤드 어텐션으로 병렬적으로 수행함
  • 트랜스포머의 디코더 : 임베딩 층(Embedding layer) 과 포지셔널 인코딩(Positional Encoding) 을 연결하고, 사용자가 원하는 만큼(1num_layers개) 디코더 층을 쌓음

6. 기타

1) 교사 강요(Teacher Forcing)

테스트 과정에서 t 시점의 출력이 t+1 시점의 입력으로 사용되는 RNN 모델을 훈련시킬 때 사용하는 훈련 기법

  • 사용하지 않을경우, 잘못된 예측이 다음 시점(time step)의 입력으로 들어가면서 연쇄적으로 예측 정확도에 영향을 미침

    RNN 언어모델 ⇨ 자기회귀 모델(AR)
    트랜스포머의 디코더 ⇨ 자기회귀 모델(AR) ⇨ 교사강요 적용

2) 커스텀된 학습률

모델학습 초기에 learning rate를 급격히 높였다가, 이후 train step이 진행됨에 따라 서서히 낮추어 가면서 안정적으로 수렴하게 하는 고급 기법을 널리 사용 ⇨ 이것이 커스텀 학습률 스케줄링(Custom Learning rate Scheduling)
lrate=dmodel0.5min(stepnum0.5,stepnumwarmupsteps1.5)lrate = d_{model}^{-0.5} \cdot min(step_num^{-0.5}, step_num \cdot warmup_steps^{-1.5})

0개의 댓글