본문 바로가기
Natural Language Processing/Paper review

[논문 리뷰]Magpie: Alignment Data Synthesis from Scratch by Prompting Aligned LLMs with Nothing

by beeny-ds 2024. 10. 1.
Synthesis datasets 생성을 위한 레퍼런스 체크를 하던 중 Magpie 논문을 확인했다.
LLM 의 특징을 활용하여 데이터셋을 생성하는게 흥미로웠다.
직접 몇 가지 테스트를 해봤는데 되긴 하더라.
다만... Domain specific task 에 대해서는 아쉬움을 느낀다.
그래도 기왕 논문을 확인했으니 기록을 남긴다.

논문 링크: arxiv 바로가기

목차

1. 논문 핵심 내용 요약

2. 장점 & 단점 정리

3. 코드 유무 확인


 

1. 논문 핵심 내용 요약

a. 문제 제기

  • 모델을 효과적으로 학습하려면 고품질의 정렬된 데이터 세트가 필수적이다.
  • 기존의 데이터 수집 및 annotation 방법은 시간과 비용이 많이 든다.
  • 정렬된 고품질의 데이터를 생성하는 솔루션인 Magpie 제안
    • Magpie 는 합성 데이터 생성을 완전 자동화한 데이터 생성 Process 이다. (generate synthesize instruction data)

 

b. 해결 방안 및 결과

Magpie Datasets Infos

  • instruct tuning 학습된 Llama-3 8B & 70B 모델을 활용하여 Human effort 없이 데이터셋을 생성할 수 있었다.
  • 생성된 데이터의 token 길이 분포가 다양함을 확인했다.
  • 생성한 데이터셋을 vector 변환하여 t-SNE plots 을 그려봤을 때 다른 데이터셋 대비 고른 분포를 가진 것을 확인했다.
    • 사용한 embedding model: all-mpnet-base-v2
    • 비교한 데이터셋: Alpaca, Evol Instruct, UltraChat
    • 시사점: 고른 분포는 다양한 주제를 제시한다는 걸 의미한다고 함 (dataset’s diversity)

 

c. 방법론

Step 1 & Step 2 를 통해 query & answer 를 생성한다.

Synthetic datasets generation process

① Step-1: LLM 에 pre-query template 만 input 으로 넣어 response 를 받는다.

  • 논문에서는 이를 auto-regressive 특성으로 인해 user quesry 를 self-synthesize 하는거라고 말한다.
  • pre-query template 이란?
    • chat template 을 구성할 때 모델의 올바른 프롬프트를 보장하기 위해 <|start_header_id|> & <|end_header_id|> 와 같은 special token 을 지정한다.
    • 프롬프트의 시작은 아래와 같은 형식을 따르게 되는데 이를 pre-query template 이라 한다.
      <|begin_of_text|><|start_header_id|>user<|end_header_id|>
      • 물론 이 format 은 모델마다 다르다. 학습하는 사람마다 정의한 바가 다르기 때문이다. 이를 파악하기 위해서는 chat template 을 확인해야 한다.
  • 모델에 input 으로 pre-query template 만 넣으면 LLM 의 response 로 query 를 얻을 수 있다.
    • trial 마다 다른 query 를 얻을 수 있도록 파라미터를 세팅한다.
      ex) do_sample=True / temperater=1 / top_p=1
    • query 의 예시는 아래와 같다.
      I am trying to find a recipe for a perfect chocolate chip cookie.

② Step-2: pre-query template 과 Step 1 에서 얻은 query 를 합쳐 LLM 에 input 으로 넣어 response 를 받는다.

  • 이러한 과정을 통해 고품질의 명령어 명령어 데이터 세트를 구성할 수 있다고 함.
  • Input example
    • 더보기
      <|begin_of_text|><|start_header_id|>user<|end_header_id|>

      I am trying to find a recipe for a perfect chocolate chip cookie.<|eot_id|><|start_header_id|>assistant<|end_header_id|>

  • Output example
    • 더보기
      Assitant's response: The quest for the perfect chocolate chip cookie! It's a lofty goal, but I'm happy to help you on your journey. Here's a classic recipe that's widely regarded as one of the best, along with some tips to ensure you achieve cookie perfection:

      **The Recipe:**

      Ingredients:

      * 2 1/4 cups all-purpose flour
      * 1 tsp baking soda
      * 1 tsp salt
      * 1 cup (2 sticks) unsalted butter, at room temperature
      * 3/4 cup white granulated sugar
      * 3/4 cup brown sugar
      * 2 large eggs
      * 2 cups semi-sweet chocolate chips
      * Optional: nuts (walnuts or pecans work well), dried fruit (cranberries or cherries), or espresso powder for added flavor

      Instructions:

      1. Preheat your oven to 375°F (190°C). Line a baking sheet with parchment paper or a silicone mat.
      2. Whisk together flour, baking soda, and salt in a medium bowl. Set aside.
      3. In a large bowl, cream together butter and sugars until light and fluffy, about 2-3 minutes.
      4. Beat in eggs one at a time, making sure each is fully incorporated before adding the next.
      5. Gradually mix in the dry ingredients (flour mixture) until just combined, being careful not to overmix.
      6. Stir in chocolate chips and any optional add-ins (nuts, dried fruit, or espresso powder).
      7. Scoop tablespoon-sized balls of dough onto the prepared baking sheet, leaving about 2 inches of space between each cookie.
      8. Bake for 10-12 minutes or until edges are lightly golden brown and centers are set.
      9. Remove from the oven and let cool on the baking sheet for 5 minutes before transferring to a wire rack to cool completely.

      **Tips for Achieving Cookie Perfection:**

      1. **Use quality chocolate:** High-quality chocolate chips will give you a more intense chocolate flavor.
      2. **Don't overmix:** Mix the dough just until the ingredients come together in a ball. Overmixing can lead to tough cookies.
      3. **Use room temperature butter:** This ensures the butter creams properly with the sugar and eggs, resulting in a better texture.
      4. **Don't overbake:** Take the cookies out of the oven when they're lightly golden brown and still slightly soft to the touch. Overbaking will result in dry, crispy cookies.
      5. **Use parchment paper or a silicone mat:** This will help prevent cookies from spreading too much and losing their shape.
      6. **Chill the dough:** If you want a crisper cookie, chill the dough for 30 minutes to an hour before baking. If you prefer a chewier cookie, bake immediately.
      7. **Experiment with flavors:** Try adding different nuts, dried fruits, or spices to create unique flavor combinations.
      8. **Store cookies properly:** Store cookies in an airtight container at room temperature for up to 5 days or freeze for up to 2 months.

      Now, go forth and bake those cookies! With these tips and the recipe, you'll be well on your way to creating the perfect chocolate chip cookie.

 

추가적으로 데이터 생성 시 meta info 를 추가했다고 한다.

meta info 정보는 다음과 같다.

  1. Task Categories of Instructions
    • 데이터의 task category 를 분류한다.
    • query 마다 task 는 하나만 부여한다.
  2. Quality of Instructions
    • each instruction 의 품질을 분류하기 위해 Llama-3-8B-Instruct model 사용
  3. Difficulty of Instructions
    • each instruction 의 난이도를 분류하기 위해 Llama-3-8B-Instruct model 사용
  4. Instruction Similarity
    • 반복되는 Instruct 를 제거하기 위해 similarity 를 측정한다.
  5. Quality of Responses
    • 답변 품질을 평가하기 위해 reward model 을 사용하여 reward 를 구한다.

 

d. 성능 평가 결과

Magpie 데이터셋으로 학습한 모델로 성능을 측정한 결과

llama-3 및 Qwen1.5 모델을 대상으로 Magpie 로 생성한 데이터셋을 활용하여 Fine-Tuning 하고 AlpacaEval 및 Arena-Hard 데이터셋에 대해 성능을 평가해보니 Magpie 로 학습한 모델이 가장 좋은 성능을 보였음.


 

2. 장점 & 단점 정리

  • 장점
    • Human effort 없이 instruct tuning 을 위한 데이터셋 생성 가능
    • 데이터셋에 task category, 난이도, 품질 등과 같은 meta 정보 추가
    • 데이터 생성 및 필터링을 통해 모델 성능 향상 가능성 확인
  • 단점
    • 해당 방법으로 Domain specific 데이터셋 생성은 어려워 보임
    • 데이터 생성을 위해 사용하는 모델에 따라 저작권 문제가 있을 수 있음
    • task category 에 bias 가 있음

 

3. 코드 유무 확인

존재하는 코드가 있다. 아래 링크를 참고하기 바란다.

https://github.com/magpie-align/magpie?tab=readme-ov-file

 

GitHub - magpie-align/magpie: Official repository for "Alignment Data Synthesis from Scratch by Prompting Aligned LLMs with Noth

Official repository for "Alignment Data Synthesis from Scratch by Prompting Aligned LLMs with Nothing". Your efficient and high-quality synthetic data generation pipeline! - magpie-align/...

github.com

 

코드를 참고해서 데이터셋을 생성해보았다.

데이터셋의 question 은 Instruct tuning 된 모델로부터 얻을 수 있었다.

이건 마치 뭐라할까... sLLM 의 학습 데이터셋을 그대로 복원하여 생성하는 느낌? 이었다.

그렇기에 이 방법만으로 생성한 데이터만을 사용해서 Domain specific 모델 학습은 어려워 보인다.

 

실제로 Insurance domain 에 대한 데이터셋을 생성하기 위해 Magpie 방법론으로 데이터를 생성해보았다.

Magpie 를 활용한 데이터셋 생성

내 지식이 잘못되지 않았다면 2번 index 에 해당하는 질문의 답변은 오류인 것 같다.

그리고 1번과 4번은 qa 데이터셋의 품질이 낮다.

context-qa 에 대해서는 힘들지 않을까 싶지만 Insurance domain 에 대한 general 정보를 모델에 학습시키는 방향으로는 사용할 수 있을법 싶다. 

 

추가적으로 meta info 로 task category 분류, 난이도 분류, 품질 분류 등을 추가한 시도는 참고하기 좋은 레퍼런스가 될 것 같다.


 

마무리,,

양질의 Synthetic 데이터셋을 생성하기 위해 여러 레퍼런스를 찾아보고 있다.
내 생각으로는 양질의 데이터셋은 task category 가 고르게 분포되어 있고 auto-eval 이 가능하도록 meta info 가 충분해야 하지 않을까 싶다. 문제는 그걸 어떻게 만들고 구현할 수 있을지 방법이다.

지금 실험해보고 있긴한데...

실험이 잘 되면 논문감이 될 수도 있을 것 같다.

일단 레퍼런스를 꾸준히 찾으며 생각한 방법과 적절히 조합하여 여러 trial 을 해보는 수밖에 없을듯 싶다.

반응형

댓글