본문 바로가기

NLP/논문이해

[논문이해] Noisy Channel Language Model Prompting for Few-Shot Text Classification

논문명: Noisy Channel Language Model Prompting for Few-Shot Text Classification

https://arxiv.org/abs/2108.04106

 

Noisy Channel Language Model Prompting for Few-Shot Text Classification

We introduce a noisy channel approach for language model prompting in few-shot text classification. Instead of computing the likelihood of the label given the input (referred as direct models), channel models compute the conditional probability of the inpu

arxiv.org

 

In Context Learning 에 관심이 있어서 해당 논문을 읽었다. ICL의 관점에서만 본다면, Channeling 방식은 해당 모델을 load할 수 없는 경우엔 사용할 수 없는 것 같다.


논문 제목 분석

  • Noisy: 보통 AI 논문에서는 데이터의 품질이 좋지 않다고 하는 것 같다. 실제로 이 논문은 데이터셋이 불균형이거나 매우 적거나, 아직 본 적 없는 정답(unseen label)에 대해서도 효과적이라고 말하기 때문이다.
  • Channel: channeling 이라는 방식이 있다. 이 방식은 저자가 애용하시며, 실제로 후속 논문에서도 등장한다. 성능도 좋다. 하여튼, 이런 방식이 있구나 정도로 넘어가면 된다.
  • Few shot: 현재 자연어 처리 분야는 용어가 혼잡해서 정리가 필요했는데, 이 당시엔(2021) In Context Learning 이라는 표현이 널리 쓰이지 않았던 것 같다. 그리고 논문에서 few shot finetuning 과 In Context Learning with few examples 모두 실험한다. 그러니, few shot 의 의미가 In Context Learning 에 프롬프트로 쓰이는 예제 개수일 수 있고, finetuning 을 위해 쓰이는 예제 개수일 수 있겠다.

 

What is Channeling?

Direct

  • 영화 후기를 긍정/부정으로 분류한다고 가정하자.
  • 입력: A three hour cinema master class, 출력: It was great / It was terrible
  • 보통 이 경우에, It was great 와 It was terrible 이 나올 확률 중 높은 게 출력되며 그걸 정답으로 간주한다.
  • 이런 방식을 Direct 라고 한다.

 

Channel

  • Bayesian Rule 을 정리하면, P(x | y) 로 표현가능하다. (이걸 모른다면, Bayesian 정리를 찾아볼 것)
  • 입력과 출력을 바꿔 넣는 방식을 Channel 이라고 한다.
  • 실제 논문에서 related work로, 2000년대부터 번역 등 다양한 분야에서 쓰인 방법이라고 밝힌다.

 

의의

  • noisy channel approach 를 통해 demonstration method(In Context Learing)과 prompt tuning(fine tuning)에서 모두 기존 direct 방식보다 성능이 뛰어났다.
  • 이 방식은 데이터셋이 불균형하거나 적을 때, 혹은 등장하지 않은 정답에도 강력하다.
  • ablation study 를 통해 상황에 따라 어떤 방법론을 사용하는 것이 더 좋을지에 대해서도 제시한다.

 

Method

Demonstrations method

기호 설명

  • x: 입력 (예시: '영화보다가 잠든 건 처음이다', '이 영화를 몰랐다면 얼마나 불행했을까.')
  • c: 답 (예시: 0, 1, 'Positive', 'Negative' etc)
  • v: verbalizer 라고 하는데, 예컨대 'Negative'를 'It was terrible'이라고 바꿔주는 장치를 의미한다.
  • x1, v(c1): 이렇게 한쌍이다. (입력, 답) 한쌍을 예시로 줬다는 의미다. 순서가 바뀌면, (답, 입력) 형태로 준 것이다.

 

입력 방식

  • zero shot: 어떤 예시도 주지 않은 채, 맞춰보라고 한 것. 방식간의 차이가 가장 명확히 드러나는 부분이다.
  • concat - based demonstrations: 예시를 함께 제공한 것
  • ensemble - based demonstrations: 이건 예시를 들어서 이해하는 게 쉬우니 K = 4 라고 가정하자. 한번에 예시를 4개를 주면, 발생하는 문제 중 하나는 예시의 순서에 따라서도 성능이 달라진다는 점이다. 이걸 방지하고자, 예시를 하나씩만 넣어서 확률을 구한다. 그러면 확률 4개를 구할 수 있는데, 그걸 곱해서 결과를 내자는 것이다. 이렇게 하면 예시의 순서와 관계 없는 결과를 낼 수 있다. 위 표를 보면, 유일하게 확률곱으로 이뤄진 걸 확인할 수 있다.

 

Direct++ (사견)

  • Direct 를 개선한 방식이라는데, 설명이 짧고 내 견문이 좁아서 명확히 이해하지 못했다.
  • zero shot 수식을 보면, 아무것도 넣지 않았을 때의 확률로 나눠주는 걸 보면 모델의 편향성을 제거하는 것처럼 보인다.
  • 예컨대, 모델 A는 아무것도 넣지 않아도 'Great' 보다 'Terrible' 을 생성할 확률이 4배 높다고 가정하자. 마치 매사 부정적인 사람에게 긍정/부정을 평가해달라고 하면, 편향성이 남아서 태스크 성능에도 영향을 미칠 수 있다는 것이다. 그래서 나눈 것이 아닐까 하는 추측을 해본다.

 

Tuning method

  • 노란색만 학습한다고 보면 된다.
  • All finetuning: 우리가 다 아는, 모두 학습하는 방식
  • Head tuning: Head 만 학습하는 방식
  • Transformation tuning: 기존 파라미터는 두고, 새롭게 층을 추가하여 그것만 학습함
  • Prompt tuning: LM을 blackbox라 가정하고, prompt 를 N개 추가해서 그것만 학습하는 방식

위 방식에서 실험해서 어디서 무엇이 효과적인지 밝힌다고 한다. 다만, 이건 In Context Learning 이 아니고 parameter update 가 발생한다는 점이 Demonstrations method와 다르다는 걸 기억하자.

 

 

실험

데이터셋

  • 분류를 한다고 논문 제목에 쓰여 있었고, class 개수만 간단히 보고 가면 된다.

 

실험 설정

  • 예시는 별 말 없으면 K = 16 이다.
  • 모델은 GPT-large 인데, 실험에 따라 달라질 수 있다.
  • 성능은 평균/최악을 표기한다. 최악을 표기하는 이유는 편차가 심하지 않다는 걸 확인할 수 있기 때문이다.

 

Demonstartions Method 실험

  • Direct vs Direct++: 확실히 성능이 대부분 개선되었음을 볼 수 있다. 이건 나중에 관련 논문을 봐야 할듯.
  • Direct++ vs Channel: 대부분에서 성능이 개선되었음을 확인할 수 있다. 표준편차는 부록에서 확인 가능하며, 이를 통해 channel 이 성능 개선뿐만 아니라 완강함(robustness)도 끌어올렸음을 확인할 수 있다.
  • Concat vs Ensemble: 앙상블 방식이 기존 방식보다 최악/평균 성능 모두 개선되었음을 알 수 있다. 하지만 앙상블 방식은 channel 에게 항상 효과적이지 않은데, 길이가 긴 데이터셋에서만 좋은 경향이 있다.
  • zero shot vs few shot: Direct 방식에서는 오히려 성능이 하락할 수 있다. 하지만 Channel 은 few examples 로부터 성능 개선을 이뤄냈다.

 

Tuning method 실험

  • Direct vs Channel in Prompt tuning: 해당 방식에서 Channel 이 우수함을 확인할 수 있다. 그것도 10% 이상 차이가 난다. 부록에서 표준편차를 확인할 수 있는데, 최고 성능은 Direct 가 높은 경우가 있는데 그만큼 최저 성능은 낮아서 완강함까지 고려하면 Channel 이 압도한다고 볼 수 있다.
  • Head tuning: Direct 기준 3가지 방법 중 성능이 압도적이다. 일부 데이터셋에서는 Channel 보다 성능이 좋은데, 질의응답과 주제 분류 태스크라서 Head 를 직접 update 하는 게 더 좋았던 것 같다고 말한다.
  • 물론 Channel all finetuning 이 가장 성능이 좋았다고 한다.

 

 

예제 개수에 따른 실험

  • 모든 방법이 개수에 따라 성능이 증가함
  • 개수가 커짐에 따라, Channel 방식의 성능이 head tuning, direct all 방식에 밀리는 걸 확인할 수 있다. 이 점을 미루어 보아, 개수가 적을 때 Channel 이 그 소수의 예제들만으로도 충분히 능력을 끌어낸다고 볼 수 있다.

 

불균형 실험

  • p-: 이진 분류에서 negative 를 뽑을 확률로, 데이터 불균형을 조절하는 hyperparameter 다.
  • 일직선으로 그려진다는 건 관계 없이 성능이 유지된다는 것인데, channel prompt 방식이 압도적이다. 즉, channel 방식은 불균형에도 강하다.

 

본 적 없는 것에 대하여(unseen label)

  • 극단적인 설정이지만, 현실에선 충분히 일어날 수 있는 경우다.
  • K개를 뽑을 때, 하나의 label 을 제외하고 뽑는다.
  • direct 방식은 학습 시에 본 적이 없는 데이터를 예측할 수 없었다고 한다.
  • Channel 방식은 zero shot 보다 성능이 높다고 한다. 즉, 본 적 없는 경우엔 Channel 방식이 강력함을 보여준다.
  • 물론 TREC dataset 에서 성능이 좀 다른데, 이 데이터셋은 head tuning 이 가장 높았던 경우이기도 하다.

 

한계

  • GPT2-Large 로만 했기 때문에 그 뒤에 등장한 거대 모델들에 대해선 알 수가 없다.
  • text classification에 대한 결과이기 때문에 다른 태스크에 대해선 실험을 진행해봐야 한다.