BETAInsomnia Studyroom문장을 빈도 벡터로 표현하기
문장을 빈도 벡터로 표현하기

2022 Revised Curriculum · Career Elective

인공지능 수학

데이터를 숫자로 표현하고, 예측과 최적화에 사용되는 수학을 계산과 탐구로 연결합니다.

5개 단원과 14개 강의에서 인공지능의 판단 구조, 텍스트·이미지 데이터, 예측, 손실함수, 경사하강법과 책임 있는 수학 탐구를 학습합니다.

22개정 인공지능 수학 · Unit 2 · 언어를 수로 바꾸는 방법

문장을 빈도 벡터로 표현하기

컴퓨터가 문장을 계산하려면 먼저 ‘무엇을 하나의 단어로 셀 것인가’를 정해야 합니다. 같은 문장도 전처리와 토큰화 규칙에 따라 서로 다른 벡터가 됩니다.

이번 강의의 목표

말뭉치·문서·토큰·어휘의 뜻을 구분하고, 주어진 규칙으로 문장을 빈도 벡터와 문서-단어 행렬로 변환합니다.

\[\text{text}\rightarrow\text{tokens}\rightarrow\text{vocabulary}\rightarrow\text{vector}\]

어휘표 만들기

학습 문서에서 사용할 토큰의 집합과 순서를 정하면 모든 문서를 같은 차원의 좌표로 표현할 수 있습니다.

\[\mathcal{V}=(t_1,t_2,\ldots,t_m)\]

빈도 벡터

문서 \(d_j\)에서 토큰 \(t_i\)가 나타난 횟수를 \(X_{ji}\)로 두면 한 문서는 행벡터, 전체 말뭉치는 행렬이 됩니다.

\[X_{ji}=\operatorname{count}(t_i,d_j)\]

정보의 손실

단어 주머니 방식은 계산하기 쉽지만 기본 빈도 벡터만으로는 어순, 문맥, 반어와 단어 사이의 거리를 알 수 없습니다.

\[\text{same counts}\not\Rightarrow\text{same meaning}\]

핵심 용어와 변환 과정

말뭉치(corpus)분석할 문서 전체의 모음
문서(document)벡터 하나로 표현할 글의 단위
토큰(token)규칙에 따라 나눈 계산 단위
어휘(vocabulary)벡터의 좌표가 되는 토큰 목록
1. 문서 수집허용된 목적과 범위를 확인한다
2. 정규화표기 차이를 정한 규칙으로 맞춘다
3. 토큰화문장을 계산 단위로 나눈다
4. 어휘표토큰의 좌표 순서를 고정한다
5. 세기각 좌표에 출현 횟수를 기록한다

1단계 · 전처리 규칙을 먼저 선언하기

정규화는 서로 같은 것으로 취급할 표기를 결정하는 과정입니다. 영어의 대소문자, 문장부호, URL, 숫자, 이모지 등을 유지할지 바꿀지 목적에 맞게 정합니다.

원문

“AI, AI! 수학으로 배우자.”

문장부호와 대문자가 포함됨
예시 규칙 적용

ai ai 수학으로 배우자

영문 소문자화 + 문장부호 제거

항상 문장부호를 지우는 것이 정답은 아닙니다. 감정 분석에서는 느낌표가 정보가 될 수 있고, 프로그래밍 문서에서는 C++의 기호가 단어의 일부입니다. 학습과 실제 사용에서 반드시 같은 규칙을 적용해야 합니다.

한국어 토큰화의 주의점

단순히 공백으로 나누면 ‘수학은’, ‘수학을’, ‘수학으로’가 서로 다른 토큰이 됩니다. 형태소 단위로 나누는 방법도 있지만 어떤 단위를 합치고 나눌지는 분석 목적과 도구에 따라 달라집니다.

\[\operatorname{tokenize}(\text{문장};\text{규칙})=\text{토큰 열}\]

이 강의의 계산 예제는 형태소 분석의 모호성을 피하기 위해 띄어쓰기로 구분된 통제 어휘를 사용합니다. 실제 한국어 자료에 그대로 적용할 수 있다는 뜻은 아닙니다.

어휘 순서는 좌표 순서

집합은 순서가 없지만 벡터를 만들 때에는 좌표 순서를 고정해야 합니다. 여기서는 다음 순서를 사용합니다.

1 수학2 데이터3 모델4 학습
\[\mathcal{V}=(\text{수학},\text{데이터},\text{모델},\text{학습})\]

같은 수 배열이라도 어휘 순서가 다르면 뜻이 완전히 달라지므로 어휘표는 모델과 함께 저장해야 합니다.

2단계 · 세 문서를 문서-단어 행렬로 바꾸기

이 강의를 위해 만든 통제된 미니 말뭉치
문서원문수학데이터모델학습빈도 벡터
\(d_1\)수학 데이터 모델1110\((1,1,1,0)\)
\(d_2\)데이터 모델 학습0111\((0,1,1,1)\)
\(d_3\)수학 모델 학습1011\((1,0,1,1)\)
\[X=\begin{bmatrix}1&1&1&0\\0&1&1&1\\1&0&1&1\end{bmatrix}\in\mathbb{R}^{3\times4}\]

행은 문서, 열은 어휘의 토큰입니다. 예를 들어 \(X_{2,4}=1\)은 두 번째 문서에 네 번째 토큰 ‘학습’이 한 번 있다는 뜻입니다.

직접 만든 문서-단어 행렬 히트맵밝은 칸은 출현 1회, 어두운 칸은 출현 0회를 나타냅니다.
세 문서의 빈도 벡터 히트맵 열은 수학, 데이터, 모델, 학습이고 행은 문서 1, 2, 3이다. 문서별 값은 1110, 0111, 1011이다. 수학데이터모델학습문서 1문서 2문서 3 111001111011

외부 도표를 복사하지 않고 본문의 가상 말뭉치에서 직접 구성한 SVG입니다.

무엇을 기록할까: 세 가지 벡터

문서 ‘수학 수학 데이터 모델’을 같은 어휘 순서로 표현해 봅시다.

출현 횟수반복을 그대로 셈\((2,1,1,0)\)
이진 출현있으면 1, 없으면 0\((1,1,1,0)\)
상대 빈도전체 토큰 수 4로 나눔\((0.5,0.25,0.25,0)\)
\[\operatorname{tf}(t_i,d)=\frac{\operatorname{count}(t_i,d)}{\sum_{k=1}^{m}\operatorname{count}(t_k,d)}\]

출현 횟수는 반복 강도를 보존하고, 이진 벡터는 존재 여부에 집중합니다. 상대 빈도는 길이가 다른 문서를 비교할 때 긴 문서가 무조건 큰 값을 갖는 현상을 줄입니다.

희소 벡터

실제 어휘가 10,000개인데 한 문서에 서로 다른 토큰이 80개만 나타난다면 대부분의 좌표는 0입니다.

\[\operatorname{density}=\frac{80}{10000}=0.008,\qquad\operatorname{sparsity}=1-0.008=99.2\%\]

0까지 모두 저장하는 대신 값이 0이 아닌 좌표와 값만 기록하는 희소 표현을 사용하면 메모리와 계산량을 줄일 수 있습니다.

어휘 밖 단어와 차원

새 문서의 토큰이 어휘표에 없으면 해당 토큰은 기존 좌표를 갖지 않습니다. 무시하거나 [UNK] 좌표에 모으는 규칙 등을 미리 정해야 합니다.

\[\dim(\mathbf{x})=|\mathcal{V}|\]

어휘를 계속 늘리면 정보는 더 담을 수 있지만 차원과 잡음도 커집니다. 어휘는 학습 문서에서만 정해야 테스트 문서의 정보를 미리 보는 데이터 누출을 피할 수 있습니다.

어순이 사라지는 이유와 n-gram

소문자화한 영어 문장 “AI can guide students”와 “Students can guide AI”는 ai, can, guide, students의 단일 단어 빈도가 같습니다. 그러나 누가 누구를 안내하는지는 반대입니다.

\[\operatorname{BoW}(\text{ai can guide students})=\operatorname{BoW}(\text{students can guide ai})\]

인접한 두 토큰을 하나의 특징으로 삼는 bigram은 ‘ai helps’와 ‘students help’를 구분해 일부 어순을 보존합니다. 대신 가능한 특징 수가 늘고, 학습 자료에 없던 조합이 많아질 수 있습니다.

unigram

각 토큰 하나를 셈

간단하고 작은 차원, 어순 손실이 큼
bigram

서로 이웃한 두 토큰을 셈

지역적 어순 보존, 더 큰 차원과 희소성

흔한 단어는 항상 중요할까?

거의 모든 문서에 등장하는 토큰은 특정 문서를 구별하는 정보가 작을 수 있습니다. 이후에는 문서 안의 빈도와 전체 말뭉치에서의 희귀성을 함께 반영하는 TF-IDF로 확장할 수 있습니다.

\[\operatorname{tfidf}(t,d)=\operatorname{tf}(t,d)\log\frac{N}{\operatorname{df}(t)}\]

단, 불용어를 기계적으로 제거하면 ‘아니다’ 같은 부정 표현까지 잃을 수 있습니다. 제거 기준은 과제와 언어에 맞게 검증해야 합니다.

재현 가능한 계산 규칙

  1. 학습 말뭉치에 정규화와 토큰화 규칙을 적용한다.
  2. 학습 토큰으로 순서가 고정된 어휘표를 만든다.
  3. 각 문서에 길이 \(m=|\mathcal{V}|\)인 영벡터를 준비한다.
  4. 토큰 \(t_i\)를 볼 때마다 \(x_i\leftarrow x_i+1\)로 갱신한다.
  5. 검증·테스트·실제 문서에는 같은 어휘와 규칙만 적용한다.

활동 1 · 직접 벡터화하기

어휘 순서가 (수학, 데이터, 모델, 학습)일 때 다음 문서를 출현 횟수 벡터로 나타내세요.

  1. 데이터 데이터 학습
  2. 모델 수학 모델
  3. 수학 예측 데이터
정답과 해설 보기

각각 \((0,2,0,1)\), \((1,0,2,0)\), \((1,1,0,0)\)입니다. 세 번째 문서의 ‘예측’은 어휘 밖 단어이므로 이 예제 규칙에서는 좌표에 기록되지 않습니다.

활동 2 · 규칙이 결과를 바꾼다

공백 토큰화만 적용한 ‘수학은 재미있다’와 ‘수학을 공부한다’에는 같은 토큰이 있는지 답하세요. 그다음 ‘수학은’과 ‘수학을’을 같은 기본형으로 처리하는 규칙을 추가하면 결과가 어떻게 달라지는지 설명하세요.

해설 보기

공백만 사용하면 토큰은 (수학은, 재미있다)와 (수학을, 공부한다)이므로 공통 토큰이 없습니다. 조사 처리를 통해 두 표현을 ‘수학’으로 통일하면 공통 좌표가 생깁니다. 어느 규칙이 적절한지는 목적에 따라 검증해야 하며, 규칙을 학습과 실제 입력에 동일하게 적용해야 합니다.

텍스트 데이터 사용 전 점검

수집 권한

웹에 공개된 글도 자동으로 자유 이용 가능한 것은 아닙니다. 라이선스, 이용 약관과 허용 목적을 확인합니다.

개인정보

이름, 연락처와 위치처럼 개인을 식별할 수 있는 정보가 토큰이나 원문에 남지 않도록 점검합니다.

대표성

특정 연령·지역·말투만 과도하게 포함되면 다른 사용자의 표현을 잘 처리하지 못할 수 있습니다.

유해 표현

빈도가 높다는 이유로 차별적 표현을 정상적인 규칙으로 학습하지 않는지 집단별 결과를 검사합니다.

공개 자료 참고 및 저작권 안내

개념의 정확성을 확인하기 위해 다음 공개 문서와 오픈소스 구현을 참고했습니다.

출처의 문장, 코드, 데이터, 표나 그림을 복제하지 않았습니다. 한국어 말뭉치, 계산값, 활동, 행렬 표와 SVG 히트맵은 이 강의를 위해 독립적으로 작성했습니다. 링크 자료를 직접 재사용할 때에는 각 자료의 최신 라이선스와 표시 조건을 확인하세요.

학습 원칙

계산 결과만 제시하지 않고 사용한 데이터, 수학적 가정, 평가 기준과 적용 한계를 함께 설명합니다. 개인정보와 편향 가능성을 확인하고 인공지능의 출력을 확정된 사실로 해석하지 않습니다.

교육과정 구성 근거

국가교육과정정보센터의 2022 개정 교육과정, 한국과학창의재단 수학과 교육과정 개발 연구, 부산광역시교육청 고교학점제 과목 안내를 과목 성격과 내용 범위 확인에 참고했습니다. 단원 구성, 강의명, 설명과 예시는 이 사이트의 학습 흐름에 맞게 독립적으로 작성했습니다.

Checkpoint

어휘 순서가 (수학, 데이터, 모델, 학습)이고 문서가 ‘데이터 수학 데이터 학습’일 때 출현 횟수·이진 출현·상대 빈도 벡터를 각각 구하세요. 이어서 이 벡터만으로는 알 수 없는 문장 정보 두 가지를 쓰고, 그중 하나를 일부 보완할 방법을 제안하세요.