이 튜토리얼에서는 반려견 미용 사업에 대한 고객 리뷰가 포함된 합성 데이터 세트를 사용하여 IBM Granite 모델을 신속하게 조정해 보겠습니다.
프롬프트 조정은 전체 모델을 재교육하고 가중치를 업데이트하지 않고도 인공 지능(AI) 파운데이션 모델을 새로운 다운스트림 작업에 적응시키는 효율적이고 저렴한 방법입니다.
파운데이션 모델은 대규모 언어 모델(LLM)을 기반으로 구축되며 대량의 학습 데이터를 수신합니다. 파운데이션 모델의 일반적인 사용 사례는 챗봇과 가상 어시스턴트입니다.
파운데이션 모델의 입력 해석 및 응답 품질을 개선하는 방법에는 여러 가지가 있습니다. 이러한 뉘앙스를 더 잘 이해하기 위해 몇 가지 방법을 비교해 보겠습니다.
하드 프롬프트는 사용자를 대상으로 하며, 사용자의 조치가 필요합니다. 하드 프롬프트는 LLM이 응답을 생성하기 위한 템플릿 또는 지침으로 볼 수 있습니다. 하드 프롬프트의 예를 소개합니다. IBM 문서 페이지를 확인해 보실 것을 권장합니다. 이 프롬프트 유형과 기타 여러 유형에 대한 자세한 내용은 다음을 참조하세요.
이 하드 프롬프트 템플릿을 사용하면 LLM에 선호하는 아웃풋 구조 및 스타일에 대한 특정 지침을 제공할 수 있습니다. 이 프롬프트를 통해 LLM이 보다 양질의 바람직한 응답을 생성할 가능성이 높아집니다.
하드 프롬프트와 달리 소프트 프롬프트는 자연어로 작성되지 않습니다. 대신 프롬프트는 각 입력 임베딩의 시작 부분에 추가된 AI 생성 수치 벡터로 초기화됩니다. 이 입력 임베딩은 더 큰 모델에서 지식을 추출합니다. 이러한 해석 가능성 부족은 주어진 작업에 최적화된 프롬프트를 선택하는 AI에게로 확장됩니다. 즉, AI가 이러한 임베딩을 선택한 이유를 설명하지 못하는 경우가 많습니다. 다른 프롬프트 방법과 비교할 때 이러한 토큰은 모델 자체가 고정된 가중치로 동결된 상태로 유지되기 때문에 미세 조정보다 계산 비용이 낮습니다. 또한 소프트 프롬프트의 성능은 인간이 설계한 하드 프롬프트를 능가하는 경향이 있습니다.
이 튜토리얼에서는 프롬프트 조정을 위해 소프트 프롬프트로 작업하겠습니다.
watsonx.ai 프로젝트를 생성하려면 IBM Cloud 계정이 필요합니다.
여러 툴 중에서 선택할 수 있지만, 이 튜토리얼에서는 Jupyter Notebook을 사용하기 위해 IBM 계정을 설정하는 방법을 안내합니다.
IBM Cloud 계정을 사용하여 watsonx.ai에 로그인합니다.
watsonx.ai 프로젝트를 생성합니다.
프로젝트 내에서 프로젝트 ID를 가져올 수 있습니다. 관리 탭을 클릭합니다. 그런 다음 일반 페이지의 세부 정보 섹션에서 프로젝트 ID를 복사합니다. 이 튜토리얼에는 이 ID가 필요합니다.
Jupyter Notebook을 만듭니다.
이 단계에서는 이 튜토리얼의 코드를 복사하여 프롬프트 조정을 직접 구현할 수 있는 Notebook 환경이 열립니다. 또는 이 노트북을 로컬 시스템에 다운로드하여 watsonx.ai 프로젝트에 에셋으로 업로드할 수 있습니다. 이 Jupyter Notebook과 함께 사용된 데이터 세트는 GitHub에서 확인할 수 있습니다.
watsonx.ai 런타임 서비스 인스턴스를 만듭니다(적절한 지역을 선택하고 무료 인스턴스인 Lite 요금제를 선택합니다).
API 키를 생성합니다.
watsonx.ai 런타임 서비스 인스턴스를 watsonx.ai에서 생성한 프로젝트에 연결합니다.
이 튜토리얼에는 몇 가지 라이브러리와 모듈이 필요합니다. 다음 항목을 가져와야 합니다. 설치되지 않은 경우, 빠른 PIP 설치로 이 문제를 해결할 수 있습니다.
자격 증명을 설정합니다. API 키와 프로젝트 ID를 입력합니다.
환경 설정의 첫 번째 단계로 인증 세부 정보를 사용하여 APIClient 인스턴스를 만들고 project_id를 설정합니다.
아웃풋:
'SUCCESS'
이 튜토리얼에서는 반려견 미용 비즈니스 리뷰로 구성된 합성 데이터 세트를 사용합니다. 적절한 URL을 사용하여 데이터 세트를 API 클라이언트에 연결할 수 있습니다.
원하는 데이터 세트를 자유롭게 사용할 수 있습니다. HuggingFace와 같은 플랫폼에서 여러 오픈 소스 데이터 세트를 사용할 수 있습니다.
아웃풋:
데이터 자산 생성 중...
SUCCESS
아웃풋:
3b1db894-8d9e-428d-8fee-d96f328c7726
이러한 고객 후기의 형식에 대한 통찰력을 얻기 위해 데이터를 Pandas 데이터 프레임에 로드하고 긍정적인 후기와 부정적인 후기를 모두 보여주는 행 몇 개를 인쇄해 보겠습니다. 아웃풋 '1'은 긍정적인 후기를 나타내고 '0'은 부정적인 후기를 나타냅니다.
아웃풋:
TuneExperiment 클래스는 실험을 생성하고 조정을 예약하는 데 사용됩니다. 이를 사용하여 실험을 초기화하고 기본 파운데이션 모델, 훈련 데이터 및 매개변수를 설정해 보겠습니다. 이 프롬프트 조정 연습의 목표는 LLM이 데이터 세트에서 추출한 고객 만족도 등급에 따라 응답을 조정하는 것입니다. 후기는 긍정적인 후기("1") 또는 부정적인 후기("0")로 분류될 수 있으므로, 이 작업은 분류 작업입니다.
이 튜토리얼에서는 비슷한 결과를 얻기 위해 IBM Granite Model을 대규모 언어 모델로 사용하도록 제안합니다.
이제 조정 실험을 설정했으므로 데이터 세트에 연결해야 합니다. 이를 위해 DataConnection 클래스를 사용하겠습니다. 이를 위해서는 앞서 API 클라이언트로 데이터 자산을 시작할 때 생성한 asset_id이 필요합니다.
물론 원하는 AI 모델을 자유롭게 사용해도 됩니다. watsonx를 통해 조정할 수 있는 파운데이션 모델은 여기에서 확인할 수 있으며, 다음 명령을 실행하여 찾을 수도 있습니다.
아웃풋:
{'FLAN_T5_XL': 'google/flan-t5-xl', 'GRANITE_13B_INSTRUCT_V2': 'ibm/granite-13b-instruct-v2', 'LLAMA_2_13B_CHAT': 'meta-llama/llama-2-13b-chat'}
아웃풋:
##############################################
Running '20671f17-ff53-470b-9bfe-04318ecb91d9'
##############################################
pending......
running....................................................................................................................................
completed
Training of '20671f17-ff53-470b-9bfe-04318ecb91d9' finished successfully.
신속한 조정이 완료되었는지 확인하기 위해 상태를 확인할 수 있습니다. 인쇄되는 상태가 "completed"가 아닌 경우 조정이 완료될 때까지 기다렸다가 계속하십시오.
아웃풋:
완료
이제 프롬프트 조정 요약을 검색할 수 있습니다. 이 요약에는 손실 값이 표시됩니다. 손실 함수는 각 훈련 실행에 대해 예측 결과와 실제 결과 간의 차이를 측정합니다. 따라서 손실 값이 낮은 것이 좋습니다.
plot_learning_curve() 함수를 사용하여 모델 조정의 학습 곡선을 표시할 수도 있습니다. 0에 가깝게 평준화되는 하향 경사 곡선은 모델이 예상 아웃풋 생성을 개선하고 있음을 나타냅니다. 손실 함수 그래프 해석에 대해 자세히 알아보려면 관련 IBM watsonx 문서를 참조하세요.
아웃풋:
조정된 모델을 배포하는 이 단계는 조정된 모델의 성능을 사전 조정된 모델과 비교하는 다음 단계를 완료하는 데 중요합니다.
참고: SERVING_NAME는 고유한 값이어야 하므로 현재 날짜 및 시간으로 설정됩니다.
아웃풋:
######################################################################################
Synchronous deployment creation for id: '6aa5dd5c-0cc4-44e0-9730-18303e88e14a' started
######################################################################################
initializing.......................
ready
-----------------------------------------------------------------------------------------------
Successfully finished deployment creation, deployment_id='24a97b84-47d0-4490-9f5f-21ed2376fdd6'
-----------------------------------------------------------------------------------------------
이제 조정된 모델과 원래 파운데이션 모델의 성능을 모두 테스트하여 조정 프로세스의 영향을 확인해 보겠습니다. 먼저 테스트 데이터 세트를 로드해 보겠습니다. 이 데이터 세트는 조정 중에 존재하지 않았던 데이터의 하위 집합이어야 합니다. 테스트 세트도 훈련 세트보다 작은 경우가 많습니다. 또한 테스트 데이터 세트의 각 입력에는 사용자 주석의 접두사로 프롬프트가 있습니다.
데이터 세트의 구조를 더 잘 이해할 수 있도록 데이터 세트의 일부를 표시해 보겠습니다.
아웃풋:
테스트 데이터 세트를 로드한 후 입력과 아웃풋을 추출해 보겠습니다.
데이터 세트의 콘텐츠를 추출한 방법을 보다 면밀히 이해하기 위해 샘플 테스트 입력과 아웃풋을 인쇄할 수도 있습니다.
아웃풋:
'Extract the satisfaction from the comment. Return simple 1 for satisfied customer or 0 for unsatisfied.\nComment: Long wait times.\nSatisfaction:\n'
이 예에서는 프롬프트가 도입된 후 긴 대기 시간을 언급하는 고객 후기가 나오고, 마지막으로 만족도가 0으로 표시되어 부정적인 후기를 나타냅니다.
아웃풋:
0
이제 데이터 세트가 있으므로 조정된 모델의 정확도와 F1 점수를 테스트해 보겠습니다. F1 점수는 모델의 정밀도와 재현율의 평균입니다. 이 테스트를 실시하려면 deployment_id가 필요합니다. API의 속도 제한에 도달하지 않도록 concurrency_limit 는 2로 설정됩니다. 이는 병렬로 전송될 요청 수입니다.
아웃풋:
accuracy_score: 0.9827586206896551, f1_score: 0.9827586206896551
모델의 높은 정확도와 F1 점수를 고려하여 조정 없이 동일한 Granite 모델의 성능을 테스트해 보겠습니다.
아웃풋:
base model accuracy_score: 0.9310344827586207, base model f1_score: 0.9298245614035088
조정된 모델은 사전 조정된 파운데이션 모델보다 성능이 뛰어납니다. 조정된 모델은 만족도 점수 추출에 특화되어 있으므로 다른 만족도 추출 작업에 사용할 수 있습니다. 잘하셨습니다!
이 튜토리얼에서는 watsonx API를 사용하여 IBM Granite 모델에서 프롬프트 조정을 수행했습니다. 조정 및 배포된 모델은 약 5% 더 높은 정확도로 파운데이션 모델을 성공적으로 능가했습니다.