Shot-Shot / app.py
sky4432's picture
Update app.py
4c85533 verified
import streamlit as st
from transformers import pipeline
# -----------------------------
# 1) Zero-Shot 분류 모델 준비
# -----------------------------
topic_classifier = pipeline(
"zero-shot-classification",
model="joeddav/xlm-roberta-large-xnli" # 다국어 지원 모델
)
# -----------------------------
# 2) 감성분석 모델 준비
# -----------------------------
sentiment_analyzer = pipeline(
"sentiment-analysis",
model="monologg/koelectra-base-finetuned-nsmc"
)
# -----------------------------
# 3) 세분화 라벨 정의
# -----------------------------
topic_labels = [
"근무환경-설비장비",
"근무환경-휴게소음",
"근무환경-안전",
"복리후생-수당보상",
"복리후생-교통셔틀",
"복리후생-기숙사숙소",
"조직문화-대인관계갈등",
"조직문화-언어매너",
"조직문화-사기스트레스",
"인원충원",
"근태관리",
"장비물자-작업복",
"장비물자-언더웨어",
"기타"
]
# -----------------------------
# 4) 스트림릿 UI
# -----------------------------
st.title("익명게시판 이슈분석 (세분화 주제 + 감성)")
st.write("""
**한 번에 글 하나씩** 아래 칸에 붙여넣고, "분석하기" 버튼을 누르세요.
- **Zero-Shot 분류**: 근무환경, 복리후생, 조직문화, 인원충원... 등 세분화
- **감성분석**: 긍정(positive) vs 부정(negative)
- 최대 약 5,000자까지 입력 가능합니다.
""")
user_input = st.text_area("본문을 입력하세요 (복사/붙여넣기)", max_chars=5000, height=250)
if st.button("분석하기"):
text = user_input.strip()
if not text:
st.warning("텍스트를 입력해주세요!")
else:
# 1) Zero-Shot 분류
topic_result = topic_classifier(
text,
topic_labels,
truncation=True # 512토큰 초과시 잘라내기
)
# 가장 확률 높은 라벨
pred_topic = topic_result["labels"][0]
topic_score = topic_result["scores"][0]
# 2) 감성분석
sent_result = sentiment_analyzer(text, truncation=True)
sent_label = sent_result[0]["label"] # positive/negative
sent_score = sent_result[0]["score"]
st.subheader("분석 결과")
st.write(f"**주제**: {pred_topic} (score={topic_score:.4f})")
st.write(f"**감성**: {sent_label} (score={sent_score:.4f})")
st.success("분석이 완료되었습니다!")