글로벌 AI 해커톤 후기

글로벌 AI 해커톤 후기

2023, Sep 30    

해커톤 일정과 팀 배정 및 목표


미국 본사에 주최하는 글로벌 AI 해커톤을 2023년(9/19-9/20)에 진행하였다.

(Korea 및 APAC은 9/20-9/21에 진행)

나의 Team은 29번째 팀으로 ChatGPT에 의해 Code Crafters 이름으로 배정받았고 팀 리더역할을 맡게 되었다.

나의 Team은 29번째 팀으로 ChatGPT에 의해 Code Crafters 이름으로 배정받았고 팀 리더역할을 맡게 되었다.

이번년도 해커톤의 목표는 모든 엔지니어에게 AI 도구 학습과 Best Practices 를 위한 기술 향상 목표를 위해 주최했다고 한다.

APAC 부사장이 Korea IT Head 에게 한국 팀 참여를 독려해서 우리팀 매니저도 나에게 참여를 해보는게 어떻겠냐고 해서 감사하게도 인생 첫 해커톤을 참여하게 되었다.

누가 하라해서 강제 참여하는 분위기도 아니고 나의 의사가 참여에 가장 중요한 부분이였고, 기술적이나 경험상 얻을 수 있는게 많겠다고 생각하여 꼭 참여해보고 싶었다.

AI 해커톤 툴 선정


AI 툴 사용은 정해지지 않았지만 텐서플로 같은 경우 맛보기로 기초 공부를 하였는데, 모델링을 하는 데 기초 레벨부터 직접 작업해야 하기 때문에 나같은 입문자가 사용하기 어렵고, 짧은 시간내에 목표를 완료하기에는 쉽지 않다고 생각했다.

그리고 사내 동영상 강의 사이트와 위키 등을 보면 Azure OpenAI 기반으로 작성된 것들이 많았고, 우리가 사내 리소스와 더불어 결과물을 빨리 내려면 Azure 기반으로 AI 챗봇을 만들기 위해서는 이미 모델링이 된 상태인 OpenAI를 사용하는것이 효율적이라고 판단해서 OpenAI로 선정하였다.

OpenAI 중요 파라미터 설정


Azure Cloud에서 playground를 지원한다.

Azure chat playground

Azure chat playground

설정 중 중요한 것 은 temperature 및 Top p는 생성된 텍스트의 다양성과 신뢰도를 제어하는 데 사용되는 설정이다.

Temperature

모델이 생성할 다음 단어를 선택할 때 얼마나 다양한 단어를 선택할지 결정한다.

즉, 단어 선택에 있어 얼마나 까다로운지를 제어한다.

temperature 값이 높을수록 예측하기 어렵고 다양한 텍스트가 생성된다. 그러나 temperature 값이 낮으면 보다 일관되고 균일한 텍스트가 생성된다.

온도가 높낮음에 따라 단어 선택이 일정하거나 또는, 가능성이 높은 단어를 선택한다

온도가 높낮음에 따라 단어 선택이 일정하거나 또는, 가능성이 높은 단어를 선택한다

Top p 모델이 다음에 선택할 후보 단어의 수를 제한하는 역할을 한다.

Top-p 값이 높을수록 후보 단어 수가 많아져 더 다양한 텍스트가 생성됨. (1.0에서는 모든 단어가 후보가 된다) Top-p 값이 낮을수록 후보 단어의 수가 줄어들어 선택한 텍스트의 신뢰도가 높아짐. (0.5에서는 상위 50%의 가장 일반적인 단어만 후보가 됨)

예를 들어 다음과 같이 다음에 선택할 수 있는 단어가 20개라고 가정한다:

Untitled

Top-p가 0.05인 경우 상위 5%의 단어(예: the)만 선택할 수 있다.

반면 Top-p가 0.5인 경우 상위 50%의 단어(“the”, “a”, “cat”, “sat”, “on”, “mat”, “it”, “was”, “and”, “ate”) 중에서 무작위로 선택한다.

요컨대, 온도는 모델의 선택 다양성을 제어하고 Top p는 후보 단어를 제한하여 생성된 텍스트의 신뢰도를 제어하는데 사용되는 것을 알았다.

중요 옵션 파라미터들 말고도 정말 중요한 것이 또 남았다 ❗️

토큰 limit 해결을 위한 문제해결


GPT 모델 제품군은 텍스트에서 흔히 볼 수 있는 문자 시퀀스인 토큰을 사용하여 텍스트를 처리한다.

이 모델은 이러한 토큰 간의 통계적 관계를 이해하고 토큰 시퀀스에서 다음 토큰을 생성하는 데 탁월하다.

Tokenizer 테스트 해보기

채팅 내용은 아래와 같고 챗 내용들이 점점 증가한다고 가정하자.

Untitled

[
    {
        "role": "system",
        "content": "You are an AI assistant that helps people find information."
    },
    {
        "role": "user",
        "content": "안녕"
    },
    {
        "role": "assistant",
        "content": "안녕하세요! 도움이 필요하신가요? 무엇을 도와드릴까요?"
    },
    {
        "role": "user",
        "content": "한국의 GDP 순위가 몇이야?"
    },
    {
        "role": "assistant",
        "content": "2020년 기준으로 한국의 GDP 순위는 세계에서 11위입니다."
    }
]

토큰 수가 한계에 다다르면 아래와 같이 에러가 발생한다:

서버 환경에서도 토큰 limit error를 경험해서 재현을 했지만, 이렇게 Web UI 클라이언트 테스트 환경에서 미리 체험을할 수 있는게 Azure OpenAI의 장점인 것 같다.

Untitled

Untitled

ChatGPT와 같은 인공지능과 대화를 하려면 질문을 할 때마다 이전에 했던 다이얼로그를 보내야 한다.
질문을 하고 다음 질문을 보낸다고 가정해 본다.
이는 API 요청 메시지에 콘텐츠를 쌓아두는 방식으로 구현할 수 있다.
질문이 많을수록 메시지의 데이터는 더 커진다.

주황색, 파란색, 초록색, 보라색, 핑크색 은 메시지 각 대화의 맥락으로 가정한다:

1. 한국 음식을 추천해줘

2. 불고기를 만드는 법을 알려줘

3. 김치의 종류를 알려줘

4. 피보나치 수열을 구현했는데 왜 16이 아니라 55야?

5. 더 나은 시간 복잡도를 얻을 수 있는 효율적인 방법을 추천해줄래?

6. 자바스크립트로 변환해줘

7. 어떤 언어가 성능이 더 좋아?

8. 응, 내 첫번째 질문은 Leetcode 기준으로 난이도가 얼마정도 되는지 알려줘.

9. 격투 게임을 추천해줘

10. 오늘 날씨가 어때?

11. KPop 음악을 추천해줘

12. 앞서 질문한 피보나치 수열과 난이도가 비슷한 리트코드 문제를 추천해 줄래?

토큰의 제한으로 인한 토큰의 효율적인 방법이 뭐가 있을까 고민을 했다.

가장 최근 대화 2개를 제외한 이전 과거 대화 제거
현재 질문이 6번인 “자바스크립트로 변환해줘” 위치한 경우, 메시지 배열에서 마지막 2 개의 대화만 보내는 방법이다. (4번, 5번이 6번과 같은 대화의 맥락임)
이 방법은 6번과 관련없는 첫 번째 부터 주황색 질문 세 개가 제거되고 질문을 보내기 때문에 효율적일 수 있다.
그러나, 내 질문의 위치가 현재 핑크색인 “KPop 음악을 추천해줘”가 가장 최근의 질문인 경우,
최근 두 대화가 초록색과 보라색 질문이 있기 때문에 AI가 엉뚱한 답변을 할 수 있다.
이로써 최근 대화로 대화의 흐름을 유지하면서 토큰 제한을 관리하기에는 예외 케이스가 발생할 수 있다.

이 문제를 해결하기 위해 대화 요약하기
최신 대화를 통해 토큰 사이즈를 줄일 수 있지만, 또 다른 효율적인 방법을 하기 위해서는 프롬프트를 이용하여 대화의 맥락을 요약하는 것이다.

챗 서비스 요청 및 응답 심플 구조:
챗 서비스 요청 및 응답 심플 구조

위 구조는 챗 서비스 요청 및 응답 관련해서 복잡한 부분을 빼고 최소한의 구조만 그린 예시이다.
위 구조를 머리에 잠시 넣고 이미지 트레이닝을 해본다.

[
    {
        "role": "user",
        "content": "한국의 음식의 종류를 알려줘"
    },
    {
        "role": "assistant",
        "content": "한국은 다양한 맛과 특별한 조리법으로 유명한 음식 다방면에서....(중략)"
    },
    {
        "role": "user",
        "content": "한국의 불고기에 설명해줘."
    },
    {
        "role": "assistant",
        "content": "불고기 (Bulgogi)는 대표적인 한국의 고기 요리 중 하나로, 부드럽고 맛있는 양념 소스로 육류를 조리하는 요리입니다."
    },
// ...(중략)
]

위 토큰의 수가 증가하여 유저의 에러를 방지하고자 아래와 같이 토큰 수를 관리한다.

  1. 클라이언트에서 유저가 챗을 입력할 때 토큰 수 를 구한다. (gpt-tokenizer 빠른시간 내에 토큰을 어떻게 분리하고 구할까 고민이 컸는데, 정말 유용한 라이브러리였음.)
  2. Azure OpenAI 챗 생성 시, 서버 응답에 total_tokens 의 값이 지속적으로 받아옴.
  3. 1번의 클라이언트에서 유저가 챗을 입력할 때 토큰 수 와 2번의 서버 응답의 total_tokens 를 합산하여 미리 지정한 최대 토큰 수의 값이 같거나 이상일 때 챗요약 API를 호출한다.

내용을 요약해달라는 프롬프트를 이용하여 챗내용을 요약한다.

아래의 내용들을 요약해줘:

1. 한국의 음식의 종류를 알려줘
2. 한국은 다양한 맛과 특별한 조리법으로 유명한 음식 다방면에서....(중략)
3. 한국의 불고기에 설명해줘.
4. 불고기 (Bulgogi)는 대표적인 한국의 고기 요리 중 하나로, 부드럽고 맛있는 양념 소스로 육류를 조리하는 요리입니다.

요약 프롬프트를 활용한 응답 결과는 아래와 같다.

한국 음식 다양성과 대표적인 음식 종류에 대한 설명과 함께, 한국의 대표적인 고기 요리인 "불고기"에 
대한 특징, 재료, 조리 방법, 곁들임 음식에 대한 정보를 포함한 내용입니다.

물론 위 한국의 음식과 불고기 내용말고도 대화맥락과 상관없는 “해리포터” 같은 내용이 있더라도 대부분 전체 대화의 틀에 벗어나지 않는 선에서 요약을 해기 때문에 이 방법을 유용하게 활용하였다.

물론 이것도 무조건적인 Best practice 는 아니지만, 기존 서비스들의 평균 대화 수, 문자 수 등을 분석하여 지나치게 세분화하지 않도록 최적의 솔루션을 위해 상황에 따라 적절히 사용하는 것이 중요하다고 생각한다.

OpenAI Whisper Model

https://platform.openai.com/docs/guides/speech-to-text/supported-languages

음성-텍스트 변환 API는 최첨단 오픈 소스 대형 V2 Whisper 모델을 기반으로 transcriptionstranslations 이라는 두 가지 엔드포인트를 제공한다.

다음과 같은 용도로 사용할 수 있습니다:

  • transcriptions: 트랜스크립션 API는 트랜스크립션하려는 오디오 파일과 오디오를 트랜스크립션하기 위해 원하는 출력 파일 형식을 입력으로 받는다. 현재 여러 입력 및 출력 파일 형식을 지원한다고 한다.
  • translations: 번역 API는 지원되는 모든 언어의 오디오 파일을 입력으로 받아 필요한 경우 오디오를 영어로 변환한다.

파일 업로드는 현재 25MB로 제한되며, 지원되는 입력 파일 형식은 mp3, mp4, mpeg, mpga, m4a, wav, webm 파일이 지원된다고 한다. (2023년 9월 24일 기준)

윤하 - 오르트구름

윤하 - 오르트구름

OpenAI 사이트에서 가수 윤하의 오르트구름을 Whisper API 를 사용하여 번역한 것 을 볼 수 있다. (2023-09-24 기준)

해커톤 서비스 구현(SentiTok)

우리는 sentiment(감정) tok(talk의 어원)을 합성하여, SentiTok 이라는 AI ChatBot 감정 분석 서비스를 개발하였다.

1일 차에는 AI ChatBot을 개발하였다.

기본적으로 프롬프트 기반 가상의 GDTS 텔레콤을 학습시켜 챗봇을 구현하였다.

GDTS 텔레콤이 제공하는 보이스 데이터 서비스가 무엇이냐를 포함한 질문을 하면 즉시 대답을 하고 GDTS가 아닌 질문에 대해서는 엉뚱한 대답 및 할루시네이션(허위 정보)을 생성할 수 없도록 막았다.

Untitled

2일 차에는 감정 분석 서비스를 개발하였다.

감성 분석은 고객과 상담원 간의 상호작용을 한 단계 더 발전시킨다.

텍스트 또는 오디오 형식의 대화를 분석하여 귀중한 고객 프로필 인사이트를 제공한다.

Untitled

  • Transcript

가상의 상황을 만들어서 타이완 팀으로부터 오디오 녹음파일을 요청했고 중국어로 된 오디오 파일을 transcript API를 호출하면 아래와 같이 영어로 자연스럽게 번역이 된 것을 확인할 수 있다.

Hello, this is TaiQiangShou's customer service center, Bixin Song. May I ask if you are Ms. Yao NaiHua? Yes, hello. Ms. Yao, I'm sorry to bother you. Because on August 14th, you purchased a mobile insurance. Yes. Yes. Ms. Yao, I'd like to talk to you about this. Because I noticed that your contact information and e-mail address were filled in incorrectly. So, Ms. Yao, if you have time, please go to... Because you purchased a mobile phone from YangChongShaLu, right? I purchased it from GongDingDong, not ShaLu. Oh, from ZhangHua, right? Yes. Yes. So, Ms. Yao, if you have time, please go back to the store in YuanMenShi tomorrow and ask Mr. Zhang to help you change your phone and e-mail address. But if the phone number is incorrect, you won't call me. Yes, because I just contacted the store. Because the phone number I used to call you was from another customer. The phone number was provided to me by them. They hope you can... Wait a minute. Is the phone number on the phone book my husband's? Because the phone I bought is for my husband. The phone number on the phone book is 0928. This is... No, not this one. No, no, no. Okay. So, they found that they filled in your phone number and e-mail address incorrectly. So, they want to ask you to go back to the store tomorrow and ask Mr. Zhou to help you deal with it. Is it Mr. Zhang or Mr. Zhou? Mr. Zhou from ZhouGong. Mr. Zhou? Yes, Mr. Zhou. Okay. Okay. Because I have something to do tomorrow. Can I go there two days later? Yes, you can. You just have time to go there and ask them for help. Okay. They will change the phone number and e-mail address. They found that the phone number is incorrect. You can check again when the time comes to see if they filled in the wrong personal information. Okay. Thank you, Ms. Yang. Thank you. Okay. Thank you.

Untitled

  • Sentiment Analysis

transcript가 끝나고 analyze를 호출하면 번역된 결과를 통해 고객과 에이전트의 기분 상태도 알 수 있다.

Untitled

  • Customer Profile Insights

현재 고객의 상황에 대해서도 이해하고 통찰한 분석 결과도 알수 있다.

Untitled

서버 아키텍처

Untitled

느낀점

  1. 짧은 시간 속 계획 했던대로 100% 흘러갈 순 없다는 것(계획과 다른 플랜으로 흘러가면 거기에 따른 대책도 항상 생각해야 한다)
  2. 48시간은 정말 짧았다. 잠자는 시간제외 집에서 택시타고 다니면서 끊임없이 생각하고 집중하다보니 오히려 잠이 안왔던 것 같다. (물론 긴장이 끝나고 주말 내내 펑펑 잤지만..)
  3. 새로운 AI/생성형AI 지식 및 기술을 배우는 데 얼마나 도움이 되었을지 회사에서 초점을 많이 기울였을 것 같은데, 난 정말 도움이 많이 되었던 것 같다.
  4. 나같은 AI 초심자들에겐 상당히 많이 도움이 되었다는건 부정할 수 없는 사실이고, 프롬프트에 대한 이해, 토큰 limit 관리 등 점점 AI에 대한 중요도가 높아지는 요즘 한번쯤 비 AI 엔지니어들도 경험해보면 좋을 것 같다.
  5. “해커톤을 다시하면 참가할거냐?” 라고 하면 또 참고하고 싶다. 주제가 AI든 무엇이든 긍정적인 생각으로 도전해보는게 좋다 생각한다. 또한, 재밌었고 보람있었고 나에게는 좋은 경험이 었다.