LLM을 활용한 소셜 미디어 감성 분석 및 의견 마이닝
요약
본 기사는 LLM을 활용하여 소셜 미디어의 비정형 데이터를 구조화된 감성, 감정, 핵심 의견 대상으로 추출하는 Python 파이프라인 구축 방법을 안내합니다. OpenAI SDK와 Oxlo.ai API를 사용하여 시스템 프롬프트로 JSON 출력을 강제하고, 배치 처리 및 결과 집계까지 구현하는 과정을 다룹니다.
핵심 포인트
- LLM을 이용해 소셜 미디어 데이터를 구조화된 형태로 추출할 수 있습니다.
- OpenAI SDK와 같은 도구를 사용하며, 시스템 프롬프트를 통해 JSON 출력을 강제합니다.
- Oxlo.ai의 요청당 요금 모델은 대규모 배치 분석 비용 예측에 유리합니다.
- 파이프라인 구축 후 감성 분포 및 주요 언급 대상을 집계하여 보고서를 생성할 수 있습니다.
소셜 미디어는 끝없는 비정형의 의견 데이터를 생성합니다. 저희는 LLM(대규모 언어 모델)을 사용하여 원본 게시물을 수집하고 구조화된 감성, 감정, 핵심 의견 대상을 추출하는 경량 Python 파이프라인을 구축할 것입니다. 완성된 도구는 모든 브랜드 분석 스택에 통합될 수 있으며 Oxlo.ai의 요청당 평면 요금으로 실행되므로, 긴 스레드나 대규모 배치 분석 비용 예측이 용이합니다.
준비물
- Python 3.10 이상
- https://portal.oxlo.ai에서 받은 Oxlo.ai API 키
- OpenAI SDK:
pip install openai
Step 1: Oxlo.ai 클라이언트 설정
OpenAI와 호환되는 클라이언트를 초기화하고 Oxlo.ai를 가리키게 합니다. 저는 키를 환경 변수에 보관하지만, 로컬 테스트의 경우 하드코딩된 문자열도 작동합니다.
import os
from openai import OpenAI
...
Step 2: 시스템 프롬프트 정의
시스템 프롬프트는 모델이 엄격한 JSON을 반환하도록 강제하고, 추출할 내용(감성 레이블, 신뢰도 점수, 주요 감정, 대상 엔티티, 간략한 추론 문자열)을 알려줍니다.
SYSTEM_PROMPT = """당신은 소셜 미디어 감성 분석 엔진입니다.
사용자가 제공한 게시물을 분석하고 다음 정확한 키를 가진 단일 JSON 객체를 반환하세요:
- sentiment: ["positive", "neutral", "negative"] 중 하나
...
Step 3: 분석 함수 구축
이 헬퍼 함수는 원본 게시물 문자열을 받아 Llama 3.3 70B를 JSON 모드를 활성화하여 호출하고, 응답을 파싱한 후 Python 딕셔너리를 반환합니다. 소셜 데이터가 다국어인 경우, 모델 ID를 qwen-3-32b로 변경하세요.
import json
def analyze_post(post_text: str) -> dict:
...
Step 4: 게시물 배치 수집
실제 소셜 리스닝은 여러 개의 게시물을 처리하는 것을 의미합니다. 이 루프는 목록을 반복하며 각 항목에 대해 analyze_post를 호출하고 결과를 수집합니다. Oxlo.ai가 토큰당이 아닌 요청당 요금을 부과하기 때문에, 긴 게시물이나 긴 댓글 스레드를 실행하는 비용은 짧은 게시물을 실행하는 비용과 동일합니다.
raw_posts = [
"@AcmeCorp support와 4시간 동안 대기했습니다. 정말 화가 납니다. 다시는 이용하지 않을 겁니다.",
"새로운 Oxlo.ai 가격 모델은 저희 에이전트 워크플로우에 생명수입니다. 정말 마음에 들어요.",
...
Step 5: 집계 및 보고 (Aggregate and report)
구조화된 출력을 실행 가능한 지표로 변환합니다. 이 간단한 집계는 감성 분포를 계산하고 가장 자주 언급되는 대상을 파악합니다.
from collections import Counter
sentiment_counts = Counter([r["sentiment"] for r in results])
...
실행 (Run it)
스크립트를 sentiment_pipeline.py로 저장하고 실행합니다. 전체 실행 파일과 제가 제 기계에서 보는 출력 결과는 다음과 같습니다.
import os
import json
from collections import Counter
...
예시 출력:
Sentiment Distribution: {'negative': 2, 'positive': 1, 'neutral': 1}
Top Mentioned Targets: [('acmecorp support', 1), ('oxlo.ai pricing model', 1), ('ai tool', 1)]
...
다음 단계 (Next steps)
정적 raw_posts 리스트를 실제 플랫폼 피드를 수집하는 웹훅 리스너로 교체하여 파이프라인을 실시간 소스에 연결합니다. 더 깊은 통찰력을 얻으려면, 집계된 JSON에서 행을 수동으로 읽는 대신 kimi-k2.6 또는 deepseek-v3.2를 사용하여 요약 보고서를 생성하는 두 번째 단계를 추가하세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기