Intro.
이제 런닝화도 샀다.
나이키 뉴발란스 추천받았지만...
이것저것 다 따져봤는데, 나이기 주가 박살나는거랑 그에 대한 이유들 분석해보니까 나이키 런닝화를 사고싶지 않았다.
그래도 모르니 나이키, 아디다스, 뉴발란스 다 신어봤는데,, 편한데 음 그냥 그랬고...(사실 너무 흔해서 싫은것도 있었음)
결국 런닝화에 떠오르는 신흥 브랜드 On을 택했다.
호카랑 고민했지만, Hoka보다 조금더 On의 브랜드성도 맘에 들었고(로저페더러도 주주임.. 크..) 두개 다 신어보려고했다.
결국 성수 러닝화 편집샵인 굿러너컴퍼니까지 가서 직접 이것저것 신어보고 편한거 확인하고 바로 질러버렸다.
더 열심히 달려보겠다.
(인트로가 점점 길어진다..?)
1. 서론 (Introduction)
1.1 감성분석이란? (What is Sentiment Analysis?)
자 잠깐 시작하기전에, 나는 감정분석인지 감성분석인지 헷갈렸다.. 안그래도 단어에 약한데 뭐가 맞는지 잘 봐야지.
감정/감성의 뜻을 대충한번 정리해본다면..
- 감정분석:
- "감정"은 인간이 느끼는 기쁨, 슬픔, 분노 등의 감정 상태를 의미
- "감정분석"은 텍스트에서 감정 상태를 분석한다는 의미를 명확히 전달
- 이 표현은 특히 인간의 감정 상태에 초점을 맞춘 분석을 할 때 적합
- 감성분석:
- "감성"은 감정뿐만 아니라 감각, 직관, 느낌 등을 포함하는 더 넓은 의미
- "감성분석"은 텍스트에 담긴 정서적 반응이나 주관적 느낌을 분석하는 데 더 넓은 의미를 포함할 수 있음
- 감정을 포함한 보다 포괄적인 분석을 의미할 때 사용될 수 있음
이번에 좀 공부하면서 여러 자료들을 볼때는 일반적으로 감정보다는 감성분석으로 더 쓰이고 있었다.
아마도 "감성"이 "감정"보다 더 포괄적인 의미를 담고 있기 때문에, 텍스트에서 단순한 감정 상태뿐만 아니라 보다 복합적인 정서적 의미를 분석하는 경우에 적합하니까 그렇게 표현하나보다.
자 다시 본론으로, Sentiment Analysis가 그래서 뭐냐?
정의를 내려보고 살펴보자면,
먼저 wiki에서는 언어 처리, 텍스트 분석, 계산 언어학 및 생체 인식을 활용하여 감정 상태와 주관적인 정보를 체계적으로 식별, 추출, 정량화 및 연구하는 기술이라고 설명한다.
특히 감성 분석은 리뷰나 설문 조사 응답, 온라인 및 소셜 미디어, 의료 자료와 같은 고객의 목소리 자료에 널리 적용되며, 마케팅에서 고객 서비스, 임상 의학에 이르기까지 다양한 분야에서 활용된다고 한다.
AWS에서 정의하는 감정 분석은 디지털 텍스트를 분석하여 메시지의 감정적 어조가 긍정적인지, 부정적인지 또는 중립적인지를 확인하는 프로세스라고 표현하고있다.
감성 분석은 크게 기존엔 두 가지 접근 방식으로 나눌 수 있었다고 많은 자료에 나오지만, 이제는 세가지로 나눌 수 있을것같다.
- 사전 기반 접근(Lexicon-based approach):
- 감정을 나타내는 단어의 목록을 사용하여 텍스트의 감정을 분석을 먼저하고,
- 예를 들어, "행복하다", "좋다"와 같은 단어는 긍정적인 감정으로, "슬프다", "나쁘다"와 같은 단어는 부정적인 감정으로 분류한다.
- 예전방식이며 요즘은 잘 사용을 안하는듯하다
- 간단하고 직관적이지만, 텍스트의 문맥을 제대로 반영하지 못하는 경우가 많아 한계가 있으니까...
- 예를들면, "아주 좋아요! 근데 이걸 굳이 이제 잘 사용 안하게될듯?.." 이러면 어떻게 평가할거야?..
- 머신 러닝 기반 접근(Machine Learning-based approach):
- 텍스트 데이터를 학습하여 감정을 예측하는 모델을 만드는 방식이다
- 이 방법은 텍스트의 문맥을 고려하여 더 정확한 감성 분석이 가능합니다.
- 일반적으로 Naive Bayes, SVM(Support Vector Machine), 또는 최근에는 딥러닝 모델(예: LSTM, BERT)을 사용한다.
- 데이터가 충분히 있을 때 매우 효과적이며, 감정 분석의 정확도와 정밀도를 높일 수 있다. 학습하는 모델이니까 방대한 양이 도움이 된다.
- 특히 딥러닝 모델은 텍스트의 복잡한 문맥과 뉘앙스를 잘 반영하여 보다 정교한 감성 분석을 가능하게 한다고 한다.
- AI 및 대규모 언어 모델 기반 접근 (AI and Large Language Model-based Approach):
- 최근에는, (아니 이제 최근이라고 하기엔 벌써 지났지), ChatGPT와 같은 대규모 언어 모델(LLM, Large Language Model)을 활용한 감성 분석이 세 번째 접근 방식으로 등장했다
- 기존의 머신 러닝 모델과 달리, 사전 학습된 대규모 신경망을 사용하여 텍스트의 감정을 분석한다
- ChatGPT와 같은 모델은 방대한 양의 데이터를 통해 학습되었기 때문에, 텍스트의 문맥을 깊이 이해하고, 특정 지시나 질문을 기반으로 실시간으로 감정을 분석할 수 있다..
- 단순한 감정 분석을 넘어, 보다 복잡한 문맥과 감정의 뉘앙스를 파악할 수 있으며, 사용자 요구에 맞게 커스터마이징할 수 있는 장점도 있다
- 예를들어, ChatGPT API를 통해 "이 문장의 감정은 무엇인가?"라는 질문을 던지면, 모델은 텍스트의 전반적인 맥락을 고려하여 긍정적, 부정적, 중립적인 감정을 실시간으로 분석하여 응답할 수 있다. 너무 편한거 아니냐고..
-> AI를 활용한 방식의 기술적인 방법을 조금만 더 알아보자.(이걸로 감성분석해볼거라서)
1.2 AI 및 대규모 언어 모델 기반 감성 분석의 기술적 방식
ChatGPT나 네이버 클로바 같은 대규모 언어 모델(LLM, Large Language Model)은 방대한 양의 텍스트 데이터를 바탕으로 사전 학습된 신경망 모델이다.
이러한 모델은 텍스트의 문맥을 이해하고, 문장의 감정을 분석할 수 있는 능력은 물론 뭐 뉘앙스도 바로 간파할수있다. 감성 분석에서 LLM이 사용하는 주요 기술적 요소는 아래와 같이 정리해볼수 있다.
사전 학습(Pre-training)
대규모 언어 모델은 수십억 개의 문장으로 이루어진 텍스트 코퍼스를 바탕으로 사전 학습된다. 이 과정에서 모델은 단어 간의 관계, 문장의 구조, 문맥의 의미 등을 학습하여 텍스트의 의미를 이해할 수 있는 능력을 갖추고, 이 학습 과정은 비지도 학습의 일종으로, 인간의 개입 없이 모델이 스스로 언어의 패턴을 파악하는 방식이다. 이제는 사투리도 된다고한다.
전이 학습(Transfer Learning)
전이 학습이라는 말이 잘 안들어오긴했다.
사전 학습된 언어 모델은 감성 분석과 같은 특정 작업에 맞게 미세 조정(Fine-tuning)될 수 있는데, 전이 학습은 이미 학습된 지식을 활용하여 새로운 작업에 적응시키는 과정으로, 감성 분석에 필요한 추가 데이터를 모델에 제공하여 해당 작업에 특화된 성능을 발휘할 수 있게 하는것이다... 뭐라는거냐, 예시가 필요할것같다.
전이 학습 예시:
- 이미지 인식: 예를 들어, 고양이와 개를 구분하는 모델을 학습한 후, 이 모델을 사용하여 새와 물고기를 구분하는 작업에 적용할 수 있다. 여기서 고양이와 개를 구분하는 데 학습한 특징들(예: 동물의 기본적인 형태, 질감 등)은 새와 물고기를 구분하는 데도 유용할 수 있다.
- 자연어 처리(NLP): GPT-3 같은 대규모 언어 모델은 수많은 텍스트 데이터를 기반으로 사전 학습된다. 이 모델을 가져와 특정 도메인(예: 의학 논문 분석)이나 특정 작업(예: 감성 분석)에서 미세 조정하면, 도메인에 특화된 성능을 발휘할 수 있습니다.
즉, 미리 학습된 모델을 다른 곳에서도 활용(transfer가 여기서 나온 말인것같다) 가능한것이 전이 학습이라고 생각하면 되겠다.
문맥 이해(Contextual Understanding)
LLM은 입력된 텍스트의 문맥을 이해하는 능력을 바탕으로 감정 분석을 수행한다. 예를 들어, 단어의 의미는 그 단어가 사용된 문맥에 따라 달라질 수 있다. 대규모 언어 모델은 이러한 문맥적 차이를 파악하여, 단순한 긍정/부정 감정뿐만 아니라 더 미묘한 감정의 뉘앙스까지 이해할 수 있다..
예를들면
"여뤄뿐 찐짜 요끼 쑦쏘 뼐류예요 까찌뫄쎼요 여끼 뜨럽꾸 싸짱님 뿔친쩔햬요"
자... 에어비엔비나 해외에 숙소에 대해서 한국인만을 위해서 쓰는 이런 리뷰들. 별점은 5점이지만 리뷰를 저렇게 쓴다면?
예전처럼 사전적인 분석, 즉 번역기만 쓴다면 뭔소린지도 모를거지만, LLM은 어느정도 문맥자체를 이해하기 때문에 긍정인지 부정인지 정도는 정확히 간파한한다.
(오늘도 승리를 챙기는 GPT)
1.3 감성 분석의 중요성 (Importance of Sentiment Analysis)
감성분석은 그럼 언제 중요하고 어떻게 쓰일까?
고객 이해와 만족도 향상
감성 분석은 고객의 피드백을 통해 제품이나 서비스에 대한 감정을 이해하는 데 중요한 역할을 할수있다.
고객이 표현하는 긍정적, 부정적 감정을 분석함으로써, 기업은 고객, 커스터머의 요구와 불만을 보다 정확히 파악할 수 있고, 이를 통해 맞춤형 솔루션을 제공하고, 고객 만족도를 높이는 데 기여할 수 있댜
마케팅 전략 최적화
감성 분석을 통해 소비자의 감정을 이해하면, 마케팅 전략을 더욱 효과적으로 조정할 수 있을것이다.
소비자들이 어떤 요소에 긍정적 반응을 보이는지, 어떤 부분에서 부정적 반응을 나타내는지를 파악하여 광고 메시지, 프로모션, 제품 개선 등에 반영할 수 있다. 특히 요즘은 SNS를 적극 활용한다.
브랜드 관리와 평판 유지
브랜드에 대한 긍정적 또는 부정적 감정은 소비자 충성도와 직접적으로 연관된다.
감성 분석을 통해 브랜드에 대한 감정적 반응을 지속적으로 모니터링함으로써, 평판 관리에 선제적으로 대응할 수 있고, 이런 움직임을 통해서 장기적으로 브랜드 가치를 유지하고, 소비자와의 신뢰 관계를 강화하는 데 필수적일것이다.
위험 관리와 위기 대응
마케팅이나 브랜딩 뿐만 아니라 당연히 감성 분석은 잠재적인 리스크를 조기에 발견하고 대응하는 데 중요한 역할을 할수잇따.
특히 SNS에서의 부정적 감정을 빠르게 파악하고, 커지기 전에 신속히 대응함으로써, 기업의 평판 손실을 최소화하고, 위기를 효과적으로 관리할 수 있다.
감성 분석의 응용 분야
- 마케팅: 소비자의 피드백을 분석하여 제품이나 서비스에 대한 감정을 이해하고, 마케팅 전략을 조정
- 정치: 소셜 미디어에서 정치적 여론을 분석하여 선거 전략을 수립
- 금융: 주식 시장의 감정을 분석하여 투자 전략을 세움.. (해봤지만 그닥..)
- 고객 서비스: 고객 지원 채널에서 제공된 피드백을 분석하여 서비스 품질을 개선
3. 실습: 감성분석 예제 (Hands-on Example)
자 ChatGPT를 최대한 활용해보려고한다.
MJ가 이것저것 많이 리서치해주셔서 손쉽게 코드 돌려볼수있었다.
내가 당연히 작성한 코드가 아니기에, 받은 코드지만 어떤 코드인지 상세히 정리해보겠다
네이버 클로바랑 GPT고민했는데, 그래도 매월 $25씩 내면서 잘 써먹고있는데,,, GPT로해봐야지.. 그리고 무엇보다 더 성능이 좋다고 판단된다 (개인적으로)
3.1 데이터 준비 (Preparing the Data)
[끄적이기1] 구글 플레이스토어, 앱스토어 리뷰정보 크롤링 해보기
데이터 크롤링, 스크랩하기 뭐 암튼 데이터 가지고오기. 한 3년전에 처음으로 파이썬 문법이 뭔지도 모를때 동료직원에게 밥사주면서 배웠었다.(실버맨님 감사합니다)그 후에는 지피티 선생님
simbbo-blog.tistory.com
보통 영화 리뷰?데이터를 사용하고 캐글 뒤지면 데이터 넘치겠지만, 이왕 내가 모은 데이터로 이것저것 해보면 재밌잖여.
지난번에 포스팅했던 앱스토어에 대한 리뷰 데이터가 있으니 바로 활용해볼만하겠다.
3.2 OpenAI의 GPT API 연동해서 리뷰 분석하기
먼저 API를 발급받아야하는데, 다른 블로그 찾아보셔라..
1. API키 설정
openai.api_key = "" # 당신의 API
GPT_API_URL = "https://api.openai.com/v1/chat/completions"
2. 리뷰 분석을 위한 함수 정의
def analyze_review(review):
try:
messages = [
{"role": "system", "content": "너는 어플 리뷰에 담긴 고객 감정을 분석하고 탐지하는 AI 언어모델이야"},
{"role": "user", "content": f"다음 어플 리뷰를 분석해 고객 감정이 긍정인지 부정인지 판단해 알려줘. 대답은 다른 추가적인 설명없이 '긍정' 또는 '부정' 둘 중 하나의 단어로 대답해야 해: {review}"}
]
- analyze_review: 함수를 지정하고
- messages: GPT 모델에 전달할 메시지를 설정한다
첫 번째 메시지는 모델의 역할을 정의하는 시스템 메시지이고 맘대로 적어도 된다
두 번째 메시지는 사용자가 입력하는 리뷰 내용과 함께 모델에게 리뷰 감정을 판단하도록 요청하는 메시지다.
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages,
max_tokens=3,
n=1,
stop=None,
temperature=0
)
response = completion.choices[0].message.content
print(response)
return response
openai.ChatCompletion.create: GPT 모델에 메시지를 보내고, 그 결과를 받아오는 코드
- model: 사용할 GPT 모델을 지정해주고
- messages: 이전에 정의한 메시지 리스트를 전달때리고
- max_tokens: 최대 토큰 수를 설정하는데, 여기서는 간단한 '긍정' 또는 '부정' 답변만 필요하므로 3으로 설정하면 된다.
- n: 반환할 답변의 수를 지정, 여기서는 1개의 답변만 반환해야한다
- stop: 응답이 중단될 조건을 설정
- temperature: 모델의 응답의 다양성을 제어하고 0으로 설정하면 가장 확률이 높은 답을 던져준다고 한다..?
가장 중요시 되는 함수는 위에서 끝나고 나머지 코드에서는 예외경우처리만 해주면 될것같다.
최종 정리 코드.
openai.api_key = ""
GPT_API_URL = "https://api.openai.com/v1/chat/completions"
def analyze_review(review):
try:
messages = [
{"role": "system", "content": "너는 어플 리뷰에 담긴 고객 감정을 분석하고 탐지하는 AI 언어모델이야"},
{"role": "user", "content": f"다음 어플 리뷰를 분석해 고객 감정이 긍정인지 부정인지 판단해 알려줘. 대답은 다른 추가적인 설명없이 '긍정' 또는 '부정' 둘 중 하나의 단어로 대답해야 해: {review}"}
]
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages,
max_tokens=3,
n=1,
stop=None,
temperature=0
)
response= completion.choices[0].message.content
print(response)
return response
except openai.error.RateLimitError as e:
retry_time = e.retry_after if hasattr(e, 'retry_after') else 30
print(f"Rate limit exceeded. Retrying in {retry_time} seconds...")
time.sleep(retry_time)
return analyze_review(review)
except openai.error.ServiceUnavailableError as e:
retry_time = 10
print(f"Service is unavailable. Retrying in {retry_time} seconds...")
time.sleep(retry_time)
return analyze_review(review)
except openai.error.APIError as e:
retry_time = e.retry_after if hasattr(e, 'retry_after') else 30
print(f"API error occurred. Retrying in {retry_time} seconds...")
time.sleep(retry_time)
return analyze_review(review)
# 리뷰 분석하고df에 저장해주기
sentiments = []
for review in tqdm(df["review"]):
sentiment = analyze_review(review)
sentiments.append(sentiment)
df["Sentiment"] = sentiments
3.3 분석과정에서의 속도차이 (Speed difference in the analysis process)
이런식으로 각 문장에 대해서 처리를 하는데. 속도가 상당히 빠르다? 거의 1초에 한문장씩 끝내주는데,,
사실 내 계정에 미리 $10 충전을 해두었다.
계정에 돈을 넣어놓고 토큰당 비용을 지불하는 방식이기 때문에,,,
충전안하고 돌렸을때는 수십분이 지나도 감감 무소식이였는데,(당연함)
돈충전해놓고 돌리니까 속도 끝내준다... 돈이 다야 증말..
876개의 리뷰를 분석하는데 $0.1들었다.
3.4 결과 (Results)
데이터 프레임에 마지막 컬럼으로 내가 원하는대로 리뷰에 대한 긍정 부정을 나누어주었다.
보여지는 리뷰들만 읽어봐도 긍정과 부정이 확실하게 나뉘여진다....
추가적인 활용 및 분석은 나중에..
4. Summary
감성 분석이 무엇인지, 어떠한 방식으로 요즘 감성 분석을 진행하는지
요즘 어떤곳에서 활용하고, 코드로 간단히 리뷰까지 긍/부정 감성 분석해보았다.
확실히 예전보다, 예전이라 해도 3-5년전보다 분석이 쉬워졌다.
GPT는 진짜 혁명이고 찬양이다 증말...
수학적으로 이리저리 백터화시키고 훈련시키고 형태소 나누고 했던 예전에 내가 기억나는데,
3년전에 N사 (게임회사) 지원했을때, 게임 댓글이였는지 리뷰 데이터 주고 분석하라고 시켰었던 적이 있었다.
인터뷰 전 과제였는데 새벽까지 형태소 나누고 워드클라우드 만들었던 기억이 있다.
물론 광탈했지만..
이젠 뭐 어느정도 지식있음 금방 원하는 방향으로 데이터 정리하고 감성분석을 넘어서 이것저것 해볼 수 있다.
즉 데이터를 어떻게 활용하는지, 아이디어같은거, 새로운 시각, 창의적인 것들이 더 중요해지는 시대가 오는 것 같다.
기술은 누구든 이제 쉽게 활용할수있으니까.
5. Ref.
Sentiment analysis - Wikipedia
From Wikipedia, the free encyclopedia Marketing and customer service tool Sentiment analysis (also known as opinion mining or emotion AI) is the use of natural language processing, text analysis, computational linguistics, and biometrics to systematically
en.wikipedia.org
영화리뷰 감성분석 (Sentiment Analysis)
📚 감성 분석이란 ✅ 개념 감성분석은 각 문서에 사용된 단어들을 이용하여 해당 문서의 긍정/부정 감성을 파악하는 분석을 의미한다. 감성 분석에는 크게 두 가지 접근방식이 있다. (1) 머신러
yeong-jin-data-blog.tistory.com
텍스트 '감성 분석'이란?
아래 적는 내용은 DBR의 SR1.감성분석활용사례(https://dbr.donga.com/article/view/1202/article_no/8891/ac/magazine'감성 분석' : 글에 내재해 있는 사람들의 주관적 태도나 감성을 추출해 내는 분석 기법'
velog.io
감성 분석이란 무엇인가요? - 감성 분석 설명 - AWS
감정 분석이란 무엇인가요? 감정 분석은 디지털 텍스트를 분석하여 메시지의 감정적 어조가 긍정적인지, 부정적인지 또는 중립적인지를 확인하는 프로세스입니다. 오늘날 회사는 이메일, 고객
aws.amazon.com
Chat GPT API 키 발급 및 정산 카드 등록하기 초간단 방법
안녕하세요. 하이어시스템입니다. 최근 Chat GPT API를 이용해서 프로그램을 개발할 일이 많아 졌습니다. Chat GPT API 이용하기 위해선 API 사용자를 식별해주는 API Key와 사용량 만큼 발생한 비용을 자
wise-office-worker.tistory.com
'Data Analysis > Methodologies' 카테고리의 다른 글
[데이터 분석 방법론] 몬테카를로 시뮬레이션 (Monte Carlo Simulation/method) (2) | 2025.01.04 |
---|---|
[데이터 분석 면접론?] 데이터 분석가 / 비즈니스 분석가 인터뷰 면접 준비 (0) | 2024.08.15 |
[데이터 분석 방법론] 퍼널분석(Funnel Analysis) 2 (0) | 2024.08.10 |
[데이터 분석 방법론] AARRR 분석 프레임워크 (AARRR) (1) | 2024.07.05 |
[데이터 분석 방법론] 퍼널 분석 (Funnel Analysis) (2) | 2024.06.23 |