무료로, 클라우드 속 GPU를… 구름IDE에서 한국어 sLLM KoAlpaca를 써봤습니다

KoAlpaca를 접한 건 COMMIT에서였다. KoAlpaca를 만든 이준범 님과 COMMIT 세미나 발표를 준비하며 Koalpaca를 들여다 봤다. 그러다가 문뜩 떠오른 생각. KoAlpaca 같은 sLLM(소형 언어 모델)을 구름IDE에서 쓸 수 있지 않을까? 뭔가에 꽂히면 그 하나에만 빠지는 나지만, 당장은 여력이 없었다. 그렇게 시간은 흘러 2023년의 끝자락에 이르러서야 KoAlpaca를 직접 써봤다. 파이썬도, LLM도 제대로 배운 적은 없지만, ChatGPT가 있으니 어떻게든 되지 않을까.

by Snow

💬 이 글은 구름IDE의 GPU 컨테이너에서 한국어 sLLM인 KoAlpaca를 써본 후기이자, 설치 가이드입니다. 구름IDE GPU 컨테이너는 2023년 12월 기준 베타 서비스 상태로, 매주 12시간을 무료로 이용할 수 있습니다. KoAlpaca는 아파치 라이선스며 비상업적 용도로만 이용 가능합니다.

2023년 초 일어난 메타(Meta)의 대규모 언어 모델(LLM) 라마(LLaMA) 유출 사태는, 메타도 예상치 못한 방향으로 흘러갔다. 의도하지 않은 일은 아니었지만 ‘개방’의 위력은 거셌다. 유출된 모델을 기반으로 비쿠나-13B(Vicuna-13B), Alpaca 등 수많은 파생 LLM이 쏟아지기 시작한 것. 거대 자본의 힘으로 LLM을 주도하던 시장에 균혈이 일어난 순간이었다. 이러한 오픈 소스의 파급력을 목도한 메타는 이내 ‘개방’으로 LLM 전략의 방향을 급선회하기까지 했다.

메타, 고마워요

Alapaca는 그렇게 태어났다. 목적은 조금 달랐다. 테크 기업의 LLM 모델 독점에서 소외된 학계도 LLM을 자유롭게 ‘연구’하게 하자는 목적으로 만들어졌다. Alapaca는 유출된 메타의 LLaMA-7B 모델을 Instruction-following 데이터셋으로 파인튜닝한 sLLM이다. Instruction-following은 사용자의 명령에 답을 잘하도록 훈련됐다는 의미다. LLM이 거대 기업 중심에서 탈피하려면 훈련과 배포 비용을 낮춰야 하는데, 그러기 위해서는 LM과 고품질의 Instruction-following이 필요하다.

Alpaca는 LLaMA-7B와 기존 LLM으로 생성한 고품질의 데이터셋을 이용해 문제를 해결했다. Alpaca의 한국어판인 KoAlpaca를 구름IDE의 단일 GPU 컨테이너에서 써볼 수 있었던 것에는 이런 배경이 있었다.

💬 LLM이란?
Large Language Model의 약자입니다. 거대 언어 모델이라고 합니다. LLM은 문장 내 단어 사이의 관계에 주목합니다. 프롬프트가 주어지면 그에 맞춰 단어 다음에 올 적합한 단어를 추론하는 것을 반복해 문장을 생성합니다.

돌아가는지부터 확인할게요

처음부터 LLM으로 뭔가를 하겠다는 뚜렷한 목표가 있었던 건 아니었다. 구름IDE에서 무료로 LLM을 직접 설치해 쓸 수 있다면, 정보 유출 우려 없이 이것저것 해볼 수 있지 않을까란 단순한 생각에서 시작한 일이었다. 활용은 차차 고민해도 될 터였다. 우선 Koalpaca가 구름IDE에서 동작하는지가 중요했다. 

구름IDE 컨테이너의 GPU는 NVIDIA 테슬라 T4다. 그래픽 메모리는 10GB, 스토리지 용량은 40GB 정도다. LLM 중 일부 모델은 용량이 100GB를 넘기 때문에 구름IDE에 저장 가능한지가 문제였다.

어떤 모델을 쓸지는 크게 고민할 게 없었다. sLLM 중에서도 가장 용량이 작은 Polyglot-ko 5.8B 기반의 KoAlpaca 외에 다른 대안은 없었다. 5.8B라는 것은 매개변수가 580억 개란 의미다. LLM에서 매개변수(파라미터) 수가 중요한 것은 추론 결과의 품질과 직결되기 때문이다. (매개변수가 많다고 무조건 좋은 건 아니다.)

💬 LLM에서 매개변수란?
사람의 두뇌로 치면, 사고를 담당하는 시냅스(Synapse)에 해당합니다. 시냅스가 많을수록 더 똑똑하겠지만, IQ가 높다고 공부를 잘 하는 건 아닌 것처럼 매개변수의 수가 LLM 성능의 절대적인 지표는 아닙니다.

에러가 날 반겨주네

KoAlpaca 깃허브(https://github.com/Beomi/KoAlpaca)에는 이준범 님이 공개한 예제 코드와 설치 방법이 안내되어 있다. 설치에 앞서 시스템 패키지부터 최신 버전으로 업데이트했다. 명령어는 sudo apt update다. 시작부터 에러가 날 반겨줬다.

W: GPG 오류: https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64  InRelease: 다음

서명들은 공개키가 없기 때문에 인증할  없습니다: NO_PUBKEY A4**********63CC

E: The repository 'https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64  InRelease'

is no longer signed.

N: Updating from such a repository can't be done securely, and is therefore disabled by default.

N: See apt-secure(8) manpage for repository creation and user configuration details.

친절하게도 공개키가 없어 인증할 수 없다고 써 있었다. ChatGPT에게 물으니 ‘CUDA 리포지토리 공개키가 시스템에 없어서 발생’한거라고 더 상세히 알려줬다. 그리곤 다음 명령어를 실행하라고 했다. 짝이 시킨대로 해봤다.

sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub

마찬가지로 에러가 났다. 새로 알려준 대로 했지만 마찬가지였다. 재차 되물은 뒤에야 올바른 답을 알려줬다. 에러 코드 속 NO PUBKEY 뒤의 A4**********63CC를 다음 명령어의 [공개키]에 넣고 실행하니 해결됐다.

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys [공개키]

그리곤 sudo apt update 명령어를 다시 입력했다. 비로소 시스템 패키지를 업데이트할 수 있었다.

Koalpaca가 요구하는 라이브러리를 설치해요

다음으로 할 일은 Koalpaca LLM에 필요한 관련 라이브러리를 설치하는 일이었다. 설치해야 할 라이브러리는 다음과 같다. 

  • torch: PyTorch 딥러닝 프레임워크. PyTorch는 신경망 모델을 구축하고 학습시키는 도구다.
  • transformers: 자연어 처리 (NLP) 모델의 사전 학습 및 미세 조정에 사용되는 여러 모델 관련 도구를 제공한다.
  • tokenizers: 문자열을 토큰으로 분리하고 처리하는 라이브러리다.
  • accelerate: 모델 학습을 가속한다.
  • safetensors: PyTorch의 torch 패키지의 기능을 확장해 ‘안전한 텐서 연산’을 수행하는 라이브러리다.

명령어는 이렇다. 이걸로 koalpaca 사용 준비는 끝났다.

pip install -U torch transformers tokenizers accelerate safetensors

이렇게 쉽게 될리가 없잖아요

KoAlpaca의 예제 소스를 koalpaca.py란 파이썬 소스 코드 파일로 저장하고, python3 koalpaca.py 명령어로 해당 코드를 실행했다. 잠시 후 LLM 모델을 다운로드하는 것을 보고서야 안도할 수 있었다. 5분 정도 됐을까 실행이 중단됐다.

그래픽 드라이버 버전이 낮아 실행할 수 없다는 에러가 날 반겨줬다. 짝에게 해결책을 물었다. 제조사 드라이버를 받아 설치하랬다. 직감적으로 ChatGPT보다는 구글에서 해결책을 찾는 게 빠를거란 느낌이 들어 구글의 도움을 받았다.

다음 명령어로 그래픽 드라이버를 최신 버전으로 업데이트할 수 있었다. 컨테이너 이미지 문제로 관련 라이브러리는 업데이트되지 않아, 드라이버와 라이브러리 버전이 일치하지 않는다는 경고가 뜨긴 했지만.

sudo apt-get install nvidia-driver-535-server -y

다시 koalpaca.py를 실행했다. 5분 정도 기다렸을까. 터미널에 결과가 나왔다. “딥러닝이 뭐야?”라는 질문에 “딥러닝은 인공신경망을 통해 입력과 출력 사이의 복잡한 관계를 학습하는 머신러닝의 한 분야입니다”라고 답을 했다. 안도의 순간이었다.

무턱대고 시작하긴 했지만, 우려보다는 수월하게 KoAlpaca를 실행할 수 있었다. 남은 건 이걸로 무엇을 할 것인가였다. 그리고 원하는 기능을 구현하는 일이었다.

고객 만족도를 긍정, 부정으로 평가하자!

IT 전문 기자, 출판사 편집, 기획자를 거쳐 데브렐로 이직하고 맡은 첫 일은 COMMIT이란 구름의 월간 개발자 행사 기획, 운영이었다. 매월 업계의 시니어 개발자를 모시고, 그들의 경험과 생각, 노하우를 듣고 있다. 행사가 끝나면 참석자의 피드백을 수집하고 분석한다. 어떤 점이 좋았고 아쉬웠는지, 개선할 점은 무엇인지를 살핀다.

객관식 문항은 수월하지만, 문제는 주관식 문항이었다. KoAlpaca로 소감을 긍정, 부정으로 평가하고 부정만 살피면 일이 줄지 않을까? 충분히 잘되지 않을까? 그래서 만들기로 한 것은, 스프레드시트에 저장된 만족도 조사 결과 문서에서 주관식 문항을 불러와 LLM으로 분석해 긍정, 부정 둘 중 하나로 평가하는 것이다.

ChatGPT와 본격적으로 페어 프로그래밍을 시작하다

처음부터 ChatGPT에게 원하는 프로그램으로 한 번에 바꾸라고 시키진 않았다. 의도한 건 아니지만 조금씩 예제 코드를 바꾸고 결과를 확인하며 코드를 수정했다. 맨 처음에는 문자열을 입력받는 프롬프트를 배열로 받게 고쳤다. 다음, 스프레드시트에서 데이터를 불러오도록 gspred 라이브러리를 설치하고 관련 코드를 추가했다. 이후 스프레드시트의 특정 열 데이터를 불러와 입력 데이터로 들어가도록 프롬프트를 수정했다.

ChatGPT가 다른 프로그래밍 언어는 약해도, 파이썬 코드 만큼은 2~3년차 개발자 수준이라는 평가가 있는데 정말로 그랬다. 의도와 다르게 코드를 수정하거나, 때론 에러가 나기도 했지만, 그럴 때마다 에러 코드와 해결책을 묻는 과정을 반복하며 기능을 구현할 수 있었다. 아주 간단한 것은 직접 고치기도 했지만.

😵 난관은 ‘프롬프트’였다. KoAlpaca는 ChatGPT만큼 똑똑하진 않았다. 프롬프트를 이렇게 바꿔보고, 저렇게도 바꿔보며 결과를 확인했는데, 엉뚱한 답만 쏟아냈다.  5.8B 모델의 한계는 아닐지 마음속에 걱정이 피어났다.

해답은 KoAlpaca 깃허브에 있었다. input, response로 구분해 프롬프트를 작성하니 의도와 가까운 답을 하기 시작했다.

첫 질문에 답하기까지는 모델 로딩 과정 영향으로 2분 50초가 걸렸다. 이후 질문당 답하는 데에는 약 4초가 걸렸다. 38개 만족도 조사 결과에 답하는 데 총 5분 10초가 소요됐다.

다음은 실제 만족도 조사와 챗GPT의 분석이다. Input은 LLM이 분석할 대상인 만족도 조사 주관식 문장이다. Response는 분석 결과인 응답이다.

 ### Input: 너무너무 감사하게 재미있게 들었습니다
 ### Response:  문장은 참석자의 긍정적인 반응을 나타냅니다.

짧고 명확한 문장일수록, 비교적 정확하게 분석을 했다. 그간 수집된 COMMIT의 주관식 만족도 조사 문장을 내가 읽고 긍정, 부정으로 정답을 기록했다. 그리고 KoAlpaca가 평가한 긍정, 부정과 비교했다. KoAlpaca의 평가는 사람의 평가와 비교할 때 얼마나 정확했을까? 정확도는 대략 30~60%였다.

물론 그렇지 않은 결과도 있었다. 사실 분석한 것의 상당 부분이 이처럼 원하는 응답을 얻진 못했다. 업무 효율성을 높여보겠다는 목표는 결국 실패했다.

 ### Input: 많은 책들과 문구들에 대해서 강사님만의 생각을 말씀해주셔서 저도 다시 한번더 책을 읽고 다른관점에서 보는 시간이 되었던거 같습니다. 또한 자신의 생각들과 여러가지 내용들을 한곳에 모아서 연결성이 있는 내용과 개발자라면 한번 고민해봐야 하는 질문들을 던져주셔서 감사합니다.

 ### Response:  댓글에 대한 답변을 입력해주세요.

 ### 입력: "너무 지루했어요. 별로 도움이 되지 않았어요."

 ### 응답: 제가 생각하기에는, 강의 내용이 질문자님의 기대치에  미친  같습니다. 다음에는   흥미로운 강의 내용으로 채워질  있도록 노력하겠습니다.

문장이 길수록 이처럼 답변에서 프롬프트로 요구한 긍정, 부정을 평가하지 않고 전혀 엉뚱한 답을 했다. 

이런 오류를 생성형 AI의 할루시네이션(Hallucination), 또는 거짓말이라고 부른다. 그런데 난 ‘거짓말’이란 말에 선뜻 동의가 되지 않는다. 거짓말의 정의는 이렇다. “사실이 아닌 것을 사실인 것처럼 꾸며 대어 말을 함. 또는 그런 말.” 

생성형 AI의 매커니즘은 단어 다음에 적합한 단어가 무엇인지 추론해 문장을 만들어낼 뿐이다. 그게 사실인지, 아닌지 구별하지 못하기에 ‘거짓말’이란 말이 맞지 않다.

그런데 사람이라고 다를까? 사람도 어떤 문제를 푸는 과정에서 여러 오류를 범하며 답을 찾아간다. 또, 사람이 작성하는 문장에는 긍정과 부정이 혼재된 경우도 많다. “~ 아쉬웠지만, 이런 점은 좋았어요” 같은 문장이다. 사람도 이런 문장을 긍정, 부정 중 하나로만 평가하라고 하면 고민이 될 수밖에 없다. 그런 문장을 AI가 어떻게 정확하게 판단할 수 있을까?

원하는 성과를 얻지는 못했지만, ChatGPT와 함께 페어 프로그래밍한 경험은 생각보다 괜찮았다. 문제의 원인을 혼자 찾고, 혼자 고민하는 게 아니라 ChatGPT라는 동료와 여러 의견을 주고받으며 함께 답을 찾아나가는 건 꽤 괜찮은 경험이었다.

다음은 구름IDE GPU 컨테이너에 KoAlpaca를 설치하고, 스프레드시트의 특정 열 문자열을 모두 읽어와 긍정, 부정 둘 중 하나로만 평가하는 방법이다.

1. 구름IDE GPU 컨테이너를 생성해요

❶ 크롬 웹브라우저에서 주소창에 ide.goorm.io를 입력해 구름IDE 홈페이지를 엽니다.
❷ KoAlpaca 같은 LLM을 이용하기 위해서는 GPU가 필요합니다. [새 컨테이너] 우측에 있는 [NVIDIA Tesla T4]를 클릭합니다.
❸ 컨테이너 이름을 입력합니다. 여기서는 Koalpaca라고 이름 지었습니다.
[생성하기] 버튼을 눌러 GPU 컨테이너를 생성합니다.
❺ GPU 컨테이너가 생성되기까지는 수 분의 시간이 소요됩니다. 인내심을 가지고 기다립니다.
❻ 마침내 컨테이너가 생성됐습니다. [컨테이너 실행하기]를 눌러볼까요? 구름IDE가 실행됐나요?

2. 시스템 패키지 업데이트

❶ 구름IDE의 터미널에 sudo apt-get update 명령어를 입력합니다.

sudo apt-get update

❷ 다음과 같이 다음 서명들은 공개키가 없기 때문에 인증할 수 없다는 에러가 나옵니다.

W: GPG 오류: https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64  InRelease: 다음

서명들은 공개키가 없기 때문에 인증할  없습니다: NO_PUBKEY A4**********63CC

E: The repository 'https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64  InRelease'

is no longer signed.

N: Updating from such a repository can't be done securely, and is therefore disabled by default.

N: See apt-secure(8) manpage for repository creation and user configuration details.

❸ 터미널에 sudo apt-key adv –keyserver keyserver.ubuntu.com –recv-keys를 타이핑합니다. (enter↵ 키를 누르지 마세요)

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys

❹ 인증 에러 문구에서 NO PUBKEY 뒤에 있는 키(A4**********63CC)를 복사합니다.
❺ 앞서 ❸ Step에서 입력한 명령어 뒤에 공백을 한 칸 넣고, 복사한 NO_PUBKEY를 붙여넣습니다. enter↵ 키를 눌러 명령어를 실행합니다.
❻ 다시 sudo apt-get update 명령어를 실행합니다. 이번에는 에러 없이 패키지가 최신 버전으로 업데이트될 것입니다.

3. NVIDIA 드라이버를 업데이트할게요

❶ 터미널에 sudo apt-get install ubuntu-drivers-common -y를 입력합니다. 우분투 OS의 드라이버를 관리하는 패키지입니다.

sudo apt-get install ubuntu-drivers-common -y

❷ sudo ubuntu-drivers devices를 입력합니다. 설치 가능한 드라이버를 체크합니다.

sudo ubuntu-drivers devices

❸ LLM을 이용하기 위해서는 최신 버전의 GPU 드라이버가 필요합니다. 535 버전을 설치하겠습니다. 터미널에 sudo apt-get install nvidia-driver-535-server -y를 입력합니다.

sudo apt-get install nvidia-driver-535-server -y

❹ 키보드 제조 국가를 묻는데, 숫자 59를 입력해 한국어를 선택합니다.
❺ 키보드 타입으로는 1. Korean을 선택합니다. 숫자 1을 입력합니다.
❻ 일부 에러가 나긴 했지만 드라이버가 설치됐습니다. nvidia-smi 명령어를 입력하면 드라이버와 라이브러리 버전이 일치하지 않다고 나오지만요.

4. 데이터는 스프레드시트에서 읽어와요

구글 클라우드 콘솔(https://console.cloud.google.com)에서 [프로젝트를 만들거나 선택하기]를 클릭합니다.
[새 프로젝트]를 누릅니다.
❸ 프로젝트 이름을 입력하고 [만들기]를 클릭합니다. 여기서는 koalpaca-googlesheet라고 이름 지었습니다.
❹ 프로젝트가 생성됐습니다. 알림창에서 [프로젝트 선택]을 클릭합니다.
❺ 페이지를 아래로 스크롤해 [API 탐색 및 사용 설정]을 찾아 클릭합니다.
[API 및 서비스 사용 설정]을 클릭합니다.
❼ google sheets를 검색해 [Google Sheets API]를 찾아 클릭합니다.
[사용]을 클릭해 API를 활성화합니다.
[사용자 인증 정보 만들기]를 누릅니다.
[애플리케이션 데이터]를 클릭하고 [다음] 버튼을 누릅니다.
⓫ 서비스 계정 이름을 임의로 짓습니다. 다음 [만들고 계속하기]를 누릅니다.
⓬ 서비스 계정의 역할을 지정합니다.
⓭ Basic에서 [편집자]를 선택합니다. 읽기, 쓰기 권한을 모두 주겠습니다. 다음 [계속]을 누릅니다.
[완료]를 클릭합니다.
[사용자 인증 정보]를 누릅니다.
⓰ 방금 생성한 서비스 계정이 나타납니다. 계정의 이메일 주소를 복사합니다.
⓱ Koalpaca로 긍정, 부정을 분석할 데이터가 저장된 스프레드시트에서 [공유]를 누르고 방금 복사한 이메일을 추가합니다. 역할은 [편집자]를 선택합니다.
⓲ 다시 구글 클라우드 콘솔로 돌아와 서비스 계정 [이메일 주소]를 클릭합니다.
⓳ 상단 탭 중 [키]를 클릭합니다.
[키 추가]를 누르고, [새 키 만들기]를 선택합니다.
㉑ 키는 기본적으로 json 포맷이 선택되어 있습니다. [만들기]를 누릅니다.
㉒ 만들기를 누르면 키가 다운로드됩니다. 차후 구름IDE에 키를 올려야 하니 잘 보관해두세요.

5. Pytorch와 허깅페이스 관련 라이브러리도 설치해요

❶ pip install gspread 명령어를 입력해 gspread 패키지를 설치합니다.

pip install gspread

❷ pip install -U torch transformers tokenizers accelerate safetensors 명령어로 koalpaca에 필요한 라이브러리를 설치합니다.

pip install -U torch transformers tokenizers accelerate safetensors

6. 파이썬 코드를 저장하고 코드를 실행해요

❶ 프로젝트 탐색창에서 마우스 우클릭을 하고 [새 파일]을 선택합니다.
❷ 파일 이름으로는 koalpaca.py를 입력합니다. .py는 파이썬 코드의 확장자입니다.
❸ koalpaca.py에 다음 예제 코드를 붙여넣고 키보드 단축키 Ctrl+S를 눌러 저장합니다.

import torch
import gspread
from transformers import pipeline, AutoModelForCausalLM

# 스프레드시트 연결
json_file_path = "credentials.json" #구글 인증 파일
gc = gspread.service_account(json_file_path)
spreadsheet_url = "https://docs.google.com/spreadsheets/d/10********************************?pli=1#gid=0" #스프레드시트 주소
doc = gc.open_by_url(spreadsheet_url)
worksheet = doc.worksheet("data") #시트 이름

# 허깅페이스 모델 선택
MODEL = 'beomi/KoAlpaca-Polyglot-5.8B'
model = AutoModelForCausalLM.from_pretrained(
    MODEL,
    torch_dtype=torch.float16,
    low_cpu_mem_usage=True,
).to(device=f"cuda", non_blocking=True)

model.eval()
pipe = pipeline(
    'text-generation', 
    model=model,
    tokenizer=MODEL,
    device=0
)

def generate_text(prompt):
    # 텍스트를 샘플링할지 여부를 결정하는 옵션
    # True로 설정하면 여러 후보 중에서 하나를 랜덤하게 선택
    # False로 설정하면 가장 확률이 높은 토큰을 선택
    response = pipe(
        prompt,
        do_sample=True, 
        
        # 생성할 최대 토큰 수
        # 새로 생성된 토큰의 수가 이 값보다 작을 때까지 생성됨
        max_new_tokens=256,

        # 높은 값은 생성된 텍스트를 더 무작위하게 만들고,
        # 낮은 값은 더 확실한 텍스트를 생성
        temperature=0.7,

        # 높은 값을 설정하면 생성된 텍스트의 다양성이 늘어나고,
        # 낮은 값은 높은 확률의 토큰만 선택하여 더 일관된 텍스트를 생성
        top_p=0.9,

        # True로 설정하면 생성된 전체 텍스트를 반환하고,
        # False로 설정하면 일부만 반환
        return_full_text=True,

        # 텍스트 생성의 종료를 나타내는 토큰 ID
        eos_token_id=2,
    )
    generated_text = response[0]['generated_text']
    
    return generated_text

def analyze_sentiment(sample):
    prompt = f"### Instruction: 이 문장은 소프트웨어 개발자 행사에 대한 참석자의 소감입니다. 이 문장이 긍정적인 평가인지, 부정적인 평가인지 분석해주세요\n ### Input: {sample}\n ### Response:"
    generated_text = generate_text(prompt)
    
    return generated_text

def get_sentiment_result(generated_text):
    if '긍정' in generated_text:
        return "긍정"
    elif '부정' in generated_text:
        return "부정"
    else:
        return "판단 어려움"

def ask_and_analyze_sentiment(samples):
    for index, sample in enumerate(samples):
        generated_text = analyze_sentiment(sample)
        sentiment_result = get_sentiment_result(generated_text)

        # 스프레드시트에 B열에 분석 내용 기록
        cell = f"B{index + 1}"
        worksheet.update(cell, [[generated_text]])

        # 스프레드시트에 C열에 긍정, 부정 기록
        cell = f"C{index + 1}"
        worksheet.update(cell, [[sentiment_result]])

        print(f"sentences_to_analyze[{index}] , {sentiment_result}")

# 여러 문장에 대한 감정 분석을 위한 배열 생성
sentences_to_analyze = worksheet.col_values(1)

# 감정 분석 결과 출력 (긍정 또는 부정만 출력)
ask_and_analyze_sentiment(sentences_to_analyze)

❹ 다시 프로젝트 탐색기에서 마우스 우클릭을 하고 [파일 가져오기]를 누릅니다.
[파일 선택]을 클릭하고, 앞서 구글 클라우드 콘솔에서 다운로드받은 키(json 파일)을 선택합니다.
[확인]을 눌러 키를 업로드합니다.
❼ 파일을 잘 가져왔네요. [확인]을 누릅니다.
❽ 업로드한 키 파일의 이름을 코드의 json_file_path의 이름과 같게 변경해야 합니다. credentials.json을 복사합니다.
❾ 구글 인증 키를 선택하고 마우스 우클릭한 뒤 [이름 변경]을 클릭합니다.
❿ 복사한 이름을 붙여넣어 구글 인증 키 이름을 변경합니다.
⓫ 데이터를 불러올 스프레드시트 URL을 변경합니다.
⓬ 스트레드시트 내 데이터가 있는 ‘시트’의 이름은 여기에 기입합니다. 다 변경한 후 단축키 Ctrl+S를 눌러 저장합니다.

7. koalpaca.py를 실행해볼게요

❶ koalpaca.py를 실행해 스프레드시트 속 문장을 긍정, 부정으로 평가해보겠습니다. 터미널에 python3 koalpaca.py를 입력합니다.
❷ 처음 명령어를 실행하면, 허깅페이스에서 모델을 다운로드합니다. 모델 내려받기가 끝나고 실행하기까지 오랜 시간이 걸리니 인내심을 가지고 기다리세요.
❸ 모델을 다 받고 나면, 스프레드시트 A열 데이터를 읽고, 하나씩 긍정, 부정 여부를 평가합니다. 스프레드시트에 평가 사유(B 열)와 긍정, 부정(C 열)이 기록되는지 확인해보세요. ☁️

긍정, 부정 평가 결과. A열은 주관식 응답, B열은 koalpaca의 응답이다. C열은 긍정, 부정 여부. D열은 내가 평가한 정답(긍정, 부정)이다.

참고자료

  • [리뷰] Meta LLaMA의 친척 — Stanford Univ의 Alpaca(링크)
  • KoAlpaca 깃허브(링크)
Posted by
snow cho

구름의 데브렐 매니저다. COMMIT과 기술 블로그 등을 맡고 있다. 온 세상을 하얗게 바꾸거나, 녹아 사라지는 눈(Snow)이 데브렐도 같다고 생각하며 개발 문화를 개선하기 위해 노력하고 있다. 최근에는 기술 블로그 기고자나 발표자를 찾고자 고군분투 중이다.