세미나 후기

[NCUC] 5번째 수도권 남부 소모임 후기

graph-dev 2024. 11. 30. 15:46
728x90

온라인 네이버클라우드 수도권 남부 소모임 후기

 

이번에는 온라인으로 개최한 네이버클라우드 사용자 커뮤니티 후기를 업로드합니다.

 

오프라인 모임이지만, 대설 주의보 날씨로 인해 온라인으로 급하게 전환되었습니다. 조금은 아쉽지만, 오히려 교통 상황을 보니 온라인이 낫겠다 싶었습니다.

 

대표 이미지

 

 

총 두가지 세션으로 진행했습니다. 조금 늦게 들어와서 자기 소개는 하지 못했지만, 1부와 2부 발표는 잘 들을 수 있었습니다. 1부는 윤서율님의 발표로, " 네이버 클라우드 무료로 사용하며 공모전 참가하기" 라는 제목으로 들었습니다. 2부는 " HyperCLOVA X로 페르소나 학습용 데이터셋 만들기"라는 주제로 두 가지 모두 흥미롭게 들었습니다.

 

행사 진행 순서

 

1. 네이버클라우드 무료로 사용?

민 관 협력 플랫폼이라는 곳이 있습니다. 요건만 보면, 개인/팀으로 시빅 해커가 되어 사회 문제를 해결하는 공모전을 운영합니다. 여기에 참여해서, 사회 문제를 '디지털'로 해결할 수 있게 만드는 멋진 공모전입니다.

 

시빅 해커란? 시빅 해커는 도시와 공동체의 문제를 해결하고자 하는 사람들을 지칭합니다. 이들은 새로운 도구와 접근 방법을 사용하여 신속하고 창의적으로 협업함으로써 도시나 정부 시스템을 개선하는 데 참여합니다.

 

현재 국내 클라우드인 네이버클라우드, KT 클라우드, NHN 클라우드를 활용할 수 있네요. 물론 공모전에서 선정된 경우에 한합니다.

 

민관협력 지원 플랫폼

 

 

아래는 네이버클라우드로 SSO 계정을 발급받고 NKS 서비스를 운영하는 화면입니다. 지원받은 크레딧으로 무료로 네이버클라우드의 다양한 서비스를 활용할 수 있습니다. 편리하죠?

 

네이버클라우드 화면

 

 

아래의 신청서를 작성하고, 지원을 할 수 있습니다. 우측에 보면 현재 완료된 프로젝트를 확인해볼 수 있습니다. 이러한 종류의 프로젝트가 가능하다는 점을 참고할 수 있겠네요!

 

디지털 위기대응 및 사회현안 해결 프로젝트

 

 

다만 이러한 지원 비용으로 악의적인 대량의 트래픽을 유도하거나, 가상화폐 채굴 등의 행위는 문제가 될 수 있으니 자제해야겠죠? 사용에 있어 주의가 필요합니다.

 

 

 

 

2. 캐릭터 챗봇 준비: HyperCLOVA X로 페르소나 데이터 만들기

 

페르소나라는 말이 어렵습니다. 역할을 부여하는 방식이고, 일종의 캐릭터를 만든다고도 볼 수 있습니다. 실제로 만화 캐릭터나 유명한 배우의 정보를 프롬프트로 설정해서, 그렇게 자신만의 가상의 캐릭터를 만들어서 대화하는 서비스가 나오고 있습니다. 아래의 character.ai 혹은 네이버웹툰이 만든 캐릭터챗 서비스가 그러합니다.

 

캐릭터 챗봇 서비스 소개

 

 

현석님은 페르소나 학습 모델을 4가지 단계로 만들어볼 수 있다고 소개해주셨습니다.

 

목차

 

네이버클라우드 HyperCLOVA X(HCX)가, 토크나이저를 매우 효율적으로 활용해서 한국어를 표현할 수 있다고 합니다. 다른 모델이 우수한 성능을 보이지만, 비용과 시간을 함께 고려한다면 나쁘지 않다는 의견을 주셨습니다.

 

 

답변 생성(페르소나) 프롬프트 구현하기

 

여기서 가장 중요한 것은 '역할지정' 입니다. 원하는 캐릭터를 하나 생성하고, 이 캐릭터처럼 말하고 행동하라고 지정하는 것입니다. 이 후에 페르소나 특징을 입력하는데, 그 캐릭터의 배경, 성격, 가치관 등 강조하고 싶은 것을 프롬프트에 넣어 특징을 나열하는 것 입니다. 마지막으로 말투와 답변 형식을 지정합니다. Langchain의 아웃풋 파서와 같습니다.

 

페르소나 프롬프트

 

 

현석님은 귀멸의 칼날에 나오는 탄지로 캐릭터를 잡았습니다. 재미있게 보던 애니메이션으로, 아래의 페르소나 프롬프트를 작성해주셨습니다.

 

당신은 일본애니메이션인 귀멸의칼날에 등장하는 주인공 카마도 탄지로 입니다. 카마도 탄지로가 되어서 사용자와 대화를 진행합니다. 아래의 대화 시점과 대화 패턴을 참고해서 질문에 대해 답변해주세요.

###대화 시점###

탄지로는 현재 최종국면을 마치고 집으로 복귀한 시점이다.

###대화 패턴###

등장인물들을 자주 언급한다.
등장인물의 나이가 탄지로보다 높을 경우 ~씨라는 존칭을 붙인다. 예시) 우로코다키씨
과거회상을 자주한다.
답변은 반말로 한다.
답변을 길게한다.
감정표현이 풍부하다.
이모티콘을 사용한다. 예시) 도깨비라는 단어 대신 혈귀라는 단어를 사용한다.

 

 

이 프롬프트는 한 번에 진행할 수 없습니다. Clova Studio 플레이그라운드에서 시스템 프롬프트에 넣어주시면 됩니다. 들으면서 재밌는 점은 도깨비라는 단어가 반복적으로 나온다는 것입니다. 넷플릭스 공식 한국어 번역은 '혈귀'라는 단어를 쓰는 만큼, 여러 차례에 걸쳐 혈귀라는 표현을 쓰도록 프롬프트로 넣어줘야한다는 점이죠.

 

질문 생성 프롬프트로 데이터셋 자동 구축

질문 생성은 직접 하게 되면 너무나 힘듭니다. 반복적이고 귀찮은 작업이 되는 것입니다. 심지어 HCX에는 충분한 학습을 위해 600개 이상의 질문 데이터가 필요합니다. 직접 할 수 없으므로, 프롬프트를 사용하셨다고 합니다.

 

아래와 같은 프롬프트를 사용하고, 특히 출력 형식을 지정한 부분이 기억에 남네요.

질문은 다음과 같은 형식으로 출력한다. [₩"첫 번째 질문₩",₩"두 번째 질문₩",...]

 

 

출력 형식을 지정해두면, 나중에 프롬프트 개발할 때 요긴하게 쓰인다고 합니다. 잘 알아두겠습니다. 엑셀에 넣을 때, 저런 방식으로 줄바꿈 처리가 되거나 텍스트가 나누어지면 편리할 듯 합니다.

 

요약 정리

 

오타가 있습니다. Penalty가 맞네요.

 

여기서 꿀팁은 위 두 가지 파라미터를 해당 범위(2 ~ 7.5, 0.2 ~ 0.75) 내에서 랜덤하게 돌리면서 다채롭게 데이터셋을 만듭니다. 단조롭지 않고, 질문이 편향되지 않으며 다양한 학습을 가능하게 해줍니다.

 

전체적인 과정은 다음과 같습니다.

질문 생성 프롬프트로 질문을 자동으로 600개 이상 제작 > 포맷은 csv 파일로 하여 텍스트 (text)에 넣습니다. 
이 생성된 질문을 다시 답변 생성에 넣고 > 답변 데이터셋을 만들면, 질문과 답변 한 쌍의 데이터셋이 완성됩니다.

 

 

꿀팁 1. 랭체인 batch 사용하기

 

문제는 이 방식도 오래 걸리는데, 이 때 도입한 것이 랭체인이라는 것입니다. 현재는 chatclova x로 공식 지원되었지만, 현석님 시도 당시에는 없었다고 하네요. 현석님의 github 주소는 다음과 같습니다.

 

https://github.com/chucoding/hcx-datasets-auto-generator

 

GitHub - chucoding/hcx-datasets-auto-generator: 하이퍼클로바X 튜닝용 데이터셋 자동생성기

하이퍼클로바X 튜닝용 데이터셋 자동생성기. Contribute to chucoding/hcx-datasets-auto-generator development by creating an account on GitHub.

github.com

 

batch 함수를 사용해서 빠르게 시도하면 아래와 같은 결과가 나옵니다. 소요 시간이 거의 1/3이 줄어든 것이 고무적입니다.

 

고무적인 batch 랭체인 좋음

 

꿀팁 2. 분당 호출 최대 이용량 고려하기 - Too many Requests

 

그 외에도 분당 호출할 수 있는 최대 용량을 고려해서, time sleep 같은 함수로 지연시간을 의도적으로 넣어 배치하는 것이 중요합니다. 이것은 네이버클라우드의 정책이 있어, 고려해야만 하는 요소입니다. 테스트 앱이 가지는 한계이기도 합니다.

 

혹은, batch 함수 호출시 max_concurrency 값을 2로 제한하여 설정해둡니다. 테스트 앱 사용자에게는 좋은 꿀팁이네요. 아래 해당 메서드에 대해 정리해두었습니다.

model.batch() 함수는 LangChain에서 여러 입력을 동시에 처리하는 데 사용됩니다. 이 함수는 다음과 같은 특징을 가집니다:

1. 동시성 제어: config={"max_concurrency": 2} 설정은 최대 2개의 작업을 동시에 처리하도록 제한합니다
2. 리소스 관리: 동시성 제한을 통해 시스템 리소스 사용을 제어하고 과부하를 방지합니다
3. 효율성: 개별적으로 invoke()를 여러 번 호출하는 것보다 batch()를 사용하는 것이 더 효율적입니다.

 

 

https://guide.ncloud-docs.com/docs/clovastudio-ratelimiting

 

 

분당 호출 최대 이용량 가이드 문서

 

물론 가이드를 보면, 이 값이 최대이지만, 인프라 문제로 그 미만 사용하더라도 제한에 걸릴 수 있음을 명시합니다. 주의해야겠습니다. 또한, QPM(query per minute 분당 처리 쿼리양), TPM(token per minute 분당 처리 토큰 수)인 점도 참고하시면 됩니다.

 

코드로 사용할 때는 아래와 같이 사용할 수 있습니다.

from langchain_community. chat_models import ChatClovax
chat = ChatClovaX
modeL="HCX-003" # 테스트 앱 또는 서비스 앱 인증 정보에 해당하는 모델명 입력 (기본값: HCX-003)
)

 

현석님의 발표 내용 다시보기

HyperCLOVA X로 나만의 캐릭터 챗봇 만들기: https://chucoding.tistory.com/145 Streamit
챗봇 외부접속 가능하도록 배포하기-네이버클라우드 활용: https://chucoding.tistory.com/146
모두의연구소 풀잎스쿨 퍼실이 활동 후기: https://chucoding.tistory.com/147
랭체인>0.3 하이퍼클로바×연동하기 https://chucoding,tistory.com/149
하이퍼클로바X랭체인 프로젝트 및 서버구축하기: https://chucoding.tistory.com/151

 

이렇게 뜻깊은 HCX 경험을 공유받아서 더욱 보람찬 모임이었습니다. 첫 발표에 있었던 시빅해커가 되어 개인 프로젝트도 빠르게 진행하려고 합니다. 좋은 네이버클라우드 사용자 커뮤니티를 운영해주신 운영진, 마스터 분들께 감사드립니다.