일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- textmining
- TFX
- nlp
- 자기조직화지도
- MLOps
- 군집화
- RNN
- Binary classification
- gaze estimation
- Ann
- Clustering
- Support Vector Machine
- Transfer Learning
- AI 윤리
- Generative model
- NER
- tensorflow
- cross domain
- 경사하강법
- Logistic Regression
- NMF
- BERT
- VGGNet
- LSTM
- Gradient Descent
- Attention
- ResNet
- Python
- SOMs
- stemming
- Today
- Total
juooo1117
DeepLearning for NLP - Tensorflow tutorial(Classify text with BERT) 본문
DeepLearning for NLP - Tensorflow tutorial(Classify text with BERT)
Hyo__ni 2023. 12. 18. 15:30NLP(Natural Language Processing, 자연어 처리)
- 자연어처리 관련 분야는 딥러닝의 발전과 함께 비약적으로 성장했으며 현재 상당수의 연구가 딥러닝 기반의 기술을 사용한다.
- 과거에는 자연어 처리 및 텍스트 마이닝, 기계학습(machine learning) 등과 같은 학문 분야가 어느 정도 구분되어 연구가 진행되었다면, 현재는 공동의 기술인 머신러닝을 기반으로 연구진들이 기존의 경계를 넘어 활발한 연구를 진행하고 있다.
- 특히 2010년대 중반 이후 딥러닝이 언어 처리에 본격적으로 활용되고, 전이 학습 기반의 언어 표현 모델이 개발됨으로써 그동안 발전이 더디었던 자연어 처리 분야가 터닝 포인트를 만나게 되었다. (*BERT, Bidirectional Encoder Representations from Transformers)
- 사전학습모델(pre-trained model)을 사용해서, 특정 목적에 맞게 fine-tuning 하는 형태가 주로 사용된다.
- 재학습시 소수의 데이터만을 사용하는 few-shot learning 이나, 단지 task에 대한 설명만 주어지고 재학습용 데이터는 전혀 사용하지 않는 zero-shot learning 도 활발히 연구되고 있다.
Language Models are Few-Shot Learners
few-shot learning: 모델의 context window에 넣을 수 있는 만큼 많은 예제(K)를 넣는다. 일반적으로 가능한 context 길이 2048에 들어가는 10~100개의 sample을 넣는다.
one-shot learning: 하나의 sample만을 넣는다.
zero-shot learning: sample은 넣지 않고, 수행할 task에 대한 description 혹은 instruction만을 넣는다.
결과: 넣는 context 수 'K'를 늘릴 수록 성능이 향상되는 것을 확인할 수 있다. 또한, 모델이 커질수록 in-context learning의 효율이 높아졌다. 주어지는 예제가 많아질수록 큰 폭으로 성능이 높아지는 것을 확인할 수 있다. 뿐만 아니라, task에 대한 prompt를 함께 넣는 것이 도움이 되었다
자연어처리 연구
정보추출(Information Extraction)
전통적인 개체명 인식, 관계 인식, 이벤트 인식에 대한 연구들이 진행되고 있으며 적은 데이터를 사용한 학습, zero-shot learning, graph 기반의 추출 등 다양한 세부 주제에 대한 연구가 이루어지고 있다.
질의응답(Question Answering)
End-to-End QA에 대한 연구 및 open domain QA 관련 연구들이 활발하게 진행되고 있으며 few-shot learning이나 비지도 학습 기반의 방법을 사용한 기술들이 증가하고 있다.
자연어 생성(Language Generation)
역시 few-shot generation에 대한 비지도 학습 기반의 자연어 생성에 대한 연구가 많다. 다른 분야와 마찬가지로 다중 언어 관련 연구나 다중 task에 대한 학습이 다뤄지고 있으며 다양한 도메인에서 그 도메인의 특수성을 고려한 텍스트 생성에 대한 연구들이 수행되고 있다.
기계번역 및 다중언어(Machine Translation and Multilinguality)
자동번역시 발생할 수 있는 문제를 해결하기 위한 다양한 세부 주제들이 존재한다. few-shot, zero-shot, low-resource에 대한 연구가 활발하다.
텍스트 요약(Summarization)
다양한 NLP task가 적용된 종합적인 성격의 연구분야, 대화 시스템의 하위 모듈에 해당하는 NLU(자연어이해), Dialog State Tracking, Policy Learning, NLG(자연어생성) 등 각각의 세부 목적에 맞는 연구가 진행되고 있다.
감성분석 & 문체분석(Sentiment Analysis, Stylistic Analysis, and Argument Mining)
대부분의 경우 사전 학습 모델 기반의 전이학습(transfer learning)을 사용한다.
Bidirectional Encoder Representations from Transformers
google에서 개발한 언어표현모델(language representation model)로, 양방향의 트랜스포머 인코더(transformer encoder)를 쌓아서 대큐모 corpus에 대한 언어 표현을 학습하는 방법이다.
labeling 없이 학습을 수행한 후, 원하는 세부학습 목적에 맞춰 심층 신경망의 가중치를 재학습해서 모델을 구축한다.
BERT에서 사전 학습을 위해 수행하는 주요 task는 Masked Language Model(MLM)로, 입력 텍스트의 token 중 일부를 무작위로 마스킹해서 알 수 없게 만든 후 이를 맞추는 것이다. 이 과정을 통해 레이블링 없이도 지도 학습과 같은 효과를 낼 수 있으며 이를 통해 입력을 잘 표현(represent)할 수 있는 가중치를 학습하게 된다.
⇒ 기존 네트워크의 마지막 레이어를 현재 목적에 맞게 수정하고, 학습된 가중치를 초기값으로 사용해서 re-training을 하는 형태로 transfer learning 이 수행된다.
Tensorflow - Classify text with BERT
BERT 모델을 fint-tunning 해서, IMDB 영화 리뷰 데이터 세트를 가지고 감성 분석(sentiment analysis)을 수행해 보자.
리뷰 텍스트를 기반으로 영화 리뷰를 긍정적 또는 부정적으로 분류하여 감성 분석을 수행한다.
- Load the IMDB dataset
- Load a BERT model from TensorFlow Hub
- Build your own model by combining BERT with a classifier
- Train your own model, fine-tuning BERT as part of that
- Save your model and use it to classify sentences
Define Model
Create a very simple fine-tuned model, with the preprocessing model, the selected BERT model, one Dense and a Dropout layer.
The BERT models return a map with 3 important keys:
pooled_output: 각 입력 시퀀스를 전체적으로 나타내며, 모양은 [batch_size, H]이다. 전체 영화 리뷰에 대한 임베딩이라고 생각할 수 있다.
sequence_output: 컨텍스트의 각 입력 토큰을 나타내며, 모양은 [batch_size, seq_length, H]이다. 영화 리뷰의 모든 토큰에 대한 상황별 임베딩으로 생각할 수 있다.
encoder_outputs: the intermediate activations of the L Transformer blocks. 출력["encoder_outputs"][i]는 0 <= i < L인 경우 i번째 Transformer 블록의 출력을 갖는 [batch_size, seq_length, 1024] 모양의 텐서이다.
def build_classifier_model():
text_input = tf.keras.layers.Input(shape=(), dtype=tf.string, name='text')
preprocessing_layer = hub.KerasLayer(tfhub_handle_preprocess, name='preprocessing')
encoder_inputs = preprocessing_layer(text_input)
encoder = hub.KerasLayer(tfhub_handle_encoder, trainable=True, name='BERT_encoder')
outputs = encoder(encoder_inputs)
net = outputs['pooled_output']
net = tf.keras.layers.Dropout(0.1)(net)
net = tf.keras.layers.Dense(1, activation=None, name='classifier')(net)
return tf.keras.Model(text_input, net)
classifier_model = build_classifier_model()
bert_raw_result = classifier_model(tf.constant(text_test))
print(tf.sigmoid(bert_raw_result))
tf.keras.utils.plot_model(classifier_model)
[Practice code]
https://github.com/juooo1117/practice_AI_Learning/blob/main/classify_text_with_BERT.ipynb
'Artificial Intelligence' 카테고리의 다른 글
Recommender System (1) | 2023.12.18 |
---|---|
Word Embeddings - word2vec, Skip-Gram Model (0) | 2023.12.14 |
Text Summarization (0) | 2023.12.14 |
Named Entity Recognition using RFC(Random Forest Classifier) & CRF(Conditional Random Fields) (0) | 2023.12.14 |
Movie genres - Clustering practice with NMF (0) | 2023.12.14 |