405 lines
15 KiB
Plaintext
405 lines
15 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"id": "35e2dffa",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[{'label': 'LABEL_0', 'score': 0.851569652557373}]"
|
|
]
|
|
},
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"from transformers import pipeline\n",
|
|
"\n",
|
|
"# distilbert/distilbert-base-uncased-finetuned-sst-2-english\n",
|
|
"classifier = pipeline(\"sentiment-analysis\", model=\"WhitePeak/bert-base-cased-Korean-sentiment\")\n",
|
|
"classifier(\"넌 나에게 목욕값을 줬어\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "82973a44",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"/Users/cooney/Documents/Source/HUGGINGFACE/.venv/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
|
|
" from .autonotebook import tqdm as notebook_tqdm\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"from transformers import pipeline\n",
|
|
"\n",
|
|
"# distilbert/distilbert-base-uncased-finetuned-sst-2-english\n",
|
|
"classifier = pipeline(\"sentiment-analysis\", model=\"WhitePeak/bert-base-cased-Korean-sentiment\", top_k=None)\n",
|
|
"\n",
|
|
"texts = \"\"\"\n",
|
|
"이 치킨은 맛도 없고 이상하다\n",
|
|
"나는 행복해\n",
|
|
"배고파\n",
|
|
"\"\"\"\n",
|
|
"\n",
|
|
"for t in texts:\n",
|
|
" classifier(t)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"id": "42868611",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[{'label': 'POSITIVE', 'score': 0.6142739653587341}]"
|
|
]
|
|
},
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"from transformers import pipeline\n",
|
|
"\n",
|
|
"classifier = pipeline(\"sentiment-analysis\", model=\"distilbert/distilbert-base-uncased-finetuned-sst-2-english\")\n",
|
|
"classifier(\"넌 나에게 목욕값을 줬어\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"id": "7655a2a7",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[{'label': 'neutral', 'score': 0.9992695450782776}]"
|
|
]
|
|
},
|
|
"execution_count": 17,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"from transformers import pipeline\n",
|
|
"\n",
|
|
"classifier = pipeline(\"sentiment-analysis\", model=\"snunlp/KR-FinBert-SC\")\n",
|
|
"classifier(\"넌 나에게 목욕값을 줬어\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "ae0b9124",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[{'label': '3 stars', 'score': 0.24898932874202728}]"
|
|
]
|
|
},
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"from transformers import pipeline\n",
|
|
"\n",
|
|
"classifier = pipeline(\"sentiment-analysis\", model=\"nlptown/bert-base-multilingual-uncased-sentiment\")\n",
|
|
"classifier(\"넌 나에게 목욕값을 줬어\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 21,
|
|
"id": "cd115b8d",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[{'label': 'Very Negative', 'score': 0.42995747923851013}]"
|
|
]
|
|
},
|
|
"execution_count": 21,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"from transformers import pipeline\n",
|
|
"\n",
|
|
"classifier = pipeline(\"sentiment-analysis\", model=\"tabularisai/multilingual-sentiment-analysis\")\n",
|
|
"classifier(\"넌 나에게 모욕감을 줬어\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 19,
|
|
"id": "5592aeff",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"None\n",
|
|
"<re.Match object; span=(0, 1), match='안'>\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# 정규식\n",
|
|
"import re\n",
|
|
"\n",
|
|
"print(re.search(r\"[가-힣]\", \"abcdefg\"))\n",
|
|
"print(re.search(r\"[가-힣]\", \"안녕하세요.\"))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "eb823f75",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"['음질이 정말 훌륭합니다. 저음이 풍부하고 착용감도 편안해서 장시간 사용해도 귀가 아프지 않아요. 강력 추천!']\n",
|
|
"['배송은 빨랐는데 제품 불량이 있었어요. 왼쪽 이어폰에서 잡음이 심하게 나고 연결도 자꾸 끊겨서 실망했습니다.']\n",
|
|
"['조립이 간단하고 높이 조절이 자유로워서 정말 편리해요. 재질도 튼튼하고 흔들림 없이 안정적입니다.']\n",
|
|
"['생각보다 플라스틱 재질이 저렴해 보이고 높이 조절 부분이 금방 헐거워졌어요. 내구성이 떨어집니다.']\n",
|
|
"['클릭감이 정말 좋고 손에 딱 맞는 그립감이에요. 배터리도 오래 가고 반응 속도도 빠릅니다. 만족스러운 구매!']\n",
|
|
"['스크롤 휠이 너무 뻑뻑하고 클릭 소리가 굉장히 시끄럽습니다. 사무실에서 쓰기엔 눈치가 보여요.']\n",
|
|
"['작동 소음이 거의 없고 공기가 확연히 달라진 게 느껴져요. 디자인도 세련되고 필터 교체도 간편합니다.']\n",
|
|
"['냄새 제거 기능이 광고와 다르게 별로예요. 담배 냄새는 전혀 없어지지 않고 소음도 생각보다 큽니다. 반품 원해요.']\n",
|
|
"['보온·보냉 기능이 뛰어나고 뚜껑이 잘 닫혀서 가방에 넣어도 걱정 없어요. 디자인도 예쁘고 색상 선택지도 다양합니다.']\n",
|
|
"['보온 성능은 좋은데 뚜껑 실리콘 부분에 냄새가 배어서 씻어도 잘 안 없어집니다. 위생 걱정이 되네요.']\n",
|
|
"['바퀴가 정말 부드럽게 굴러가고 잠금장치도 튼튼해요. 용량도 넉넉해서 해외여행에 딱 좋습니다. 재구매 의사 있어요!']\n",
|
|
"['첫 여행에서 지퍼가 터져버렸어요. 안에 옷이 다 쏟아질 뻔했습니다. 품질 관리가 너무 허술하네요.']\n",
|
|
"['면도날이 예리하고 피부 자극이 적어요. 충전도 빠르고 방수 기능도 있어서 샤워 중에도 사용 가능합니다.']\n",
|
|
"['3개월 만에 면도날 성능이 급격히 떨어졌어요. 가격 대비 내구성이 너무 아쉽습니다.']\n",
|
|
"['두께가 충분해서 무릎이 아프지 않고 미끄럼 방지도 잘 됩니다. 냄새도 거의 없고 청소하기도 편해요.']\n",
|
|
"['처음엔 냄새가 너무 심해서 며칠을 환기시켜야 했어요. 미끄럼 방지 기능도 땀이 나면 별로입니다.']\n",
|
|
"['밝기 조절이 세밀하게 가능하고 눈이 편안해요. USB 충전이라 어디서나 사용할 수 있어 출장 때도 유용합니다.']\n",
|
|
"['충전 포트가 약해서 충전할 때 자꾸 빠집니다. 밝기도 광고보다 어두워서 독서하기 불편해요.']\n",
|
|
"['원두 향이 그대로 살아 있고 추출 속도도 빠릅니다. 청소가 쉽고 디자인도 주방에 잘 어울려요. 완전 만족!']\n",
|
|
"['한 달 만에 물이 새기 시작했어요. AS 접수했더니 시간도 오래 걸리고 응대도 불친절했습니다. 다시는 이 브랜드 안 살 것 같아요.']\n",
|
|
"['앱 연동이 편리하고 체지방·근육량까지 측정해줘서 건강 관리에 도움이 많이 됩니다.']\n",
|
|
"['앱이 자꾸 튕기고 수치가 날마다 다르게 나와요. 정확도를 믿기 어렵습니다.']\n",
|
|
"['자외선 살균이 확실하게 되는 것 같고 건조까지 되니까 위생적으로 관리하기 편해요. 가족 모두가 만족합니다.']\n",
|
|
"['살균 기능은 좋은데 칫솔을 4개까지 넣기엔 공간이 너무 좁아요. 칫솔 헤드끼리 닿아서 오히려 위생이 걱정됩니다.']\n",
|
|
"['출퇴근용으로 구매했는데 너무 만족스러워요. 속도도 적당하고 배터리가 오래 가서 하루 이상 충분히 사용 가능합니다.']\n",
|
|
"['2주 만에 브레이크가 말을 안 듣기 시작했어요. 안전 문제라 정말 위험했습니다. 절대 추천하지 않습니다.']\n",
|
|
"['소형이라 책상 위에 두기 딱 좋고 작동 소음이 거의 없어요. 수면 중에도 방해되지 않아서 좋습니다.']\n",
|
|
"['물통이 너무 작아서 하루에 두 번 이상 채워야 해요. 청소도 구조가 복잡해서 손이 많이 갑니다.']\n",
|
|
"['착화감이 정말 좋고 쿠션이 뛰어나 장거리 러닝 후에도 발이 편안합니다. 디자인도 세련되어서 일상복에도 잘 어울려요.']\n",
|
|
"['사이즈 표기가 실제와 달라서 반품 처리했어요. 사이즈 하나 크게 샀는데도 발이 꽉 끼었습니다. 사이즈 가이드 개선이 필요합니다.']\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"#csv 파일 다루기\n",
|
|
"import csv\n",
|
|
"\n",
|
|
"with open(\"./data/reviews_ko.csv\", \"r\", encoding=\"utf-8\") as f:\n",
|
|
" reader = csv.reader(f)\n",
|
|
" \n",
|
|
" # 헤더명 없애기\n",
|
|
" next(reader)\n",
|
|
" \n",
|
|
" for r in reader:\n",
|
|
" print(r)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "9e70fcc6",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>review</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>음질이 정말 훌륭합니다. 저음이 풍부하고 착용감도 편안해서 장시간 사용해도 귀가 아...</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>배송은 빨랐는데 제품 불량이 있었어요. 왼쪽 이어폰에서 잡음이 심하게 나고 연결도 ...</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>조립이 간단하고 높이 조절이 자유로워서 정말 편리해요. 재질도 튼튼하고 흔들림 없이...</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>생각보다 플라스틱 재질이 저렴해 보이고 높이 조절 부분이 금방 헐거워졌어요. 내구성...</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>클릭감이 정말 좋고 손에 딱 맞는 그립감이에요. 배터리도 오래 가고 반응 속도도 빠...</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" review\n",
|
|
"0 음질이 정말 훌륭합니다. 저음이 풍부하고 착용감도 편안해서 장시간 사용해도 귀가 아...\n",
|
|
"1 배송은 빨랐는데 제품 불량이 있었어요. 왼쪽 이어폰에서 잡음이 심하게 나고 연결도 ...\n",
|
|
"2 조립이 간단하고 높이 조절이 자유로워서 정말 편리해요. 재질도 튼튼하고 흔들림 없이...\n",
|
|
"3 생각보다 플라스틱 재질이 저렴해 보이고 높이 조절 부분이 금방 헐거워졌어요. 내구성...\n",
|
|
"4 클릭감이 정말 좋고 손에 딱 맞는 그립감이에요. 배터리도 오래 가고 반응 속도도 빠..."
|
|
]
|
|
},
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"import pandas as pd\n",
|
|
"\n",
|
|
"df = pd.read_csv(\"./data/reviews_ko.csv\")\n",
|
|
"df.head(5)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"id": "02169e78",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>review</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>27</th>\n",
|
|
" <td>물통이 너무 작아서 하루에 두 번 이상 채워야 해요. 청소도 구조가 복잡해서 손이 ...</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>28</th>\n",
|
|
" <td>착화감이 정말 좋고 쿠션이 뛰어나 장거리 러닝 후에도 발이 편안합니다. 디자인도 세...</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>29</th>\n",
|
|
" <td>사이즈 표기가 실제와 달라서 반품 처리했어요. 사이즈 하나 크게 샀는데도 발이 꽉 ...</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" review\n",
|
|
"27 물통이 너무 작아서 하루에 두 번 이상 채워야 해요. 청소도 구조가 복잡해서 손이 ...\n",
|
|
"28 착화감이 정말 좋고 쿠션이 뛰어나 장거리 러닝 후에도 발이 편안합니다. 디자인도 세...\n",
|
|
"29 사이즈 표기가 실제와 달라서 반품 처리했어요. 사이즈 하나 크게 샀는데도 발이 꽉 ..."
|
|
]
|
|
},
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df.tail(3)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "e1f89b30",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": ".venv",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.12.13"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|