본문 바로가기

NLP/논문이해

[논문이해] locally typical sampling

 

논문명: Locally Typical Sampling

논문링크: https://arxiv.org/abs/2202.00666

 

Locally Typical Sampling

Today's probabilistic language generators fall short when it comes to producing coherent and fluent text despite the fact that the underlying models perform well under standard metrics, e.g., perplexity. This discrepancy has puzzled the language generation

arxiv.org

 


수학적 증명과 이해는 건들지 않는다

논문에 수학적인 증명과 이해가 상당히 많이 포진되어 있다. 단계별로 잘 끊어서 설명해주시지만, 나 같은 사람에겐 그조차도 이해가 어려웠다. 증명에 대해선 아예 언급하지 않을 것이다. 어차피 맞다는데, 뭐.

 

논문의 핵심은 정보량

 

기존의 관점을 버려라

솔직히 이 논문에서 초반부에 인문학적으로 우리에게 이해를 시켜보려고 하는데, 구글번역기를 데려와도 어렵게 말한다. 이 논문 저자, 현학적으로 말하는 것에 취해 있는 게 분명하다. 그래서 중후반부에 등장하는 설명들을 긁어모아서 내가 이해한 바를 남겨두겠다.

 

우선 기존에 언어를 만들어왔던 관점을 버려라고 말한다. 즉, 'distribution' (분포)를 통해서 생성한다고 생각하지 말고, 우리 진짜 말할 때를 떠올려보라고 말한다.

 

사람은 정보량을 조절하며 말한다

인간은 말을 할 때, 정보량을 적절히 조절해서 말한다고 한다. 이걸 '정보 이론(information theory)'에 입각해서 설명하려고 하는데, 그 순간부터 이 논문이 급격하게 어려워질테니 이 예시를 보자.

 

"흥부와 놀부가 있었는데, 결론부터 말하자면 흥부는 착해서 부자가 돼. 옛날 옛적에..."

 

이렇게 이야기하면, 초반부에 결말을 이미 말해버렸다. 정보량이 높아서 그곳에 치중된다. 누구도 이렇게 말하진 않는다. 이야기나 말을 잘 하는 사람일수록 적절한 속도와 정보를 조절하며 말을 한다.

 

"옛날 옛적에 흥부와 놀부가 살았는데, 둘은 형제야. 그런데 흥부는 착하고, 놀부는 못 됐어. 참고로, 흥부는 동생이고 놀부는 형이야. 다시 돌아와서, 놀부는 모든 재산을 다 가져갔다? ....."

 

이렇게 정보를 조절하면서 이야기를 이끌어나가는데 보통 사람들이 말하는 방식이라고 한다.


논문 제목의 의미

 

Locally

그렇다면, 왜 논문에 'locally' 라는 단어가 붙었을까? 인간이 단어를 하나씩 뱉을 때를 생각해보면, 전체적으로 어떻게 말해야겠다 생각하는 게 아니라 그때 그때 말하면서 조절하기 때문이다. 즉, '흥부 놀부' 이야기를 해달라고 하면 전체적으로 어떻게 완급조절하며 이야기하면 좋겠다는 생각을 하는 게 아니라 말하면서 생각을 한다고 볼 수 있기 때문이다.

 

"그러다가, 아 맞다. 흥부를 구해준 제비 있잖아. 그걸 놀부가 알게 된거야. 그래서 놀부도 제비를 .... 어떻게 하더라? 아, 제비를 발견했는데 다리가 멀쩡해서.... 맞아, 부러뜨려. 일부러 놀부가 제비 다리를 부수는 거지."

 

이런 식으로 그때 그때 여태까지 했던 말과 앞으로 할 말 사이에서 현재 무슨 말을 하면 좋을지 고민하는 것이다. 그래서 globally 가 아닌 locally 다.

 

Typical

한글로는 일반적이라는 말이다. 여기서 일반적이라는 말을 붙인 이유는 인간의 말하기가 대게 이런 식으로 해왔다는 걸 강조하려고 붙인 것 같다. 즉, 이 논문은 인간의 일반적인 말하기 방식과 닮아있다는 뜻에서 붙인 단어다.

 

Sampling

사람도 결국 문장 단위가 아닌 단어 단위로 매번 정보량을 조절하지만, 그게 어떤 단어를 뱉을지는 그 순간 순간 떠오르는 것 중 하나를 고르기 때문에 sampling 라고 이름을 붙였다.


수식으로 본 Locally Typical Sampling

 

Nucleus Sampling

이 논문에 다행히(?) 기존 decoding method 의 수식을 먼저 제시해줘서 이해하기가 편했다. decoding methods 를 공부한다면, 당연히 알고 있는 'Nucleus Sampling(top p sampling)' 의 수식을 먼저 보자.

  • subject to: 확률 합이 τ를 넘는 집합 중에서
  • minimize: 그 집합의 원소의 개수가 가장 작은 집합을 구하자.

실제 top p sampling 의 의미도, 확률이 높은 순서대로 후보군에 넣되 threshold 를 넘기면 멈추자라는 의미였다. 그걸 위처럼 표현한 것이다. 이해하기 그리 어렵지 않다.

 

우리가 오늘 공부할 방법도 결국 'sampling' 이니까 sampling 후보군의 조건이 어떨지를 잘 살펴보면 되겠다.

 

Locally Typical Sampling

  • subject to: top p sampling 이랑 똑같다. 확률 합이 τ 를 넘는 단어 집합 후보군 중에서
  • minimize: 어떤 식의 합을 최소화하라는 것 같은데, 저 식의 의미가 뭘까?

 

자, minimize 안에 있는 식만 이해하면 된다. top p sampling 은 그냥 집합의 원소의 개수였다. 그래서 가장 적은 후보들로 확률 합이 τ 을 넘어라, 즉 가장 높은 확률순으로 단어를 추가하라는 의미였다.

 

locally typical sampling 에 적힌 수식은 뭘까? 논문에선 이렇게 말한다.

In words, Algorithm 5.3 limits the sampling distribution to only those words with negative logprobability within a certain absolute range from the conditional entropy (expected information content) of the model at that time step.

→ 매 단계마다 기대하는 정보량과 실제 정보량을 측정하기 위해 엔트로피를 구해서 그 합이 최소화되도록 해야 합니다.

 

여기서 정보량을 최소화하는 과정을 통해 정보량에 대한 조절이 일어난다는 걸 볼 수 있다. 기존 top k sampling, top p sampling 과 다른 점은 바로 minimize 과정에 확률에 대한 제한이 아닌 정보량에 대한 제한이 일어난다는 점이다. 그래서 가장 높은 확률을 가진 단어가 후보군에 포함된다는 보장이 사라진다.


결론

워낙 어려운 논문이라 여기까지만 하겠다. 내가 틀릴 수도 있으니, 논문에 대한 관점만 가지고 꼭 읽어보시길 추천한다. 참고로, 나는 story generation 에 활용하고 싶어서 적절한 parameter 와 간단한 이해를 위해 읽어봤다. 저자는 story generation 에 0.2 를 추천했다.

 

huggingface 의 generate 함수에서 typcial_p = 0.2 를 넣으면 사용가능하니, 써보면 될 듯하다.