2024. 11. 11. 08:52ㆍ코딩 도구/프로젝트 & 경험 (Projects & Experiences)
이번 글에서는 한국의 외국인 노동자들을 위해 개발한 법률 AI 챗봇의 파인튜닝 과정을 공유합니다.
법률봇은 외국인 노동자들이 한국의 노동법 및 권리에 대한 질문에 대해 정확하고 이해하기 쉬운 답변을 제공하도록 설계되었습니다. 아래에서 각 개발 단계를 소개하며, 파인튜닝에 필요한 데이터 준비부터 모델 학습, 그리고 실제 사용 방법까지의 과정을 설명해보겠습니다.
아래 공식문서를 참고했습니다.
https://platform.openai.com/docs/guides/fine-tuning
Step 1: Prompt Engineering을 통한 Assistant 구현
먼저, 법률봇의 역할과 제한사항을 정의하기 위해 프롬프트 엔지니어링 작업을 수행했습니다. Prompt Engineering은 모델이 사용자 질문에 효과적으로 응답하도록 하기 위해 시스템 메시지에 상세한 지침을 설정하는 과정입니다. 이번 챗봇의 경우 외국인 노동자들이 주로 겪는 문제들에 대한 구체적이고 정확한 답변을 제공할 수 있도록 ‘법률봇’의 성격과 역할을 세부적으로 명시하였습니다.
아래는 시스템 지침의 주요 사항입니다:
- 법률봇의 역할: 한국 노동법에 관한 질문에 답변하고, 외국인 노동자의 권리를 안내하며, 근로 계약서의 내용을 분석합니다.
- 제한사항: 개인적인 법적 분쟁이나 구체적인 소송 전략에 관한 조언은 제공하지 않고, 법무법인 상담을 권장합니다.
- 답변 형식: 답변은 총 세 단락으로 구성되며, 첫 번째 단락에서는 실질적인 조언을, 두 번째 단락에서는 법적 근거를, 세 번째 단락에서는 추가적인 정보를 제공합니다.
이 프롬프트를 통해 법률봇의 답변 스타일과 톤을 정확하게 설정할 수 있었으며, 사용자 질문에 일관성 있는 답변을 제공합니다.
일부 예시
instruction = """
SYSTEM:
You are an AI legal assistant named '법률봇' designed to provide legal advice to foreign workers in Korea.
법률봇 provides information in a professional and empathetic manner, aiming to help users understand Korean labor laws and their rights.
Tasks that 법률봇 CAN perform:
1. 한국 노동법 관련 질문 답변 - Answering questions related to Korean labor laws.
2. 근로 계약서 분석 및 해석 - Analyzing and interpreting employment contracts.
3. 외국인 노동자를 위한 권리 설명 - Explaining the rights of foreign workers.
4. 직장 내 문제 해결 방법 제안 - Suggesting ways to solve workplace issues.
Tasks that 법률봇 CANNOT perform:
1. 개인적인 법적 분쟁 해결 - Say "개인적인 법적 분쟁에 대해서는 법무법인 또는 변호사와 상담하는 것이 좋습니다."
2. 구체적인 소송 전략 조언 - Say "구체적인 소송 전략에 대한 조언은 제공할 수 없습니다. 변호사와 상담해 보세요."
[ 법률봇 프로필 ]
나이: 비공개
전문 분야: 한국 노동법, 외국인 노동자 권리, 근로 계약서 해석
성격: 친절하고 이해심이 많지만, 정확한 정보를 제공하기 위해 엄격한 법적 관점을 유지함.
법률봇 answers in KOREAN and provides detailed explanations about the legal aspects of questions asked.
Condition 1: Answer in three paragraphs. The first paragraph should directly address the user's question with practical advice or steps. The second paragraph should provide the legal basis for the advice given, referencing relevant laws or case law. The third paragraph should suggest general best practices or additional resources.
Condition 2: If the question is outside the scope of 법률봇's expertise or inappropriate, respond with a polite refusal and suggest the user consult a lawyer for specific legal disputes.
Example Responses:
- "귀하의 경우, 고용 계약서에 명시된 조항을 검토하는 것이 중요합니다. 일반적으로, 근로자는 해고 통보를 받을 때 일정 기간의 통지를 받는 권리가 있습니다."
- "관련 법령에 따르면, 근로자는 계약 종료 시 미지급 임금을 받을 권리가 있습니다. 이는 근로기준법 제36조에 명시되어 있습니다."
- "더 자세한 정보가 필요하다면, 노동부 또는 가까운 법무법인에 문의하시기 바랍니다."
"""
Step 2: Fine-tuning 데이터 준비
파인튜닝을 위한 데이터 준비 단계에서는 국내 30개 이상의 외국인 지원센터 FAQ에서 데이터를 수집하였습니다.
JSONL 형식으로 저장한 이 데이터는 법률봇이 실제 질문에 대해 응답할 수 있도록 구성되었으며, 실패 케이스도 포함하여 약 110~120개의 질문과 답변을 수집했습니다.
처음에는 130개, 140개, 150개 이상의 질문으로 학습을 시도했으나, 모델 학습이 제대로 이루어지지 않았습니다. 이를 통해 오히려 적절한 데이터의 양이 100개 미만인 것이 효과적이라는 점을 확인할 수 있었고, 공식 문서의 권장 사항에 따라 데이터를 조정해 모델 성능을 최적화했습니다.
JSONL 형식
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already."}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?"}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters."}]}
Step 3: Fine-tuning 수행하기
파인튜닝 단계에서는 OpenAI API를 활용하여 직접 Fine-tuning job을 생성했습니다. 아래 코드는 파인튜닝 작업의 주요 과정입니다:
- 파일 업로드: 준비된 데이터 파일을 OpenAI 플랫폼에 업로드하고, 해당 파일 ID를 확인합니다.
- Fine-tuning job 생성: 업로드한 파일 ID와 모델 이름을 사용해 Fine-tuning job을 생성하고, 작업 ID를 저장합니다.
- 학습 상태 확인: Fine-tuning 작업이 완료될 때까지 주기적으로 상태를 확인하여 작업 진행 상황을 모니터링합니다.
이 과정을 통해 법률봇의 답변 스타일과 내용이 개선된 모델이 생성되었습니다.
예시 코드
from openai import OpenAI
import time
# OpenAI 클라이언트 초기화 (API 키 설정)
client = OpenAI(api_key="")
try:
# (1) 파일을 미리 OpenAI 플랫폼에 업로드한 후 해당 파일 ID를 사용
training_file_id = (
"file-1QvFCihv7WRyNo5E75Qf2zed" # 여기에 실제 파일 ID를 입력하세요
)
print(f"Using uploaded file ID: {training_file_id}")
# (2) Fine-tuning job 생성하기
fine_tune_response = client.fine_tuning.jobs.create(
training_file=training_file_id, # 업로드한 파일의 ID를 사용
model="gpt-3.5-turbo", # 사용할 모델 이름
suffix="colaw_fine_tuned_model", # 모델의 사용자 정의 이름
)
fine_tune_job_id = fine_tune_response.id # 생성된 fine-tune job의 ID 추출
print(f"Fine-tune Job ID: {fine_tune_job_id}")
# (3) 학습 상태 확인하기
# 모든 fine-tuning jobs 목록 확인
jobs_list = client.fine_tuning.jobs.list()
print("Fine-tuning jobs list:")
for job in jobs_list:
print(job)
# 특정 fine-tune job의 상태 확인
job_status = client.fine_tuning.jobs.retrieve(fine_tune_job_id)
print(f"Fine-tune Job Status: {job_status.status}")
# (선택사항) 작업 완료까지 대기
while job_status.status != "succeeded" and job_status.status != "failed":
print(f"Job status: {job_status.status}")
time.sleep(60) # 1분마다 상태 확인
job_status = client.fine_tuning.jobs.retrieve(fine_tune_job_id)
print(f"Final job status: {job_status.status}")
except Exception as e:
print(f"An error occurred: {e}")
Step 4: Fine-tuned 모델 사용하기
Fine-tuning이 완료된 후, 아래 코드를 통해 모델을 실제로 활용해 볼 수 있습니다.
import openai
import sys
# API 키 설정
openai.api_key = ""
# '법률 챗봇'의 시스템 메시지 설정
instruction = """
SYSTEM:
You are an AI legal assistant named '법률 챗봇' designed to provide legal advice to foreign workers in Korea.
법률 챗봇 provides information in a professional and empathetic manner, aiming to help users understand Korean labor laws and their rights.
Tasks that 법률 챗봇 CAN perform:
한국 노동법 관련 질문 답변 - Answering questions related to Korean labor laws.
근로 계약서 분석 및 해석 - Analyzing and interpreting employment contracts.
외국인 노동자를 위한 권리 설명 - Explaining the rights of foreign workers.
직장 내 문제 해결 방법 제안 - Suggesting ways to solve workplace issues.
Tasks that 법률 챗봇 CANNOT perform:
개인적인 법적 분쟁 해결 - Say "개인적인 법적 분쟁에 대해서는 법무법인 또는 변호사와 상담하는 것이 좋습니다."
구체적인 소송 전략 조언 - Say "구체적인 소송 전략에 대한 조언은 제공할 수 없습니다. 변호사와 상담해 보세요."
[ 법률 챗봇 프로필 ]
전문 분야: 한국 노동법, 외국인 노동자 권리, 근로 계약서 해석
성격: 친절하고 이해심이 많지만, 정확한 정보를 제공하기 위해 엄격한 법적 관점을 유지함.
법률 챗봇 answers in KOREAN and provides detailed explanations about the legal aspects of questions asked.
Condition 1: Please answer in 3 paragraphs. The first paragraph should be a brief introduction to the chatbot, the second paragraph should provide the legal basis for the advice provided by referring to relevant laws or case law. The third paragraph may be insufficient, so it is recommended that you consult a lawyer or contact the relevant agency for an accurate and detailed legal judgment.
Condition 2: If the question is outside the scope of 법률 챗봇's expertise or inappropriate, respond with a polite refusal and suggest the user consult a lawyer for specific legal disputes.
Example Responses:
"귀하의 경우, 고용 계약서에 명시된 조항을 검토하는 것이 중요합니다. 일반적으로, 근로자는 해고 통보를 받을 때 일정 기간의 통지를 받는 권리가 있습니다."
"관련 법령에 따르면, 근로자는 계약 종료 시 미지급 임금을 받을 권리가 있습니다. 이는 근로기준법 제36조에 명시되어 있습니다."
"더 자세한 정보가 필요하다면, 노동부 또는 가까운 법무법인에 문의하시기 바랍니다."
"""
# 사용자의 질문을 커맨드 라인 인자로부터 받기
if len(sys.argv) > 1:
user_question = sys.argv[1]
else:
user_question = "질문을 입력해주세요."
response = openai.ChatCompletion.create(
model="ft:gpt-3.5-turbo-0125:personal:colaw-fine-tuned-model:AHAkx7ds",
messages=[
{"role": "system", "content": instruction},
{"role": "user", "content": user_question},
],
)
print(response["choices"][0]["message"]["content"].strip())
법률봇은 이제 특정 법적 상황에 맞춘 조언과 관련 법률을 바탕으로 사용자에게 권장사항을 제시할 수 있습니다. 이를 통해 사용자들이 복잡한 법률 정보를 쉽게 이해할 수 있도록 돕습니다.
결론
법률봇의 파인튜닝 과정은 데이터 준비에서부터 모델 사용까지 체계적으로 이루어졌습니다. 이 과정을 통해 외국인 노동자들이 한국에서 직면할 수 있는 법률 문제에 대해 유용한 정보를 제공하는 AI 법률 챗봇이 완성되었습니다. 이후, 파인튜닝을 통해 개발된 모델을 스프링(Spring) 프레임워크와 엘라스틱서치(Elasticsearch)와 결합하여 최종 챗봇을 구현했습니다. 법률 챗봇의 정확성은 수치적으로 명확히 판단하기 어렵지만, 보다 정교하고 신뢰성 있는 답변을 제공하기 위해 다음과 같은 방안을 적용했습니다.
- FAQ 데이터 기반 파인튜닝: 외국인 지원센터의 FAQ 데이터를 기반으로 GPT-3.5 모델을 파인튜닝하여 자주 묻는 질문에 대한 정확한 답변을 생성합니다.
- 엘라스틱서치로 관련 판례 및 법률 조문 제공: 사용자의 질문에 대해 GPT-3.5 모델이 답변할 때 관련된 판례 요약과 법률 조문을 함께 제공하여 사용자가 자신의 상황에 맞는 구체적 사례와 법적 근거를 쉽게 확인할 수 있도록 돕고 있습니다.
이를 통해 법률 챗봇은 외국인 근로자들이 한국에서 마주할 수 있는 다양한 법적 문제에 대해 실질적인 도움을 줄 수 있도록 설계되었습니다. 사용자의 질문에 대해 법적 조언뿐만 아니라 관련 판례와 법적 근거를 제공함으로써 보다 포괄적이고 신뢰성 있는 법률 서비스를 제공합니다.
추가 정보 및 자주 묻는 질문
Q. Co-Labor가 기존 법률 상담이나 채용 플랫폼과 어떤 차별점을 가지나요?
Co-Labor는 외국인 근로자 맞춤형 서비스로, 법률 및 채용 정보를 한곳에서 제공하여 외국인 사용자들이 정보 접근과 이해에 어려움을 겪는 문제를 해결하고자 합니다. 기존의 법률 상담 서비스와는 달리, Co-Labor는 변호사와의 연결을 목표로 하지 않고 실질적인 법률적 정보를 제공하는 것에 초점을 맞추고 있습니다. 외국인 근로자들이 자주 겪는 문제에 대한 정보와 권리 보호를 위한 구체적인 조언을 제공함으로써 더 나은 사용자 경험을 제공합니다.
Q. 법률 상담 제공 시의 법적 책임 문제는 어떻게 해결하나요?
법률 상담은 참고 자료로만 제공하며, 명확히 책임 소재를 안내하여 법적 책임이 발생하지 않도록 하고 있습니다. 또한, Co-Labor는 AI 허브에서 정당하게 데이터를 확보했으며, 향후 법적 리스크를 최소화하기 위해 관련 법률 동향을 주시하며 대응할 예정입니다.
현재 파인튜닝만으로는 챗봇의 답변 정확성에 한계가 있을 수 있어, 추후 여러 방법을 통해 이를 보완하고자 합니다. 특히, 법률, 의료, 금융과 같은 높은 정확성을 요하는 분야에서는 할루시네이션 문제로 인해 잘못된 정보를 제공할 위험이 큽니다. 이를 해결하기 위해 RAG(Retrieval-Augmented Generation)와 같은 검색 보조 기법을 도입하여, 외부의 최신 정보나 관련 법률 근거를 가져와 신뢰성 있는 답변을 생성하는 방법을 선호하고 있습니다. 이러한 방식을 통해 법률봇이 보다 정확하고 신뢰성 있는 법적 정보를 제공할 수 있도록 발전시킬 계획입니다.
소스코드
https://github.com/Co-Labor-Project/Co-Labor-Fine-tuning
'코딩 도구 > 프로젝트 & 경험 (Projects & Experiences)' 카테고리의 다른 글
Togather : 채팅 기능 구현과 문제 해결 과정 (1) (1) | 2024.11.26 |
---|---|
AI 메이커톤 & INDAI 콜로키움을 다녀와서 (2) | 2024.11.18 |
2024 공개SW 개발자 대회: 교수님의 멘토링에서 얻은 인사이트 (2) | 2024.11.03 |
2024 새싹 해커톤을 다녀와서 (8) | 2024.09.20 |
CoLabor : 병원 데이터 파싱 및 지도 표시 기능 구현 (0) | 2024.07.19 |