텍스트 마이닝
- 문서나 텍스트 데이터에서 유용한 정보나 패턴을 자동으로 추출하는 기술
- 자연어로 구성된 비정형 데이터에서 정보나 관계를 추출
코퍼스 (Corpus)
- 텍스트 마이닝이나 자연어 처리(NLP)를 할 때 모델이 학습하거나 분석하는 대상이 되는 여러 문서들의 묶음
- 데이터 마이닝 절차 중, 데이터의 정제, 통합, 선택, 변환의 과정을 거친 구조화된 단계
- 추가적인 절차 없이 데이터 마이닝 알고리즘 적용 가능
- 뉴스 기사 10만 개, 소설 여러 권, 위키백과
Feature Set
- 데이터의 정제, 통합, 선택, 변환의 과정을 거친 구조화된 단계
- 추가적인 절차 없이 데이터 마이닝 알고리즘 실험에서 활용
TDM (Term-Document Matrix)
- 문서와 단어 간의 사용 여부를 이용해 만든 Matrix
- 문서 유사도 계산, 문서 분류, 군집화, 토픽 모델링, 검색 엔진
문서1: 나는 사과를 좋아한다
문서2: 나는 바나나를 좋아한다
문서3: 사과와 바나나는 과일이다
전처리
문서1: 나 사과 좋아
문서2: 나 바나나 좋아
문서3: 사과 바나나 과일
| Term \ Doc | 문서1 | 문서2 | 문서3 |
| ---------- | --- | --- | --- |
| 나 | 1 | 1 | 0 |
| 사과 | 1 | 0 | 1 |
| 바나나 | 0 | 1 | 1 |
| 좋아 | 1 | 1 | 0 |
| 과일 | 0 | 0 | 1 |
텍스트 전처리
토큰화 (Tokenization)
- 코퍼스에서 토큰이라 불리는 단위로 나누는 작업
단어 토큰화 (Word Tokenization)
- 문장을 띄어쓰기나 규칙에 따라 단어 단위로 쪼개는 것
- 문장 : 저는 오늘 학교에 갑니다.
- 단어 토큰화 → ["저는", "오늘", "학교에", "갑니다."]
어절 토큰화 (Spacing Tokenization)
- 띄어쓰기 단위로 자르는 것
- 한국어 특화 용어이며, 가장 간단한 토큰화 방식
- 문장 : 저는 오늘 학교에 갑니다.
- 단어 토큰화 → ["저는", "오늘", "학교에", "갑니다."]
ㄴ "학교에"처럼 조사까지 붙은 형태적 단위를 어절이라 부른다
형태소 토큰화 (Morpheme Tokenization)
- 단어/어절을 의미를 가진 최소 단위(형태소)로 분리하는 것
- 문장: 저는 오늘 학교에 갑니다.
- 형태소 분석 결과 : ["저", "는", "오늘", "학교", "에", "가", "ㅂ니다"]
- 어근: 저, 오늘, 학교, 가
- 조사: 는, 에
- 어미: ㅂ니다
품사 태깅 (POS Tagging, Part Of Speech Tagging)
- 형태소를 품사(명사, 동사, 조사 등)로 분류하는 작업
"저는 오늘 학교에 갑니다."
품사 태깅 →
[("저", Noun), ("는", Josa),
("오늘", Noun),
("학교", Noun), ("에", Josa),
("가", Verb), ("ㅂ니다", Eomi)]
불용어 처리 (Stopword Removal)
- 불용어 : 자주 등장하지만 내용상의 핵심 의미를 가지지 않는 단어 (은, 는, 이, 가, the, a, an, on, ...)
- 데이터에서 유의미한 단어 토큰만을 선별하기 위해서 쓸모없는 단어를 제거
- 분석 정확도 향상, 차원 축소, 노이즈 제거 목적
문장 : "저는 오늘 정말 기분이 좋습니다."
토큰화 : ["저는", "오늘", "정말", "기분이", "좋습니다"]
불용어 제거 : ["오늘", "기분", "좋습니다"]
어간 추출 (Stemming)
- 단어의 어미를 잘라내어 기본 형태처럼 보이게 만드는 기계적 방법
- 접사(affix)를 제거하고 단어 외 원형 또는 어간을 찾아내는 것
- 단어의 변형된 형태에서 접사 등을 제거해 원형(기본 형태)이나 어간을 찾아내는 작업
- 포터 알고리즘 (Porter), 랭커스터 스태머 (Lancaster Stemmer)
playing → play
played → play
player → play
먹었습니다 → 먹었 → (어간: 먹)
갑니다 → 갑니 → (어간: 가)
어근 추출(Lemmatization)
- 문법적 변화(시제, 조사, 활용 등)를 고려하여 사전에 존재하는 진짜 기본형(표제어)을 추출하는 것
studies → study
went → go (불규칙 변화도 정상 처리)
mice → mouse
먹었습니다 → 먹다
갔어요 → 가다
학생들이 → 학생
빠르게 → 빠르다

텍스트 인코딩
- 문서를 유의미한 숫자, 벡터로 바꾸는 것
원-핫 인코딩 (One-Hot Encoding)
- 각 단어를 단어 사전의 크기만큼의 벡터로 바꾸고, 해당 단어 위치만 1, 나머지는 모두 0으로 표현하는 방식
사과 → [1, 0, 0]
바나나 → [0, 1, 0]
포도 → [0, 0, 1]
말뭉치 (BoW, Bag of Words)
- 문서에 등장한 단어들을 단순히 카운트하여 벡터로 표현하는 방법
- 단어 순서는 고려하지 않고 단어의 등장 빈도만 사용
- 단어가 얼마나 등장했는지를 기준으로 문서의 성격, 주제를 내포하는지 판단 (추천)
문서1 : "사과 바나나 사과"
문서2 : "포도 바나나"
문서1 → [2, 1, 0]
문서2 → [0, 1, 1]
TF-IDF (Term Frequency - Inverse Document Frequency)
- 특정 문서에만 중요한 단어를 더 크게 반영하는 방식
- TF : 단어 빈도
- IDF : 여러 문서에 공통으로 등장하면 가중치 ↓
문서1 : "사과 사과 바나나"
문서2 : "바나나 포도"
단어 문서1 문서2
사과 0.85 0
바나나 0.30 0.45
포도 0 0.85
→ "사과"는 문서1의 특징 단어
→ "포도"는 문서2의 특징 단어
워드 임베딩 (Word Embedding)
- 의미를 담아 단어를 벡터로 바꿔주는 모델
- 단어를 고정 길이의 dense(조밀한) 벡터로 변환하여 단어 간의 의미적 관계를 벡터 공간에 반영하는 방법
- 원-핫 인코딩과 달리 한 단어가 미리 정의된 차원에서 연속형의 값을 갖는 벡터로 표현
→ 구글의 Word2Vec이라는 방법론으로 진화
king - man + woman ≈ queen
apple과 banana → 거리 가까움 (둘 다 과일)
apple과 car → 거리 멀음
토픽 모델링(Topic Modeling)
- 문서 집합 안에 숨어 있는 주제(Topic)를 자동으로 찾아내는 비지도학습 기법
- LDA (Latent Dirichlet Allocation), ATM (Author Topic Model), DTM (Dynamic Topic Model)
문서1: "삼성, 애플 스마트폰 기술 경쟁"
문서2: "5G 통신망과 스마트폰"
문서3: "메이저리그 경기에서 홈런 폭발"
문서4: "야구 선수 트레이드"
Topic 1 (IT/스마트폰) : 스마트폰, 삼성, 애플, 통신, 5G
Topic 2 (야구/스포츠) : 야구, 선수, 경기, 홈런, 트레이드
→ 사람이 주제를 달지 않아도 자동으로 문서의 묶음을 찾아냄
감성 분석(Sentiment Analysis)
- 문장이나 문서의 감정(긍정/부정/중립)을 자동으로 분류하는 작업
- 리뷰 분석, SNS 의견, 고객 만족도
텍스트 군집화(Text Clustering)
- 라벨 없이 문서들을 자연스럽게 비슷한 것끼리 묶는 비지도학습 기법
- 문서 임베딩 필요 (TF-IDF, Word2Vec 등)
- K-means, Hierarchical Clustering
텍스트 분류(Text Classification)
- 텍스트를 정해진 카테고리 중 하나로 분류하는 지도학습 기법
- 스팸 메일 분류, 뉴스 기사 카테고리 분류
'개발 > Python' 카테고리의 다른 글
| 공분산 행렬 (0) | 2025.12.12 |
|---|---|
| 사회연결망 분석 (0) | 2025.12.07 |
| 연관분석 (Association Analysis) (0) | 2025.11.30 |
| 시계열 분석 (0) | 2025.11.29 |
| 최우추정량 (MLE, Maximum Likelihood Estimator) (0) | 2025.11.26 |
댓글