2019. 1. 18. 15:47ㆍ풀잎스쿨 NLP Bootcamp
- 배경설명
2015년에 이 논문이 나오기 전까지 Text Classification을 하고자 할 때는 Convolution Network (이하 Conv-Net), 그리고 RNN을 통한 방법이 쓰였다. 그리고 이러한 방법을 사용할 경우, 문장/문단/문서를 Token으로 분할하게 되는데, 이 Token의 단위는 보통 Word(단어)단위였다. 이는 지난 논문에서 설명했듯이 단어를 사용할 경우 단어 내의 Semantic 의미와 Synthetic의미를 보존해야 NLP Task를 위한 모델의 성능이 잘 나온다는 인식이 있었기 때문이다.
하지만 이 논문에서는 Word단위의 Token대신 Character(글자, 알파벳)단위를 사용함으로써 꼭 Word단위를 사용하지 않아도 NLP Task에 대해서 충분히 좋은 성능을 낼 수 있다고 주장한다. 이렇게 Character-level의 단위를 Tokening을 사용하고자 하는 시도는 이 논문에서 처음 제시되었다고 주장한다.
- Character-level Conv-Net
- Character quantization
- 알파벳: abcdef.....wxyz (총 26개)
- 숫자: 012...90 (총 10개)
- 특수문자: -,;.!?:’’’/\|_@#$%ˆ&* ̃‘+-=<>()[]{} (총 33개)
- 개행문자 (1개)
- 모델 구조/디자인
Input에서의 Feature갯수는 70개이며, input의 길이는 1014로 설정되어있다. (하지만 용도에 따라서 input 길이는 언제든지 조정할 수 있다) 또한 regularization을 위해 FC Layer 3개 사이사이에 Dropout을 0.5의 확률로 적용시키는 구조로 되어있다. Layer의 상세 수치는 다음과 같다.
Conv-Net에서는 1,2번째 Layer에서는 Kernel크기가 7이며, 나머지 Conv-Net Layer에서는 Kernel크기 3을 사용하고 있다. 또한 Large모델과 Small모델의 parameter가 다른 것을 볼 수 있다.
Fully-Connected Layer에서는 Large모델과 Small모델에 따라 FC의 크기가 달라지는 것 이외에는 차이를 보이지 않는다.
- Data Augmentation
- 기존 방법과의 비교
- Bag-of-words 기준의 TFIDF (term-frequency inverse-document-frequency)
- Bag-of-ngrams 기준의 TFIDF
- Word Embedding에서의 Bag-of-means
TFIDF란 문서 내에서의 단어 빈도수의 비율을 기준으로 단어의 확률을 정하는 embedding 방법이다. 예를 들자면, 문서 내에서 단어의 총 갯수가 10,000개라고 가정할때 만약 문서 내에서 the라는 단어가 900번이 나왔다면 900 / 10,000 = 0.09가 되는 방식이다.
- 딥러닝 방법과의 비교
- Word-based Conv-Net: Conv-Net의 구조 자체는 정확히 동일하게 가져가며, 이를 위해서 Layer의 갯수와 Output의 크기를 동일하게 설정했다.
- LSTM(Long-short term memory): 각 cell에서의 output을 모두 더해 평균을 낸 후, 이를 기준으로 classification을 진행한다.
알파벳에서의 선택
영어는 대/소문자로 구분될 수 있기 때문에 대/소문자의 구분을 하는가의 여부를 결정할 필요가 있다. 이 논문에서 실험했을 때에는 대소문자를 구분하는 것이 오히려 성능에 안좋은 영향을 보였다고 나온다. 이에 대한 이유로 대소문자가 다르다고해서 semantic의미가 달라지는 것이 아니기 때문으로 판단하고 있다.
- 대규모 데이터셋과 결과
또한 각 데이터셋을 통한 결과를 표로 보여준다.
위 표에서 볼 수 있듯이 Character-level Conv-Net이 항상 좋은 성능을 내는 것은 아니다. 상대적으로 소규모의 데이터셋의 경우에는 기존의 방법이 더 좋은 성능을 보였으며, 대규모의 데이터셋 간(예: Yahoo! Answers vs Amazon Reviews)에도 데이터의 질에 따라 오차율(percent of error)이 상당히 차이나는 것을 볼 수 있다.
- 결론
- 글자 단위의 Conv-Net은 충분히 효과적이다.
- 충분한 성능을 낼 수 있으며, 이를 통해 우리는 언어 내 글자단위의 Token을 음성처리/소리에서의 Signal과 같이 봐도 좋을 것이다. (아래의 그림은 첫번째 Layer의 결과를 시각적으로 나타낸 것이다.
- 데이터셋의 크기는 기존 모델과 Conv-Net모델 중 어느 것의 성능이 더 좋을지를 결정한다.
- Conv-Net은 데이터의 질이 좋을 수록 더 잘 작동한다.
- 예를들자면, Amazon의 상품 리뷰는 정성을 들여서 쓸 필요가 없으므로 데이터가 상대적으로 품질이 그렇게 좋지 않은 반면 Yahoo!의 질문답변 데이터는 상대방의 선택을 받아야 할 필요성이 있으므로 정성들여서 쓰는 경향때문에 데이터의 품질이 Amazon 리뷰에 비해 상대적으로 더 좋다. (때문에 더 낮은 오차율을 보인다.)
- 알파벳의 대소문자를 구분하지 않는 것이 구분하는 것에 비해 더 나은 성능을 보인다. 이는 regularization효과로 보인다.
- Word2Vec에서 Bag-of-means를 쓰는 것은 잘못된 사용이다.
- 모든 Task에서 좋은 성능을 보이는 모델은 없다.