안녕하세요! 오늘은 구글의 제미나이 1.5 프로 모델을 API를 이용해서 만나보겠습니다. 제미나이 1.5 프로는 최대 100만 토큰의 매우 긴 문맥을 이해하고 처리할 수 있으며, 텍스트, 코드, 이미지, 음성 및 영상 등 다양한 모달리티를 지원하는 모델로, 1시간 분량의 동영상과 11시간 분량의 음성 파일, 3만 줄 이상의 코드, 70만 단어 이상의 텍스트에 해당하는 방대한 정보를 한 번에 처리할 수 있는 성능을 갖추고 있습니다. 이 블로그에서는 제미나이 1.5 프로의 성능에 대해서 알아보고, API 예제를 통해 텍스트 생성과 이미지 설명, 40분 분량의 오디오 분석기능을 살펴보겠습니다.
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
Gemini 1.5 Pro 성능
제미나이 1.5 프로는 기존 제미나이 1.0 프로보다 87% 더 향상된 성능으로 제미나이 1.0 울트라와 비슷한 수준을 나타내며 작은 텍스트 조각(Needle)을 긴 텍스트 블록 안에 의도적으로 배치하는 NIAH(Needle In A Haystack) 평가에서는 100만 토큰 길이의 데이터 블록에서 99%의 정확도로 해당 문구가 포함된 텍스트를 찾아내었다고 합니다. 아래는 제미나이 1.5 프로의 주요 특징입니다.
- 성능 개선: 제미나이 1.5 프로는 제미나이 1.0 울트라와 비슷한 수준의 성능을 보이며, 이전 모델보다
- 긴 문맥 이해 능력: 이 모델은 최대 100만 토큰을 연속 실행할 수 있는 능력을 가지고 있어, 매우 긴 문맥을 이해하고 처리할 수 있습니다. 이는 다양한 작업에 있어서 높은 유용성을 제공합니다.
- 모달리티 지원: 텍스트, 코드, 이미지, 음성 및 영상 등 다양한 모달리티를 지원하여 복합적인 데이터를 처리할 수 있습니다. 이를 통해 다양한 작업에 유연하게 대응할 수 있습니다.
- 효율적인 아키텍처: 트랜스포머(Transformer) 및 MoE(Mixture-of-Experts) 아키텍처를 기반으로 구축되었으며, 최신 연구 및 엔지니어링 혁신을 반영하여 효율적으로 작동합니다.
제미나이 1.5 프로는 45분짜리 버스터 키튼의 무성영화 "셜록 주니어" (1924년) (1초당 1프레임, 2,674프레임, 684,000 토큰)를 프롬프트로 받으면 특정한 장면에서 텍스트 정보를 추출하거나, 손으로 그린 그림과 같은 장면을 식별합니다.
제미나이 1.5 프로는 최대 1백만 토큰의 텍스트, 비디오 및 오디오 모두에서 "Needle"(의도적으로 배치한 작은 조각)을 거의 완벽하게(>99.7%) 검색하며, 이 검색 성능은 텍스트 모드에서 1천만 토큰(대략 7백만 단어), 오디오 모드에서 2백만 토큰(최대 22시간), 비디오 모드에서 2.8백만 토큰(최대 3시간)까지 확장되어도 유지됩니다. 녹색은 성공적인 검색, 빨강은 실패한 검색입니다.
Gemini 1.5 Pro API 예제
다음은 제미나이 1.5 프로의 API 예제를 살펴보겠습니다. 이 블로그에서 사용한 예제코드의 실행환경은 Windows 11 Pro(23H2), 파이썬 버전 3.11, 코드 에디터는 비주얼 스튜디오 코드(이하 VSC)이며, VSC를 실행하여 "WSL에 연결"을 통해 Windows Subsystem for Linux(WSL)을 사용하여 Linux 환경에 액세스 하도록 구성합니다. 살펴볼 예제는 텍스트 생성, 파일 API와 이미지 설명, 오디오 분석 이렇게 세 가지이며, 예제 코드의 출처는 아래 구글 제미나이 cookbook입니다.
https://github.com/google-gemini/cookbook/blob/main/README.md
API Key 발급, 환경설정
먼저, Google AI Studio에 가입한 후 API key를 발급받습니다. Google AI Studio 가입과 API key 발급은 아래 링크에 이전 블로그를 참고하시기 바랍니다.
2023.12.18 - [대규모 언어모델] - 초보도 할 수 있는 구글 제미나이로 AI 레시피 생성 웹페이지 만들기
API key 발급이 완료되면 VSC 명령 프롬프트에서 "python3.11 -m venv myenv"와 "source myenv/bin/activate" 명령어를 통해 가상환경을 생성 및 활성화 한 다음, "pip install google-generativeai" 명령으로 google.generativeai 라이브러리를 설치합니다.
pip install google-generativeai
다음은 세 가지 예제코드에서 공통적으로 사용되는 Google의 generativeAI 라이브러리를 사용하여 generative model을 설정하고 초기화하는 코드입니다. VSC에서 새 파이썬 파일을 만들고 아래 코드를 붙여 넣습니다.
- `import google.generativeai as genai`: generativeAI 라이브러리를 `genai`라는 별칭으로 가져옵니다.
- `genai.configure(api_key="발급받은 API Key")`: 이 부분은 generativeAI API를 사용하기 위해 API 키를 설정하는 부분입니다. 사용자가 발급받은 API 키를 입력하여 설정합니다.
- `model = genai.GenerativeModel(model_name="models/gemini-1.5-pro-latest")`: generativeAI 모델을 초기화하는 부분입니다. `GenerativeModel` 클래스를 사용하여 모델을 초기화하고, 모델 이름을 `"models/gemini-1.5-pro-latest"`로 설정합니다.
import google.generativeai as genai
import urllib.request
# Set up API key
genai.configure(api_key="발급받은 API Key")
# Initialize generative model
model = genai.GenerativeModel(model_name="models/gemini-1.5-pro-latest")
텍스트 생성
Google의 generativeAI 라이브러리의 초기화 및 설정 코드 다음에 아래 텍스트 생성 코드를 추가하여 저장한 후, 실행합니다. 질문은 태양계에서 가장 큰 행성에 대해 한국어로 대답하는 것입니다.
# Generate text content
response_text = model.generate_content("Tell me about the biggest planet in our Solar System? Provide all response in Korean").text
# Display text response
print(response_text)
코드를 저장하고 실행하면, 제미나이 1.5 프로가 아래 화면과 같이 목성에 대해 자세하게 응답합니다.
참고로 제미나이 1.5 프로 모델의 정보를 출력하는 코드는 다음과 같습니다. 보시는 바와 같이 입력 토큰의 크기가 백만 개로 표시됩니다.
# Get model information
model_info = genai.get_model('models/gemini-1.5-pro-latest')
print(model_info)
파일 API와 이미지 설명
다음은 파일 API와 이미지 설명예제입니다. 예제에 사용할 이미지 파일을 아래 명령어를 실행하여 다운로드합니다.
curl -o image.jpg https://storage.googleapis.com/generativeai-downloads/images/jetpack.jpg
예제에 사용할 이미지는 아래와 같이 어깨에 메고 하늘을 날 수 있는 배낭의 상상도입니다.
이미지 다운로드가 완료되면, 아래 코드를 복사하여 기존의 라이브러리 임포트, API key설정 및 모델 설정 코드의 아래에 붙여 넣고 실행합니다. 텍스트 생성 코드 부분은 선택하고 "컨트롤+/" 키를 누르면 주석처리 됩니다.
두 번째 예제 코드는 generativeAI 라이브러리를 사용하여 이미지 파일을 업로드하고, 해당 파일의 메타데이터를 확인하며, 이미지에 대한 창의적인 설명을 생성하고 출력하고, 마지막으로 업로드한 파일을 삭제하는 과정을 나타냅니다.
- `sample_file = genai.upload_file(path="image.jpg", display_name="Sample drawing")`: 다운로드 한 이미지 파일을 업로드하고, 표시 이름을 `"Sample drawing"`으로 설정하여 업로드된 파일의 정보를 `sample_file`에 저장합니다.
- `file = genai.get_file(name=sample_file.name)`: 업로드된 파일의 메타데이터를 확인하기 위해 `genai.get_file` 메서드를 사용하여 파일을 검색합니다.
- `response_image_description = model.generate_content(["Describe the image with a creative description.Provide all response in Korean", sample_file]).text`: Gemini 1.5 Pro 모델을 사용하여 이미지에 대한 창의적인 설명을 생성합니다. `generate_content` 메서드를 사용하여 이미지와 함께 설명을 요청하고, 생성된 설명을 `response_image_description` 변수에 저장합니다.
- `print(response_image_description)`: 생성된 이미지 설명을 출력합니다.
- `genai.delete_file(sample_file.name)`: 업로드한 파일을 삭제합니다.
# Upload image file
sample_file = genai.upload_file(path="image.jpg", display_name="Sample drawing")
print(f"Uploaded file '{sample_file.display_name}' as: {sample_file.uri}")
# Check file metadata
file = genai.get_file(name=sample_file.name)
print(f"Retrieved file '{file.display_name}' as: {sample_file.uri}")
# Generate creative description for the image
response_image_description = model.generate_content(["Describe the image with a creative description.Provide all response in Korean", sample_file]).text
# Display image description
print(response_image_description)
# Delete uploaded file
genai.delete_file(sample_file.name)
print(f"Deleted {sample_file.display_name}.")
이 코드를 실행하면 아래 화면과 같이 이미지에 대한 창의적인 설명이 생성되고 출력되며, 업로드한 파일이 삭제됩니다.
오디오 파일 분석
세 번째 예제 코드는 오디오 파일에 대한 분석예제입니다. 오디오 파일의 내용은 40분 분량으로 1961년 1월 존 F. 케네디 대통령이 의회에서 한 국정 연설입니다.
https://github.com/google-gemini/cookbook/blob/main/quickstarts/Audio.ipynb
예제 코드는 generativeAI 라이브러리를 사용하여 오디오 파일을 업로드하고, 해당 오디오 파일에서 내용을 생성하는 과정을 나타냅니다.
- `URL = "https://storage.googleapis.com/generativeai-downloads/data/State_of_the_Union_Address_30_January_1961.mp3"`: 오디오 파일의 URL을 설정합니다.
- `urllib.request.urlretrieve(URL, "sample.mp3")`: 이 부분은 지정된 URL에서 오디오 파일을 다운로드하여 `"sample.mp3"`라는 이름으로 저장합니다.
- `audio_file = genai.upload_file(path='sample.mp3')`: 이 부분은 다운로드한 오디오 파일을 generativeAI의 `upload_file` 메서드를 사용하여 업로드합니다. 업로드된 파일의 정보는 `audio_file`에 저장됩니다.
- `prompt_audio = "Listen carefully to the following audio file. Provide a brief summary of what is spoken and give commentary of the emotions and corresponding timecodes. Provide all response in Korean"`: 이 부분은 오디오 파일에 대한 프롬프트를 설정합니다. 사용자에게 오디오 파일을 듣고 해당 내용에 대한 간략한 요약과 감정에 대한 논평을 제공하도록 요청합니다. 모든 응답은 한국어로 제공되어야 합니다.
- `response_audio = model.generate_content([prompt_audio, audio_file])`: Gemini 1.5 Pro 모델을 사용하여 오디오 파일에서 내용을 생성합니다. `generate_content` 메서드를 사용하여 오디오 파일과 함께 프롬프트를 제공하고, 생성된 내용을 `response_audio` 변수에 저장합니다.
- `print(response_audio.text)`: 이 부분은 생성된 내용을 출력합니다.
이 코드를 실행하면 오디오 파일에서 내용이 생성되고, 그에 대한 요약과 구간별 감정 논평이 한국어로 출력됩니다.
# Upload audio file
URL = "https://storage.googleapis.com/generativeai-downloads/data/State_of_the_Union_Address_30_January_1961.mp3"
urllib.request.urlretrieve(URL, "sample.mp3")
audio_file = genai.upload_file(path='sample.mp3')
# Prompt for audio file
prompt_audio = "Listen carefully to the following audio file. Provide a brief summary of what is spoken and give commentary of the emotions and corresponding timecodes. Provide all response in Korean"
# Generate content from audio file
response_audio = model.generate_content([prompt_audio, audio_file])
print(response_audio.text)
제 컴퓨터에서 테스트해 본 결과 40분 분량의 오디오 파일을 업로드하고, 요약 및 분석내용이 출력되기까지 약 1분이 소요되었는데요. 제미나이 1.5 프로의 긴 문맥 처리 성능을 실감할 수 있었습니다.
맺음말
오늘은 구글 AI에서 개발한 차세대 멀티모달 대규모 언어 모델인 제미나이 1.5 프로를 소개하고, API를 통한 다양한 기능과 예제를 살펴보았습니다. 제미나이 1.5 프로는 최대 100만 토큰의 긴 문맥을 이해하고 처리할 수 있으며, 텍스트, 이미지, 오디오, 코드 등 다양한 모달리티를 지원합니다. 또한, NIAH(Needle In A Haystack) 평가에서 100만 토큰 길이의 데이터 블록에서 99%의 정확도로 해당 문구가 포함된 텍스트를 찾아내는 등 높은 성능을 보여줍니다.
블로그에서는 제미나이 1.5 프로의 성능과 주요 특징을 살펴보고, API 예제를 통해 텍스트 생성, 이미지 설명, 오디오 분석 기능을 살펴보았습니다. 특히 오디오 분석 부분은 1961년 존 F. 케네디 대통령의 40분 분량 국정 연설 오디오 파일을 1분 만에 요약하고 감정을 분석하는 예시를 통해 수준 높은 멀티모달 기능을 체험할 수 있었습니다.
오늘 내용은 여기까지입니다. 이 블로그가 제미나이 1.5 프로 언어 모델에 대한 이해를 돕고, 여러분의 연구와 업무에 도움이 되길 바라면서 저는 다음에 더 유익한 정보를 가지고 다시 찾아뵙겠습니다. 감사합니다.
2024.02.12 - [대규모 언어모델] - 구글 제미나이 울트라 1.0, 과연 진정한 AI 혁신인가? 솔직 후기 공개!
'AI 도구' 카테고리의 다른 글
🦙Ollama를 활용한 LLAMA3 RAG 시스템 구현하기 (2) | 2024.04.22 |
---|---|
[AI 논문] VASA-1: 마이크로소프트의 초실감 얼굴 생성 기술 (0) | 2024.04.20 |
ComfyUI와 IP-Adapter plus를 활용한 오프라인 가상 피팅 가이드 (0) | 2024.04.14 |
🤯허깅챗 어시스턴트 영어 뉴스 번역 챗봇 만들기! URL만 입력하면 끝! (0) | 2024.04.03 |
PraisonAI: 명령어 1줄! 코드 없이 AI 에이전트로 영화 대본 만들기 (0) | 2024.03.28 |