AutoNLP와 Prodigy를 활용한 능동 학습(Active Learning)

Hugging Face는 자동화된 모델 학습을 위한 AutoNLP와 반복적인 데이터 레이블링을 위한 Prodigy를 사용하여 머신러닝에서 능동 학습을 구현하는 워크플로우를 선보였습니다. 이 파이프라인을 통해 사용자는 모델 아키텍처나 하이퍼파라미터 튜닝 대신 데이터 레이블링에 인간의 노력을 집중함으로써 최첨단(SOTA) 모델을 구축할 수 있습니다.

AutoNLP를 통한 자동화된 모델 학습

AutoNLP는 최소한의 코딩으로 SOTA 딥러닝 모델을 구축하도록 설계된 프레임워크입니다. 이는 transformers, datasets, 그리고 inference-api 라이브러리를 포함한 Hugging Face의 기존 생태계를 활용합니다.

AutoNLP의 주요 기능은 다음과 같습니다:

  • 광범위한 작업 지원: 이진 분류, 회귀, 다중 클래스 분류, 토큰 분류(NER 또는 품사 태깅과 같은), 질의응답, 요약 작업을 지원합니다.
  • 다국어 지원: 영어, 프랑스어, 독일어, 스페인어, 힌디어, 네덜란드어를 포함한 언어를 지원하며, 지원되지 않는 언어의 경우 커스텀 모델과 토크나이저를 사용할 수 있는 옵션이 있습니다.
  • 자동화된 최적화: AutoNLP는 모델 선택, 하이퍼파라미터 튜닝, 그리고 최적의 성능을 내는 모델을 식별하기 위해 여러 모델 후보를 학습시키는 과정을 자동으로 처리합니다.

Prodigy를 통한 실시간 데이터 어노테이션

Explosion에서 개발한 Prodigy는 실시간 데이터 레이블링을 가능하게 하는 상용 웹 기반 어노테이션 도구입니다. 주로 NER 및 텍스트 분류와 같은 NLP 작업에 사용되지만, 컴퓨터 비전 및 커스텀 작업 생성도 지원합니다. 능동 학습 파이프라인에서 Prodigy는 인간이 원시 텍스트를 반복적으로 레이블링하여 AutoNLP에 필요한 학습 세트를 생성하는 인터페이스 역할을 합니다.

사례 연구: BBC 뉴스 분류 및 NER

Hugging Face는 이 파이프라인을 입증하기 위해 Kaggle의 BBC News Classification 데이터셋에 이 도구들을 적용했습니다. 이 데이터셋은 뉴스를 business, entertainment, politics, sport, tech의 다섯 가지 클래스로 분류합니다.

다중 클래스 분류

AutoNLP를 사용하여 기존 카테고리에 대해 분류 모델을 학습시켰습니다. 프로세스는 데이터셋을 업로드하고 AutoNLP가 15개의 서로 다른 모델을 학습시키도록 하는 과정을 포함했습니다. 결과적으로 얻은 최적의 모델은 98.67%의 정확도를 달성했습니다.

능동 학습을 통한 개체명 인식(NER)

BBC 데이터셋에는 개체 레이블이 부족했기 때문에, NER 기능(레이블: PERSON, ORG, PRODUCT, LOCATION)을 추가하기 위해 능동 학습 프로세스를 구현했습니다:

  1. 초기 레이블링: Prodigy에서 약 20개의 샘플을 레이블링했습니다. 초기 AutoNLP 모델은 86%의 정확도를 보였였으나 정밀도(precision)와 재현율(recall)은 0이었으며, 이는 모델이 아직 패턴을 학습하지 못했음을 나타냅니다.
  2. 반복적 성장: 레이블링된 데이터셋이 70개 샘플로 늘어남에 따라 정확도는 92%로 상승했고, 정밀도는 0.52, 재현율은 0.42였습니다.
  3. 성능 돌파구: 약 150개 샘플에서 모델은 95.7%의 정확도, 0.64의 정밀도, 0.76의 재현율에 도달하여, 보지 못한 텍스트에서 개체를 탐지하는 능력이 크게 향상되었습니다.
  4. 최종 최적화: 약 250개 샘플을 레이블링한 후, 프로세스는 ~95.9%의 정확도, 0.73의 정밀도, 0.79의 재현율과 함께 최적의 결과에 도계한 정체 구간에 도달했습니다.

기술적 구현 및 워크플로우

Prodigy는 데이터를 AutoNLP 형식으로 직접 내보내지 않기 때문에, spacyprodigy.components.db를 사용하는 커스텀 Python 스크립트를 사용하여 Prodigy 어노테이션을 JSONL 파일로 변환환했습니다. 이 파일은 그 후

Sources

관련

  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch