Jump to content

CLOVA Studio 관리자2

Members
  • 게시글

    25
  • 첫 방문

  • 최근 방문

  • Days Won

    6

CLOVA Studio 관리자2 last won the day on March 31

CLOVA Studio 관리자2 had the most liked content!

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

CLOVA Studio 관리자2's Achievements

Explorer

Explorer (4/14)

  • Reacting Well Rare
  • One Year In Rare
  • Collaborator Rare
  • First Post
  • Dedicated Rare

Recent Badges

9

Reputation

  1. 안녕하세요, @정규면님, 클로바 스튜디오 담당입니다. 현재 클로바 스튜디오 서비스 정책상 테스트 앱/서비스 앱을 통한 multiple 출력을 제공하지 않고 있습니다. 반복 요청해서 결과 출력을 하는 형태로 검토 부탁드리며, 안정적인 서비스 제공을 위해 높은 TPS로 요청한 경우 조정이 필요할 수 있습니다. 감사합니다.
  2. 안녕하세요, @Bede님, 클로바 스튜디오 담당입니다. 약관에 명시되어있는 것처럼, 서비스 성능 개선, 운영, 관리 등의 목적으로 데이터를 활용할 수 있습니다. 감사합니다.
  3. @장선우님, 1. 아래와 같이 이용을 부탁드립니다. v1/completions/{model} 2. 저희도 내부적으로 다양한 테스트를 해보았을때, 적절한 라벨링을 추가하는 것이 성능이 좋았습니다. 따라서 '제품:' 처럼 라벨링을 추가하는 것을 권장드립니다. 감사합니다.
  4. 안녕하세요, @한태구님, 클로바 스튜디오 내부 정책상 TPS 정보는 공개하지 않는 점 양해 부탁드립니다. 요청이 많은 경우 Too many request 에러가 발생할 수 있으며 경우 잠시 후 다시 수행을 해주시면 되겠습니다. 더욱 좋은 서비스를 제공하기 위해 노력하겠습니다. 감사합니다.
  5. 안녕하세요, @nsjpa님, 클로바 스튜디오 기획 담당입니다. 1. 튜닝을 진행하면 해당 계정에 한해서 튜닝 모델 이용이 가능합니다. 튜닝된 작업물이 기본 모델이 추가되지 않습니다. 현재 플레이그라운드에서 튜닝된 모델을 불러오는 기능은 제공하지 않으며, 검토중에 있습니다. 튜닝 작업을 수행하신 뒤 테스트앱을 발급하시어, API 연동 및 파라미터 조절등을 하실 수 있습니다. 각각 서로 다른 튜닝 작업을 진행하신 것은 누적되는 방식이 아닙니다. 따라서 튜닝 작업을 수행하신 뒤 또 다른 튜닝 작업을 수행하시는 것은 별개의 작업이며, 마찬가지로 토큰이 중복 차감될 수 있습니다. 2. 현재 플레이그라운드에서 해보았을때, 말씀하신대로 결과가 잘 나오지 않았습니다. 아래와 같이 프롬프트 예제를 더 추가하였더니, 정답에 가깝게 출력되었습니다. 아무래도 이런류의 작업은 2048 토큰의 제약 때문에 예제를 많이 넣을수 없을텐데요. 짧은 유형의 예제들로 구성해보시는건 어떨까요? 원문에 없는 키워드가 추출되는 문제는 튜닝을 통해서 개선이 될 수 있으리라 생각됩니다.
  6. @Keepin님, 안녕하세요. 클로바 스튜디오 기획 담당입니다. 1. 파이썬과, 스튜디오에서 문제 없이 출력이 되었다면, 클라이언트 문제일 것으로 예상합니다. 포스트맨 포맷 파일을 한번 전달해주실 수 있으실까요? 아래 이메일 주소로 전달해주셔도 됩니다. dl_hyperclova_cs@navercorp.com 2. 기대결과와 현재 출력되고 있다는 이상한 답이 어떤 것인지도 자세한 설명을 부탁드립니다. 감사합니다.
  7. 안녕하세요, @nsjpa님, 클로바 스튜디오 담당입니다. 1. Inject start text의 경우, 모델의 출력 결과 앞에 단순히 텍스트를 밀어넣는 것이라, Inject에 ↵키워드:↵질문: 를 입력하는 방식으로는 두 항목이 각각 출력할 수는 없습니다. ▼ 아래와 같이 프롬프트에 '키워드', '질문'을 예제로 구성하시고, 실행하시면, 설명에 해당하는 키워드와 질문을 생성할 수 있습니다. 2. - 플레이그라운드에서 작업하신 내용들은 자동 학습되지 않습니다. - 네, 업로드하시는 데이터셋에 최적화된 형태로 문장이 생성됩니다. - 튜닝을 하고나면, 튜닝 상세 페이지에서 인풋을 넣고 결과를 테스트해보실 수 있는데요. 이때 파라미터는 가장 최적화된 값으로 설정되어 있습니다. 테스트 앱 발급을 통해 튜닝 모델의 파라미터 변경이 가능합니다. - 초거대 언어모델의 부족한 부분은 아마도 시의성일 것입니다. 프롬프트에 날짜에 대한 힌트를 넣으면, 해당 날짜를 기준으로 출력을 할 수 있을텐데요. 프롬프트에 기반해서 출력한 것이지 정확한 오늘 날짜가 나오기는 어려울 듯 합니다. 감사합니다.
  8. 안녕하세요, @ascent님, 클로바 스튜디오 담당입니다. 답변이 늦어져 죄송합니다. inject start text에서 "\n부제: "를 "\n부제:"로 뒤에 붙어있는 띄어쓰기(공백)를 지우시고, 시도해보시겠어요? 플레이그라운드에서는 뒤에 공백이 붙은 경우 공백을 제거해서 실행해주는 로직이 들어가 있습니다. 공백이 붙은 상태로 실행하면 정상적이지 않은 결과가 나올 가능성이 생깁니다. 따라서 뒤에 공백이 붙은 상태에서 실행하는 것보다는, 공백을 제거하고 실행하시는 것을 권장드립니다. 감사합니다.
  9. 안녕하세요, 클로바 스튜디오 담당입니다. 익스플로러의 '일괄 생성' 기능을 이용하시면, 작업하신 튜닝 모델에 여러 문장의 인풋을 넣어서 결과를 한번에 출력받을 수 있습니다. 감사합니다.
  10. 안녕하세요 🙂 가이드의 오류는 수정을 검토하겠습니다. 각 파라미터 설정값의 범위를 알려드립니다. Top P: 0~1.0 Top K: 0~128 Maximum tokens: 0~2048 Temperature: 0~1.0 Reptition penalty: 0~10 Top P는 "Top P가 누적 확률 값 범위에 포함된 토큰을 후보로 선택하는 개념"이 맞습니다. API 문서의 문구를 수정하겠습니다. 토큰에 페널티를 적용하는 점에서 OpenAI에서 제공하는 penlaty와 유사합니다. 다만 OpenAI의 경우 presense(토큰이 기존에 최소 1회 노출) / frequency(같은 토큰이 여러번 노출)로 조건을 세부화시킨 듯 합니다. 이 부분은 OpenAI의 문서를 참고하시면 좋을 것 같습니다. 감사합니다.
  11. 성능 끌어 올리기 클로바 스튜디오에서는 프롬프트 작업을 한 번 실행하는 것에서 그치는 것이 아니라 개발 프로세스상에서 수정과 검증을 반복하는 과정을 거쳐야 합니다. 차수별로 생성 결과에 대해서 품질을 평가하며 60~70점 수준의 성능까지 끌어올릴 수 있도록 합니다. 이 과정을 통해 최적화된 프롬프트를 완성하는 것이죠. 우리는 이것을 프롬프트 엔지니어링이라고 부릅니다. 하지만 플레이그라운드에서 작업을 하다 보면 원하는 결과가 나오지 않는 상황에 직면하게 됩니다. 아무리 파라미터 조절을 하고 프롬프트를 수정해도 기대하던 결과와 다르게 나오는 것이죠. 기본 모델(Backbone model)로는 성능 개선의 한계에 도달했기 때문입니다. 클로바 스튜디오는 이런 문제들을 해결할 방법을 가지고 있습니다. 바로 ‘튜닝’이죠. 사용자가 보유한 데이터셋을 가지고 모델을 최적화시킬 수 있습니다. ▼ 튜닝을 활용하면 작업 성능이 오르지 않던 정체 구간에서, 성능을 끌어올릴 수 있습니다. 저는 오늘 여러분께 프롬프트로 잘 안되던 작업을 튜닝해서 가능해지도록 한 사례를 공유해 드리려고 합니다. ▼ 클로바 스튜디오에서는 맞춤법 교정기를 쉽게 만들 수 있는데요. 여타 맞춤법 서비스와 비교를 했을 때 성능도 꽤 괜찮은 편입니다. 하지만 저는 다른 형식으로 출력되기를 희망했습니다. ▼ 문장에서 교정이 필요한 단어를 추출한 뒤, 화살표(→) 표기를 가지고 수정된 단어를 보여주는 형식을 원했습니다. ▼ 그렇지만 실행 결과가 좋지 않았습니다. 틀리지 않은 단어를 수정하거나, 다른 단어로 대치시켜버리는 등의 문제가 있었습니다. 여기서 저는 한 가지 의문을 품게 되었습니다. 오류 문장을 교정된 문장으로 변환하는 방식은 잘 되는데, 어째서 오류 문장을 {단어} → {단어 교정} 형태로는 잘 안되는 것일까요? 이 문제를 해결하기 위해 튜닝 기능을 사용해봤습니다. 그럼 지금부터, 좋은 결과를 내지 못했던 작업을, 좋은 결과를 낼 수 있는 작업으로 개선했던 사례를 공유하겠습니다. 튜닝, 꼭 해야 해요? ① 현재 플레이그라운드에는 2048 토큰이라는 제약 조건이 있는데요, 튜닝을 이용하면 이러한 제약 조건 없이 예제를 더욱 다양하게 구성할 수 있습니다. ② 원하는 방식으로 데이터셋을 구성하여, 니즈에 적합한 방향으로 출력이 될 수 있도록 할 수 있습니다. ③ 모델을 학습하면, 모델이 가벼워지며 Task의 수행 시간 단축되고 비용을 절감할 수 있습니다. 데이터셋을 모으는 일 튜닝을 시작하기에 앞서 가장 중요한 것이 바로 데이터셋입니다. 데이터셋을 이미 보유하고 있다면 괜찮으나, 데이터셋이 없는 경우 데이터를 확보하는 데에 시간이 오래 걸릴 수 있습니다. 튜닝으로 좋은 성능을 내려면 최소 1,000건 이상의 데이터가 필요하기 때문이죠. ① 맞춤법 데이터는 어디서 모았나요? 네이버 국어사전 퀴즈, 네이버 국어사전 우리말 바로쓰기, 국립국어원 온라인 가나다, 모두의 말뭉치, 외에도 인터넷상에서 수집한 자주 틀리는 맞춤법 자료들을 참고하여 수동으로 하나씩 직접 작성했습니다. ② 1,000개 데이터를 모으는 데 얼마나 걸렸나요? 개인당 작업 분량에는 다소 차이가 있으나, 4명이 참여했으며 데이터셋 1,200개만큼 모으는 데에 8~9일 정도 소요되었습니다. 다만, 맞춤법의 경우 대부분 정답이 명확히 있기 때문에 다른 유형의 작업보다는 수월한 편일 듯합니다. 반면에 중복되지 않은 새로운 데이터를 구하는 것은 힘들었습니다. ③ 데이터를 쉽게 불릴 방법은 없을까요? 적은 데이터를 가지고 수 배의 데이터로 늘릴 수 있는 ‘데이터 확장(Data Augmentation)’ 기능을 곧 공개합니다. ④ 데이터셋을 구할 수 있는 곳이 있나요? 현재 여러 기관에서 데이터를 개방하여 모두가 쉽게 용이하게 활용할 수 있도록 하고 있습니다. 단, 실서비스 제공을 위해서는 별도 약관 확인 및 법무 검토가 필요할 수 있습니다. AI-Hub (https://www.aihub.or.kr/) 모두의 말뭉치 (https://corpus.korean.go.kr/) 공공데이터포털 (https://www.data.go.kr/) 농식품 빅데이터 거래소 (https://kadx.co.kr/product) Hugging Face (https://huggingface.co/datasets) 본격! 튜닝 시작하기 데이터셋은 csv 혹은 json 형식을 지원합니다. 파일의 첫 번째 행은 Text, Completion이 포함되어 있어야 하며, 총 두 개의 열로만 구성되어야 합니다. ▼ Text 열에는 맞춤법이 틀린 문장을 넣고, Completion 열은 {단어} → {단어 교정} 형태로 구성했습니다. ▼ 모델 엔진을 선택합니다. 자세한 튜닝에 대한 가이드는 다음 링크에서 확인하실 수 있어요. (가이드 보기) ▼ 튜닝 학습이 완료되면 상세 페이지에서 인퍼런스 테스트를 할 수 있습니다. 입력하면 학습된 모델로 출력한 결과를 확인할 수 있지요. 자, 이제 결과를 살펴볼까요! ▼ 문장을 입력하면 {단어} → {단어 교정} 형태로 맞춤법을 교정해주고 있습니다. ▼ 간단한 띄어쓰기를 고쳐주기도 하고요. ▼ 오타를 찾아서 교정합니다. ▼ 문장을 조금 바꾸어 입력해도 맞춤법을 교정해주는 것을 확인할 수 있습니다. ※ 한 가지 알아둘 점은 현재 튜닝은 아래와 같은 인퍼런스 파라미터를 기본으로 하고 있는데요. 파라미터 조절로도 출력 결과에 차이가 있어서, 테스트 앱 발행을 통해 설정값 조절을 하는 것을 해보는 것도 추천합니다. 향후 플레이그라운드에서도 튜닝 모델을 불러와서 사용하실 수 있게 개선할 예정입니다. 튜닝의 성능을 검증하기 이제 튜닝된 모델의 결과를 검증해볼 시간입니다. 기존 프롬프트의 작업과 튜닝의 작업을 비교해볼까요? 문장 50개를 가지고 대략적인 차이를 비교해 보았습니다. ① 단어 추출 교정 프롬프트는 정답이 17개지만, ② 튜닝된 모델의 정답은 2배인 34개입니다. 원래 잘 되던 ③ 문장 변환 프롬프트의 정답이 31개인 걸 보면, 기존에 아예 안되던 프롬프트가 튜닝을 통해서 잘 되던 프롬프트에 버금가거나 상회할 정도로 개선되었다고 볼 수 있습니다. 여전히 오답을 내는 경우도 있었습니다. 이 부분은 데이터 보강, 인퍼런스 파라미터 조정 등을 통해 일부 개선할 수 있을 것이라 예상합니다. 마치며, 저는 이번 사례를 통해서 깨닫게 된 점이 있습니다. 잘 안되는 프롬프트를 튜닝하는 것은 비효율적일 수 있다는 것입니다. 시간을 들여 데이터셋을 만들고 잘 안되던 형식으로 튜닝을 진행해봤자, 단 몇 줄로 이루어진 최적의 프롬프트와 성능이 비슷할 수 있는 것입니다. 그래서 효율적인 프롬프트를 먼저 탐구해보는 것이 결과적으로는 시간과 비용을 절약해줄 수 있으리라 생각합니다. 잘 동작하는 프롬프트를 튜닝하면 성능이 월등히 좋아지지 않을까요? 이만 내용을 마치며, 다음에는 더욱 재미있는 내용으로 찾아올게요.
  12. 토큰(Tokenization) 이해하기 클로바 스튜디오를 잘 활용하려면 먼저 토큰이라는 개념에 대해서 이해하는 것이 좋습니다. 하이퍼클로바 언어 모델은 토큰들의 배열을 나타내는 확률 기반의 모형입니다. 여기서 토큰은 문장(sentence)보다 작은 단위인데요. 한 문장은 여러 개의 토큰으로 구성됩니다. 토큰 분리 기준은 그때그때 다를 수 있으며, 문장을 띄어 쓰는 것만으로 나눌 수도 있고, 의미의 최소 단위인 형태소 단위로 분리할 수 있습니다. (p.27, BERT와 GPT로 배우는 자연어 처리: 트랜스포머 핵심 원리와 허깅페이스 패키지 활용법, 이기창) 예제를 하나 보여드리겠습니다. 위 입력 문장을 토큰화한 작업의 결과는 다음과 같습니다. 작은 조각의 토큰이 모여 문장을 구성하는 원리입니다. 토큰은 주로 형태소 단위의 1-2 토큰으로 나뉘게 됩니다. 따라서 한 글자가 꼭 1토큰은 아니지요. 토큰 절약하기 현재 클로바 스튜디오에서 제공하는 테스트 앱은 Completion API 형태로, 프롬프트와 실행 결과를 합산하여 토큰을 계산하는 방식입니다. 그래서 적은 양의 출력 결과를 얻더라도, 입력한 프롬프트의 토큰도 매번 함께 차감됩니다. 예를 들어, 70토큰 만큼의 프롬프트를 입력하고, 30토큰 만큼의 결과를 얻었다면 100토큰이 차감이 된 것이고, 실행을 다시 하더라도 30토큰만 차감되는 것이 아니라, 프롬프트를 포함하여 100토큰만큼이 또 차감되는 것입니다. 실행을 10번 하면 1,000토큰을 소비하는 것이죠. 매번 실행할 때마다 토큰 소비가 클 수밖에 없고 사용자 입장에서는 부담이 될 수밖에 없을텐데요. 그래서 저는 효율적인 토큰 소비에 대해서 고민하게 되었습니다. ▼ 아래는 문장의 문체를 바꾸어주는 프롬프트의 실행 결과입니다. 프롬프트에는 총 19개의 예제(695토큰)가 쓰였으며, 1회 실행 시 생성 결과는 24토큰 정도 됩니다. Completion API에서는 프롬프트와 실행 결과를 합산해서 토큰 계산해야 하므로, 1회 실행 시 평균 사용 토큰은 695토큰에 24토큰을 더해서 720토큰 정도 됩니다. 100회 실행이라고 가정하면 약 7만2천 토큰을 이용하게 된다고 추산이 됩니다. 지금부터 이 실행 토큰을 줄여보도록 하겠습니다. ① 형식 단순화하기 프롬프트에 쓰이는 형식들은 전부 토큰 소비에 영향을 줍니다. 프롬프트에는 ‘새로운 문장 :’ 형식으로 되어 있었는데요. 이걸 줄여봐야겠다는 생각이 들었습니다. 그런데 한 가지 재미있는 사실을 알게 되었습니다. ‘새로운 문장 :’을 줄여볼 심산으로, ‘묘사:’로 통일시켰는데, 전체 토큰에서 변화가 없던 것입니다. 각각 8자, 3자로 글자 수도 차이가 있었는데 말이죠. 알고보니 ‘새로운 문장 :’은 3토큰으로 '묘사:'랑 같은 토큰 수 이었던 것입니다. 그래서 '변환'이라고 변경해 보았습니다. ‘변환:’은 ‘묘사’랑 같은 글자 수인데, 토큰은 각각 2토큰, 3토큰으로 차이가 있었습니다. ▼ 어쨌든 '변환:' 형식으로 예제들을 전부 맞추었으며, 전체 소비 토큰 686으로 ① 작업 대비 30 토큰 가량 아끼게 되었습니다. 차이가 크게 체감되지 않기 때문에, 다음 단계로 넘어가 봅시다. ② 불필요한 출력 결과 없애기 현재 프리셋에 입력되어있는 Inject는 플레이그라운드에서 사용자의 이용 편의성을 위해서 적용된 것입니다. 사용자가 실행을 누른 뒤, 다른 값을 바로 입력할 수 있게 하기 위함이죠. 그런데 Inject는 프롬프트에 포함이 되므로 토큰을 차감시킵니다. '### 문장:'은 5토큰입니다. 실서비스에서 사용되지 않는 것이라면, 이걸 매번 낭비하게 되는 것이죠. ▼ Inject를 전부 지웠습니다. 깔끔하게 '변환:' 이후부터만 문장을 생성하고, 출력값 뒤에 텍스트도 붙지 않습니다. 소비 토큰은 약 680으로 이전 ① 작업보다 6토큰 정도 절약하게 되었습니다. 아직도 큰 차이가 느껴지지 않고 '굳이?'라는 생각이 드네요. 방법을 찾아서 더 깊게 살펴봅니다. ③ 예제 사이의 ### 를 조절하기 ▼ 예제에 쓰이고 있는 ###를 조절해서 토큰을 아낄 수 있습니다. Stop sequence는 모델이 어디쯤에서 출력을 멈출지 알려주는 것인데요. 현재 프리셋의 예제에 쓰이고 있는 ###는 다른 형식으로도 쓰일 수 있습니다. ▼ 예를 들어, 아래와 같이 ##로 바꾸어도, 성능의 차이가 없습니다. #은 1토큰입니다. 이번 작업의 프롬프트에는 19개 정도의 예제가 들어가 있고 ###도 그만큼 반복되고 있습니다. #만 하나씩 지워도 20토큰 가까이 절약하게 됩니다. ▼ 실제로 프롬프트의 토큰은 640으로 이전 ③ 작업 대비 20토큰 가량 줄었습니다. 전체 소비 토큰도 656 토큰으로 이전 680 토큰 보다 30 정도 절약된 것입니다. 100회 실행을 한다고 치면, 65,680 토큰으로 이전보다 2,380 토큰이 세이브 됩니다. 결과 품질도 안정적으로 유지되고 있습니다. 저는 프롬프트 작업을 할 때 띄어쓰기. 즉, 공백 토큰에 민감하게 반응합니다. 왜냐하면 하이퍼클로바 언어모델은 공백도 1토큰으로 카운트하기 때문이죠. 그럼 이번에는 공백을 살펴볼까요? ④ 공백 줄이기 ▼ 프롬프트에 공백 토큰은 없나 둘러봅니다. 문장 뒤에 반복적으로 쓰이고 있는 공백 토큰을 발견해서 지워줍니다. 고작 1토큰이라고 생각할 순 있지만, 프롬프트에 공백이 10개 있다고 치면, 실행할 때마다 나도 모르게 10토큰씩 억울하게 날아가고 있는 것입니다. 여기부터 보여드릴 방식은 다소 실험적이라 굳이 따라하실 필요는 없습니다. 하지만 토큰 절약에는 효과적입니다. ▼ 만약 만들고자 하는 작업이 문장 변환처럼 한 문장씩으로만 이루어진 작업이라면, 마침표가 크게 중요하지 않다고 여겼습니다. 마침표를 찍을 일이 있다면, 서비스에서 직접 찍으면 되는 것이죠. 마침표는 1토큰입니다. 예제 19개에 문장, 변환 각각 2개씩 문장+마침표가 쓰이고 있으므로, 프롬프트에는 약 40여개의 마침표가 40 토큰으로 쓰이고 있으며, 실행할 때마다 40토큰씩 반복 소비되던 것입니다. ▲ 마침표를 제거하여 프롬프트 토큰을 599까지 줄였습니다. ④ 작업 대비 40 토큰 정도 절약된 것이며 ➀ 작업과 비교하면 무려 100 토큰이 절약된 것입니다. 작업의 품질도 초반 프롬프트와 크게 차이가 없으며, 결과 토큰은 10~20 사이를 유지하며, 글자 수 또한 60자 이내로만 처리합니다. 100회 실행으로 치면 사용 토큰은 6만1천으로 처음 작업과 비교하면 1만 토큰 정도 차이가 있습니다. 두둥! 토큰 계산기 작업을 하다 보면, 내가 입력한 글자 수와 토큰 수를 비교해야 하는 경우가 있는데요. 곧 업데이트될 예정인 ‘토큰 계산기’를 활용해보세요. 이제 입력한 문장의 토큰 수와 글자 수를 계산할 수 있습니다. 토큰 계산기를 활용해서 최적의 Maximum tokens 값을 찾거나, 효율적인 프롬프트를 만드실 수 있을 거예요. 지금까지 토큰 이해하기와 토큰 절약하기에 대한 포스트였습니다. 또 유용한 팁으로 찾아올게요!
  13. 본 포스팅은 2022년 9월 29일 CLOVA Engineering Blog에 먼저 게재된 글입니다. (바로 가기) 지난 포스팅에서는 HyperCLOVA 언어 모델을 활용하여 소설을 창작했던 경험을 소개했습니다. 지난 포스트 보기 이번 글에서는 그 소설을 하이퍼클로바 언어 모델로 어떻게 완성했는지 구체적인 방법에 관해서 설명해 볼게요. 클로바 스튜디오, 사람의 협업 도구가 되다 글을 쓰다 보면 한 번쯤 모니터 속 깜빡이는 커서만 멍하니 바라보던 경험이 있을 겁니다. 이 포스팅을 쓰고 있는 저 역시 글이 잘 써지지 않아 애꿎은 마우스 휠만 빙빙 돌리던 날들이 많았죠. 그랬던 제가 지금은 10회차 이상의 소설을 연재한 아마추어 작가가 되었습니다. 어떻게 가능했을까요? 그건 바로 사람의 글쓰기를 도울 수 있는 도구, 클로바 스튜디오 덕분입니다. 늘리고, 유도하고, 고르고, 바꾸고 소설 쓰기는 아래 그림처럼 크게 네 가지 방법으로 진행되었습니다. 첫째, 입력한 시놉시스를 기반으로 이야기가 이어 써지며 확장될 수 있도록 합니다. 확장된 이야기는 다시 프롬프트에 쓰일 수 있습니다. 둘째, 모델이 올바른 방향으로 생성해나갈 수 있도록 중간중간 지시하면서 결과를 유도합니다. 셋째, 이 과정에서 전개에 도움이 되는 문장이나 표현력이 좋은 문장들은 따로 수집합니다. 수집된 문장은 이야기 전개에 도움이 되는 경우 선별되어 사용됩니다. 넷째, 단조로운 문장의 표현력을 바꾸어서 문장을 더 흥미롭게 만듭니다. 첫 번째, 이야기의 눈덩이를 만드는 일 우리가 눈사람을 만드는 과정을 한번 생각해 볼까요? 처음에는 작고 보잘것없는 눈덩이지만 계속 굴리다 보면 어느새 커다란 덩어리가 되어 있죠. 글쓰기는 이 ‘눈덩이'를 만드는 것에서부터 시작합니다. 아래는 로맨스 판타지 장르의 소설을 만들었던 과정입니다. 작은 화실은 운영하던 주인공 세나가 화실에서 잠이 들었다가 눈을 떠보니 1920년대 프랑스 니스였고, 이곳에서 화가로서 성공하고 사랑하는 연인도 만나게 되는 내용입니다. 먼저 클로바 스튜디오에서 플레이그라운드라는 작업 영역에 간략한 시놉시스와 대사를 포함한 도입부 서너 문장을 프롬프트(Prompt)로 입력한 후 실행 버튼을 누릅니다. ➊ 모델은 기존에 작성된 부분과의 연결성을 고려하여 자연스럽게 다음 문장을 만들어냅니다. ➋ 이렇게 만들어진 결과물은 다시 프롬프트의 재료로 쓰입니다. ➌ 이 과정을 반복해 나가면서 문장을 생성합니다. 이 방법을 통해 작가는 자신이 구상한 이야기의 작은 눈덩이에서부터 시작해서 점차 그 분량을 키워나갈 수 있죠. ※ 프롬프트(Prompt): 하이퍼클로바 언어 모델을 수행하기 위해 입력하는 지시문과 예제문의 형태 두 번째, 사람의 손 터치로 모델의 창작을 주무르다 그렇다면 모델이 스스로 이어 쓰며 만들어간 이야기는 과연 재미있을까요? 아무래도 모델은 이야기꾼은 아니었나 봅니다. 솔직히 말해 모델이 스스로 만들어낸 이야기는 크게 인상 깊지 않았습니다. 인과관계 없이 단순히 장면을 나열하는 경우나, 이야기의 방향이 기대와 다르게 전개되는 경우가 많았습니다. 그러다 보니 비슷하게 소설 흉내는 내었지만, 어딘가 어색하고 재미가 없었죠. 일반적으로 플롯은 소설 속에서 일어나는 여러 사건이 효과적이고 개연성 있게 짜인 것을 말하는데요. 모델의 결과는 그렇지 못했죠. 그건 아마도 현재 모델이 플롯이나 문학적 장치와 같은 데이터를 충분히 학습하지 않았기 때문일 것입니다. 아래 그림은 모델의 순수한 출력 결과이며 전개에 문제가 있는 실패 사례입니다. 뜬금없는 인물이 갑자기 문을 두드리며 등장하며, 심지어 이름은 현아로 주인공이 가르치던 학생의 이름과 같습니다. 두 인물은 이야기를 나누다가 현아는 갑자기 자신이 아프다고 고백합니다. 주인공 세나는 다음날 일자리를 구하기도 하고, 갑자기 고향 집에 내려가겠다는 다짐을 합니다. 이렇게 맥락 없는 흐름이 연속되다 보면 독자 입장에서는 이해하기 어렵고 몰입감도 떨어지게 될 것입니다. 그래서 필요한 것이 사람의 개입이었습니다. 저는 언어 모델의 생성 결과 중간중간에 개입해서 모델이 이야기 흐름에서 벗어나지 않도록 했습니다. 한 가지 재미있는 사실은 약간의 개입만으로도 모델이 제가 의도한 대로 이야기를 이끌어 간다는 것입니다. 예를 들어볼까요? 아래 그림은 중간에 개입했던 흔적들입니다. 주인공 세나가 화실 운영에 어려움을 겪고 있다는 배경에 대한 설명에서 벗어나고 싶었습니다. 그래서 ‘그러던 어느 보통날이었다.’를 입력한 뒤 실행 버튼을 눌러 시간을 전환 시켰습니다. 모델은 ‘나는 여느 때와 같이 그림을 그리고 있었다.’라는 결과를 출력하며 장면을 바꾸어 전개를 이어갔습니다. 앞서 보여드린 실패 사례에서 수입과 월세에 대해 고뇌하던 우울한 감정의 주인공과는 다른 전개임을 확인하실 수 있습니다. ‘내가 자주 그리던 그림은’를 입력해서 모델이 그림에 대해 자세히 설명하게 하였습니다. 그리고 이제 본격적으로 판타지적인 소설 전개가 가능하도록 상황을 조성하였습니다. ‘지금부터 하는 이야기는 황당할 수 있다’, ‘그러던 중’ 등을 입력했습니다. 그 결과 주인공이 그리던 그림 속 여자가 자신을 쳐다보고, 심지어 주인공과 똑 닮았다는 형태로 흥미롭게 전개하게 되었습니다. 이 원리는 하이퍼클로바 언어 모델이 확률 기반의 생성 모델이기 때문인데요. 쉽게 말해 입력된 단어의 다음 단어를 확률적으로 예측하여 선택해 나가며 문장을 완성하는 것입니다. 이 원리를 이용해서 문장 중간에 단어나 문장을 직접 삽입하여 모델의 다음 출력 결과에 대해 영향력을 행사할 수 있었습니다. 몇 가지 예제를 더 보여드리겠습니다. ‘가까이’라는 단어를 넣어서 인물을 피사체 앞으로 옮기기도 하고, ‘어쩌면’이라는 단어를 넣어서 인물의 사유를 담아냅니다. ‘한 번은’을 넣어서 인물의 과거를 회상합니다. 그리고 ‘그때’라는 단어를 넣어 장면을 환기 시킬 수도 있습니다. 이때 누군가 등장을 하기도 하며, 새로운 사건이 발생하기도 합니다. 세 번째, 문장 조각들을 모으는 일 이야기의 뼈대를 만들고 나면 이제 글을 다듬는 작업을 해야 합니다. 이야기 구조 안에서 중요한 역할을 하는 문장들이 있습니다. 도입부나 인물에 대한 묘사, 핵심적인 대사라든지, 극적인 전환점 등 말이죠. 이 문장들이 모여 문단이 되고, 문단이 모여 한편의 글이 됩니다. 하지만 우리에게 주어진 시간은 그리 많지 않습니다. 이런 일련의 과정 중 어느 하나라도 생략하고 싶은 순간이 찾아오죠. 그렇다면 퍼즐 맞추기를 하듯 좋은 문장을 골라내어 배열하면 어떨까요? 질의 문장들이 모여 하나의 덩어리를 이루면 이를 바탕으로 더욱 풍부한 이야기를 만들 수 있을 것입니다. 저의 세 번째 방법인 문장 모으기입니다. 키워드와 장면을 묘사하는 문장 서너 개를 예제로 넣어 프롬프트를 만들었습니다. 이제 키워드를 입력하면 하이퍼클로바 언어 모델은 장면을 묘사할 수 있습니다. 실행해서 얻어낸 문장 중에서도 특히 인상 깊은 문장들은 따로 모아두었다가 적절한 시점에 활용되기도 합니다. 클로바 스튜디오에는 한 번에 최대 15개까지 출력할 수 있는 multiple 기능이 있는데요. 이 기능을 이용하면 더욱 많은 문장을 얻어낼 수 있습니다. 네 번째, 감성 한 스푼 내가 쓴 문장이 단조롭다고 느낀 적 있으신가요? 클로바 스튜디오를 이용하면 단조로운 문체를 더욱 표현력 있게 바꿀 수 있습니다. 아래 그림은 문체 변환 프롬프트를 통해 문장의 표현력을 바꾼 결과입니다. 파도가 '글씨를 지워버렸다'를 '고요하게 쓸어갔다'로 서정적으로 변환했습니다. ‘태양’을 ‘거대한 불덩이’라고 어구를 바꾸면서 다른 분위기를 연출하기도 합니다. ‘달빛은 환하게 비추고 있었다’를 ‘달빛은 환하게 부서져 내리고 있었다’로 바꾸어 좀 더 감성적인 느낌을 살리기도 했죠. 이렇듯 단조로운 문장들을 다양하게 변화시키면서 생동감 있고 풍부한 묘사를 할 수 있습니다. 무한한 가능성을 찾아서 클로바 스튜디오는 다양한 소설 작법에 사용할 수 있습니다. 키워드를 입력하면 시놉시스를 만들어내고, 우리는 여기에서 아이디어를 얻고, 이를 발전시켜 스토리를 구성할 수도 있을 것입니다. 우리의 상상력을 자극히고 영감을 주는 하이퍼클로바 언어 모델입니다. 이외에도 장르 소설을 작성하려면 캐릭터 구축, 장소나 배경 설정 등 세계관을 만드는 것에 많은 준비가 필요합니다. 이러한 준비 작업에 프롬프트는 다양한 방법으로 이용될 수 있습니다. 예를 들어 소설 속 캐릭터 구축에도 이용할 수 있죠. 캐릭터는 작가의 주제를 직접적으로 전달하는 역할을 하는 만큼, 체계적이고 섬세하게 계획된 설정하에 독자들에게도 충분히 납득이 되게 행동해야만 합니다. 아래 그림처럼 캐릭터 인벤토리를 채워내는 작업을 만들면 소설 쓰기가 더욱 수월해질 것입니다. 지금까지 클로바 스튜디오를 창작 활동의 도구로써 활용하는 다양한 방법들을 설명해드렸습니다. 앞으로 클로바 스튜디오을 통해 얼마나 다양한 결과물들이 나오게 될까요? 이제 필요한 건 여러분의 상상력입니다.
  14. 본 포스팅은 2022년 8월 5일 CLOVA Engineering Blog에 먼저 게재된 글입니다. (바로 가기) 하이퍼클로바에 감성 같은걸 끼얹나? 여기 어울릴 것 같지 않은 두 단어가 있습니다. 시계와 아이스크림이라는 단어를 가지고 감성적인 문장을 만들어본다면 우리에겐 어느 정도의 시간이 필요할까요? 아마 꽤 오랜 시간이 걸릴지도 모릅니다. 왜냐하면 이런 상황에서 어떤 감정을 느껴야 하는지 생각해본 적이 많이 없기 때문이죠. 그렇다면 하이퍼클로바 언어 모델은 이 두 단어를 조합해서 어떤 문장을 만들어낼 수 있을까요? 시계와 아이스크림이라는 이질적인 두 단어로 이렇게 멋진 문장을 만들어냈습니다. 시계는 시간이라는 추상적인 개념을 시각화한 물건이죠. 아이스크림은 녹는 성질이 있습니다. 그리고 사랑처럼 달콤하죠. 그리고 그 둘 사이에는 ‘겹친다’와 ‘녹아든다’라는 표현으로, 감정적이고 감각적인 느낌을 전달하고 있습니다. 사랑하는 사람과의 관계에서 느낄 수 있는 설렘과 달콤함을 표현한 문장입니다. 어쩌면 언어의 마술사 하이퍼클로바 언어 모델은 이렇게 생각지도 못했던 단어들의 조합을 가지고도 감성적인 문장을 만들어냅니다. 비유와 상징의 시적 표현을 사용하면서 말이죠. 이뿐만 아니라 문체를 변환하기도 하며 글의 전체적인 분위기도 다룰 수 있습니다. 이를테면 냉소적이면서 비관적인 시선의 글을 쓸 수도 있고, 따듯하고 온기를 가진 시선의 글을 쓸 수 있죠. 다음은 각각 하이퍼클로바 언어 모델이 생성한 비관적인 정서와 낙관적인 정서의 수필입니다. 한국어를 가장 잘 아는 AI 그동안 많은 곳에서 하이퍼스케일 AI를 공개하였습니다. 하지만 그 많은 하이퍼스케일 AI 중에서도 엄청난 양의 한국어 데이터를 학습한 하이퍼클로바 언어 모델이 아마도 한국어를 가장 잘 이해하는 AI일 것입니다. 하이퍼클로바 언어모델이 문장을 얼마나 디테일하게 다룰 수 있는지 살펴볼까요? 아래는 리뷰 문장의 감정을 긍·부정 형식으로 판별하는 작업인데요. 조사의 차이에 따른 문장의 뉘앙스까지 파악하는 것을 확인할 수 있습니다. AI, 일상의 도구가 되다 하이퍼클로바 언어 모델이 세상에 공개된 이후 네이버에서는 이미 그 기술을 여러 서비스에 적용하기도 했으며, 지금도 다양한 연구를 하면서 서비스 곳곳에 하이퍼클로바 기술의 활용처를 넓혀가고 있습니다. 클로바 스튜디오는 하이퍼클로바 언어 모델을 이용할 수 있는 도구입니다. 이를 통해 초대규모 언어 모델의 가능성을 탐색하고, 더 나아가 서비스화까지 검토할 수 있습니다. 그런데 한 가지 주목할 점은 현재 클로바 스튜디오를 다루는 다양한 사람 중에는 모델러뿐만 아니라, 비개발자들이 많다는 것입니다. 기존에는 AI를 개발하려면 데이터를 확보하고, 모델을 구현하기 위한 전문성을 가진 개발자의 리소스가 필요했으며, 여기에 들어가는 시간과 비용이 상당히 많았습니다. 하지만 클로바 스튜디오에서는 단 몇 줄의 지시문과 예제를 입력하는 것만으로도 개발에 대한 지식 없이 AI를 만들 수 있습니다. 클로바 스튜디오는 누구나 접근할 수 있는 플랫폼으로 그동안 멀게만 느껴졌던 AI라는 존재를 우리 삶 속으로 끌어들이는 역할을 할 것입니다. 많은 이들이 AI를 사용하고, 또 다른 누군가에게 도움을 주는 선순환 구조를 만들어가는 것이죠. 무엇이든 될 수 있는 프롬프트 연금술 하이퍼클로바 언어 모델은 어떻게 사용하는지에 따라서 전혀 다른 형상이 될 수 있다는 점에서 연금술과 유사한 점이 있습니다. 예를 들어, 영화 시놉시스를 만들고자 하면, 몇 가지 시놉시스를 예제로 넣으면 됩니다. 예제를 보고서 양식으로 구성하면 보고서 양식대로 결과가 출력되며, 메일 제목과 본문 내용과 같은 이메일 양식으로 구성하면 이메일을 작성합니다. 즉, 예제를 어떻게 구성하는지에 따라 원하는 대로 결과를 얻을 수 있죠. 어떻게 이렇게 다양한 작업이 가능하게 된 것일까요? 그건 바로 인컨텍스트 러닝(In-context Learning)이라는 방식을 통해서입니다. 엄청난 크기의 언어 모델은 소량의 잘 짜인 예시만으로 그 패턴을 이해하며, 작업을 수행할 수 있는 것입니다. 즉, 이렇게 간단한 지시문과 예제를 입력하는 것만으로도 원하는 작업을 만들 수 있고, 우리는 이것을 프롬프트(Prompt)라고 부릅니다. 하이퍼클로바 언어 모델의 작동 원리를 간략하게 설명해 드리겠습니다. 모델은 확률을 기반으로 다음에 나올 단어를 예측하여 문장을 완성합니다. 예를 들어, ‘저’ 다음 단어로 ‘나무’, ‘꽃’, ‘산’을 예측했다고 가정해 본다면, 가장 확률이 높은 ‘나무’ , 이어서 ‘에’ 를 선택해나가서 ‘ 저 나무에 ‘ 라는 결과를 생성하는 원리입니다. 비전문가 본격! 소설가 데뷔하다 하이퍼클로바 언어 모델은 소설 작법과 같은 영역에서도 그 능력을 발휘할 수 있을까요? 우리는 이러한 호기심으로 ‘하이퍼클로바로 소설 쓰기’를 시작했습니다. 클로바 스튜디오를 소설 쓰기를 돕는 보조도구로 활용하는 실험을 진행했으며, 그 성과와 활용법을 소개하려고 합니다. 다양한 문화 소비는 좋아하지만, 소설을 써본 적이 없는 수준의 담당자가 직접 현대 판타지물 연재작과 공포물 단편집을 완성하였으며, 네이버 웹소설의 UGC 코너에 연재하였습니다. ‘서지루, 천재 라이터 되다!’와 ‘공포 문화사: 미스터리 단편집’ 두 편입니다. 읽으러 가기 읽으러 가기 사람과 AI, 완벽한 파트너 현재 하이퍼클로바 기본 모델은 플롯이나 여러 문학적 장치들에 특화되어 학습되어있는 상태는 아닙니다. 그래서인지 하이퍼클로바 생성 결과에는 소설의 재미를 위한 서사 기법이 드러나는 편은 아니었습니다. 예를 들면, 복선이나 클라이맥스로 진입하기 위한 계기, 혹은 극적인 효과 등 말이죠. 이러한 이유로 클로바 스튜디오는 소설을 뚝딱하고 만들어내는 방식으로 사용되지 않았습니다. 클로바 스튜디오에서 만들어진 결과들을 담당자가 선별하여 문장을 묶어내는 방식으로 작업 되었습니다. 즉, 담당자가 머릿속으로 구상하던 스토리의 전개 흐름을 크게 벗어나지 않는 범위 내에서 AI가 이용된 것이죠. 하지만 그런데도 하이퍼클로바 언어 모델의 문장력은 비전문가인 담당자로서는 도움이 많이 되었으며 의지할 수밖에 없었습니다. 모델의 생성 결과를 통해 다음 전개에 아이디어를 얻기도 했지요. ‘서지루, 천재 라이터 되다!’ 소설의 경우 전체 9회 분량의 11,845자에서 하이퍼클로바의 문장은 약 6,354자로 약 50%가량 사용되었습니다. 아래 하이라이트 된 영역이 바로 하이퍼클로바의 생성 문장들입니다. 사람과 AI가 서로 교차 하면서 협업하고 있는 형상입니다. 이보다 완벽한 파트너가 있을까요? 다음 챕터에서는 어떤 방식으로 소설 작업이 이루어졌는지 구체적으로 설명하겠습니다.
×
×
  • Create New...