27  챗GPT 환경 구축

챗GPT 데이터 과학 환경을 구축하기 위해서는 파이썬 설치, 가상환경 설정, .Rprofile 설정 등 사전 작업이 필요하다. 쿼토를 통해 감성 분석을 수행하기에 앞서, 이와 같은 환경 구축 작업을 선행함으로써 안정적이고 효율적인 분석 환경을 마련할 수 있다. 체계적인 사전 준비를 통해 원활한 분석 수행이 가능해진다.

graph LR
   classDef default fill:#fff,stroke:#000,stroke-width:1px,color:#000
   subgraph quarto["<strong>쿼토</strong>"]
       subgraph virtual[가상환경 설정]
           C(파이썬 설치) --> D(가상환경 생성)
           D --> G[패키지 설치]
       end
       subgraph profile[".Rprofile 설정"]
           I["RETICULATE_PYTHON<br>환경변수 설정"] --> J["쿼토/R 시작 <br> 가상환경 활성화"]
       end
       virtual --> K["감성 분석<br>코드 실행"]
       profile --> K
   end
그림 27.1: 챗GPT 환경설정

27.1 파이썬 설치

가장 최신 파이썬 3.12 버전 대신 안정성이 검증된 파이썬 3.11 버전 다운로드 웹사이트에서 운영체제에 맞게 설치한다. 설치 과정에서 Add Python 3.11 to PATH 옵션을 반드시 선택한다.

그림 27.2: 파이썬 설치 과정
library(reticulate)
repl_python()

#> Python 3.11.8 (C:/Users/<사용자명>/AppData/Local/Programs/Python/Python311/python.exe)
#> Reticulate 1.35.0 REPL -- A Python interpreter in R.
#> Enter 'exit' or 'quit' to exit the REPL and return to R.
#> >>>

27.1.1 가상환경

파이썬 가상환경을 생성하는 이유는 프로젝트별로 필요한 패키지를 분리하여 관리하여 충돌을 방지하기 위함이다. 파일명(--name) 방식과 경로명(--prefix) 방식이 있으며 서로 장단점이 있다. 여기서는 경로명 방식과 reticulate 패키지를 활용하여 R 내부적으로 수행하는 방식을 소개한다. virtualenv_remove() 함수를 사용하여 가상환경을 삭제할 수 있다.

virtualenv_create("d:/envs/gpt-ds")

#> virtualenv_remove("d:/envs/gpt-ds")
#> Remove virtual environment 'd:/envs/gpt-ds'? [Y/n]: Y
#> Virtual environment "d:/envs/gpt-ds" removed.

virtualenv_list()
#> [1] "gpt-ds"

use_virtualenv() 함수를 사용하여 가상환경을 활성화하고 virtualenv_install() 함수를 사용하여 필요한 패키지를 설치한다. 감성분석을 위해서 transformers 패키지가 필요한데 torch, torchvision 의존성으로 함께 설치한다.

library(reticulate)
use_virtualenv("gpt-ds", required = TRUE)

virtualenv_install("d:/envs/gpt-ds", c("transformers", "torch", "torchvision", "torchtext"))

27.1.2 .Rprofile 설정

매번 R을 실행할 때마다 파이썬 가상환경을 활성화하는 것은 번거롭다. .Rprofile 파일에 RETICULATE_PYTHON 환경변수를 설정하게 되면, .Rprofile 파일은 R을 시작할 때 자동으로 파이썬 가상환경이 활성화된다.

usethis::edit_r_profile()

usethis::edit_r_profile() 명령어를 통해 .Rprofile 파일을 열고 파이썬 가상환경 gpt-dspython.exe 경로를 RETICULATE_PYTHON 환경변수로 설정한다.

Sys.setenv(RETICULATE_PYTHON="D:/envs/gpt-ds/Scripts/python.exe")

다시 R 세션을 시작한 후 py_config() 함수를 통해 파이썬 환경을 확인하면 앞서 설정한 gpt-ds 가상환경이 해당 디렉토리로 지정된 것을 확인할 수 있다.

library(reticulate)
py_config()

#> python:         D:/envs/gpt-ds/Scripts/python.exe
#> libpython:      C:/Users/statkclee/AppData/Local/Programs/Python/Python311/python311.dll
#> pythonhome:     D:/envs/gpt-ds
#> version:        3.11.8 (tags/v3.11.8:db85d51, Feb  6 2024, 22:03:32) [MSC v.1937 64 bit (AMD64)]
#> Architecture:   64bit
#> numpy:          D:/envs/gpt-ds/Lib/site-packages/numpy
#> numpy_version:  1.26.4
#> 
#> NOTE: Python version was forced by RETICULATE_PYTHON

27.2 감성분석 사례

앞서 구축한 파이썬 가상환경에서 음식점 리뷰에 대한 감성분석을 수행하는 사례를 살펴본다. 먼저 transformers 라이브러리의 pipeline을 사용하여 텍스트 분류 모델을 로드하고, 한국어 문장을 입력으로 받아 다국어 BERT(Bidirectional Encoder Representations from Transformers) 모형으로 감성 분석을 수행한다. 사전 학습된 모델을 활용하여 자연어 처리 감성분석 작업을 수행하는 방법이 앞서 구축한 파이썬 가상환경에서 수행되고 있다.

from transformers import pipeline

prompt = "분위기도 좋았고 음식도 아주 훌륭했어."

classifier = pipeline("text-classification", 
                      model='nlptown/bert-base-multilingual-uncased-sentiment')

prediction = classifier(prompt)
print(prediction)
#> [{'label': '4 stars', 'score': 0.5038140416145325}]

27.3 RStudio 부조종사

GitHub Copilot은 Visual Studio Code를 비롯한 다양한 코드 편집기와 통합할 수 있는 AI 기반 코딩 도우미(Assistant)다. 부조종사(Copilot)는 개발자가 보다 효율적이고 정확하게 코드를 작성할 수 있도록 도와주는 지능형 도우미 기능을 제공하기 위해 GitHub와 OpenAI가 공동으로 개발했다.

Copilot은 머신 러닝 알고리즘을 사용하여 다른 개발자가 작성한 코드를 분석하고 학습한 다음 현재 코드베이스에 삽입할 수 있는 제안 및 코드 조각을 생성한다. 이 기능은 방대한 코드 코퍼스를 학습한 신경망을 사용하여 개발자가 작성할 가능성이 있는 다음 코드 줄을 예측하는 방식으로 작동한다.

이 기술을 통해 Copilot은 현재 코드의 컨텍스트를 기반으로 전체 함수 또는 클래스를 제안하고 구문적으로 정확하고 모범 사례를 준수하는 코드를 생성할 수도 있다. 또한 Copilot은 생성하는 코드의 의미와 목적을 이해할 수 있으므로 새로운 아이디어를 빠르게 프로토타입으로 만들거나 문제에 대한 다양한 해결책을 모색해야 하는 개발자에게 유용한 도구다.

GitHub Copilot은 Python, JavaScript, TypeScript, Ruby, Go, R 등 다양한 프로그래밍 언어와 원활하게 작동하도록 설계되었다. 또한 사용자 지정이 가능하므로 개발자가 특정 코드베이스에 대해 학습시켜 제안을 개선하고 더욱 정확하게 만들 수 있다.

Copilot을 사용하면 얻을 수 있는 잠재적 이점은 상당하다. 코드 작성에 필요한 시간과 노력을 줄임으로써 개발자는 새로운 기능을 설계하거나 기존 기능을 개선하는 등 더 복잡한 작업에 집중할 수 있다. 또한 Copilot은 모범 사례를 따르고 구조적으로 건전하며 읽기 쉬운 코드를 생성하도록 프로그래밍되어 있으므로 오류와 버그를 줄이는 데 도움이 될 수 있다.

R 사용자는 RStudio를 많이 사용했으나 최근 챗GPT, Github Copilot의 부상으로 개발 방식에 변화가 생겨나고 있다. 하지만, RStudio가 곧바로 Copilot을 지원하지는 않을 예정이다. RStudio는 무료 오픈 소스인 반면 Copilot은 Microsoft의 독점 기술이며, Microsoft는 공식 비공개 소스 소프트웨어 및 플러그인에서만 사용할 수 있도록 라이선스를 부여하고 있다. 시중에 존재하는 몇몇 타사 플러그인은 공식 플러그인에서 바이너리를 추출하여 작동하지만, RStudio IDE에는 이런 우회적인 방법을 취하고 있지는 않다.1

이러한 기술적, 문화적 제약으로 인해 Microsoft와 Posit이 RStudio 내에서 Copilot을 허용하는 방법과 RStudio가 공개 데이터 및 기술을 사용하여 Copilot과 유사한 AI 프로그래밍 도우미를 구현하는 방법 등 다양한 방식을 검토한 후에 2023년 7월 RStudio IDE에 GitHub Copilot 통합 버전을 출시했다.

RStudio 부조종사는 RStudio IDE에 GitHub Copilot을 통합한 버전으로, RStudio 사용자가 RStudio IDE에서 Copilot을 사용할 수 있도록 지원한다. RStudio 부조종사는 RStudio IDE의 기능과 GitHub Copilot의 기능을 통합하여 RStudio 사용자가 더욱 효율적으로 코드를 작성하고 디버깅할 수 있도록 도와준다. RStudio 부조종사는 RStudio IDE의 사용성을 향상시키고 RStudio 사용자가 더욱 효율적으로 코드를 작성할 수 있도록 도와준다.

그림 27.3: RStudio 부조종사 설정방법

27.4 OpenAI API

OpenAI API는 OpenAI의 인공지능 모형을 활용하는 API 서비스로, 개발자가 쉽게 인공지능 모형을 활용할 수 있도록 제공된다. OpenAI API를 사용하면 개발자는 챗GPT, DALL-E, 위스퍼, 임베딩 등 OpenAI의 다양한 인공지능 언어, 음성, 시각 모형을 활용하여 다양한 인공지능 응용프로그램을 개발할 수 있다. OpenAI API는 RESTful API로 제공되며, 개발자는 HTTP 요청을 통해 OpenAI의 인공지능 모형을 활용할 수 있다. OpenAI, 챗GPT(ChatGPT), OpenAI API를 명확히 구분하는 것이 필요하다.

  • OpenAI: 회사명
  • 챗GPT(ChatGPT): AI 응용프로그램 (AI 챗팅 서비스)
  • OpenAI API: OpenAI 인공지능 모형을 활용하는 API 서비스

OpenAI 회사가 제시하고 있는 기준에 맞춰 따라야 OpenAI API를 사용할 수 있다. 이를 위해 먼저 회원가입을 통한 계정을 생성하고 본인 인증과 과금을 위한 API KEY를 생성하고 프로그래밍 언어에서 쉽게 사용할 수 있도록 파이썬의 경우 openai 패키지를 설치하고 문법에 맞춰 코드를 작성하면 된다.

OpenAI 계정 생성 웹사이트에서 계정을 생성한다.

그림 27.4: OpenAI 계정 생성

API keys 웹사이트에서 API KEY를 발급받는다.

그림 27.5: API 키 생성

API Reference 안내에 따라 openai 패키지를 설치한다.

$ pip install openai

API키를 직접 파이썬 프로그램에 명시하고 결과를 확인한다.

import openai

openai.api_key = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxx"

response = openai.Completion.create(
  model="text-davinci-003",
  prompt="OpenAI API가 뭔가요?"
)

print(response)
{
  "choices": [
    {
      "finish_reason": "length",
      "index": 0,
      "logprobs": null,
      "text": "\n\nOpenAI API\ub294 \uc778\uacf5"
    }
  ],
  "created": 1689745304,
  "id": "cmpl-7duESieoaT985f4IKPskfcYQ3AH7F",
  "model": "text-davinci-003",
  "object": "text_completion",
  "usage": {
    "completion_tokens": 14,
    "prompt_tokens": 15,
    "total_tokens": 29
  }
}

python-dotenv 패키지를 사용하여 API KEY를 환경변수로 관리한다. .env 파일에 OpenAI에서 발급받은 API KEY를 저장하고 파이썬 프로그램에서 .env 파일을 읽어서 API KEY를 사용한다. 버전 관리 시스템에 .env 파일을 포함시키지 않도록 .gitignore 파일에 추가한다. 이와 같은 방식으로 API KEY를 관리하면 API KEY가 노출되는 것을 방지할 수 있다.

import requests
from dotenv import load_dotenv
import os

load_dotenv()
#> True
openai.api_key = os.getenv('OPENAI_API_KEY')

response = openai.Completion.create(
  model="text-davinci-003",
  prompt="OpenAI API가 뭔가요?"
)

print(response["choices"][0]['text'])
OpenAI API는 OpenAI가 

27.5 요약

파이썬 설치, 가상환경 설정, .Rprofile 설정 등 체계적인 사전 준비를 통해 쿼토에서 안정적이고 효율적인 감성 분석 환경을 마련할 수 있다.

특히 가상환경을 사용하면 프로젝트별로 필요한 패키지를 분리하여 관리할 수 있어 패키지 간 충돌을 방지할 수 있다. 또한 .Rprofile 파일에 가상환경 경로를 설정함으로써 매번 가상환경을 활성화하는 번거로움을 줄일 수 있다.

구축한 환경을 바탕으로 transformers 라이브러리와 사전 학습된 BERT 모델을 활용하여 한국어 리뷰 텍스트에 대한 감성 분석을 수행해 보았다. 이처럼 가상환경과 최신 라이브러리를 사용하면 자연어 처리 작업을 보다 쉽고 효과적으로 수행할 수 있다.

RStudio IDE에 통합된 GitHub Copilot인 RStudio 부조종사와 OpenAI API에 대해서도 간략히 소개했다. 이러한 도구들을 적절히 활용한다면 데이터 과학자의 생산성과 효율성을 한층 더 높일 수 있다.


  1. Github Copilot integration with RStudio #10148↩︎