티스토리 뷰
56일차) 내일배움캠프 데이터 분석 TIL - Tableau(4), AI 활용 텍스트 데이터 분석(4)
heeso0908 2026. 3. 17. 20:59AI 활용 텍스트 데이터 분석) BERTopic 토픽 모델링 실습 정리
오늘은 텍스트 분석에서 토픽 모델링(Topic Modeling) 을 실습했다.
텍스트 분류가 정해진 라벨에 따라 문서를 나누는 작업이라면, 토픽 모델링은 라벨이 없는 문서들 속에서 어떤 주제가 숨어 있는지 자동으로 찾아내는 방법이다.
이번 실습에서는 전통적인 LDA 방식이 아니라, 문장 임베딩 기반의 BERTopic 을 사용했다.
덕분에 단순히 단어 빈도만 보는 것이 아니라, 문맥을 반영한 의미 기반 토픽 추출이 어떻게 이루어지는지 이해할 수 있었다.
1) 토픽 모델링(Topic Modeling)이란?
대량의 문서에서 숨겨진 주제(토픽)를 자동으로 발견 하는 비지도 학습(Unsupervised Learning) 기법 ≒ 머신러닝에서의 클러스터링(K-Means)
토픽 모델링은 많은 문서를 사람이 하나하나 읽지 않아도,
문서 안에 반복적으로 등장하는 주제를 자동으로 묶어주는 비지도 학습 기법이다.
예를 들어 리뷰 데이터가 수천 건 있을 때,
사람이 전부 읽지 않아도 모델이
- 배송 관련 이야기
- 품질 관련 이야기
- 가격 관련 이야기
처럼 비슷한 내용끼리 묶어줄 수 있다.
즉, 토픽 모델링은 “이 문서들이 대체 무슨 주제로 나뉘는가?” 를 알아내는 데 유용하다.
2) LDA 대신 BERTopic을 사용하는 이유
기존의 대표적인 토픽 모델링 방식으로는 LDA가 있다.
하지만 LDA는 단어의 빈도 중심으로 문서를 보기 때문에, 문맥을 반영하기 어렵고 토픽 수를 미리 정해야 한다는 한계가 있다.
반면 BERTopic은 다음과 같은 장점이 있다.
- 문장을 임베딩으로 바꿔 문맥을 반영할 수 있다
- 토픽 수를 자동으로 결정할 수 있다
- 전처리를 많이 하지 않아도 비교적 좋은 결과를 낼 수 있다
- 키워드와 대표 문서를 함께 보면서 해석하기 좋다
즉, BERTopic은 전통적인 BoW 기반 방식보다 더 유연하고 의미 중심적인 토픽 모델링 방법이라고 볼 수 있다.
3) BERTopic의 전체 흐름
오늘 실습에서 가장 중요했던 부분은 BERTopic이 내부적으로 어떤 단계로 작동하는지 이해하는 것이었다.
전체 흐름은 다음과 같다.
문서 → 임베딩 → UMAP 차원 축소 → HDBSCAN 군집화 → c-TF-IDF 키워드 추출 → 토픽 생성
각 단계를 간단히 정리하면 다음과 같다.
(1) 임베딩
텍스트를 숫자 벡터로 바꾸는 단계다.
문장의 의미가 비슷하면 벡터 공간에서도 가까운 위치에 놓이게 된다.
(2) UMAP
임베딩 벡터는 차원이 매우 높기 때문에, 이를 더 낮은 차원으로 압축하는 과정이다.
군집화가 더 잘 되도록 도와주고, 나중에 시각화할 때도 유용하다.
(3) HDBSCAN
비슷한 문서끼리 자동으로 묶어주는 군집화 알고리즘이다.
특히 토픽 개수를 미리 지정하지 않아도 된다는 점이 장점이다.
또한 어떤 토픽에도 뚜렷하게 속하지 않는 문서는 노이즈로 따로 분리할 수 있다.
(4) c-TF-IDF
각 군집에서 어떤 단어가 그 군집을 가장 잘 대표하는지 계산해주는 단계다.
이를 통해 토픽별 대표 키워드를 뽑을 수 있다.
결국 BERTopic은 문서들을 의미 기준으로 묶고, 각 묶음의 핵심 키워드를 찾아주는 구조라고 이해하면 된다.
4) 실습 데이터
이번 실습에서는 20 Newsgroups 데이터셋을 사용했다.
이 데이터는 뉴스그룹 게시글 모음으로, 토픽 모델링 실습에서 자주 사용되는 대표적인 텍스트 데이터셋이다.
이번에는 전체 20개 카테고리 중에서 서로 성격이 뚜렷하게 다른 4개 카테고리만 선택해 실습했다.
- comp.graphics
- rec.sport.baseball
- sci.space
- talk.politics.mideast
전체 문서는 약 3,800건 정도였고,
너무 짧은 문서는 의미 있는 임베딩을 만들기 어렵기 때문에 일정 길이 이하의 문서는 제거한 뒤 분석을 진행했다.
이 과정을 보면서 텍스트 분석에서도 데이터 품질을 먼저 확인하는 과정이 중요하다는 점을 다시 느꼈다.
5) 단계별로 직접 실행해보기
BERTopic은 몇 줄 코드만으로 바로 실행할 수 있지만,
오늘 실습에서는 먼저 내부 원리를 이해하기 위해 샘플 500건을 가지고 각 단계를 직접 실행해봤다.
그냥 라이브러리를 가져다 쓰는 것이 아니라 토픽이 만들어지는 과정 자체를 눈으로 확인할 수 있었다.
6) 임베딩: 텍스트를 숫자로 바꾸기
- 문장을 숫자로 표현했다 = 임베딩
먼저 문서를 임베딩 모델을 이용해 벡터로 변환했다.
이때 중요한 개념으로 유클리디안 거리와 코사인 유사도도 함께 배웠다.
- 유클리디안 거리는 점과 점 사이의 실제 직선 거리
- 코사인 유사도는 벡터의 방향이 얼마나 비슷한지 보는 방식
텍스트 임베딩에서는 보통 코사인 유사도가 더 자주 사용된다.
문장의 길이보다 의미 방향이 더 중요하기 때문이다.
이 부분을 통해 텍스트를 숫자로 바꾼다는 것이 단순 변환이 아니라,
문장 간 의미적 유사성을 수치화하는 과정이라는 점을 이해할 수 있었다.
7) UMAP으로 차원 축소하기
임베딩 벡터는 차원이 높아서 그대로 군집화하거나 시각화하기 어렵다.
그래서 UMAP을 사용해 더 낮은 차원으로 줄였다.
차원 축소를 하면
- 비슷한 문서들이 더 가까운 위치에 모이고
- 군집 구조를 더 잘 드러낼 수 있으며
- 2차원으로 줄였을 때 시각적으로도 확인할 수 있다
실습에서는 UMAP을 적용한 뒤,
문서들이 2차원 공간에서 어떤 식으로 퍼져 있는지 확인했다.
텍스트 데이터도 숫자 공간으로 옮기면 이렇게 시각화할 수 있다는 점이 흥미로웠다.
8) HDBSCAN으로 군집화하기
그다음에는 UMAP 결과를 바탕으로 HDBSCAN 군집화를 수행했다.
이 알고리즘은 밀도가 높은 문서들을 하나의 그룹으로 묶고, 애매한 문서는 노이즈로 분리한다.
여기서 중요한 점은 토픽 수를 미리 정하지 않아도 된다는 것이다.
기존 방법처럼 “토픽을 몇 개로 나눌까?”를 먼저 고민하지 않아도, 데이터 구조에 맞게 자동으로 그룹이 형성된다.
실습 결과를 보니, 일부 문서는 특정 주제에 잘 묶였고,일부는 노이즈로 빠지는 것도 확인할 수 있었다.
이 과정을 통해 현실의 텍스트 데이터는 항상 깔끔하게 나뉘는 것이 아니라, 애매한 문서도 존재한다는 점을 알 수 있었다.
9) c-TF-IDF로 대표 키워드 추출하기
군집이 만들어진 뒤에는 각 군집을 설명할 수 있는 대표 키워드를 추출했다.
이때 사용한 방법이 c-TF-IDF다.
일반 TF-IDF가 문서 단위의 중요 단어를 찾는 방식이라면,
c-TF-IDF는 하나의 군집 전체를 하나의 문서처럼 보고, 그 군집을 대표하는 단어를 계산한다.
덕분에 각 토픽별로
- 어떤 단어가 중심인지
- 그 토픽이 대략 어떤 주제인지
를 빠르게 파악할 수 있었다.
예를 들어 결과에서는 다음과 같이 비교적 뚜렷한 토픽이 나왔다.
- graphics 관련 토픽 → jpeg, graphics, images, format
- baseball 관련 토픽 → baseball, hit, players, league
- space 관련 토픽 → nasa, launch, shuttle, moon
- middle east politics 관련 토픽 → israel, israeli, arab, jews
이 결과를 보면서 BERTopic이 실제로 문서 집합 속 주제를 꽤 잘 분리해낸다는 점을 체감할 수 있었다.
10) 대표 문서까지 함께 보기
키워드만 보면 대략적인 토픽 방향은 알 수 있지만, 정확한 의미를 파악하려면 실제 문서도 함께 봐야 한다.
그래서 실습에서는 각 토픽의 대표 문서(representative docs) 도 확인했다.
이 과정이 중요했던 이유는, 토픽 모델은 키워드를 뽑아줄 뿐이고
최종적으로 “이 토픽은 무엇을 의미하는가”는 사람이 해석해야 하기 때문이다.
즉,
- 키워드로 먼저 대략적인 주제를 파악하고
- 대표 문서를 읽으면서 실제 의미를 확인하고
- 마지막으로 분석자가 토픽 이름을 붙이는 방식이다
이 부분을 통해 토픽 모델링은 완전히 자동화된 결과라기보다,
모델의 결과를 사람이 해석하는 과정까지 포함된 분석 작업이라는 점을 배웠다.
11) 전체 데이터에 BERTopic 적용하기
샘플로 각 단계를 이해한 뒤에는 전체 데이터에 BERTopic을 적용했다.
BERTopic은 실제로 매우 간단하게 사용할 수 있었다.
모델을 만들고, fit_transform()으로 문서를 넣으면 임베딩, 차원 축소, 군집화, 키워드 추출까지 한 번에 수행된다.
결과로는
- 각 문서의 토픽 번호
- 토픽별 문서 수
- 대표 키워드
- 대표 문서
를 확인할 수 있었다.
특히 토픽 번호 -1은 노이즈를 의미한다는 점도 확인했다.
즉, 어떤 주제에도 명확히 속하지 않는 문서들은 별도로 처리된다는 뜻이다.
12) 정리
- 텍스트 토픽 모델링은 라벨 없이 주제를 찾는 비지도 학습이다
- BERTopic은 임베딩 + UMAP + HDBSCAN + c-TF-IDF를 결합한 방식이다
- 문맥을 반영한 임베딩 덕분에 전통적인 LDA보다 더 유연하게 토픽을 찾을 수 있다
- 토픽 수를 자동으로 정하고, 노이즈 문서도 따로 분리할 수 있다
- 키워드만 보는 것이 아니라 대표 문서를 함께 읽고 사람이 해석해야 한다
Tableau
1) 계산된 필드, 계산 수준(LOD), 매개변수
(1) 계산된 필드
계산된 필드는 원본 데이터에 없는 값을 태블로 안에서 새로 만드는 기능이다.
예를 들어 아래처럼 사용할 수 있다.
- 수익률 = 수익 / 매출
- 연도 = YEAR([주문일자])
- 구매등급 = IF [매출] > 100000 THEN "High" END
즉, 분석에 필요한 파생 변수를 직접 만드는 기능이라고 보면 된다.
(2) 계산 수준(LOD)
계산 수준은 어느 기준으로 값을 계산할지 정하는 기능이다.
화면에 보이는 집계 기준과 내가 계산하고 싶은 기준이 다를 때 사용한다.
- FIXED: 내가 지정한 기준으로 고정해서 계산
- INCLUDE: 현재 화면보다 더 세부적으로 계산
- EXCLUDE: 현재 화면보다 더 큰 단위로 계산
예를 들어 고객별 매출을 보고 있어도, 지역 기준 총매출을 따로 계산하고 싶다면 LOD를 쓴다.
(3) 매개변수
매개변수는 사용자가 직접 바꿀 수 있는 값이다.
숫자, 날짜, 문자열 등을 넣을 수 있고 계산식이나 필터와 연결해서 사용한다.
예:
- 상위 N개 제품 보기
- 기준 연도 바꾸기
- 목표값 직접 조정하기
즉, 매개변수는 사용자가 분석 조건을 조절하는 버튼 역할을 한다.
2) Tableau Prep 데이터 전처리
Tableau Prep은 시각화 전에 데이터를 정리하는 도구다.
데이터를 바로 차트로 만들기 전에, 분석하기 좋은 형태로 가공할 때 사용한다.
주요 작업은 다음과 같다.
- Clean: 값 정리, 형식 변경, 필터링
- Join: 테이블 가로로 합치기
- Union: 테이블 세로로 붙이기
- Pivot: 행/열 구조 바꾸기
- Aggregate: 집계하기
- Output: 결과 저장하기
특히 이런 경우에 유용하다.
- 엑셀 파일 여러 개를 합쳐야 할 때
- 컬럼명이 제각각일 때
- 결측치나 이상값을 정리해야 할 때
- 월별 파일을 하나로 붙여야 할 때
쉽게 말하면,
Tableau Desktop은 보여주는 도구, Tableau Prep은 보여주기 전에 다듬는 도구다.
3) 태블로 작업 순서와 라이브 vs 추출, 원본 편집
(1) 태블로 작업 순서
보통 태블로는 아래 순서로 작업한다.
데이터 연결 → 데이터 확인 → 전처리/원본 정리 → 시각화 제작 → 계산식/필터 추가 → 대시보드 구성 → 공유
이 순서로 가면 작업 흐름이 비교적 깔끔하다.
(2) 라이브(Live)
라이브는 원본 데이터에 직접 연결해서 바로 가져오는 방식이다.
장점:
- 원본이 바뀌면 바로 반영됨
- 실시간 데이터 확인 가능
단점:
- 속도가 느릴 수 있음
- DB 부하가 생길 수 있음
즉, 최신성이 중요할 때 적합하다.
(3) 추출(Extract)
추출은 원본 데이터를 따로 저장해서 사용하는 방식이다.
장점:
- 속도가 빠름
- 배포와 관리가 편함
- 일부 기능 활용이 쉬움
단점:
- 원본이 바뀌어도 바로 반영되지 않음
- 새로고침이 필요함
즉, 속도와 안정성이 중요할 때 적합하다.
(4) 원본 편집
원본 편집은 데이터를 태블로 안에서 정리하는 작업이다.
주로 하는 일:
- 테이블 관계 설정
- 조인 / 유니온
- 필드명 수정
- 데이터 구조 확인
간단한 수정은 Data Source 페이지에서 하고,
좀 더 본격적인 전처리는 Tableau Prep에서 진행하면 된다.
'내일배움캠프 데이터 분석' 카테고리의 다른 글
| 58일차) 내일배움캠프 데이터 분석 TIL - Tabpy, 실전 프로젝트(2) (0) | 2026.03.19 |
|---|---|
| 57일차) 내일배움캠프 데이터 분석 TIL - Tableau(5), AI 활용 텍스트 데이터 분석(5) (0) | 2026.03.18 |
| 55일차) 내일배움캠프 데이터 분석 TIL - Tableau(3), AI 활용 텍스트 데이터 분석(3) (1) | 2026.03.16 |
| 54일차) 내일배움캠프 데이터 분석 TIL - Tableau(2), QCC(2), AI 활용 텍스트 데이터 분석(2) (0) | 2026.03.13 |
| 심화 프로젝트) 다이캐스팅 공정 불량 탐지 모델 개발 프로젝트 (1) | 2026.03.12 |
- Total
- Today
- Yesterday
- 텍스트분석
- 코딩기초
- Tableau
- git
- 프로그래밍입문
- 코드카타
- 비전공자코딩
- 머신러닝
- 태블로
- 구글코랩
- Python
- 파이썬입문
- 통계
- Til
- SQL
- 파이썬
- GoogleColab
- 내일배움캠프
- 판다스
- 중학생코딩
- 데이터분석
- 데이터시각화
- 데이터분석입문
- github
- 코딩처음
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
