Classifying korean sentence : 한국어 문장 감정 분석
꿈꾸는 아이 대회 https://dacon.io/competitions/official/235664/codeshare/ 출전을 위해서 자연어처리 챗봇 개발 프로젝트
맡은 역할 : KoLPy, Keras, LSTM등을 이용하여 한국어 문장에 대한 감정을 분류, 모델 사용을 위한 인터페이스(챗봇ui)
-
train 데이터 : https://aihub.or.kr/keti_data_board/language_intelligence 에서 한국어 감정 정보가 포함된 단발성 데이터셋
-
test 데이터 : https://aihub.or.kr/keti_data_board/language_intelligence 에서 한국어 감정 정보가 포함된 연속적 데이터셋
데이터가 7가지 감정으로 분류되어있으나 데이터의 분류가 정확하지 않은 관계로 긍정, 부정 두가지 분류로만 훈련시켰습니다.
데이터 전처리 및 분류 https://cyc1am3n.github.io/2018/11/10/classifying_korean_movie_review.html 참고하여 만들었습니다.
- AIHUB에 가입하여 오픈데이터셋을 받는다.
- 데이터셋을 긍정, 부정 두가지로 분류한다 -> 공포, 혐오, 분노, 슬픔 : 0(부정), 행복 : 1(긍정)
링크에서는 데이터셋이 txt 파일이기 때문에 그 전 과정이 조금 다름.
- train.py : train데이터셋을 형태소 분석하여 json파일로 만들기
- test.py : test데이터셋을 형태소 분석하여 json파일로 만들기
- after_json.py : json파일을 가지고 전처리 및 훈련
data=pd.read_csv('onlybinary_data.csv', sep=",")
#print(data.head()) 출력확인
##print(len(data)) 크기확인
##print(type(data)) 타입확인
train_data = pd.DataFrame(data, columns=['Sentence','Emotion'])
#json에 넣기 위해서 after_data에 담아줌
after_data = []
for index in range(len(train_data)):
okt = Okt()
##실행이 잘 되고 있는지 확인용
if index%50 ==0:
print(index)
def tokenize(doc):
# norm은 정규화, stem은 근어로 표시하기를 나타냄
return ['/'.join(t) for t in okt.pos(doc, norm=True, stem=True)]
tokens= tokenize(train_data['Sentence'][index])
feeling=train_data['Emotion'][index]
feeling=int(feeling)
##json파일 형태가 [[단어/형태소, 단어/형태소, ..., 단어/형태],[감정]] 이런 형태가 되어야 하기 때문에 [[tokens, feeling]]
after_data = after_data + [[tokens,feeling]]
- dataset의 감정분류가 어떻게 분류된것인지 몰라서 적절하지 않은 경우도 있다.
- 데이터셋이 부족하다.
- 데이터셋이 무작위로 크롤링한 데이터 같아서 경연대회에 참가할 챗봇용 데이터에는 적합하지 않아보인다....
chatbotUI : 챗봇UI
chatbot.ui : 레이아웃 파일
chatbot.py : 이벤트 다 연결해놓은 코드
PyQt를 이용하여 만든 챗봇 UI
Qt Designer를 이용해서 레이아웃을 만들었습니다.(.ui파일)
아직 챗봇모델과 연결하지 않은 상태라서 크누아이가 안녕만 답하고 있습니다. 챗봇모델과 연결하면 답변이 제대로 작동함.
https://wikidocs.net/book/2944 를 참고하여 만들었습니다.