데이터 분석 심화_자연어 처리
단어 가방 모형(Bag of Words; BOW)
1. BOW의 정의 및 특징
1) 정의 및 구조
-개념: 문서에 포함된 단어들의 순서를 무시하고, 오직 각 단어의 출현 빈도(Frequency)만을 기반으로 문서를 수치화하는 방식임.
-DTM(Document Term Matrix): 개별 문서의 토큰 빈도를 행렬로 나타낸 결과물이며, 행은 문서, 열은 단어 토큰을 의미함.

2) BOW 및 DTM의 한계
-의미(Semantic) 정보 결여: 단어 간의 연관성이나 의미 차이를 반영하지 못하고 단어의 순서 정보가 손실됨.
-고차원 희소 행렬(Sparse Matrix): 단어 사전이 커질수록 대부분의 값이 0으로 채워져 메모리 효율이 저하됨.
-일반화 한계: 학습 시 사전에 없던 단어(OOV; Out Of Vocabulary)가 등장하면 처리하지 못하는 한계가 있음.
2. 코드 구현 및 세부 설명
1) 환경 설정 및 말뭉치(Corpus) 준비
-라이브러리: 데이터 처리를 위한 pandas, 수치 계산을 위한 numpy, 시각화를 위한 matplotlib 등을 활용함.
-데이터: 분석하고자 하는 문장들을 리스트 형태인 corpus에 담아 준비함.
2) 사이킷런을 활용한 벡터화 공정
-모델 선언 및 학습:
- CountVectorizer(): 텍스트를 빈도 기반 벡터로 변환하는 클래스임.
- fit(): 말뭉치 내의 모든 토큰을 추출하여 중복 없는 어휘 사전을 학습하고 인덱스를 부여함.
- transform(): 학습된 사전을 바탕으로 각 문장의 단어 빈도를 수치 행렬(DTM)로 변환함.
- get_feature_names_out(): 학습된 사전의 단어 목록을 인덱스 순서대로 반환하여 열 이름으로 사용함.
- toarray(): 희소 행렬을 일반적인 2차원 배열 형태로 변환하여 가독성을 높임.
dtm = cvect.transform(corpus) vocab = cvect.get_feature_names_out() df_dtm = pd.DataFrame(dtm.toarray(), columns=vocab)
-
from sklearn.feature_extraction.text import CountVectorizer cvect = CountVectorizer() cvect.fit(corpus)-행렬 변환 및 데이터프레임화:





3) 주요 파라미터 활용
-n-gram (ngram_range): 연속적인 토
큰을 묶어서 하나의 단위로 처리함(예: (1, 2)는 유니그램과 바이그램을 모두 포함).
-빈도 제어(min_df, max_df): 너무 희귀하거나 너무 흔한 단어를 필터링하여 사전의 질을 높임.
-기능 제한(max_features, stop_words): 학습할 단어 수를 제한하거나 분석 의미가 없는 불용어를 직접 지정하여 제외함.
TF-IDF(Term Frequency - Inverse Document Frequency)
1. TF-IDF의 정의 및 목적
1) 핵심 지표의 정의
-TF(Term Frequency): 특정 문서 내에서 해당 단어가 등장하는 빈도로, 문서 내 중요도를 나타냄.
-IDF(Inverse Document Frequency): 특정 단어가 등장한 문서 수에 반비례하는 값으로, 문서군 전반에 흔하게 나타나는 단어의 가중치를 낮춤.

2) 사용 목적 및 특징
-가중치 보정: 모든 문서에 공통으로 등장하여 변별력이 낮은 단어의 가중치를 낮추고, 특정 문서에서만 발견되는 핵심어에 높은 점수를 부여함.
-핵심어 추출: 단순히 빈도수만 고려하는 BOW보다 문서의 핵심 의미를 파악하는 데 유리함.
2. 코드 구현 및 세부 설명
1) TfidfVectorizer를 이용한 가중치 행렬 생성
-구현 코드:
- TfidfVectorizer(): TF-IDF 계산을 지원하는 전용 벡터라이저 클래스임.
- fit_transform(): 단어 사전 학습과 가중치 계산 및 행렬 변환을 동시에 수행함.
-
from sklearn.feature_extraction.text import TfidfVectorizer tfidfvect = TfidfVectorizer(ngram_range=(1, 2)) dtm = tfidfvect.fit_transform(corpus)
2) 결과 데이터 분석
-코드 설명:
- 결과물을 데이터프레임으로 변환하면, '문의입니다'와 같이 모든 문서에 등장하는 단어는 낮은 가중치를, '코로나'와 같이 특정 문서에 집중된 단어는 높은 가중치를 가짐을 확인할 수 있음.
vocab = tfidfvect.get_feature_names_out() df_dtm = pd.DataFrame(dtm.toarray(), columns=vocab)


3) 분석의 한계와 대안
-한계: 빈도를 보정한 지표일 뿐 여전히 Bag-of-Words 구조이므로 단어의 문맥적 의미를 완전히 이해하지 못함.
-보완: 더 정교한 의미 파악을 위해 Word2Vec, BERT, GPT
등의 딥러닝 기반 임베딩 모델을 활용함.
#부트캠프후기 #멀티캠퍼스부트캠프 # 데이터마케팅부트캠프
'부트캠프 > 멀티캠퍼스_퍼포먼스 마케팅과 데이터 분석' 카테고리의 다른 글
| [멀티캠퍼스 부트캠프 12주차(2)] 퍼포먼스 마케팅 심화_GA4 실습 (0) | 2026.04.13 |
|---|---|
| [멀티캠퍼스 부트캠프 12주차] 퍼포먼스 마케팅 심화_GA4 (0) | 2026.04.01 |
| [멀티캠퍼스 부트캠프 10주차(1)] 데이터 분석 심화_딥러닝 (0) | 2026.03.23 |
| [멀티캠퍼스 부트캠프 9주차] 데이터 분석 심화_머신러닝 비지도학습 (1) | 2026.03.23 |
| [멀티캠퍼스 부트캠프 8주차(2)] 데이터 분석 심화_머신러닝 실습 (0) | 2026.03.11 |