본문 바로가기
개발/Python

텍스트 마이닝

by 피로물든딸기 2025. 12. 7.
반응형

전체 링크

텍스트 마이닝

- 문서나 텍스트 데이터에서 유용한 정보나 패턴을 자동으로 추출하는 기술

- 자연어로 구성된 비정형 데이터에서 정보나 관계를 추출

 

코퍼스 (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

댓글