Home

읽기 설정

요즘 많은 개발자가 LLM을 사용하고 있지만, 기본 개념에 대해 잘 모르는 경우가 많아.00:00

최근에 폴란드에서 인공지능 작업숍을 진행했고, 토큰이 무엇인지 아는 사람들이 손을 들어달라고 물었어요.00:05

그리고 나는 내가 X에서의 AI 거품 때문인지 모르겠지만, 워크숍 사람들 중 약 3분의 1만 손을 들어 올린 것에 대해 많이 놀랐어요.00:12

대략 1/3의 사람만 손을 들고, 내가 사용하는 X에서 있는 인공지능 버블 때문일까? 아니면 다른 이유 때문일까 하는 생각에 정말 놀랐죠. 그래서 토큰에 대해 더 자세히 알아볼 수 있도록 코딩으로 설명해 드리고 싶어요.00:19

제가 이 채널에서 파이썬 코드를 한 줄도 보여주지 않겠다고 약속합니다. 분명히 그렇습니다.00:30

다음은 다이어그램으로 시작해 볼까요? 토큰은 LLM의 화폐입니다.00:34

Hello World와 같은 입력을 LLM에 전송하면, 구성 요소 토큰으로 나뉘게 됩니다.00:38

OpenAI에 Hello World를 보내면, 1천 개의 토큰당 매우 작은 금액을 청구하는 세 개의 토큰이 발생합니다.00:44

저는 GPT-5라고 생각합니다. 그런 다음 LLM은 조금 생각하고 출력 토큰을 생성합니다.00:51

이 경우에는 인사를 하였고, 입력 토큰과 다른 요금으로 청구됩니다.00:57

총 지출액을 구하려면 그 수를 천으로 나누고 백분의 일로 곱하세요.01:01

입력 토큰들도 같은 방법으로 하세요. 합치고, 그 API 호출의 총 비용을 알 수 있습니다.01:07

AISDK를 사용하여 시연해 보여드리겠습니다. AISDK에 대해 익숙하지 않은 분들을 위해 저의 웹사이트인 AIHero에서 무료로 제공하는 좋은 튜토리얼이 있습니다. 링크는 위에 올려놓았습니다.01:12

이제 클로드 3.5 하이쿠, 안트로픽에서 제공하는 좋은 저렴한 모델을 사용하여 텍스트를 생성할 거예요.01:21

그리고 우리는 그에게 '헬로 세계'를 보내고, 둘을 로그 아웃할 거예요. 제시한 텍스트와 사용량을 로그 아웃할 예정이에요.01:27

우리가 ASDK에서 얻는 이 사용량은 우리가 사용한 토큰의 양입니다.01:34

그것은 '안녕하세요, 오늘 어떻게 지내세요? 도와드릴 수 있는 것이 있습니까?'라고 답변했는데, 20개의 출력 토큰을 사용했지만 믿기지 않게 11개의 입력 토큰만 사용했습니다.01:38

두 단어인 '헬로 월드'만 입력했는데 꽤 이상하네.01:47

같은 일을 다시 하지만 이번에는 구글에 전화할 거예요. 우리는 Gemini 2.0 손전등을 사용하고 사용량과 생성된 텍스트를 로그로 남겨 보겠습니다. 인간미 still at 11 and 20 을 볼 수 있지만, 구글 버전에서는 단지 네 개의 입력 토큰과 열한 개의 출력 토큰만 사용했습니다.01:51

토큰이 어떻게 작동하는지 모르면 이것이 조금 신비롭다고 느껴질 거예요. 토큰과 문맥 간의 관계가 무엇이며, 같은 프롬프트를 두 개 다른 모델에 보냈을 때 왜 토큰 수가 다르게 나오는 걸까요?02:06

알겠습니다. 이제 수수께끼를 밝혀내고 토큰이 실제로 무엇인지 이야기해 볼까요?02:17

모든 LLM은 다른 토큰 어휘를 가지고 있으며, 이러한 토큰은 그가 알고 있는 모든 단어, 부분 단어 및 문자입니다.02:21

우리는 TypeScript에서 코드로 살펴볼 수 있습니다. 오픈AI의 토크나이저는 TickToken으로 불리며, 이에 대한 JavaScript 구현인 JSTickToken이 있습니다. 우리는 GPT-4O 모델을 위한 토크나이저인 O200KBASE를 사용하고 있습니다....02:29

언제 우리가 LLM을 호출할 때, 그것은 실제로 우리가 보낸 텍스트를 토큰으로 인코딩합니다.02:34

그래서 '안녕 세상'이 어휘에서 가장 큰 개별 토큰으로 분할됩니다.02:39

이 경우에는 '안녕 세계!' 와 같이 말할 수도 있겠고, 그 단어나 부단어에 맞는 어휘에서의 숫자를 식별합니다. 실제로 TypeScript 코드를 통해 확인해볼 수 있습니다. OpenAI의 토크나이저는 TickToken이라고 불리며, JavaScript 버전이 있습니다.02:43

JSTickToken이라고 불리며, GPT-4O 모델의 토크나이저인 O200KBASE를 사용하고 있습니다.02:59

저희도 입력파일 md에 '달빛 숲의 현명한 올빼미', 고대 나무들이 별빛 하늘로 나뭇가지를 뻗는 곳이 있습니다.03:05

우리가 지금 이 큰 텍스트 조각을 메모리로 읽고 있으며 GPT-40 토크나이저를 사용하여 숫자 배열인 많은 토큰들을 인코딩하고 있습니다. 그런 다음 입력 길이(문자)와 생성되는 토큰 수를 비교합니다. 이를 실행하면 콘텐츠 길이가 거의 2300 문자가지만03:13

입력 길이가 약 2300자이지만03:32

토큰 수는 500개 미만이며, 결과적으로 단지 한 무리의 숫자만 얻습니다.03:37

간단한 것으로 'hello world'를 테스트하면 여기서 콘텐츠 길이는 12이고 토큰 수는 3개뿐입니다.03:44

이러한 토큰들이 LLM이 처리하는 동안 입력됩니다. LLM 전체 프로세스의 다이어그램을 살펴보겠습니다.03:52

우리가 'Hello World'를 전달하면, 어휘에서 가장 알고 있는 최대 크기의 조각으로 분할되고03:57

换句话说,所有的计算都是基于数字,而不是文字。04:09

그리고 이 출력 토큰들은 다시 텍스트로 디코딩되고, 하나로 합쳐지면 최종 출력이 나오는 거예요.04:14

그래서 그게 프로세스죠. 그리고 당신이 텍스트를 다루고 있다고 생각하는 동안, 실제로는 텍스트 조각의 수치 표현을 처리하고 있습니다.04:20

그렇게 우리가 전체 그림을 이해하게 됩니다. 이 토큰들을 토크나이저의 decode 함수를 사용하여 해독할 수 있습니다.04:28

디코딩은 숫자, 토큰 배열을 입력받고 하나의 연결된 문자열을 반환하는 함수일 뿐이며, 이를 실행하면 정확히 그 결과를 얻게 되는데요, 이걸 좋아하시는 분들을 위해 aihero.dev에서 준비한 게 있었고, 이와 같은 분석을 담은 뉴스레터도 아래 설명에 있습니다.04:34

이제 토큰이란 무엇인지 알겠지만, 모델 제공업체 간에 왜 다르게 나타나는지 정확히 모릅니다.04:51

이것을 이해하기 위해서는 이러한 어휘가 어떻게 구축되고 다른 모델 제공업체가 각기 다르게 하는 이유를 알아야 합니다. 토크나이저가 학습되는 과정은 다음과 같습니다.04:56

여기서 텍스트 코퍼스를 가지고 있다고 상상해 보세요. 우리는 매우 작은 코퍼스를 사용할 거예요, 단지 '고양이가 매트 위에 앉았다' 라는 문장만으로도 돼요. 하지만 실제로는 이것들이 기가바이트나 테라바이트 수준의 데이터라고 생각해 보세요.05:05

사실 모델 자체가 학습하는 데이터와 동일합니다.05:15

이제 이 한 문장만으로도 매우 간단한 토크나이저를 구축할 수 있습니다.05:19

이 문장을 가져와서 고유한 문자들을 추출할 수 있습니다. 코드로 보기가 더 쉬울 것 같습니다.05:23

저는 데이터 세트를 입력받아 토크나이저를 반환하는 문자 수준 토크나이저를 만들었습니다.05:30

그리고 네, 어떤 클래스에 속해요. 타입스크립트 클래스는 좋지 않나요? 여러분! 몇 번이나 이 말씀 드렸어요.05:35

이 구현 방식은 잠시 후에 다룰게요, 지금 당장 사용법을 살펴봐요.05:39

우리는 고양이가 매트에 앉아 있는 데이터 세트를 가지고 있습니다. 다시 말해서 실제 애플리케이션에서는 이 것이 기가바이트 단위의 텍스트일 수 있습니다.05:43

그런 다음, 문자 기준 토크나이저를 인스턴시에 하고 '고양이 앉았다 바닥'을 입력으로 넣어요.05:49

그런 다음 입력을 인코딩하여 토큰으로 변환하고 토큰에 대한 정보를 로그로 출력합니다.05:55

이걸 실행하면 입력 길이가 'cat sat mat'의 문자 수인 11이고, 생성된 토큰 수도 11이라는 것을 볼 수 있습니다. 이는 단지 문자가 토큰으로 사용되기 때문입니다. 모든 로그를 제거하고 'tokenizer.mapping'만 로그로 출력하면 전체06:01

단어 목록이 있으며, 전체 사전 공간에는 10개의 토큰만 있을 수 있습니다. n은 8, o는 7입니다. 따라서 무엇을 하더라도 토큰 수가 항상 문자 수와 동일하다는 것을 의미합니다. 이는 좋지 않습니다. 입력에 토큰이 많을수록06:19

더 많은 작업을 우리의 LLM이 처리해야 한다면 어휘 크기가 정말 중요해요. 예를 들어, 우리 어휘에 약 천개의 토큰만 있다고 가정하면 'understanding' 이라는 단어를 해석할 때 5개의 토큰으로 표현될 수 있어요 ('under', 'st', 'and', 'ing'). 하지만 어휘 크기를 5만 개로 키우면...06:36

좀 더 큰 subword 단위를 가져올 수 있으므로 5만개로는 세 개의 토큰을 이해할 수 있지만, 200만개로는 두 개의 토큰으로 분할될 수 있습니다. 그리고 두 개의 토큰은 모델이 처리하기에 다섯 개의 토큰보다 훨씬 효율적입니다. 그러므로 이러한 장단점이 다른 모델과 다른...06:54

모델 공급업체는 물론이지만, 방식에 따라 무한대로 확장할 수 없습니다. 어휘가 클수록 모델을 크게 만들어야 하기 때문입니다. 그리고 당연히 실행하는 데 필요한 메모리가 더 많아집니다.07:10

그러므로 우리가 구현한 문자 단위 토큰화는 매우 좋지 않을 것이라는 것을 알 수 있습니다. 우리는 토큰의 수를 최대화하기 때문입니다.07:23

그럼 문자 수준에서 추가적인 부사전 단어를 더하는 방법은 어떻게 되지?07:30

음, 함께 자주 나타나는 다른 그룹들을 식별합니다. 예를 들어, 'th'는 'the'와 같이 나타납니다.07:34

그는 과 에도 나타납니다. 그리고 그 후에 는 고양이, 앉았고, 그리고 이불 에서 나타납니다.07:42

이걸 'subword-level 토크나이저'라고 부르는 예시가 있어요. basically vibe 코딩했으니 구현 과정은 너무 자세히 살피지 마세요. 아래쪽에서 사용법을 한번 살펴볼게요.07:47

똑같은 데이터셋과 입력을 사용하고, '고양이', '앉다', '매트' 입력에 대해 얼마나 많은 토큰을 돌려받는지 살펴보겠습니다.07:57

여기서 입력인 'cat, sat, mat'는 11개이고, 8개의 토큰을 받아옵니다.08:04

우리는 데이터셋에서 일부 서브워드를 계산하여 이것을 달성했습니다.08:09

우리 같은 데이터셋과 동일한 입력을 가지고 있으며, 'cat', 'sat', 'mat'의 입력에서 얼마나 많은 토큰을 받는지 살펴보겠습니다. 이곳에서 입력인 'cat', 'sat', 'mat'가 11개이고 8개의 토큰을 받았다는 것을 확인할 수 있습니다. 우리는 데이터셋에서 몇 가지 부사어를 계산하여 이를 달성했습니다.08:13

Lewis Carroll이 만들어낸 단어이므로 데이터셋에서 자주 나타나지 않습니다. 0200K를 통해 실행하면 'Frabjus'가 실제로 네 개의 별도의 토큰으로 나뉘고 있습니다. 따라서 드문 단어는 데이터셋에서 더 자주 발생하는 단어보다 더 많은 토큰으로 분할됩니다....08:19

이는 우리의 인코드 함수가 더 복잡해졌다는 것을 의미하며, 이제 입력 텍스트를 효율적으로 토큰화하기 위해 가능한 가장 긴 부소어를 일치시켜야 하기 때문입니다. 자세히 살펴보고 싶다면 아래 구현을 참조하세요.08:25

우리의 구현에서는 한 단계만 들어가기 때문에 2 글자 길이의 그룹으로 끝나지만 실제 토큰화 도구는 그룹을 여러 개 연결하여 점점 더 큰 그룹들을 식별합니다. 예를 들어, 이 예시에서 'th'와 'he'는 자주 함께 나타나므로 3개의 글자가 하나의 그룹이 되는 경우가 있습니다.08:37

마침내 말이 되는 토큰을 만들고, 각 개별 토큰에 번호를 할당하면서 끝나게 되는데, 우리가 구현에서 보았듯이 마침내 토크나이저가 불 biasa한 단어를 만났을 때 어떻게 행동하는지 살펴보겠습니다. 이것은 루이스 캐롤 시인의 시에서 08:53

lewis carroll가 만든 단어니까 데이터 세트에서 자주 나올 가능성이 낮아요.09:10

이것을 0200K를 통해 실행하면, Frabjus는 여기서 네 개의 별개의 토큰으로 분할됩니다.09:14

그리고 드물게 나타나는 단어들은 데이터 세트에서 자주 등장하는 단어들보다 더 많은 토큰으로 나뉘게 됩니다.09:20

이 또한, 데이터셋에 많이 포함되지 않은 언어로 LLM을 질문하는 경우, 문자 조합에 익숙하지 않아 더 많은 토큰으로 분해될 가능성이 높다는 의미입니다.09:25

이는 말하는 언어에만 해당되는 것이 아니라 코딩 언어에도 적용됩니다.09:35

그리고 이 또한 더 흔히 사용되는 코딩 언어가 인공지능 시대에 가진 또 다른 장점입니다.09:38

자바스크립트 20줄을 보내는 게 해스클이나 다른 언어의 20줄을 보내는 것보다 토큰이 적다.09:43

그러니 여기서 요약하자면, 토큰은 대규모 언어 모델의 통화이며, 토큰당 청구됩니다.09:49

하지만 다른 모델 제공업체는 이러한 입력을 다르게 처리하여 토큰 수를 다르게 생성할 것입니다.09:53

코딩 토큰이란 텍스트를 토큰으로 변환하는 것을 의미합니다. 텍스트 조각을 가장 큰 토큰으로 분할한 후, 사전에 저장된 숫자로 바꿉니다.09:58

즉, 토큰은 대규모 언어 모델(LLM)의 화폐이며, 토큰당 비용이 부과됩니다. 하지만 다른 모델 제공업체는 이러한 입력을 다르게 처리하여 다른 토큰 수를 생성할 수 있습니다.10:08

코딩 토큰이란 텍스트를 토큰으로 변환하는 것을 의미합니다. 텍스트 조각을 가능한 큰 토큰으로 분할한 다음, 어휘에 저장된 숫자로 변환합니다.10:14

나 개인적으로는 TypeScript가 AI 기반 애플리케이션을 구축하기 위한 언어라고 생각하며, 모델을 구축하는 경우에는 Python이 적합하다고 생각합니다.10:22

따라서 AI에 관심이 있는 분들은 aihero.dev로 가보세요. 아주, 매우 금방 새로운 것이 업로드될 예정입니다. 이 설명이 마음에 드셨다면 다음을 다룰 것을 주석으로 남겨주시기 바랍니다.10:25

이해를 도와드리고자 노력했습니다. 곧 다시 만나겠습니다.10:32

나는 개인적으로 타입스크립트가 인공지능 기반 애플리케이션을 구축하는 언어라고 생각하고, 파이썬은 모델을 구축한다면 아마도 원하시는 것이라고 생각합니다. 따라서 함께 하려면 aihero.dev로 이동하세요.10:38

거기 곧 아주, 아주 빨리 무언가를 내릴 거예요. 이 설명이 마음에 드시면 다음으로 어떤 주제를 다루고 싶으신가요?10:49

아래 댓글로 참여해 주세요. 함께 해 주셔서 감사합니다. 너무 오래 기다리지 않고 다시 만나요!10:54

AI Summary

이 영상은 LLM 사용자들이 이해해야 할 중요한 개념인 '토큰'에 대해 설명해 줘요. LLM은 텍스트를 토큰이라는 단위로 나누어 처리하고, 사용량과 비용은 이 토큰 수에 따라 결정되거든요. 모델마다 어휘가 달라서 같은 텍스트도 토큰 수가 다를 수 있고, 서브워드 토큰화, 드물게 나타나는 단어 처리 등 다양한 방식이 활용돼요. 효율적인 LLM 사용을 위해서는 토큰 개념을 이해하고, 모델 및 언어 선택 시 토큰 사용량을 고려해야 한다는 점을 강조하고 있어요. 마지막으로 AI 학습 사이트를 소개하며 지속적인 관심과 피드백을 부탁하고 있답니다.

Key Highlights

  • LLM 사용량 및 비용은 토큰 수에 따라 결정됩니다.
  • 모델마다 사용하는 어휘가 달라 같은 텍스트도 토큰 수가 다를 수 있습니다.
  • 서브워드 토큰화를 통해 토큰 수를 줄이는 방식이 사용됩니다.
  • 드물게 나타나는 단어는 더 많은 토큰으로 분할될 수 있습니다.
  • LLM 사용자는 토큰 개념을 이해하고 효율적인 사용을 위해 모델 및 언어를 신중하게 선택해야 합니다.

Related Videos