Skip to main content

spaCy와 Weights & Biases로 하이퍼파라미터 탐색

이 글에서는 Weights & Biases Sweeps를 활용해 spaCy 프로젝트의 하이퍼파라미터 탐색을 자동화하고, 최적의 하이퍼파라미터를 찾는 방법을 살펴봅니다. 본 문서는 AI 번역본입니다. 오역이 있을 수 있으니 댓글로 알려주세요.
Created on September 15|Last edited on September 15
하이퍼파라미터 탐색을 왜 자동화해야 하는지 굳이 설득할 필요는 없을 겁니다. 많은 머신러닝 실무자들이 한 번쯤은 직접 그리드 서치를 돌려 보며, 이 작업이 얼마나 고되고 오류가 발생하기 쉬운지 뼈저리게 경험하니까요.


모든 설정을 일일이 시도하는 대신, 다음을 사용할 수 있습니다 W&B Sweeps 백그라운드에서 실행되도록 설정해 두고, 더 흥미로운 작업에 집중할 수 있습니다. 이 짧은 튜토리얼에서는 다음을 ��용하는 방법을 보여드립니다 스윕 찾기 위해 프로젝트에 최적인 하이퍼파라미터 spaCy 프로젝트.
스윕을 실행하고 나면, 관심 있는 지표에 하이퍼파라미터들이 얼마나 중요한지 알려 주는 유용한 플롯들이 자동으로 생성됩니다.


Parameter importance with respect to
cats_macro_auc

Config parameter
Importance
Correlation
Loading...
Sweep: hwo0a1j2 1
20

이 글에서 다룰 내용은 다음과 같습니다:

목차




spaCy는 무엇이고 Weights & Biases는 무엇인가요?


spaCy 은/는 엄청난 자원입니다 자연어 처리 (NLP) 요구 사항. 이는 포함합니다 개체명 인식 (NER)품사 태깅, 텍스트 분류 등 다양한 작업을 지원합니다. 그리고 spaCy는 기본 설정만으로도 잘 작동하지만, 구성 요소를 깊이 있게 사용자 지정하고 조합할 수 있습니다.

Weights & Biases 협업형 머신러닝 프로젝트를 매우 손쉽게 운영할 수 있게 해줍니다. 여러분은 실험하려는 내용에만 집중하면 되고, W&B가 로깅과 전 과정 추적을 모두 책임집니다.
손실 플롯을 검토하거나, 프로덕션용 최신 모델을 다운로드하거나, 특정 모델을 만든 구성들을 확인하고 싶다면 W&B가 가장 좋은 선택입니다. 또한 여러 가지 기능 팀이 함께 협업할 수 있도록 공유 대시보드와 대화형 보고서 공유 같은 기능을 제공합니다.


W&B와 spaCy가 처음이신가요?

W&B와 spaCy 프로젝트 사용이 처음이시고, W&B가 제공하는 다른 모든 기능들에 대해 알고 싶으시다면, 예를 들어 실험 추적, 모델 체크포인팅, 데이터셋 버저닝자세한 내용은 여기에서 확인할 수 있습니다:


요약

스위프를 실행하는 방법은 두 가지가 있습니다:

명령줄 인터페이스 사용하기

  1. 실행 wandb sweep my_sweep.yml 스위프를 초기화하기 위해서.
  2. 실행 wandb agent sweep_id 에서 제공된대로 wandb sweep 서로 다른 하이퍼파라미터를 시도하는 에이전트를 실행하려면 다음을 사용하세요. 예시 구성은 여기에서 확인할 수 있습니다. 여기.

Python API 사용하기

  1. 정의하기 wandb.sweep 그리고 프로젝트 이름과 엔터티(사용자 이름 또는 팀 이름)와 함께 Sweep 구성 파일을 전달하세요.
  2. 호출 wandb.agent 그와 함께 sweep_id 그리고 모델을 학습시키는 함수입니다. 예제 코드는 여기에서 확인할 수 있습니다. 여기.
sweep_id = wandb.sweep(sweep_config, project="wandb_spacy_sweeps", entity='wandb')
wandb.agent(sweep_id, train_spacy, count=20)

직접 따라 해보기: spaCy 프로젝트 사용하기


spaCy 프로젝트로 프로젝트를 클론하세요:
python -m spacy project clone integrations/wandb
필수 패키지를 설치하세요:
python -m spacy project run install
에셋을 다운로드하세요:
python -m spacy project assets
하이퍼파라미터 검색을 실행하세요:
python -m spacy project run parameter-search

W&B Sweeps를 사용하기 위한 나만의 spaCy 프로젝트 설정하기

spaCy 설정에 Weights & Biases 통합 추가하기

먼저 프로젝트에 Weights & Biases를 추가해 실험을 추적하세요(선택적으로 데이터셋과 모델 버전도 추적할 수 있습니다). 필요한 것은 프로젝트의 설정 파일에 몇 줄만 추가하면 됩니다. .cfg 파일입니다. 더 자세한 내용은 다음을 참조하세요. spaCy 통합 페이지 우리 문서에서 또는 읽어보세요 이 블로그 게시글. 
다음 내용을 spaCy 구성 파일에 추가하세요:
[training.logger]
@loggers = "spacy.WandbLogger.v2"
project_name = "your_project_name"
remove_config_values = []
log_dataset_dir = "./assets"
model_log_interval = 1000
참고: log_dataset_dir 데이터셋 버전 관리를 원할 때에만 필요하며 model_log_interval 모델 체크포인트가 필요할 때에만 필요합니다.
💡
spaCy 학습과 마찬가지로, 스위프 관리는 코드 또는 구성 파일 중 어느 쪽으로도 할 수 있습니다구성 파일을 사용하는 버전은 아래에서 보여 드리겠지만, 코드를 사용하는 버전도 확인할 수 있습니다. 여기.
구성 YAML 파일을 만들겠습니다 ./scripts/sweep.yml 그리고 사용할 검색 전략을 선택하고, 테스트할 하이퍼파라미��의 값들을 함께 지정합니다.

검색 전략 선택하기

W&B Sweeps를 사용할 때, 다음에 시도할 하이퍼파라미터는 다음 기준에 따라 선택됩니다 검색 전략 여러분이 정의합니다. 다음과 같은 항목이 있습니다 몇 가지 옵션각각의 장단점이 있습니다.
  • grid Search - 모든 하이퍼파라미터 조합을 시도합니다. 계산 비용은 많이 들지만 매우 효과적입니다!
  • random Random Search - 지정한 분포에 따라 주어진 하이퍼파라미터의 무작위 조합을 시도합니다. 놀라울 정도로 효과적입니다!
  • baysian Bayesian Search - 지표 개선 가능성이 높은 하이퍼파라미터 조합을 우선적으로 시도합니다. 연속형 하이퍼파라미터가 소수일 때 효과적이지만 확장성이 떨어집니다.

파라미터 검색 구성하기

이제 정의해야 합니다 어느 검색할 하이퍼파라미터와 각 하이퍼파라미터에 부여할 옵션을 정합니다.
spaCy 설정 옵션을 표현하려면, spaCy 구성에서 사용하는 점 표기법을 사용해야 합니다. values 해당 파라미터에 대해 시도할 옵션 목록입니다.
parameters:
components.textcat.model.conv_depth:
values:
- 2
- 3
- 4
components.textcat.model.ngram_size:
values:
- 1
- 2
- 3
전체 구성 파일을 확인할 수 있습니다 여기.
스위프를 파이썬 스크립트로 정의하고 싶다면, 다음을 참조하세요 여기.
💡

spaCy와 W&B Sweeps 구성 결합하기

다행히도 두 구성을 결합하는 코드는 매우 간단합니다:
import typer
from pathlib import Path
from spacy.training.loop import train
from spacy.training.initialize import init_nlp
from spacy import util
from thinc.api import Config
import wandb

def main(default_config: Path, output_path: Path):
loaded_local_config = util.load_config(default_config)
with wandb.init() as run:
sweeps_config = Config(util.dot_to_dict(run.config))
merged_config = Config(loaded_local_config).merge(sweeps_config)
nlp = init_nlp(merged_config)
train(nlp, output_path, use_gpu=True)

if __name__ == "__main__":
typer.run(main)
여기서 하는 일은 기본 로컬 spaCy 설정을 불러오는 것뿐입니다(즉, 다음을 포함하는 구성) 모든 것 학습 스크립트에 해당), 변경할 하이퍼파라미터가 담긴 Sweep 구성과 병합한 뒤 학습을 시작합니다.
이는 우리의 spaCy 통합 코드에서 확인할 수 있습니다 여기.
💡

Sweeps로 학습 코드 호출하기 🧹

마지막으로, 이러한 하이퍼파라미터와 함께 어떤 코드를 호출할지 Sweeps에 알려야 합니다. 이를 위해 사용자 지정 command 다음과 같이 YAML 구성 파일에 작성합니다:
command:
- ${env}
- ${interpreter}
- scripts/sweeps_using_config.py
- ./configs/default_config.cfg
- ./training
어디에서 ./scripts/sweep_using_config.py 위에서 정의한 구성들을 병합하는 코드이며 configs/default_config.cfg 모든 항목이 정의되어 있는 구성입니다 기타 탐색 대상이 아닌 매개변수

전체 Sweeps 구성

전체 Sweeps 구성은 다음과 같습니다:
./scripts/sweep.yml:
method: bayes
metric:
goal: maximize
name: cats_macro_auc
command:
- ${env}
- ${interpreter}
- scripts/sweeps_using_config.py
- ./configs/default_config.cfg
- ./training
parameters:
components.textcat.model.conv_depth:
values:
- 2
- 3
- 4
components.textcat.model.ngram_size:
values:
- 1
- 2
- 3
training.dropout:
distribution: uniform
max: 0.5
min: 0.05
training.optimizer.learn_rate:
distribution: uniform
max: 0.01
min: 0.001
참고: 우리는 bayes 위의 검색 전략은 …가 필요합니다 metric 다음에 시도할 최적의 하이퍼파라미터를 선택할 수 있도록 정의되어야 합니다.
💡
이제 스윕 구성 파일을 정의했으니, 이를 사용하여 호출할 수 ���습니다 wandb 다음과 같이 CLI를 사용합니다:
wandb sweep my_sweep.yml
sweep-id가 출력되며, 이를 다음에 전달해야 합니다 wandb agent:
wandb agent sweep-id
스위프에 참여시키려는 각 머신이나 각 프로세스에서 이 명령을 호출하면 됩니다.
이것으로 끝입니다. 이제 자동화하기 어려운 다른 업무로 돌아가세요.

결론

이 튜토리얼에서는 spaCy 프로젝트에서 하이퍼파라미터 탐색을 수행하여 다음을 찾는 방법을 살펴보았습니다 최고 학습 구성에 사용할 하이퍼파라미터."
검색할 하이퍼파라미터와 검색 전략을 정의하고, spaCy와 잘 연동되도록 약간의 코드만 추가하면, W&B Sweeps를 통해 프로젝트의 하이퍼파라미터를 훌륭하게 튜닝할 수 있습니다. 우리는 다양한 프레임워크에서 W&B가 원활히 작동하도록 꾸준히 개선하여, 실무자들이 더 흥미로운 업무에 시간을 쓸 수 있도록 돕고 있습니다. 읽어 주셔서 감사합니다!


다음 읽을 거리:



이 글은 AI로 번역된 기사입니다. 오역이 의심되는 부분이 있으면 댓글로 알려 주세요. 원문 보고서는 아래 링크에서 확인할 수 있습니다: 원문 보고서 보기
Karl Renius
Karl Renius •  *
I needed to add the following to the train.py file for combining the configs: import spacy spacy.require_gpu() Otherwise a plain copy/paste of the code will still use CPU even with use_gpu=True in the train line. See notes in spacy's train code for background: https://github.com/explosion/spaCy/blob/master/spacy/training/loop.py
1 reply