세로형
Recent Posts
Recent Comments
Link
11-25 00:03
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

꿈 많은 사람의 이야기

파이썬 케라스(keras) LSTM으로 딥러닝하자! 네이버 영화 평점 데이터를 활용한 자연어 처리(NLP) 본문

deep learning(딥러닝)

파이썬 케라스(keras) LSTM으로 딥러닝하자! 네이버 영화 평점 데이터를 활용한 자연어 처리(NLP)

이수진의 블로그 2019. 3. 4. 14:40
반응형
728x170

파이썬으로 딥러닝을 해봅시다!

이번 포스팅은 파이썬(python)의 케라스(keras) 딥러닝 라이브러리를 이용해서

자연어 처리(NLP)를 해봅니다.


데이터는 네이버 영화 평점 데이터를 활용합니다.

사실 이 딥러닝을 한지는 꽤 되었습니다.

모두의 연구소에서 진행한 모두콘(moducon)때에 자연어 처리 대회가 있었는데요

그때 참여했던 소스입니다.


당시는 3등을 했습니다(정확도가 별로 높지는 않지만..)

1, 2등 분들의 코드나, 아이디어를 얻고 싶어서 모두연에 요청도 했는데 ㅠ

끝내는 받지 못했네요 ㅠㅠ

아무튼 저는 아래와 같은 방식으로 자연어 처리 딥러닝을 진행했습니다. 


먼저 형태소 분석기가 인식하지 못할 단어를 모아서 구축했습니다.

자연어 처리에서 형태소 분석기는 자주 사용하는데요

저는 은전한닢(mecab)을 자주 사용합니다. konlpy에서 있는 mecab 말구요

여기서 mecab은 사용자 정의 사전을 구축할 수 있습니다.

그래서 위와 같이 사용자 정의 사전을 구축해줍니다



그리고 mecab에서 명사 등을 뽑아 내기 위해서 위 코드를 구성합니다.

이렇게 하면 은, 는, 이, 가 등의 불필요한 데이터를 제외시키고 필요한 텍스트 데이터만 뽑아낼 수 있습니다.




그래서 실제로 위 사진을 보시면 명사나, 형용사 등의 문자만 남겨져 있게 됩니다.

이 데이터를 사용해서 이제 진행합니다



데이터를 읽어옵니다.

파이썬을 사용하니까 pandas 라이브러리를 사용합니다.

read.csv를 이용해서 데이터를 가져옵니다

데이터는 train데이터는 15만개, 테스트 데이터 5만개로 구성되어 있습니다!



그리고 중간에 데이터가 없는 것도 있습니다.

그래서 df.dropna(how = 'any')를 이용해서 제거해줍니다.



최대 단어 개수 등을 지정할 수 있습니다

원본 데이터를 이제 토크나이징 할 때 최대 단어 개수를 지정할 수 있는데요(상위 몇개)

일부러 좀 많이 지정했습니다.




이제 text 데이터를 sequence(시퀀스)하게 만들어줍니다.

그리고 pad_sequences를 이용해서 벡터화를 진행합니다



데이터 전처리가 이제 끝났습니다. 이제 모델화를 해주는데요

위 사진처럼 저는 모델을 구축했습니다. 케라스에서 제공해주는 Sequential()을 선언한 뒤

model을 하나하나 구축합니다. model.add()를 이용해서 Embedding과 LSTM, Dense를 차곡차곡 쌓아줍니다.

중간중간에 overfitting 방지를 위해서 Dropout도 신경써주고요!



모델 훈련을 한 뒤 정확도를 보니까 0.84정도가 나오네요!

84% 정도의 정확도입니다.

그렇게 정확도가 높지는 않죠 ㅠ

저는 88% 이상을 기대했는데 ㅠㅠ


이렇게 간단히 자연어 처리 딥러닝 모델을 만들어봤습니다.

케라스(keras)를 사용하면 이 처럼 간단하게 모델을 구축할 수 있죠!


이제 번외로 머신러닝을 활용해서 한 번 분류 모델을 만들어보겠습니다.

마찬가지로 파이썬을 활용하고 사이킷런(scikit-learn) 라이브러리를 활용합니다



사이킷런의 TfidfVectorizer를 이용해서 TF-IDF 값도 구하고

로지스틱 회귀(logistic regression)을 이용해서 점수를 구해봅니다.

그리고 그리드 서치(gridsearch)도 활용합니다.

그 결과 0.82 라는 점수가 나오네요!



그리고 tf-idf가 높은 특성을 보면

슬플, 슬펐, 심했, 아놔, 심심 등의 단어가 보이네요 ㅋㅋㅋ


마지막으로 카카오 형태소 분석기(khaiii)를 활용해봤습니다.

이때 당시에는 카카오 형태소 분석기가 나온지 얼마 안된 상태였습니다.

지금은 사용자 정의 사전이 구축 가능한 것으로 알고 있습니다.

당시에는 구축이 안되어 있는 상태였죠



성능이 좀 낮게 나왔는데요

아마도 사용자 정의 사전 구축의 힘이 큰 것 같습니다.

지금 사용하면 성능이 잘 나올것 같군요 ㅎㅎㅎ


이번 포스팅은 여기까지 입니다

파이썬을 활용한 자연어 처리 딥러닝! 케라스(keras) 라이브러리로 활용해 보았습니다.



반응형
그리드형
Comments