Table of Contents

728x90

1. 프로젝트 개요

A. 개요 : https://stages.ai/en/competitions/320/overview/description

B. 환경: Upstage에서 제공하는 remote 서버연결

GPU CPU Memory
RTX 3090 / 24 GB 10 thread 60G

 

2. 프로젝트 팀 구성 및 역할

 

2-1. 매일 11시 어제 한 것, 유효한 부분, 내일 진행할 부분에 대해 공유, 모델학습실험기록지를 엑셀로 공유

2-2. 역할분담

진행속도가 빠른 사람이 실험결과 공유해주고, 후발주자가 성능 올릴 수 있는 다양한 실험 진행 

 

3.프로젝트 수행 절차 및 결과

3-1. 데이터 탐색:

3-2. 모델 학습:

단순 요약 task의 경우 t5로도 충분한 성능을 낼 수 있다. BERT 모델에서 커다란 발전을 보여준 T5.
lora r값을 크게 해서 성능이 좋아진 것인지, clean_up_tokenization_Spaces를 설정해서 성능이 올라간 것인지는 확인하지 못했다.
한국의 upstage SOLAR가 우수한 성적을 내서 놀라웠다. 그러나 no_repeat_ngram=2 를 설정하는 순간 # 표시가 마구 생기는 등의 특이한 생성방식을 보여줬다. 파라미터 최적화가 안된것일까? 아니면 설계상 문제가 있는 것일까.
역시 gemma. 차원이 다른 학습결과를 보여줬다. 되도록 모델을 튜닝하지 않는 것이 성능에 도움이 되었다.

3-3. 결과 추론:

모델마다 다양한 SUMMARY를 도출한다. 인간이 사용하고 있는 언어의 구조, 학습방식에 대해 생각해보게 되었다.
우리 11팀은 결과적으로 1위를 달성하였다. gemma2-9b의 경우 팀원들 모두 같은 스펙의 서버를 사용하였지만 특정 팀원 이외의 다른 팀원들의 서버에서는 OOM이슈로 돌아가지 않았다.

 

4.프로젝트 회고

Llama recipe의 경우 clean_up_tokenization_space라는 기능도 추가해준다. 후처리는 대회 점수를 향상시킬 수 있다.

 

단순 역번역의 경우 모델들마다 번역이 비슷했다. 해당 데이터를 활용하여 모델이 크게 학습하는 것이 없어 보였다. 데이터를 증강할 경우 SAMSUM데이터셋을 활용하는 것이 좋아보인다.

 

LLM에서는 special token 추가의 의미가 없었다. 각 모델마다 자동으로 문장에 나오는 고유어를 학습하는 듯이 보였다. 함부로 add_special token, add_token 을 하는 것은 성능을 떨어뜨렸다. 특수한 분야가 아닌 이상 단어사전을 추가하는 것은 불필요하다.

 

더보기

**LLM(대형 언어 모델)**에서 add_token(토큰 추가) 작업을 하는 것이 학습에 도움이 되는지에 대한 질문에 대한 답변은 상황에 따라 다릅니다. 하지만 일반적으로는 특정한 경우에 도움이 될 수 있습니다. 자세한 설명을 위해 아래에 몇 가지 측면을 살펴보겠습니다.

1. 특정 도메인이나 언어에 맞춘 토큰 추가

  • 도움이 되는 경우:
    • 도메인 특화 언어를 다루는 경우나 특정 용어, 약어, 또는 특수 기호가 많이 등장하는 텍스트에서는 기존 언어 모델에 해당 토큰들이 포함되어 있지 않을 수 있습니다.
    • 예를 들어, 의료법률처럼 특화된 도메인에서는 일반적으로 사용되지 않는 전문 용어나 약어가 많을 수 있습니다. 이런 경우에 도메인에 맞는 새로운 토큰을 추가하면 모델이 해당 용어를 더 잘 처리할 수 있습니다.
    • 또는 새로운 언어에서 특정한 단어들이 자주 등장하는 경우, 그 언어에 맞는 토큰을 추가하여 모델의 성능을 개선할 수 있습니다.
    예:
  • python
    코드 복사
    from transformers import GPT2Tokenizer tokenizer = GPT2Tokenizer.from_pretrained('gpt2') special_tokens = {'additional_special_tokens': ['<MEDICAL_TERM>', '<LEGAL_TERM>']} num_added_tokens = tokenizer.add_special_tokens(special_tokens)
  • 도움이 되지 않는 경우:
    • 일반적인 도메인이나 잘 정의된 데이터셋을 사용할 때는 기존의 사전(vocabulary)이 이미 잘 구성되어 있기 때문에, 추가 토큰이 성능에 큰 차이를 만들지 않을 수 있습니다.
    • 너무 많은 토큰을 추가하면 모델이 오히려 더 많은 데이터를 필요로 할 수 있습니다. 불필요하게 토큰을 추가하는 것은 학습 효율성을 떨어뜨릴 수 있습니다.

2. 특수 토큰 추가

  • 도움이 되는 경우:
    • 모델이 특정한 구조나 문맥을 구분할 필요가 있을 때 특수 토큰을 추가하는 것이 매우 유용할 수 있습니다. 예를 들어, BERT에서 <SEP>나 <CLS> 같은 특수 토큰을 사용하여 문장의 경계를 구분하거나 문서 간 구분을 하는 방식이 있습니다.
    • 대화형 모델에서 각 발화의 구분을 명확히 하기 위해 <SPEAKER1>, <SPEAKER2> 같은 특수 토큰을 추가하면, 모델이 문맥을 더 잘 이해할 수 있습니다.
    예:
  • python
    코드 복사
    special_tokens_dict = {'additional_special_tokens': ['<SPEAKER1>', '<SPEAKER2>']} tokenizer.add_special_tokens(special_tokens_dict)

3. 다양한 언어 지원

  • 도움이 되는 경우:
    • 모델이 지원하지 않는 언어의 문자를 처리해야 할 때 특정 언어의 문자나 단어를 토큰화하지 못할 수 있습니다. 이때 해당 언어의 새로운 토큰을 추가하면 모델이 새로운 언어에 더 잘 적응할 수 있습니다.
    • 예를 들어, 특정한 다중 언어 모델을 사용할 때 자주 등장하는 특정 문자나 단어들을 잘 처리하지 못하는 경우가 있습니다. 이런 경우 토큰을 추가해 줌으로써 그 언어의 처리가 더 원활해질 수 있습니다.

4. 문장구조 및 포맷에 대한 학습

  • 도움이 되는 경우:
    • LLM을 학습할 때 특정한 포맷(예: HTML 태그, 코드 내의 특정 구조 등)을 더 잘 이해시키고 싶다면 그 구조에 맞는 추가 토큰을 생성해주는 것이 유용할 수 있습니다.
    • 예를 들어, 코드 관련 작업에서는 "<function>", "<variable>" 같은 토큰을 추가하여 코드 구조를 더 잘 이해할 수 있게 만들 수 있습니다.

5. 데이터의 일관성 유지

  • 도움이 되는 경우:
    • 토큰 추가를 통해 더 짧고 일관된 토큰화가 가능해지면 모델의 효율성도 증가할 수 있습니다. 예를 들어, 특정한 긴 용어가 자주 등장하는 경우 그 용어를 하나의 토큰으로 처리하면 더 적은 토큰 수로 문장을 처리할 수 있습니다.

결론

add_token 작업은 상황에 따라 학습에 도움이 될 수 있습니다. 특히 도메인 특화된 용어새로운 언어, 특수 포맷이 자주 등장하는 경우, 그리고 구조적 학습을 할 때는 매우 유용할 수 있습니다. 하지만, 불필요하게 토큰을 추가하거나 너무 많은 토큰을 추가할 경우 오히려 모델의 성능에 악영향을 줄 수 있기 때문에 신중하게 사용하는 것이 중요합니다.

golden summary의 max길이 이하로 max_new_tokens를 설정하는 것이 일반적인 결과값을 얻을 수 있었다.
LLM의 prompt 를 변경했을 경우 더 나은 성능을 보였지만 모델이 워낙 크다보니 prompt를 길게 할 경우 학습속도가 느려져서 단순히 summarize라는 명령어만 입력할 수 밖에 없었다. 또한 LoRa, Adapt 와 같은 PEFT방식으로 학습하여도 결과가 향상하였다.