자연어처리

[자연어처리 CS224N] #5-1. n-gram Language Model

ima9ine4 2024. 3. 24. 14:51
728x90

오늘도 어김없이 자처 하수하따

cs224n의 Lecture5 강의자료를 참고 및 사용했습니다.

 

🔹 Language Model

오늘은 Language Modeling에 대해 배웠다. Language Modeling은 단어가 주어졌을 때, 다음에 어떤 단어가 올 지를 예측하는 모델이다. 더 구체적으로 말하자면 일련의 단어들이 주어졌을 때(x1, x2, x3, ... ,xt), 다음 단어 x(t+1)이 무엇일지에 대한 조건부 확률을 계산하는 것이다. 이러한 시스템을 Language Model 이라고 부른다.

조건부 확률

우리는 Language Model을 매일 사용한다. 스마트폰이나 검색창의 자동완성기능, GPT 등 모두 Language Model이다.

우리가 사용하는 LM

 

🔹 n-gram Language Model

 

▪️ n-gram Language Model 이란

Language Model은 어떻게 학습하는가? n-gram Language Model을 학습하여 배운다! n-gram이란 연이은 단어들의 뭉치이다. 'the students opened their' 이라는 corpus가 있을 때 n-gram을 구해보면 아래와 같다.

  • unigrams: "the", "students", "opened", "their"
  • bigrams: "the students", "students opened", "opened their"
  • trigrams: "the students opened", "students opened their"
  • four-grams: "the students opened their"

이러한 n-gram를 이용해서 언어 모델을 설계할 수 있다. n-gram 모델은 n-1개의 단어를 보고 다음 단어를 예측하는 모델이다. 예를 들어 "the students"를 보고 다음 단어를 예측하는 모델은  trigram model이라고 한다.

 

▪️ 마르코프 가정(Markov assumption)

이러한 n-gram language model을 통해 학습하기 위해서는 우선 Markov assumption이 필요하다. 마르코프 가정(Markov assumtion)이란 t+1번째에 어떤 단어가 올 것인지는 오직 선행하는 n-1개의 단어에만 영향을 받는다는 가정이다. 첫 번째 단어부터 마지막 t번째 단어까지를 모두 고려할 때와 n-1개만의 단어를 고려할 때 모두 t+1번째에 단어가 나올 확률이 같다는 가정을 한다. 사실상 모든 단어를 학습할 수 없기에 n-gram language model을 이용하기 위해 미리 가정해두는 부분이다.

이러한 가정 덕분에 우리는 n-gram language model을 이용할 수 있다. 4-gram Language Model을 사용한다고 가정해보자.
"as the proctor started the clock, the students opened their _____" 라는 corpus가 있을 때, 우리는 마르코프 가정에 의해 앞 부분은 모두 버리고 "students opened their"을 통해 뒤의 빈칸을 예측한다. 4-gram Language Model이 아니라 trigram Language Model이라면, "open their"을 보고 뒤의 빈칸을 예측한다.

  • "students opend their"이라는 말이 1000번 나왔을 때, 뒤에 'books'가 나온 것이 400번이면
    P( books | students opened thier) = 0.4 ( 400/1000)
  • "students opend their"이라는 말이 1000번 나왔을 때, 뒤에 'exams'가 나온 것이 100번이면
    P( exams | students opened thier) = 0.1 ( 100/1000)

이런 식으로 실제 확률에 기반하여 학습한 뒤 높은 확률을 가지는 단어로 예측한다. 하지만 이런 n-gram Language Model은 여러 가지 문제점을 가지고 있다.

 

▪️ n-gram Language Model 이 가지는 문제점

  1. Sparsity Problem
    - 1) 바로 위에서 본 예시를 그대로 이어가보자. "students opened their __w__ "이라는 문장이 나오지 않는다면? count(students opened their w) = 0 이므로, 분자의 값이 0이다. 따라서 "students opened their" 뒤에 어떤 단어 w가 등장할 확률은 0이다.
    - 2) "students opened their"이 아예 나오지 않는다면? 우리는 어떠한 단어에 대해서도 확률을 계산할 수가 없다.. 분모가 0이기 때문이다. 그래서 이러한 경우 "opened their"로 대신하여 우회적인 해결을 한다. 이렇게 해결하는 것을 backoff라고 한다. 

    이러한 문제점들은 Sparsity Problem이다. Sparsity Problem(희소 문제)는 데이터가 매우 드물게 분포될 수 있는 자연어처리 분야에서 자주 발생한다. n의 크기를 키우면 언어 모델의 성능을 높일 수도 있겠지만 희소 문제를 더 악화시킨다.(n을 선택하는 것은 trade-off문제) n을 5 이상으로는 잘 사용하지 않는다.

  2. Storage Problem
     n이 커질수록 모델 사이즈도 더 커지게 되어 저장공간의 문제가 생긴다. corpus의 모든 n-gram에 대해서 count를 해야 하기 때문이다.

 

▪️ 해결책으로 나온 Neural Language Model

n-gram language model이 가지는 이러한 한계점들을 해결하기 위해  neural language model이 등장했다. neural language model에 대해서는 다음 포스팅에서 자세히 알아보겠다.

728x90
반응형