ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • D. Neural Language Models
    카테고리 없음 2020. 9. 1. 20:46
    • 언어 모델링(Language Modeling)
      • Input: 하나의 문장 - > Output:  Input 문장에 대한 확률 (얼마나 likely?)
      • ex) scoring하는 것 -> 문장이 주어졌을때 이게 생겨났을 확률 계산, NLG
      • 확률
      • 자동완성, 
    • 텍스트 분류 문제와 달리, 비지도학습입니다.
    • 하지만, 순서가 있는 지도학습으로 문제를 바꿔서 풀 수 있습니다.
    • 자기회귀 언어 모델링(Autoregressive language modeling):
      • Sequence 가 주어졌을 때 이 문장에게 점수를 부여 하는 방법
      • 이전 토큰이 나왔을때 다음 토큰이 나올 확률을 계산하는 작업과 동일합니다.
      • 이렇게 정의 하면서 비지도학습 문제를 지도학습으로 푸는 문제로 변하게 됩니다. (input에 따라 output이 정해짐)
      • 즉, 이전에 공부했던 텍스트 분류 문제와 같아지는데, input 은 이전에 나온 토큰, output은 다음에 나올 토큰을 예측 하는 것입니다. input 토큰에 대한 output의 점수 매기고 전체 문장의 score 합계
    • 또한, 문장에 점수(Score)를 부여하는 방식은 인간이 말하는 사고 방식과 동일합니다.
      • 점수는 음의 최대 우도(negative log likelihood)로 측정합니다.
    • 인공 신경망 이전에, N-Gram Language Models
    •  
    • n-gram: 주어진 텍스트 샘플의 연속적인 n 개 항목
    • n-gram probability:
      • 주어진 N 개의 토큰에 대하여, 토큰 x 가 나올 수 있는 확률:
      • 이전 N개의 토큰과 토큰 x 의 결합확률을 이전 N개의 토큰들과 등장 할 수 있는 모든 토큰들의 결합확률 합으로 나눈 것입니다. 
      • 모든 text을 보며 n-gram의 갯수를 셈 (위키피디아 모든 글에서 '먹다'(3gram)이 phrase몇 개?/'먹다' 몇 개? : '밥'dml probability

    n-gram

    • n-gram probability 의 최대우도추정(Maximum Likelihood Estimation) 과정을 거칩니다. 확률을 추정하는 과정을 등장횟수로 대체하여 계산합니다.
    • 100던지고얼굴30번-30/100
      1. 어떤 n-gram (xN,xN+1,,x1,x) 의 등장 횟수를 셉니다. 이를  c(xN,xN+1,,x1,x)  라고 하겠습니다. 
      2. 주어진 n-gram 에서 나올 수 있는 모든 경우의 수 (xN,xN+1,,x1,?) 의 등장 횟수를 셉니다. 
      3. 따라서 등장 확률은 p(xxN,xN+1,,x1)=xVc(xN,xN+1,,x1,x)c(xN,xN+1,,x1,x) 입니다.
      4. ex) 'New york University'가 나온 갯수 / 'New york'이 나오는 모든 phrase (New york bridge, New york restaurant, New york stores) = 'New york'다음에 'University' 가 나올 수 있는 가능성
      5. ex) 모든 text을 보며 n-gram의 갯수를 셈 (위키피디아 모든 글에서 '먹다'(3gram)이 phrase몇 개?/'먹다' 몇 개? : '밥'의 probability
    • 두 가지 문제점
      1. 데이터 희소성(data sparsity) 문제: 데이터가 희소 (처음 보는 n-gram ex)할 경우 일반화가 어렵습니다.
        • 처음 보는 단어가 등장하면, 이전에 데이터에 존재 하지 않았기 때문에 확률이 0이 됩니다. -> 이산 공간
      2. 장기의존성(long-term dependencies)을 캡쳐할 수 없습니다.
        • n 개의 토큰만 조회하기 때문에, 긴 문장에 대한 다음 토큰은 추론이 불가능 합니다.

    장기 의존성 문제를 해결하기 위해 조금더 떨어진 토큰간의 상관 관계를 보려면 n 을 늘려야하는데, 그러면 데이터 희소성 문제가 발생합니다. 

    •  해결방법:
      1. 데이터 희소성 문제: 셀수가 없기 때문에 문제가 되는 것입니다.
        • Smoothing: 작은 상수 항을 더해주는 방법 입니다. 
        • Back off: Count 가 0이 나올시에 측정하는 n을 하나씩 줄여서 다시 Count합니다.
      2. 장기의존성 문제
        • n-gram probability 방식으로 해결 할 수가 없습니다.
    • 직접 구현하지 않고 KenLM 패키지를 사용하는 것이 좋습니다.

    • Neural N-Gram Language Model

      • 신경망을 사용함으로서 데이터 희소성(data sparsity) 문제를 해결 할 수 있습니다.
    • 기존의 카운트 기반 모델 보다 훈련 데이터에서 나오지 않았었던 N-gram 을 계산 할 수가 있었습니다.
    • 어떻게 이것이 가능할까요? 그전에 데이터 희소성(data sparsity) 문제가 생기는 이유를 살펴봐야합니다.
      • 간단한 대답은 토큰들이 훈련시에는 생기지 않지만, 테스트시에 만 생기기 때문입니다.
      • 조금더 깊은 대답은 이산 공간(discrete space) 에서 카운트하여 토큰들의 유사도 측정이 불가능 하기 때문입니다.
      • 하지만 신경망에서는 토큰을 연속 벡터 공간(continuous vector space) 에 매핑(mapping) (유사한 단어는 가까이에) 시킵니다. 나오지 않았던 단어들도 유사도를 계산을 통해 연속 벡터 공간에서 의미가 있는 분포를 찾을 수 있게 됩니다. 이러한 학습을 통해 데이터 희소성 문제를 해결 할 수 있습니다.
    • three -> teams
    • 다음 train : four -> teams
    • opt) three와 four 비슷한 단어 = 가까운 벡터 공간에 위치
    • four -> groups
    •  

    더보기

    연속 벡터 공간에서 유사한 토큰, 구문은 서로 가까이 있다

     


    • 신경망을 이용한 n-gram 모델이 장기의존성 문제를 해결하지 못한 이유는 단순히 n-gram 을 보기 때문입니다.
      • 신경망을 사용하여 데이터 희소성 문제는 없어졌지만, 단순하게 n 을 늘리게 되면 네트워크 규모가 커져 학습해야할 매개변수가 많아지고, 이에 따른 데이터도 많이 필요

     

    해결방법)

    1.Convolution Language Model

    Layer마다 local을 볼 수 있고 층을 쌓으면서 상위의 계층을 볼 수 있음.

    Dilated convolution 을 사용하면 커버할 수 있는 토큰의 범위가 넓어집니다.

    Dilated convolution : layer 쌓을때마다 띄엄띄엄 보기 1-3-6(2배로 늘리는 효과, 인풋에서 커버하는 스팬 확장)

    매번 prediction할 때 미래의 것은 masking out

    나올 토큰을 예측할 때 과거의 것만 보기

    Causal sentence representation

    • Convolution Language Model에서 보았듯이, 미래의 토큰을 보지 않고 예측하기 위해 mask out 하는 과정을 거쳤습니다.
    • 미래의 토큰을 보지 않고 다음 토큰을 예측하는 과정을 인과관계에 따른 문장표현(Causal sentence representation) 이라고 합니다.
    • <SOS>->It->is->a->cat->.-><EOS>
    • 이는 인과관계에 따른 문장표현만 지킨다면 문맥을 무한대로 확장가능하다고 볼 수 있습니다.

    2. CBoW

    그 전의 토큰들을 모두 모아서 set, table look up, average, 다은 토큰 예측 전에 그 전 모든 토큰 average 사용

    순서 무시 -> modeling bad, 토큰 representation good

    3. Recurrent Language Model

    언어 모델링에 많이 사용됨. 모든 문장을 온라인으로 한 벡터로 압축 (summarize->softmax->다음토큰 예측)

    한 방향으로만!!

    장점: 실시간 처리(시간에 따른 문장 처리)
    단점: 모든 문맥 내용을 하나의 고정된 벡터에 압축시켜서 학습시켜야 합니다.
    ex)
    자동완성(autocomplete) & 키워드 추천(keyword suggestion)
    scoring partial hypotheses in generation

     

    4. Recurrent Memory Networks

    RNN과 Self Attention (probablity계산)방법을 결합하여 Recurrent Language Model 의 단점 (너무 길면 압축이 어려움, 기억할 내용이 많아짐, 크기가 커짐, parameter 증가)을 보완했습니다.

    attention: 매 스텝마다 그 전, 후 토큰에 대한 각각 계산, 모든 것을 하나의 벡터로 압축할 필요 없음

    RNN을 한번 돌리고(모든 토큰을 한번 쭉 봄) attention을 그 위에서 probablity계산 가장 중요한 애를 따로 뽑아서 다음 토큰의 확률을 계산할 때 사용

    현재에서 다음 토큰을 예측하기 위해 그 전 토큰을 rnn으로 보고 그 중 중요한 것을 뽑아서 그것의 representation을 예측할때 사용 -> 빈칸 채우기 문제에 good!

     

     

     

     

Designed by Tistory.