sunrinio-org / QnA

궁금한거 있으면 물어봐주세요
http://ask.sunrin.io/
26 stars 2 forks source link

NLP를 CNN으로 구현하려고 할때, 레이어 구조는 어떻게 하는것이 좋나요? #53

Open sunrinio opened 7 years ago

sunrinio commented 7 years ago

NLP나 이미지 연산중 가장 많이 사용하는 학습 모델 방식이 CNN이잖아요 Convolution의 개념이 NLP에서도 사용될 수 있나요? 사용 될 수 있다면 보통 어떤 형태의 레이어 구성을 갖고 있나요?

Kcrong commented 7 years ago

http://docs.likejazz.com/cnn-text-classification-tf/ https://github.com/Kcrong/cnn-text-classification-tf

Data scale (single-label, multi-label 과 같은 input/output format 등) 에 따라 input layer, hidden layer, output layer의 구성이 달라집니다. 목적에 따라 구성하시는 것이 가장 편할 것 같습니다.

therne commented 7 years ago

ConvNet은 NLP에 사용될 수 있지만, Text classification 분야나 Word embedding에 주로 적용되며 아직까지도 RNN을 많이 쓰는 편입니다. 잘 쓰이지 않는 이유는 1. Text representation vector는 비교적 적은 차원을 가지고 있으며 2. 텍스트는 Sequence라는 특성상 Temporal Dependency의 유지와 관리가 중요한데 ConvNet과 같은 복잡한 레이어를 사용하면 이를 유지하면서 성능 대비 이점을 누릴 수 없어서인걸로 알고 있습니다.

Text classification에서는 Embedded Vector를 다양한 필터 크기의 1D Convolution으로 사용해 특징추출용으로 사용됩니다. 쉬운 글은 WildML - IMPLEMENTING A CNN FOR TEXT CLASSIFICATION IN TENSORFLOW, 연구는 Zhang et al., Character-level Convolutional Networks for Text Classification을 참고하시면 좋을 것 같습니당

Word Embedding에서는 대표적으로 Kim et al., Character-aware Language Models 이 연구에서 ConvNet을 잘 활용헀다고 생각하는데, ConvNet을 글자의 음소적 특징 추출로, NN (정확히는 Highway Network)을 일종의 의미적 특징 추출용으로 사용합니다.

최근에 Seq2Seq RNN+Attention만 열심히 사용하던 End-to-end translation 모델에서 ConvNet을 도입한, ByteNet이란 딥마인드의 작품도 있습니다. Dilated Convolution과 Residual Block을 이용한 점이 특징인데 주목받고 있는 연구라 같이 보시면 좋을듯 싶습니다! Kalchbrenner N., et al. Neural Translation in Linear Time