In Context Learning이란?
- LLM이 Prompt내에 주어진 맥락을 통해 새로운 작업을 수행할 수 있는 능력을 가지는것.
- Prompt Design 원칙 중에 "Use Example"에 해당됨
- LLM의 성능은 주어진 예시에 크게 의존함
- 이전에는 Fine-tuning을 통해 새로운 작업을 배웠음
Few-shot learning
- 소수의 예시를 프롬프트에 추가해서 사용하는 방법은 일반적으로 Few-shot라고 지칭함
- Few-shot의 이유는 제한된 Context Window 사이즈 때문임
예시를 사용할때 고려해야할 요소들
- 예시를 제공할때 라벨링이 필요한가?
- 예시의 순서는 중요한가?
- 좋은 예시를 선택하는 방법은 무엇인가?
예시에서 라벨링이 중요한가?

- 예시의 순서에 따라 전체적인 예시 제공 성능이 결정될 수 있음
- 데이터 셋마다 예시 레이블의 영향을 받기도 하고 안받기도 한다
- 복잡한 작업일수록 예시를 활용하기 어렵기 때문에 레이블에 영향을 덜 받는다
- 모델이 커질수록 레이블 영향을 크게 받고 예시를 통해 새로운 작업을 수행하는게 가능하다
- 예시가 많을수록 성능이 향상되고 동시에 레이블 영향도도 증가한다
예시의 순서를 정하는 방법
유전 알고리즘
--> 생물의 진화 과정을 모방한 알고리즘. 모든 가능한 순열을 탐색하지 않으면서 최적의 성능을 달성하는 기법이다.

Entropy 기반 프로빙 메트릭
--> 매번 예시를 제공할 떄마다 최적의 예시 순서를 찾아내는 것은 부담이고 좋은 예시 순서를 평가하기 위해 필요한 라벨링 데이터가 부족할 수 있다. 이때 인공 데이터를 생성하고 엔트로피 통계 분석으로 최적의 순서를 찾는다.
--> LLM을 이용해 인공 데이터를 생성
--> 순서를 다르게 줘서 엔트로피 기반의 지표로 통계적 분석
-
높은 엔트로피일수록 모델이 안정적인 예측을 하는 것
-
대체적으로 이런 순서로 예시를 주면 성능이 좋다는 경험적 증거를 제시
-
인공 데이터에서 좋은 성능을 보인 순서는 실제 데이터에서도 좋은 순서를 보일 것이라는 가정이 담겨 있음

-
다양한 예시 순서에 대해 엔트로피를 계산하는 과정에서 많은 비용이 생길 수 있음
-
특정 모델에서 최적화된 예시 순서가 다른 모델에도 동일하게 적용되지 않을 수 있음
In-COntext Curriculum Learning(ICCL)
--> 기존의 예시 순서 최적화 방법들은 높은 계산 비용이 필요하다는 단점이 있음
--> 예시의 복잡성을 낮은 순서에서 높은 순서대로 제시하는 ICCL 방법을 통해 간단하게 순서를 정할 수 있음
--> 인간 또는 LLM이 예시를 난이도에 따라 평가한다 -> 가장 쉬운 예시를 먼저 배열하고 가장 어려운 예시를 나중에 배열한다
- LLM이 예시의 난이도를 평가할때 복잡도를 기준으로 평가하지만 정확하진 않을 수 있음. 하지만 다른 방법들보다 실용적으로 적용해볼 수 있다
어떻게 좋은 예시를 선택할까?
- 예시의 품질이 LLM의 답변 퀄리티에 영향을 크게 준다는 것은 사실이다.
- 좋은 예시를 고르는 전략 : 지도 학습, 비지도 학습
- 지도 학습 : 예시를 검색하는 Retriever를 학습, 이 Retriever를 다양한 작업에 활용할 수 있도록 Unified Retriever를 학습
- 비지도 학습 : KATE 전략, Vote-K 전략, LENS 전략
KATE 전략
-
입력과 유사한 예제를 kNN 검색으로 검색해서 프롬프트에 보강
--> 문장 인코더를 사용해서 예시와 입력을 벡터 표현으로 변경
--> 입력과 가장 유사한 예시를 벡터 표현에서 검색 - 코사인 유사도
--> 검색된 예시를 연결해서 프롬프트에 추가
-
원하는 작업과 관련된 데이터 셋으로 추가 파인 튜닝된 문장 인코더를 사용하면 성능 향상
-
검색 대상인 예시 데이터 셋이 많을수록 성능 향상
-
예시의 순서는 성능 영향에 크게 작용하지 않음
Vote-k 전략
- 비라벨링 데이터에서 다양성과 대표성을 고려해서 예시를 선택해서 활용
- 예시를 사용하는 방법은 많은 예시가 필요하고 이는 어노테이션 비용을 크게 증가시킴
- Vote-k 전략은 어노테이션 비용을 낮추기 위해 제안된 방법이다
- 어노테이션의 효율성을 향상시키는 두 단계의 프레임워크가 있음 : 선택적 어노테이션, 프롬프트 검색
선택적 어노테이션
1) 어노테이션 되지 않은 원시 데이터를 임베딩해서 벡터 표현으로 변경
2) 각 데이터를 그래프의 노드로 생성
3) 각 노드들은 자신과 유사한 노드들과 연결
4) 각 노드에 대해 점수를 계산해서 높은 점수를 가진 노드들이 선택
-> 대표성 점수 계산 : 해당 노드가 다른 노드들과 얼마나 많이 연결되어 있는가
-> 다양성 점수 계산 : 이미 선택된 노드와 얼마나 겹치지 않는가
5) 초기 어노테이션 샘플을 이용해서 남은 샘플들에 대해 예측을 해보고 신뢰도 점수 계산
6) 신뢰도 점수에 따라서 샘플들을 동일한 크기의 그룹으로 나눔
7) 각 그룹에서 가장 신뢰도 점수가 높은 샘플을 추가 어노테이션으로 선택하며 가장 신뢰도가 높은 그룹은 제외
--> 그래프에서 중복 방지, 신뢰도 점수가 다양한 샘플 선택, 신뢰도 점수가 제일 높은 그룹은 제외함으로써 다양성을 확보할 수 있다.
LENS 전략
- fiLter-thEN-Search의 약자로 두 단계로 구성된 지원 예시를 찾는 방법
- 예시의 유용함을 평가하고 유용한 예시 조합을 찾는 방법
- 전체 데이터셋을 잘 대표하고 정보량이 많은 소수의 예시들을 선택하는 방법을 제안
- 더 정보량이 많은 중요한 예시가 있다는 가정
- 예시들의 조합을 평가해보면서 최적의 조합을 찾는 방법
1) 예시 필터링 : infoScore 메트릭을 바탕으로 정보량이 많은 예시를 선별
2) 다양한 예시 조합 탐색 : 예시를 조합해보고 교체해보고 순서를 바꿔봄.
예시 스스로 생성하기
- SG-ICL(Self-Generated In-Context-Learning)이라는 기법으로 LLM이 예시를 생성할 수 있다.
- 스스로 생성한 경우 일관된 성능을 기대할 수 있다.
- 예시를 직접추가하는 방법에 비해 0.6배의 성능을 낸다.
SG-ICL
- 두 단계로 구성되어 있다. Self-generation step, Inference step
- Self-generation step : 현재 입력과 생성할 클래스 정보를 조건으로 해서 예시를 생성
- Inference step : 앞에서 생성된 예시를 이용해서 추론
적절한 예시의 수는?
- 일반적으로 예시의 수가 늘어날수록 모델의 성능도 커진다
- 같은 예시가 추가되는 것은 의미가 없다
- 모델이 클수록 예시가 많을 수록 성능이 커진다
- 너무 많은 예시는 크게 효과가 없다(20개이상)
예시를 추가할때 주의점
- 프롬프트에 추가하는 예시 클래스의 수가 불균형적이라면 편향을 일으킬 수 있다
- 예시의 수도 클래스에 맞게 균형을 맞춰야 한다
- 언어 모델은 편향을 가지고 있으니 보정해야 한다
- 언어모델은 다수 라벨 편향, 최신 편향, 자주 등장하는 토큰 편향을 가지고 있다.
- Majority Label Bias(다수 라벨 편향) : 프롬프트에서 더 자주 등장하는 클래스에 모델이 편향되는 경향
- Recency Bias(최신 편향) : 모델이 프롬프트에서 뒤에 나오는 예시에 더 많은 영향을 받는 경향
- Common Token Bias(자주 등장하는 토큰 편향) : 모델이 사전 훈련 데이터에서 자주 등장하는 단어에 편향된다는 것