본문 바로가기
AI 언어 모델

GPT-4o: 자연스러운 음성 대화와 뛰어난 코딩 성능을 갖춘 멀티모달 언어 모델

by James AI Explorer 2024. 5. 17.

목차

    728x90

    안녕하세요! 오늘은 이번주 가장 큰 관심을 모으고 있는 OpenAI의 새로운 플래그십 언어모델 GPT-4o에 대해 알아보겠습니다. GPT-4o의 "o"는 "omni(모든 방식으로)"를 의미하며, 이는 텍스트 입력 외에도 오디오, 이미지 등과 같은 멀티모달 정보의 입력과 출력이 가능하다는 것을 나타낸다고 합니다. 이 블로그에서는 인간과 유사한 음성 대화로 영화 "Her"의 인공지능을 실제로 구현한 GPT-4o의 개요와 특징, 주요 기능을 알아보고 이미지 설명, 코딩 및 추론테스트를 해보겠습니다. 

    GPT-4o 모델 답변 화면
    GPT-4o의 인터넷 검색기능 답변화면

    "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

    GPT-4o 주요 특징

    GPT-4o는 멀티모달 정보의 입력에 중점을 둔 모델로 음성, 비디오, 이미지를 처리할 수 있으며, 핵심기능인  음성 대화모드 응답 시간은 인간과 유사한 평균 320밀리 초로, 이전 모델인 GPT-3.5의 평균 2.8초, GPT-4의 평균 5.4초와 비교하여 상당한 발전을 보여줍니다. 또한, GPT-4 터보보다 비영어권 텍스트를 더 효율적으로 토큰화하여, 더 적은 수의 토큰을 사용하여, GPT-4 수준의 성능을 제공하면서도 더 빠르고 저렴한 비용으로 작동합니다. 무엇보다 인터넷 검색이 가능한 답변을 제공할 수 있게 됨으로써 최신의 정확하고 다양한 정보를 얻을 수 있게 되었습니다.

     

    GPT-4o의 주요 특징은 다음과 같습니다:

    • 매개변수 크기 : GPT-4o는 GPT-4와 같은 약 1조 개의 매개변수 크기를 가지고 있습니다. (GPT-4o 답변)
    • 인터넷 검색기능 : 인터넷 검색을 통한 실시간 정보제공이 가능합니다. 아래 화면을 보면 GPT-4o가 답변을 위해 5개 사이트를 검색한 것을 확인할 수 있으며, 출처 바로가기가 같이 표시됩니다. 

    GPT-4o 답변 화면

    • 멀티 모달 기능: 텍스트, 오디오 및 시각적 입력을 처리하고, 이미지는 물론 캐리커처, 3D 렌더링, 폰트, 포스터 등 다양한 형태의 시각적 컨텐츠를 생성할 수 있습니다. 아래 화면은 OpenAI 사이트에 소개된 GPT-4o가 생성한 다양한 컨텐츠의 예시입니다.( GPT-4o 모델이 직접 생성하는 방식이 아닐수 있습니다.)
    GPT-4o가 생성한 캐리커처 GPT-4o가 합성한 3D 렌더링 GPT-4o가 생성한 폰트

     

    GPT-4o 소개 페이지의 이미지 생성 샘플

    • 속도와 효율성: 특히 오디오 처리에서 지연시간을 축소하여 이전 모델보다 빠릅니다. (현재 실사용자 미적용)
    • 향상된 언어 지원: 50개 이상의 언어에서 사용 가능하며, 비영어권 언어에 대한 토큰수가 절감되었습니다.
    • 대용량 컨텍스트 창: OpenAI는 GPT-4o가 128K 토큰의 컨텍스트 창을 기준으로 한다고 밝혔습니다. (GPT-4o 답변)
    • 비전 기능: 시각적 작업에서 뛰어난 성능을 발휘합니다.
    • 지식 업데이트 시점: 2023년 10월 기준 (GPT-4o 답변)

    GPT-4o의 지식 업데이트 시점과 컨텍스트 창의 크기에 대한 ChatGPT 답변

    일반사용자는 ChatGPT Plus 사용자보다 사용량 제한이 있는 GPT-4o 무료 버전과 웹 검색 기능을 사용할 수 있으며, API는 이전 모델인 GPT-4 Turbo보다 2배 빠르고 가격은 절반이라고 합니다.

    https://www.aitimes.com/news/articleView.html?idxno=159635

     

    'GPT-4o' 등장에 폭발적 반응..."AGI의 시작 vs 쇼에 불과" - AI타임스

    오픈AI의 새로운 모델 \'GPT-4o\'가 출시된지 반나절 만에 폭발적인 반응이 이어지고 있다. 일부는 인공일반지능(AGI)이 시작됐다고 극찬했지만, 일부는 기능 발전은 없는 \'잘 짜인 쇼\'에 불과하다

    www.aitimes.com

    반응형

    이미지 설명, 코딩 및 추론 테스트

    다음은 이미지 설명과 코딩 및 추론 테스트입니다. 5월17일 현재 GPT-4o는 OpenAI, 챗봇아레나, Poe 등에서 제한적인 메시지 용량으로 무료 사용이 가능하며, OpenAI는 무료사용자에게 고급 데이터 분석, 파일 업로드, 비전, 웹 검색, 맞춤형 GPT 서비스에 대해 제한적인 액세스를 제공하고 있습니다. 본 테스트는 위 사이트와 앱을 통해서 실행하였습니다. 

    이미지 설명 테스트

    먼저, 이미지 설명은 Poe 애플리케이션에서 GPT-4o에 접속하여 테스트하였으며, 테스트 결과 GPT-4o는 이미지의 세부적인 내용부터 전체적인 분위기까지 잘 파악해서 설명해 주었습니다. 

    이미지 설명 질문을 위한 테스트 이미지
    이미지와 텍스트 입력 프롬프트에 대한 GPT-4o의 답변

    코딩 테스트

    다음은 코딩 테스트입니다. 코딩 테스트 첫 번째는 먼저 스네이크 게임을 파이썬으로 작성해 달라고 요청하였는데요, 결과는 첫 번째 시도만에 뱀 이동과 꼬리 증가, 먹이 먹기, 게임 재시작 및 종료 등 모든 기능이 정상으로 작동하여 우수한 성적을 보여주었습니다. 아래 코드는 GPT-4o가 작성한 스네이크 게임 파이썬 코드입니다. 

    import pygame
    import time
    import random
    
    # 초기화
    pygame.init()
    
    # 색상 정의
    white = (255, 255, 255)
    yellow = (255, 255, 102)
    black = (0, 0, 0)
    red = (213, 50, 80)
    green = (0, 255, 0)
    blue = (50, 153, 213)
    
    # 디스플레이 크기
    dis_width = 800
    dis_height = 600
    
    # 디스플레이 설정
    dis = pygame.display.set_mode((dis_width, dis_height))
    pygame.display.set_caption('Snake Game')
    
    clock = pygame.time.Clock()
    
    snake_block = 10
    snake_speed = 15
    
    font_style = pygame.font.SysFont("bahnschrift", 25)
    score_font = pygame.font.SysFont("comicsansms", 35)
    
    def our_snake(snake_block, snake_list):
        for x in snake_list:
            pygame.draw.rect(dis, black, [x[0], x[1], snake_block, snake_block])
    
    def message(msg, color):
        mesg = font_style.render(msg, True, color)
        dis.blit(mesg, [dis_width / 6, dis_height / 3])
    
    def gameLoop():
        game_over = False
        game_close = False
    
        x1 = dis_width / 2
        y1 = dis_height / 2
    
        x1_change = 0
        y1_change = 0
    
        snake_List = []
        Length_of_snake = 1
    
        foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
        foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
    
        while not game_over:
    
            while game_close == True:
                dis.fill(blue)
                message("You Lost! Press Q-Quit or C-Play Again", red)
                pygame.display.update()
    
                for event in pygame.event.get():
                    if event.type == pygame.KEYDOWN:
                        if event.key == pygame.K_q:
                            game_over = True
                            game_close = False
                        if event.key == pygame.K_c:
                            gameLoop()
    
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    game_over = True
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_LEFT:
                        x1_change = -snake_block
                        y1_change = 0
                    elif event.key == pygame.K_RIGHT:
                        x1_change = snake_block
                        y1_change = 0
                    elif event.key == pygame.K_UP:
                        y1_change = -snake_block
                        x1_change = 0
                    elif event.key == pygame.K_DOWN:
                        y1_change = snake_block
                        x1_change = 0
    
            if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0:
                game_close = True
            x1 += x1_change
            y1 += y1_change
            dis.fill(blue)
            pygame.draw.rect(dis, green, [foodx, foody, snake_block, snake_block])
            snake_Head = []
            snake_Head.append(x1)
            snake_Head.append(y1)
            snake_List.append(snake_Head)
            if len(snake_List) > Length_of_snake:
                del snake_List[0]
    
            for x in snake_List[:-1]:
                if x == snake_Head:
                    game_close = True
    
            our_snake(snake_block, snake_List)
    
            pygame.display.update()
    
            if x1 == foodx and y1 == foody:
                foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
                foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
                Length_of_snake += 1
    
            clock.tick(snake_speed)
    
        pygame.quit()
        quit()
    
    gameLoop()

    스네이크 게임 정상동작 화면
    스네이크 게임 재시작 및 종료기능

    두 번째 코딩 테스트는 edabit.com 코딩 교육 사이트의 파이썬 코딩 문제 중 난이도 상의 Very Hard, Expert 단계 문제를 가지고 테스트하였으며, GPT-4o는 모든 문제를 첫 번째 시도에서 통과하였습니다.

    https://edabit.com/challenges

     

    Learn to Code with 10,000+ Interactive Challenges

    Learn to code with fun, bite-sized challenges. Earn XP, unlock achievements and level up. It's like Duolingo for learning to code.

    edabit.com

    먼저 Very hard 단계 문제입니다. 각 알파벳을 정해진 문자로 바꾸는 Atbash 암호에서 A는 Z로, B는 Y로, C는 X로 바뀌며, 주어진 문자열에 Atbash 암호를 적용하는 함수를 만들어야 합니다. 예를 들어,  "Christmas is the 25th of December"를 Atbash 암호화하면 "Xsirhgnzh rh gsv 25gs lu Wvxvnyvi"가 됩니다. 주의할 점은 대소문자를 유지해야 하고, 알파벳이 아닌 문자는 변경되지 않아야 합니다. 테스트 결과 GPT-4o는 첫 번째 시도에서 테스트를 통과하였습니다.

    파이썬 Very hard 단계 문제 통과 화면

    다음은 Expert 단계 문제입니다. 주어진 문제는 숫자로 이루어진 문자열에서 홀수/짝수 또는 짝수/홀수로 번갈아서 연결되는 숫자로 이루어진 가장 긴 부분 문자열을 찾는 것입니다. 예를 들어, "225424272163254474441338664823"이라는 문자열에서 가장 긴 번갈아서 연결되는 부분 문자열은 "272163254"입니다. 이 문제를 해결하기 위해서는 주어진 문자열을 순회하면서 번갈아서 연결되는 부분 문자열을 찾아야 합니다. 그리고 이 중에서 가장 긴 부분 문자열을 반환해야 합니다. 만약 길이가 같은 부분 문자열이 여러 개라면, 가장 먼저 나타나는 부분 문자열을 반환해야 합니다. 테스트 결과 GPT-4o는 아래 화면과 같이 첫 번째 시도에서 테스트를 통과하였습니다.

    파이썬 Expert 단계 문제 통과 화면

    코딩 성능 테스트 결과 GPT-4o의 코딩 성능은 매우 우수한 것으로 확인되었습니다. Claude, Llama3 등 지금까지 테스트한 여러 모델 중 Very Hard와 Expert 난이도의 문제를 첫 번째 시도에서 모두 통과한 모델은 처음입니다. 

    추론 테스트

    다음은 추론 테스트입니다. 문제의 출처는 유튜버 Matthew Berman이며, 참고로 Claude3의 답변과 비교를 해보았습니다. 

    첫 번째 문제는 다음과 같습니다. 

    "5장의 셔츠를 햇빛에 건조하는데 4시간이 걸린다고 해보자. 그렇다면 20장의 셔츠를 건조하는 데는 얼마나 걸릴까요? 각 단계를 차근차근 설명해 주세요. 여러 셔츠를 동시에 건조할 수 있습니다." - 정답 : 4시간

    아래 화면과 같이 Claude3 Opus는 정답을 맞혔지만, GPT-4o는 틀린 답을 제시하였습니다. 

    셔츠 건조 문제에 대한 GPT-4o(좌측)와 Claude3(우측)의 답변

    추론 테스트 두 번째 문제는 살인자 문제입니다. 

    "방 안에는 살인자가 세 명 있습니다. 어떤 사람이 방에 들어와 그중 한 명을 죽입니다. 아무도 방을 나가지 않습니다. 방에 남아 있는 살인자는 몇 명입니까? 단계별로 추론 과정을 설명하세요." - 정답 : 3명

    마찬가지로 Claude3 Opus는 정답을 맞혔지만, GPT-4o는 정답을 맞히지 못하였습니다. 

    살인자 문제에 대한 GPT-4o(좌측)와 Claude3(우측)의 답변

     

    다음 추론문제는 GSM8K (Grade School Math 8K, 8,500개의 다양한 초등학교 수학 서술형 문제 데이터셋)입니다. 

    "베티는 새 지갑을 위해 돈을 모으고 있습니다. 새 지갑의 가격은 $100입니다. 베티는 필요한 돈의 절반만 가지고 있습니다. 그녀의 부모는 그 목적을 위해 $15를 주기로 결정했고, 할아버지와 할머니는 그녀의 부모들의 두 배를 줍니다. 베티가 지갑을 사기 위해 더 얼마나 많은 돈이 필요한가요?" - 정답 : 5달러

    이번 문제는 두 모델 다 정답을 맞혔습니다. 

    GSM8K 문제에 대한 GPT-4o(좌측)와 Claude3(우측)의 답변

    GPT-4o 모델은 코딩 테스트에서 우수한 성능을 보여주었지만 추론 테스트에서는 세문제 중 두 문제를 맞히지 못함으로써, Claude3 모델보다 낮은 수준을 보여 주었습니다. 

     

    맺음말

    오늘은 OpenAI에서 출시한 최신 멀티모달 인공지능 플래그십 모델 GPT-4o를 살펴보았습니다. GPT-4o는 멀티모달 입력 처리, 인간 수준의 음성 대화, 향상된 언어 지원, 인터넷 검색 기능, 뛰어난 코딩 성능을 바탕으로 텍스트, 음성, 이미지 입력을 기본적으로 이해하고, 이를 종합적으로 활용하여 다양한 작업을 수행할 수 있는 강력한 모델입니다.

     

    코딩 성능 테스트에서 GPT-4o는 매우 우수한 성적을 보여주었으며, 특히 스네이크 게임과 어려운 코딩 문제들을 첫 시도에서 성공적으로 해결했습니다. 반면, 추론 테스트에서는 Claude3 모델보다 낮은 성능을 보였지만, 여전히 강력한 모델임에는 틀림없습니다. GPT-4o는 텍스트, 오디오, 이미지 등을 모두 다룰 수 있는 멀티모달 능력과 빠른 응답 속도로 교육, 헬스케어, 고객 서비스, 크리에이티브 산업 등 여러 분야에서 혁신적인 변화를 가져올 수 있을 것으로 기대됩니다.

     

    오늘 블로그는 여기까지입니다. 저는 다음에 더욱  유익한 정보를 가지고 다시 찾아뵙겠습니다. 감사합니다. 

     

    https://fornewchallenge.tistory.com/

     

     

     

    2024.02.27 - [AI 도구] - 🤯 파이데이터(Phidata) : 5줄 코드로 토큰 과금없는 AI 어시스턴트 만들기

     

    🤯 파이데이터(Phidata) : 5줄 코드로 토큰 과금없는 AI 어시스턴트 만들기

    안녕하세요! 오늘은 간단한 파이썬 코드 5줄 만으로 다양한 기능을 무료로 구현할 수 있는 파이데이터(Phidata)에 대해서 알아보겠습니다. 파이데이터는 함수 호출(Function Calling)을 사용하여 AI 어

    fornewchallenge.tistory.com

     

    반응형