AIㆍML / 개발자

구글 팜(PaLM) API 이용해 자동으로 블로그 콘텐츠 만들기

Janakiram MSV | InfoWorld 2023.07.05
팜 2(Pathways Language Model 2, PaLM 2)는 구글이 만든 대규모 언어 모델(large language model, LLM)이다. 첫 버전은 2022년 1월에 나왔고 그 후속으로 2023년 5월에 공개됐다. 구글은 방대한 텍스트와 코드 데이터로 팜 2 모델을 학습시켰고, 그 결과 팜 2를 이용하면 문서와 코드 작성, 질의 응답, 요약, 감정 분석 등 다양한 작업을 할 수 있다.
 
ⓒ Getty Image Bank

팜 2는 구글 생성형 AI 플랫폼의 핵심이기도 하다. 실제로 구글의 AI 챗봇이자 오픈AI 챗GPT의 경쟁자인 바드(Bard)는 물론 구글 AI 어시스턴트 프레임워크인 듀엣 AI(Duet AI)도 팜 2를 기반으로 한다. 듀엣 AI는 구글 워크스페이스, 구글 클라우드 같은 제품에 이미 통합됐다.

구글은 버텍스 AI(Vertex AI) 플랫폼에서 사용할 수 있는 팜 API를 만들었다. 별도의 API 엔드포인트로, 현재 개발자가 이 버텍스 AI 팜 API에 접속해 사용할 수 있다. 단, 구글의 신뢰할 수 있는 테스터(Trusted Testers) 프로그램을 통해서만 가능하다.

파이썬과 버텍스 AI 시작하기
일단 여기서는 구글 클라우드에 가입했다고 가정하고 버텍스 AI 플랫폼에서 팜 API를 사용하는 방법을 단계별로 살펴본다. 단 아직 이 서비스는 프리뷰 단계여서 추후 API가 변경될 가능성이 있다. 

일단, 파이썬 가상 환경을 만드는 것부터 시작하자.
 
python3 -m venv venv
source venv/bin/activate

이제 구글 버텍스 AI 플랫폼에 접속해 파이썬 모듈을 설치한다.
 
pip install google-cloud-aiplatform

개발 환경으로 활용할 주피터 노트북(Jupyter Notebook)도 설치한다.
 
pip install jupyter

vertexai.preview.language_models 라이브러리는 ChatModel, TextEmbedding, TextGenerationModel 등 다양한 클래스를 지원한다. 여기서는 팜 2가 사용자 입력을 받아 블로그 글을 생성하는 역할을 하는 TextGenerationModel에 초점을 맞춰 진행한다.

먼저, 모듈에서 적절한 클래스를 불러온다.
 
Import vertexai.preview.language_models import TextGenerationModel

미리 학습한 text-bison@001 기반으로 모델 객체를 초기화한다. text-bison@001은 텍스트 생성에 최적화된 모델이다.
 
model = TextGenerationModel.from_pretrained("text-bison@001")

다음에는 사용자 입력 즉 프롬프트(prompt)를 입력 받아 글을 생성해 출력하는 함수를 정의해야 한다. 
 
def get_completion(prompt_text):
    response = model.predict(
        prompt_text,
        max_output_tokens=1000,
        temperature=0.3
    )
    return response.text



이제 코드에 사용된 매소드와 프롬프트 입력, 토큰 수, 매개변수 등에  대해 알아보자.
 

텍스트 생성 모델 매개변수

팜 API에 텍스트 문자열로 프롬프트를 입력하면, 이 API는 문자열을 토큰(tokens)이라고 부르는 의미 단위로 변환한다. 이 토큰은 보통 4글자 정도여서, 100개 토큰이 60~80단어 정도 된다. 500단어 이내 콘텐츠를 자동으로 작성하는 모델을 만들고 싶다면 max_output_tokens 값을 1000으로 설정하는 것이 안전하다. 팜 2가 지원하는 최대 값은 1024다. 이 매개변수를 지정하지 않으면 기본 값 64가 적용된다.

다음 알아볼 매개변수는 온도(temperature)다. 모델의 창의성을 규정하는 것으로, 토큰 선택을 어느 정도나 무작위로 할 것인가를 결정한다. 이 값이 낮을수록 덜 창의적인 답변을 내놓는다. 반면 이 값이 높으면 더 다양하고 독창적인 결과를 반환한다. 온도 매개변수 값은 0부터 1까지 정할 수 있다. 이번 예제에서는 약간의 창의성을 기대하며 0.3으로 설정한다. 온도 역시 사용자가 직접 설정할 필요가 없다. 기본 값은 모델마다 차이가 있다.

이밖에 또 다른 매개변수로는 top_k, top_p가 있다. 모델이 토큰을 선택하는 방법을 규정하는 매개변수인데, 여기서는 생략한다.

이제 기본적인 설정을 마쳤으니 프롬프트를 구현해 보자.
 
prompt = f""" Write a blog post on renewable energy. Limit the number of words to 500. """

프롬프트를 전달해 매소드를 호출한다.
 
response=get_completion(prompt)
print(response)



더 편리하게 사용하려면 팜이 생성한 콘텐츠를 HTML 형태로 만드는 것이 좋다. 이를 위해서는 프롬프트를 일부 수정할 필요가 있다.
 
prompt = f"""
Write a blog post on renewable energy. Limit the number of words to 500. Format the output in HTML.
"""

HTML 형태로 출력하려면 주피터 노트북의 내장 위젯을 사용하면 된다.
 
from IPython.display import display, HTML
display(HTML(response))

이제 HTML 형태의 블로그 글을 확인할 수 있다.



전체 코드는 다음과 같다.
 
from vertexai.preview.language_models import TextGenerationModel
model = TextGenerationModel.from_pretrained("text-bison@001")
def get_completion(prompt_text):
    response = model.predict(
        prompt_text,
        max_output_tokens=1000,
        temperature=0.3
    )
    return response.text
prompt = f"""
Write a blog post on renewable energy. Limit the number of words to 500.
Format the output in HTML.
"""
response=get_completion(prompt)
print(response)
from IPython.display import display, HTML
display(HTML(response))

이렇게 짧은 코드 만으로도 팜 2 LLM을 이용해 블로그 글을 자동으로 생성할 수 있다. 
editor@itworld.co.kr
Sponsored

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.