spaCy와 Weights & Biases로 하이퍼파라미터 탐색
이 글에서는 Weights & Biases Sweeps를 활용해 spaCy 프로젝트의 하이퍼파라미터 탐색을 자동화하고, 최적의 하이퍼파라미터를 찾는 방법을 살펴봅니다. 본 문서는 AI 번역본입니다. 오역이 있을 수 있으니 댓글로 알려주세요.
Created on September 15|Last edited on September 15
Comment
하이퍼파라미터 탐색을 왜 자동화해야 하는지 굳이 설득할 필요는 없을 겁니다. 많은 머신러닝 실무자들이 한 번쯤은 직접 그리드 서치를 돌려 보며, 이 작업이 얼마나 고되고 오류가 발생하기 쉬운지 뼈저리게 경험하니까요.
모든 설정을 일일이 시도하는 대신, 다음을 사용할 수 있습니다 W&B Sweeps 백그라운드에서 실행되도록 설정해 두고, 더 흥미로운 작업에 집중할 수 있습니다. 이 짧은 튜토리얼에서는 다음을 ��용하는 방법을 보여드립니다 스윕 찾기 위해 프로젝트에 최적인 하이퍼파라미터 spaCy 프로젝트.
스윕을 실행하고 나면, 관심 있는 지표에 하이퍼파라미터들이 얼마나 중요한지 알려 주는 유용한 플롯들이 자동으로 생성됩니다.
이 글에서 다룰 내용은 다음과 같습니다:
목차
spaCy는 무엇이고 Weights & Biases는 무엇인가요?요약직접 따라 해보기: spaCy 프로젝트 사용하기W&B Sweeps를 사용하기 위한 나만의 spaCy 프로젝트 설정하기spaCy 설정에 Weights & Biases 통합 추가하기검색 전략 선택하기파라미터 검색 구성하기spaCy와 W&B Sweeps 구성 결합하기Sweeps로 학습 코드 호출하기 🧹결론다음 읽을 거리:
spaCy는 무엇이고 Weights & Biases는 무엇인가요?

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

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

W&B와 spaCy가 처음이신가요?
W&B와 spaCy 프로젝트 사용이 처음이시고, W&B가 제공하는 다른 모든 기능들에 대해 알고 싶으시다면, 예를 들어 실험 추적, 모델 체크포인팅, 데이터셋 버저닝자세한 내용은 여기에서 확인할 수 있습니다:
요약
스위프를 실행하는 방법은 두 가지가 있습니다:
명령줄 인터페이스 사용하기
- 실행 wandb sweep my_sweep.yml 스위프를 초기화하기 위해서.
- 실행 wandb agent sweep_id 에서 제공된대로 wandb sweep 서로 다른 하이퍼파라미터를 시도하는 에이전트를 실행하려면 다음을 사용하세요. 예시 구성은 여기에서 확인할 수 있습니다. 여기.
Python API 사용하기
- 정의하기 wandb.sweep 그리고 프로젝트 이름과 엔터티(사용자 이름 또는 팀 이름)와 함께 Sweep 구성 파일을 전달하세요.
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- 4components.textcat.model.ngram_size:values:- 1- 2- 3
spaCy와 W&B Sweeps 구성 결합하기
다행히도 두 구성을 결합하는 코드는 매우 간단합니다:
import typerfrom pathlib import Pathfrom spacy.training.loop import trainfrom spacy.training.initialize import init_nlpfrom spacy import utilfrom thinc.api import Configimport wandbdef 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 구성과 병합한 뒤 학습을 시작합니다.
💡
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: bayesmetric:goal: maximizename: cats_macro_auccommand:- ${env}- ${interpreter}- scripts/sweeps_using_config.py- ./configs/default_config.cfg- ./trainingparameters:components.textcat.model.conv_depth:values:- 2- 3- 4components.textcat.model.ngram_size:values:- 1- 2- 3training.dropout:distribution: uniformmax: 0.5min: 0.05training.optimizer.learn_rate:distribution: uniformmax: 0.01min: 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가 원활히 작동하도록 꾸준히 개선하여, 실무자들이 더 흥미로운 업무에 시간을 쓸 수 있도록 돕고 있습니다. 읽어 주셔서 감사합니다!
다음 읽을 거리:
Visualizing Prodigy Datasets Using W&B Tables
Use the W&B/Prodigy integration to upload your Prodigy annotated datasets to W&B for easier visualization
Reproducible spaCy NLP Experiments with Weights & Biases
How to use Weights & Biases and spaCy to train custom, reproducible NLP pipelines
Ines & Sofie — Building Industrial-Strength NLP Pipelines
Sofie and Ines walk us through how the new spaCy library helps build end to end SOTA natural language processing workflows.
Named Entity Recognition with W&B and spaCy
Visualize and explore named entities with spaCy in W&B
Add a comment
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