영화리뷰 텍스트 감성분석 이론정리
0. 들어가며
이번노드의 실습목표
- 텍스트 데이터를 머신러닝 입출력용 수치데이터로 변환하는 과정을 이해한다.
- RNN의 특징을 이해하고 시퀀셜한 데이터를 다루는 방법을 이해한다.
- 1-D CNN으로도 텍스트를 처리할 수 있음을 이해한다.
- IMDB와 네이버 영화리뷰 데이터셋을 이용한 영화리뷰 감성분류 실습을 진행한다.
감성분석이란?
- 텍스트에 나타난 주관적 요소인 긍정적 감정과 부정적 감정을 판별해 수치나 도식, 등급 등으로 정량화 하는 작업
- 감정(emotion), 감성(sentiment), 태도(attitude), 입장(stance)가 분석의 대상!
감성분석의 종류
1) 감성사전 기반 분석방법
→ 미리 구축된 감성사전과 매칭하여 분석하는 방법!
→ 감성사전의 품질이 매우 중요
→ 해당 분야에서 사용되는 감성어를 표현하고 있어야 한다.
→ 대상에 따라 성질이 달라지는 감성어에 대한 고려를 해야한다.
2) 속성 기반 분석방법
→ 문장 기반의 감성분석보다 정교한 방법
→ 문장 내의 개체를 분류하여 개체가 가진 속성들의 감성을 분석하는 방법
3) 기계학습 기반 분석방법
→ 문서 데이터의 학습을 통해 분류 모형을 구축하고, 여기서 도출된 모형을 적용해 감성을 분석하는 것
→ 모델을 통해 감성을 분석하는 방법
→ 문장을 컴퓨터가 이해하는 것이 우선되어야 한다.
1. 텍스트 데이터를 수치데이터로!
텍스트를 숫자로 어떻게 표현할까?
sentences=['i feel hungry', 'i eat lunch', 'now i feel happy']
vocab = ['i','feel', 'hungry', 'eat', 'lunch', 'now', 'happy'] # 7개의 단어
- 위와 같이 문장과 그 문장을 쪼갠 단어 리스트가 있다고 하자.
- 이 단어들은 원-핫 표현, 동시발생 행렬, CBOW, Skip-Gram 등의 방식으로 표현할 수 있다.
1) 원-핫 표현
#one_hot_vector
'i' = [1,0,0,0,0,0,0]
'feel' = [0,1,0,0,0,0,0]
'hungry' = [0,0,1,0,0,0,0]
'eat' = [0,0,0,1,0,0,0]
'lunch' = [0,0,0,0,1,0,0]
'now' = [0,0,0,0,0,1,0]
'happy' = [0,0,0,0,0,0,1]
- 원-핫 표현은 해당 단어의 단어사전상의 위치를 1로 표현한 방법이다.
- 매우간단하지만 문장이 길어질수록 데이터가 늘어나고 그에 따라 메모리를 많이 먹는다는 단점이 있다.
- 또한 단어간의 유사도를 표현하지 못한다.
2) 동시발생 행렬
- 단순 원-핫 표현방식에서 좀 더 발전하여 어떤 단어를 기준으로 단어의 주변에 다른 단어가 몇번이나 등장하는지 세어 집계하는 방법이다.
- 예를 들어 'you say goodbye and I say hello'라는 문장이 있을 때, 아래의 표와같이 표현될 수 있다.
- 그러나 여전히 행렬이 희소하여 차원수가 큰 행렬을 갖는다.
- 이러한 커다란 차원을 줄이는 방법으로 특잇값 분해(SVD)를 사용한다.
- 특잇값 분해(SVD)란 문장의 단어가 정리되어진 mxn의 행렬 A가 있을 때 아래의 조건을 만족한다.
- 이러한 중심단어 주변의 단어들을 세서 통계적으로 접근하는 방법을 통계기반 기법(카운트 기반)이라고 한다.
- 이 기법은 쉽고 빠르게 구현이 가능하지만, 단어가 새로 추가되는 경우에는 A를 새로 만들어야한다.
3) 추론기반 기법(예측 기반)
- 주변 단어나 중심단어가 주어졌을 때 블랙박스를 예측하는 형식으로 학습하는 모델을 기반으로하는 기법이 추론기반 기법이다.
- 추론기반 기법은 모델을 기반으로 학습하기 때문에 문장 데이터를 숫자데이터로 바꾸어줘야 한다.
- 이를 Word2Vec이라고 하며 Word2Vec에는 CBOW(주변단어를 가지고 중심단어를 예측)와 Skip-Gram(중심단어로 주변단어를 예측) 방식이 있다.
2. 시퀀스 데이터를 다루는 RNN(Recurrent Neural Network)
시퀀스 데이터란?
- 시간 축을 따라 순서가 있는 데이터를 말한다.
- 영상, 음성, 텍스트 등이 포함된다.
- 문장은 시간을 기준으로 진행된다고 볼 수 있다.
- 시간이 지남에 따라 데이터의 입력이 진행되므로 이전 입력값을 기억하고 있는 것이 중요하다.
RNN(Recurrent Neural Network)
- 맥락의 흐름을 기억할 수 있는 모델
- 문장이 길어질 경우 기울기 소실 혹은 기울기 폭발이 일어난다.
LSTM(Long Short-Term Memory models)
- RNN에서 발생한 문제점을 게이트와 기억셀을 통해 해결하였다.
- forget gate(f) : 입력받은 값(이전 결과+새로운 값)의 중요도를 판별한다 얼마나 버릴지를 정하는 게이트
- g(enerate) : 입력받은 값(이전 결과+새로운 값)의 새로운 정보를 기억셀에 추가한다.
- input gate(i) : 입력받은 값(이전 결과+새로운 값)을 얼마나 추가할지 조절한다.
- output gate(o) : 새로 만들어진 기억셀 Ct의 값을 다음 은닉상태에 얼마나 적용할지 판단하며, 얼마나 적용할지는 이전결과+새로운 값으로 판단한다.
3. 1D CNN(Convolutional Neural Networks)
CNN이란?
- 합성곱 연산을 통해서 이미지의 특징을 추출하는 신경망이다.
1D CNN
- 위에서 설명한 CNN방식은 x방향, y방향으로 커널이 움직여 합성곱을 진행하지만 1D CNN은 x방향으로만 혹은 y방향으로만 움직인다.
4. 네이버 감성분류 실습
5. 추가적으로 고민해볼만한 부분들
- 사전학습된 토크나이저 vs mecab
- bpe의 문제점(고차원의 벡터가 만들어진다)
- 어텐션+fc
- GRU
'[NLP 공부정리]' 카테고리의 다른 글
[4주차] 뉴스 요약봇 만들기 (0) | 2022.12.16 |
---|---|
[3주차] 다음에 볼 영화 예측하기 (0) | 2021.06.21 |
[2주차] 당신이 좋아할 만한 다른 아티스트 찾기 (0) | 2021.05.02 |