딕셔너리 — 단어장 만들기
딕셔너리의 키-값 구조로 어휘 사전을 만들고, Counter로 단어 빈도를 측정한다.
GPT가 텍스트를 처리하려면 모든 단어에 고유 번호를 부여해야 한다. '안녕'→42, '세계'→108처럼. 이것이 바로 어휘 사전(vocabulary)이다. 딕셔너리 — 키와 값을 연결하는 Python의 핵심 자료구조로 어휘 사전을 만든다.
딕셔너리는 이름표(키)로 값을 찾는 자료구조입니다
| 용어 | 설명 |
|---|---|
| 어휘 사전 | 모델이 인식하는 모든 토큰의 집합 |
| 딕셔너리 | 키-값 쌍으로 데이터를 저장하는 자료구조 |
딕셔너리는 중괄호 {}로 만들고, 키:값 쌍으로 데이터를 저장한다. vocab["파이썬"]은 2를 반환한다.
dict[키] — 값 조회 dict[새키] = 값 — 항목 추가 키 in dict — 키 존재 여부 확인 len(dict) — 항목 개수
Counter는 각 요소가 몇 번 등장했는지 셉니다
Counter는 dict의 하위 클래스로, 요소의 빈도를 자동으로 계산한다. most_common(n)으로 상위 n개를 가져온다.
빈도가 높은 단어 = 어휘 사전에 반드시 포함
텍스트에서 단어 빈도를 직접 세어봅시다
corpus를 split()으로 토큰화하고 Counter로 빈도를 센 뒤 most_common(5)로 상위 5개를 출력한다.
실제 텍스트의 단어 빈도는 지프의 법칙을 따릅니다
지프의 법칙(Zipf's Law): 가장 빈번한 단어의 빈도는 2위의 2배, 3위의 3배... 조사('은/는', '이/가')가 압도적으로 많고, 의미 있는 단어('딥러닝')는 적습니다. 이것이 BPE 같은 서브워드 토큰화가 필요한 이유입니다.
단어 → 정수 매핑, LLM 어휘 사전의 핵심입니다
<PAD>와 <UNK> 특수 토큰을 먼저 등록한 뒤, 빈도순으로 단어→정수 매핑을 만들고, 어휘 사전에 없는 단어는 <UNK>으로 처리한다.
<PAD> — 길이 맞추기용 빈 토큰 <UNK> — 어휘 사전에 없는 단어 실제 GPT-4의 어휘 사전은 약 10만 개의 토큰을 포함합니다.
딕셔너리로 나만의 단어 빈도 분석기를 직접 만들어봅시다
dict[key]와 dict.get(key, default) 두 방법으로 빈도를 세고, 결과가 동일함을 확인한다.
| 딕셔너리 기본 조작 | 설명 |
|---|---|
| dict[키] | 값 조회 — 없는 키면 KeyError 발생 |
| dict.get(키, 기본값) | 안전한 조회 — 없는 키면 기본값 반환 |
| dict[새키] = 값 | 새 항목 추가 또는 기존 항목 수정 |
| Counter와 어휘 사전 | 설명 |
|---|---|
| Counter | dict의 하위 클래스 — 요소 빈도를 자동으로 계산 |
| most_common(n) | 빈도 상위 n개 항목을 튜플 리스트로 반환 |
| 어휘 사전 | 단어 → 정수 매핑 (<PAD>=0, <UNK>=1, 이후 빈도순) |
GPT-4의 어휘 사전은 약 10만 개 토큰! 딕셔너리가 LLM의 '단어장'을 만드는 핵심 도구입니다.
d = {"a": 1, "b": 2}에서 d["c"] = 3 실행 후 len(d)의 결과는?
Counter는 딕셔너리의 하위 클래스이다
딕셔너리에 존재하지 않는 키로 dict[없는키]를 접근하면 어떻게 되나요?
d = {"a": 1, "b": 2}에서 d.get("c", 0)의 결과는?
Counter("banana")에서 가장 빈도가 높은 문자는?