메인 콘텐츠로 건너뛰기
이 노트북은 대화형 노트북입니다. 로컬에서 실행하거나 아래 링크를 사용할 수 있습니다:
이 튜토리얼에서는 손으로 쓴 환자 정보 이미지에서 개체명 인식(NER)을 수행하는 컴퓨터 비전 파이프라인을 구축하고, 트레이스하고, 평가하는 방법을 보여드립니다. 마지막에는 비전-언어 모델(VLM)을 기반으로 하는 작동하는 광학 문자 인식(OCR) 파이프라인과, 파이프라인이 이미지에서 구조화된 필드를 얼마나 정확하게 추출하는지 측정하는 W&B Weave Evaluation을 완성하게 됩니다. 이 가이드는 프롬프트를 반복적으로 개선하고 멀티모달 추출 파이프라인의 품질을 체계적으로 측정하기 위해 Weave를 사용하려는 개발자를 위한 것입니다. 다음 섹션에서는 다섯 단계에 걸쳐 안내합니다. 프롬프트 생성 및 반복 개선, 데이터셋 가져오기, NER 파이프라인 구축, Scorer 정의, 평가 실행입니다.

사전 요구 사항

시작하기 전에 필요한 라이브러리를 설치 및 임포트하고, W&B API 키를 확인한 다음, Weave 프로젝트를 초기화하세요. 이 단계를 완료하면 환경이 W&B에 인증하고 Weave 프로젝트에 트레이스를 기록할 수 있습니다.

Weave로 프롬프트를 만들고 반복적으로 개선하기

좋은 프롬프트 엔지니어링은 모델이 Entities를 정확하게 추출하도록 유도하는 데 매우 중요합니다. 이 섹션에서는 초기 프롬프트를 작성하고, 시간에 따른 변경 사항을 추적할 수 있도록 Weave에 게시한 다음, 더 엄격한 검증 규칙을 적용해 이를 개선합니다. 먼저 모델이 이미지 데이터에서 무엇을 추출해야 하는지와 결과를 어떤 형식으로 출력해야 하는지 알려주는 기본 프롬프트를 만드세요. 그런 다음 추적하고 반복적으로 개선할 수 있도록 프롬프트를 Weave에 저장하세요.
다음으로, 프롬프트에 더 많은 지침과 검증 규칙을 추가해 출력의 오류를 줄이세요. 수정된 버전을 같은 이름으로 게시하면 Weave가 해당 프롬프트를 새 버전으로 추적하므로, 반복 작업 전반에서 결과를 비교할 수 있습니다.

데이터셋 조회

프롬프트를 준비했다면, 다음으로는 파이프라인에 넣어 처리할 입력 데이터가 필요합니다. OCR 파이프라인의 입력으로 사용할 손글씨 메모 데이터셋을 가져오세요. 데이터셋의 이미지는 이미 base64로 인코딩되어 있으므로 LLM이 별도의 전처리 없이 바로 사용할 수 있습니다.

NER 파이프라인 구축하기

이제 프롬프트와 데이터셋이 준비되었으므로, 이를 VLM에 연결하는 NER 파이프라인을 구축하세요. 이 파이프라인은 두 개의 함수로 구성됩니다.
  • 데이터셋의 PIL 이미지를 받아 VLM에 전달할 수 있는 이미지의 base64 인코딩 문자열 표현을 반환하는 encode_image 함수
  • 이미지와 system 프롬프트를 받아, system 프롬프트에 설명된 대로 해당 이미지에서 추출한 엔터티를 반환하는 extract_named_entities_from_image 함수
이제 named_entity_recognation이라는 함수를 만드세요. 이 함수는 다음을 수행합니다:
  • 이미지 데이터를 NER 파이프라인에 전달합니다.
  • 결과를 올바른 형식의 JSON으로 반환합니다.
함수 실행을 W&B UI에서 자동으로 추적하고 트레이스하려면 @weave.op() 데코레이터를 사용하세요. named_entity_recognation이 실행될 때마다 전체 트레이스 결과를 Weave UI에서 볼 수 있습니다. 트레이스를 보려면 Weave 프로젝트의 Traces 탭으로 이동하세요.
마지막으로, 데이터셋에 대해 파이프라인을 실행하고 결과를 확인하세요. 이 단계에서는 다음 섹션에서 평가할 모델 출력을 생성합니다. 다음 코드는 데이터셋을 순회하며 결과를 로컬 파일 processing_results.json에 저장합니다. 결과는 Weave UI에서도 확인할 수 있습니다.
Weave UI의 Traces 테이블에 다음과 비슷한 내용이 표시됩니다.
NER 파이프라인 실행 결과를 보여주는 Weave Traces 테이블.

Weave를 사용해 파이프라인 평가하기

이제 VLM을 사용해 NER를 수행하는 파이프라인을 만들었으므로, Weave를 사용해 이를 체계적으로 평가하고 성능이 얼마나 잘 나오는지 확인할 수 있습니다. 파이프라인을 평가하면 일부만 점검하는 방식에 의존하지 않고 전체 데이터셋 전반에서 추출 품질을 측정할 수 있습니다. Weave의 Evaluations에 관한 자세한 내용은 Evaluations Overview를 참조하세요. Weave 평가의 기본 구성 요소는 Scorer입니다. Scorers는 AI의 출력 결과를 평가하고 평가 메트릭을 반환합니다. AI의 출력 결과를 받아 이를 분석한 뒤, 결과를 딕셔너리 형태로 반환합니다. 필요하면 입력 데이터를 기준 참조로 사용할 수 있으며, 평가에 대한 설명이나 추론 같은 추가 정보도 함께 출력할 수 있습니다. 이 섹션에서는 파이프라인을 평가하기 위해 두 개의 Scorer를 만듭니다:
  • 프로그래매틱 Scorer.
  • LLM-as-a-judge Scorer.

프로그램 방식 Scorer

첫 번째 Scorer는 LLM 없이 실행되는 결정론적 검사입니다. 프로그램 방식 Scorer인 check_for_missing_fields_programatically는 모델 출력(named_entity_recognition 함수의 출력)을 받아 결과에서 누락되었거나 비어 있는 를 파악합니다. 이 검사는 모델이 어떤 필드도 추출하지 못한 샘플을 식별하는 데 유용합니다.

LLM-as-a-judge scorer

프로그래밍 방식의 Scorer는 누락되었거나 비어 있는 필드만 감지할 수 있으므로, 추출된 값이 이미지에 표시된 내용과 실제로 일치하는지 확인하려면 두 번째 Scorer가 필요합니다. 평가의 이 단계에서는 실제 NER 성능이 반영되도록 이미지 데이터와 모델 출력을 모두 제공합니다. 즉, 모델 출력만이 아니라 이미지 내용 자체를 명시적으로 참조합니다. 이 단계에 사용되는 Scorer인 check_for_missing_fields_with_llm은 LLM(구체적으로는 OpenAI의 gpt-4o)을 사용해 점수화를 수행합니다. eval_prompt의 내용에 지정된 대로, check_for_missing_fields_with_llmBoolean 값을 출력합니다. 모든 필드가 이미지의 정보와 일치하고 형식도 올바르면 Scorer는 true를 반환합니다. 하나라도 누락되었거나 비어 있거나 올바르지 않거나 일치하지 않는 필드가 있으면 결과는 false가 되며, Scorer는 문제를 설명하는 메시지도 함께 반환합니다.

평가 실행

두 개의 Scorer가 모두 정의되었으므로 이제 평가를 실행할 수 있습니다. 전달된 dataset을 자동으로 순회하며 결과를 Weave UI에 함께 기록하는 평가 call을 정의합니다. 다음 코드는 평가를 시작하고 NER 파이프라인의 모든 출력에 두 개의 Scorer를 적용합니다. 결과는 Weave UI의 Evals 탭에서 확인할 수 있습니다.
이전 코드를 실행하면 Weave UI의 Evaluation 테이블로 연결되는 링크를 Weave가 생성합니다. 이 링크를 따라가 결과를 확인하고, 원하는 모델, 프롬프트, Datasets 전반에 걸쳐 파이프라인의 여러 반복을 비교하세요. Weave UI는 팀을 위해 다음과 같은 시각화를 자동으로 생성합니다.
데이터셋 전반에서 Scorer 출력을 비교한 Weave Evaluation 결과입니다.