https://arxiv.org/pdf/2303.04360


Abstract:

  • LLM 을 의료 분야(헬스케어)에서 이용해서 임상 텍스트에서 정보를 추출(예: 환자 상태나 약품 이름, 관계 등)하려는 시도를 하려고 했었음.
  • 하지만 의료 문서는 개인정보가 포함되어 있고, 모델의 API에 직접 환자 정보를 업로드하기에는 보안 문제가 있었고, LLM 을 그대로 이용했을 때는 생물학적 개체명 인식(biological named entity recognition, 예: 질병명, 약물명 등)이나 관계 추출(relation extraction)과 같은 세부 과제에서 성능이 낮게 나왔음.
  • 이런 문제를 해결하기 위해서 LLM을 ‘데이터 생성기’로 활용하여 대규모로 합성 데이터를 만들고, 그 데이터에 라벨을 달아 로컬 모델을 학습하는 식으로 사용함:
    • LLM 이 텍스트 마이닝 같은 작업인 라벨링은 잘 못하는거 아님? -> LLM 이 합성 데이터도 생성하기 때문에 이것에 대한 라벨링까지 하는 건 어려운 작업이 아닐거임.
    • 이런 합성 데이터가 현실 세상의 데이터와 조금 다르더라도 도움이 되는건가?
    • 합성 데이터는 어떤 식으로 만들면 잘 만들 수 있는 것일까?
    • 몇개의 실제 데이터로 합성 데이터 생성을 시작해볼 수 있을까?
  • 새로운 접근 방식: Synthetic Data Generation + Local Fine-tuning 을 이용했을 때 훨씬 높은 성능을 보였다고 함:
    • 생물학적 개체명 인식(NER) 과제에서 F1-score 23.37% → 63.99% 로 크게 상승
    • 관계 추출(RE) 과제에서 F1-score 75.86% → 83.59% 로 향상

 

Introdcuction:

  • Synthetic Data Generation 의 핵심 아이디어:
    • LLM을 직접 임상 텍스트 마이닝에 적용하는 것이 아니라 LLM으로 ‘라벨링된 합성 데이터’를 대규모 생성함.
    • 이 때, 실제 사람이 라벨링한 예시(소량) + 적절한 프롬프트를 통해 데이터 다양성 및 정확도를 높임.
    • 생성된 합성 데이터 중 품질이 낮거나 중복된 것을 제거(후처리)함.
    • 이렇게 정제된 데이터셋으로 로컬 환경에서 학습 가능한 사전학습 모델(예: BioBERT, ClinicalBERT 등)을 파인튜닝함.

 

Synthetic Data Generation of ChatGPT:

  • 프롬프트 엔지니어링(Prompt Engineering):
    • 먼저 프롬프트 템플릿 후보 생성함:
      • 먼저 ChatGPT에게 “우리의 작업(Task Descriptions)을 위해 데이터를 생성할 수 있는 간단한 5가지 프롬프트/템플릿을 제공해 달라”고 요청한다.
      • ChatGPT가 5개 프롬프트를 제시하면, 각각에 대해 10개씩 데이터 샘플을 생성해 보고, 사람이 직접 품질을 비교해 가장 좋은 프롬프트를 고름.
    • 프롬프트 개선(Iterative Augmentation):
      • 선정된 “베스트” 프롬프트를 기반으로 다시 “5개 후보를 더 만들어 달라”라고 ChatGPT에 요청해, 새로운 후보 프롬프트를 받는다.
      • 이 과정을 여러 라운드(논문에서는 세 번) 반복해, 최종적으로 가장 효과적인 프롬프트를 확보함.
    • 이렇게 최적화된 프롬프트들이 Table 6에 제시되어 있으며, 이를 통해 대규모 합성 데이터를 생성한다.
  • 합성 데이터 품질 보장 방법:
    • 타겟 데이터셋과 유사한 분포 유지:
      • ChatGPT에 “PubMed 저널 기사 스타일을 모사하라”고 지시하여, 실제 NCBI나 GAD 같은 바이오의학 데이터셋과 유사한 문체의 문장을 생성하도록 함.
      • 즉, 도메인 특성을 반영해 자연스럽고 전문적인 문장이 나오도록 유도함.
        • 매 라운드마다 프롬프트에 다른 시드(seed) 정보(예: 특정 질병명, 문구 등)를 넣어, 중복 문장이 생성되지 않도록 함.

 

합성 데이터를 얼마나 많이 만들고, 시드(seed) 예시를 얼마나 제공해야 최적의 성능을 낼 수 있는지:

  • 합성 문장(데이터) 개수의 영향:
    • GAD 데이터셋에는 6437개, EU-ADR 데이터셋에는 6424개의 합성 예시(문장)가 이미 생성되었음. 이런 상황에서 400개 ~ 6400개 범위로 합성 데이터 양을 다르게 하여 로컬 모델(다운스트림 모델)을 학습하고, 성능 변화를 관찰해봤다고 함.
    • 합성 데이터가 어느 정도까지 늘어날수록 모델 성능이 계속 향상되다가, 약 3500개 전후로 추가 증가분에 대한 성능 향상은 점차 미미해진다는 결론에 도달. 즉, 너무 많은 합성 데이터를 생성해도 학습에 큰 이점이 없고, 어느 지점(“약 3500개”)에서 최적 성능에 도달한다고 보고함.
  • 시드(seed) 예시 개수의 영향도 조사해봤다고 함:
    • 시드는 ChatGPT가 합성 문장을 만들 때 참고하도록 주어지는 실제 예시 문장(혹은 라벨이 포함된 샘플)임.
    • 시드 예시 개수가 많을수록, ChatGPT가 더 다양한 텍스트 예시를 생성할 가능성이 커진다.
    • 시드 예시의 풀(pool) 사이즈를 0부터 100까지 바꿔가며 실험해봄. 예컨대, 0이면 ChatGPT가 전혀 예시 없이 ‘완전히 자유롭게’ 문장을 생성하고, 100이면 100개의 실제 예시를 참조.
    • 시드 예시를 0개로 주면, ChatGPT가 중복된 예시를 많이 만들어내어 성능이 크게 떨어짐. 반대로 시드 예시가 적당히 늘어나면, 합성 데이터의 질과 다양성이 개선되어 모델 성능이 올라감.
    • 논문에서는 약 80개의 시드 예시가 “질적인 측면과 다양성을 확보하기에 충분한 수준”이라고 결론지음.

 

ChatGPT 가 방대한 양의 데이터를 학습한 것이니까, 원본 데이터셋과 비슷한 데이터 셋을 생성한 것은 아닐까?:

  • 중복된 데이터 셋을 만든다면 성능적으로 그렇게 이점이 있지는 않을거임.
  • 이를 확인하기 위해, 저자들은 Sentence Transformer를 활용하여 원본 텍스트와 합성 텍스트 각각의 임베딩(벡터 표현)을 추출해보고 T-SNE 기법을 사용해 임베딩들을 2차원 공간으로 시각화하여 원본 문장과 합성 문장이 어떤 분포 차이를 보이는지 관찰해봤다고 함.
  • 합성 데이터 분포와 원본 데이터 분포가 상당히 구분되었다고 한다. (distinct patterns)

+ Recent posts