끄적이는 개발노트

260615_강의 정리 (Text Mining) 본문

머신러닝

260615_강의 정리 (Text Mining)

크런키스틱 2026. 6. 15. 09:47
728x90

 

machine learning · nlp
텍스트 마이닝 정리
  • BoW·TF-IDF·워드 임베딩으로 이해하는 텍스트의 벡터 표현
  • DTM/TDM 행렬 구조와 LSA 토픽 분석의 원리
  • Gensim·NLTK·KoNLPy 등 주요 라이브러리 역할 정리
📄
1. 텍스트 마이닝이란

"비정형 텍스트에서 패턴과 의미를 추출하는 것" — 기계가 글을 이해하게 만드는 첫 단계

  • 컴퓨터는 문자를 직접 처리할 수 없음 → 숫자(벡터)로 변환하는 과정이 필수
  • 변환된 벡터를 바탕으로 분류·추천·토픽 분석 등 다양한 ML 작업 수행
  • 크게 지도학습(텍스트 분류)과 비지도학습(토픽 분석)으로 나뉨
원시 텍스트
전처리
벡터 표현
분류 / 추천 / 분석
🔧
2. 전처리 파이프라인

벡터 변환 전에 텍스트를 정제하는 과정 — 노이즈를 줄여 품질을 높임

1
Tokenization (토큰화)
문장을 의미 단위(단어·형태소)로 분리함. 한국어는 형태소 분석이 필요해 KoNLPy 같은 전용 도구를 사용함
2
Stop-word 제거
분석에 불필요한 조사·접속사 등 제거함 (예: 은/는/이/가, the/a/is). 의미 없는 단어가 벡터를 오염시키는 것을 방지함
3
Stemming / Lemmatization (어간 추출)
단어를 기본형으로 통일함 (runs → run, 먹었다 → 먹다). 같은 의미의 다른 형태를 하나로 묶어 어휘 수를 줄임
4
POS Tagging (품사 태깅)
각 단어에 품사(명사·동사·형용사 등) 정보를 붙임. 명사만 추출하거나 특정 품사를 선택적으로 사용할 때 활용함
💡 새 개념
형태소 Morpheme
  • 의미를 가진 최소 단위 — 한국어 NLP의 핵심 분석 단위
  • "먹었다" → "먹" + "었" + "다" 로 분리
영어는 공백 기준 분리가 쉽지만, 한국어는 교착어라 형태소 분석기가 필수임
🔢
3. 텍스트의 벡터 표현

텍스트를 숫자 벡터로 바꾸는 3가지 방법 — 복잡도와 의미 표현력이 순서대로 높아짐

① Bag of Words (BoW) — 단어 등장 횟수로 표현
  • 문서에 어떤 단어가 몇 번 등장했는지를 카운트한 벡터로 표현함
  • 순서와 문법은 무시하고 단어의 빈도만 고려함
  • 비유: 책의 색인 페이지 — 어떤 단어가 어디에 있는지만 셈
DTM / TDM 행렬
· DTM (Document-Term Matrix): 행 = 문서, 열 = 단어 — 각 셀은 해당 단어의 빈도수
· TDM (Term-Document Matrix): DTM을 전치한 행렬 (행 = 단어, 열 = 문서)
· 단어 종류가 많아질수록 행렬 크기가 폭발적으로 증가하는 차원의 저주 발생
DTM 예시 — 5개 문서 × 5개 단어
complexityalgorithmentropytrafficnetwork
D1231
D221
D333
D424
D5424
② TF-IDF — 단어의 중요도를 가중치로 표현
  • 단순 빈도(BoW)의 한계를 보완 — "the", "이", "그" 같이 모든 문서에 자주 등장하는 단어는 의미가 낮음
  • TF (Term Frequency): 해당 문서 내 단어 등장 빈도 — 높을수록 그 문서에서 중요함
  • IDF (Inverse Document Frequency): 전체 문서 중 해당 단어가 등장하는 문서 비율의 역수
TF-IDF 수식

TF-IDF(t, d) = TF(t, d) × IDF(t)

IDF(t) = log( 총 문서 수 / 단어 t가 포함된 문서 수 )

· 많은 문서에 등장하는 단어 → IDF 낮음 → 가중치 낮음
· 소수 문서에만 등장하는 단어 → IDF 높음 → 핵심 키워드로 부각됨
③ 워드 임베딩 — 의미를 압축한 밀집 벡터
  • BoW·TF-IDF는 단어 간 의미 관계를 전혀 반영하지 못함
  • 원-핫 인코딩의 경우 단어 수만큼 차원이 생기고 모든 단어가 독립적으로 표현됨
  • 워드 임베딩은 비슷한 맥락에서 등장하는 단어들을 가까운 벡터로 표현함
Apple[1, 0, 0]
Banana[0, 1, 0]
Orange[0, 0, 1]
원-핫 인코딩: Apple과 Orange가 얼마나 비슷한지 알 수 없음. 임베딩은 이 거리를 의미 있게 만듦
💡 새 개념
원-핫 인코딩 One-Hot Encoding
  • 단어 사전의 크기만큼 차원을 만들고, 해당 단어 위치만 1, 나머지는 0으로 표현
  • 단어 수가 늘수록 벡터 길이가 길어지고 대부분이 0인 희소 벡터가 됨
어휘가 10만 개라면 벡터 길이도 10만 — 메모리 낭비가 심함
밀집 벡터 Dense Vector / Embedding
  • 수백 차원의 실수값으로 단어의 의미를 압축 표현함
  • "왕" - "남자" + "여자" ≈ "여왕" 같은 의미 연산이 가능해짐
Word2Vec이 학습하는 것이 바로 이 밀집 벡터
🧠
4. 워드 임베딩 모델 비교

단어를 벡터로 학습하는 주요 모델 4가지 — 각각 방식과 강점이 다름

모델 방식 특징 라이브러리
Word2Vec CBOW, Skip-gram 주변 단어로 중심 단어 예측(또는 반대). 의미·문법 관계 학습 Gensim
FastText N-gram 조각 단어를 부분 문자열로 분리해 학습 → 오탈자·신조어에 강함 Gensim
GloVe 동시등장 통계 전체 코퍼스의 단어 공기(共起) 통계를 행렬 분해로 학습 Gensim
spaCy 사전학습 벡터 NLP 파이프라인 통합 지원 — 임베딩 외 품사·개체명 인식 포함 spaCy
💡 새 개념
CBOW Continuous Bag of Words
  • 주변 단어들을 보고 중심 단어를 예측하는 방식
  • 비유: 빈칸 채우기 — "나는 ___ 을 먹었다"에서 빈칸 맞추기
주변 컨텍스트 → 중심 단어 예측
Skip-gram
  • 중심 단어를 보고 주변 단어들을 예측하는 방식 (CBOW의 반대)
  • 데이터가 적을 때 CBOW보다 성능이 더 좋은 경향이 있음
중심 단어 → 주변 컨텍스트 예측
N-gram (FastText에서 사용)
  • 단어를 n개의 연속 문자 조각으로 분리해 표현함
  • "apple" → "ap", "pp", "pl", "le" (2-gram 기준)
모르는 단어가 등장해도 조각 단위로 의미 추론 가능
doc2vec
Word2Vec을 문서 수준으로 확장한 모델 — 단어가 아닌 문서 전체를 하나의 벡터로 표현함.
문서 유사도 비교·추천 시스템에 활용됨. Gensim에서 지원
🏷️
5. 지도학습 — 텍스트 분류

레이블이 있는 데이터로 텍스트의 범주를 학습하는 방식

  • 전처리된 텍스트를 TF-IDF 또는 임베딩 벡터로 변환 후 분류기에 입력
  • 대표적 활용: 스팸 분류·감성 분석(긍정/부정)·뉴스 카테고리 분류
  • 주요 모델: Naive Bayes SVM RNN
텍스트 입력
전처리
TF-IDF 벡터
분류기
pos / neg
주요 라이브러리
· NLTK: 영어 NLP 전처리·토큰화·품사 태깅 지원. 교육용으로 널리 사용됨
· KoNLPy: 한국어 형태소 분석기 모음 (Kkma, Komoran, Okt 등)
· Scikit-learn: TF-IDF 벡터화, Naive Bayes·SVM 분류기 제공
· Gensim: Word2Vec, FastText, GloVe, doc2vec 학습 및 활용
· RNN (딥러닝): 시퀀스 순서까지 고려하는 신경망 기반 텍스트 분류
🔍
6. 비지도학습 — LSA 토픽 분석

"레이블 없이 문서들의 잠재 주제를 찾아내는 것" — 비지도학습의 대표적 텍스트 분석

  • DTM은 단어 수가 많아질수록 행렬이 커지고 대부분이 0인 희소 행렬이 됨
  • LSA는 이 행렬을 SVD(특이값 분해)로 압축해 잠재 토픽 공간을 추출함
  • LSI (Latent Semantic Indexing)라고도 불림 — 정보 검색에 처음 활용된 기법
💡 새 개념
LSA Latent Semantic Analysis
  • Term-Document 행렬을 SVD로 분해해 숨겨진 주제(토픽)를 추출하는 방법
  • 행렬 분해 결과: Term-Topic 행렬, Diagonal 행렬, Topic-Document 행렬 3개
  • "car"와 "automobile"처럼 표현은 달라도 같은 토픽에 묶을 수 있음
m개의 단어 × n개의 문서 행렬 → k개의 토픽으로 압축
벡터 공간 모델 Vector Space Model
  • 문서와 단어를 같은 벡터 공간에 표현 → 거리로 유사도를 측정함
  • 쿼리 벡터와 문서 벡터 간 코사인 유사도로 검색 결과 순위를 매김
검색 엔진의 문서 랭킹, 문서 추천 시스템에 활용됨
LSA 행렬 분해 구조
Term-Document Matrix (m×n)
= Term-Topic Matrix (m×k) × Diagonal Matrix (k×k) × Topic-Document Matrix (k×n)

· k: 추출할 토픽 수 (하이퍼파라미터로 설정)
· Diagonal Matrix의 대각 값이 클수록 해당 토픽이 중요함
LSA의 한계
· 토픽 수 k를 사전에 지정해야 함
· 새 문서 추가 시 전체 행렬을 재계산해야 함
· 이를 보완한 방법: LDA (확률적 토픽 모델), NMF (비음수 행렬 분해)
📊
7. 방법론 한눈에 비교
방법 의미 표현 차원 주요 용도
BoW / DTM 단어 빈도 어휘 수 (희소) 기본 분류, 검색
TF-IDF 빈도 + 중요도 어휘 수 (희소) 정보 검색, 키워드 추출
LSA 잠재 토픽 k (밀집) 토픽 분석, 문서 유사도
Word2Vec 문맥 의미 100~300 (밀집) 유사어 탐색, 다운스트림 ML
FastText 문맥 + 형태 100~300 (밀집) 신조어·오탈자 처리
NLTK KoNLPy Gensim Word2Vec doc2vec TF-IDF Scikit-learn LSA / LSI RNN
728x90

'머신러닝' 카테고리의 다른 글

260701_강의 정리 (Tensorflow, FFNN)  (0) 2026.07.01
260616_강의 정리 (신경망)  (0) 2026.06.16
260612_강의 정리 (SVM)  (0) 2026.06.12
260611_강의 정리 (차원 축소)  (0) 2026.06.11
260610_강의 정리 (KNN, K-Means)  (0) 2026.06.10