NLP

[NLP] 자연어처리 8. RNN,LSTM 적용 & 허깅페이스

sueeee-e 2024. 10. 6. 14:32

딥러닝기초에서 RNN, LSTM 내용 적용,  마지막에 허깅페이스에 대한 내용까지의 정리


3. RNN, LSTM

📍RNN(순환신경망)

- 시퀀스 데이터를 처리하는 신경망 구조(시계열)

- 순환적인 특성을 통해 시퀀스 데이터의 패턴, 트렌드, 의존성을 학습한다. 

- 장기 의존성 문제 

- 활성화 함수 : tanh

 

📍 RNN 변형 : LSTM, GRU

- 장기의존성 문제 해결, 그래디언트 소실 완화 

- LSTM : 시그모이드로 곱하고 과거 메모리 셀을 더함

- GRU : 연산속도가 빠르고 LSTM의 덮어씌워지는 문제가 없다. 

 

📍Bidirectional RNN 

- 정보의 불균형 발생

- 2개의 은닉층으로 구성되고 서로 연결되어 있지 않다.

 - 전방향 + 후방향

 

순환신경망을 이용한 데이콘 실습을 진행해보겠다. 

* 라이브러리 로드, 데이터 로드, 전처리, 텍스트 벡터화, 임베딩은 생략 

* keras 내장 RNN : SimpleRNN, GRU, LSTM

import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import TextVectorization, Embedding
from tensorflow.keras.layers import Dense, Dropout, BatchNormalization
from tensorflow.keras.layers import SimpleRNN, LSTM, GRU, Bidirectional

 

1. 모델링(층 쌓기)

model = Sequential([
    embedding_layer,
    BatchNormalization(),
    Bidirectional(LSTM(units=64, return_sequences=True)),
    Bidirectional(LSTM(units=64, return_sequences=True)),
    Bidirectional(LSTM(units=32)),
    Dropout(0.2),
    Dense(units=16, activation='relu'),
    Dense(n_class, activation='softmax')   #출력층 정답칼럼수:n_class
])

 

2. 모델 컴파일 및 요약

model.compile(loss='categorical_crossentropy',
              optimizer= 'adam',
              metrics = ['accuracy'])
model.summary()

 

3. 모델 학습 및 예측

model.fit(X_train, y_train,
                    epochs=100, batch_size=64,
                    callbacks=[early_stop, tensorboard_callback],
                    validation_data=(X_valid, y_valid),
                    use_multiprocessing=True)
                    
y_pred = model.predict(X_test)

 

딥러닝을 적용하는 전체적인 흐름은 동일하다. 데이터 준비, 전처리, 모델 학습 등의 단계가 포함되고, 중요한 것은 모델링 과정에서 어떤 모델을 선택할지각 층(layer)을 어떻게 설계할지이다. 적절한 층을 쌓고, 각 층의 파라미터(예: 뉴런 개수, 활성화 함수 등)를 설정하는 것이 딥러닝 모델의 성능에 중요한 영향을 미친다고 보면 된다. 

 

이렇게 딥러닝으로 학습시키고 예측한 결과도 그리 높은 점수는 나타내지 못했다. 그럼 어떻게 해야 할까?


🎈 허깅페이스(Hugging Face) 

: 딥러닝 모델과 자연어 처리 기술을 개발하고 공유하는 회사로서 다양한 딥러닝 프레임워크를 지원하는 라이브러리와 도구를 제공한다.

대표적인 제품으로 Transformers 라이브러리가 있다. 이 라이브러리는 자연어처리 모델을 구현하고 학습시키는데 사용된다. 

BERT, GPT, XLNet 등 다양한 모델로 자연어 이해, 기계 번역, 질문 응답, 감성 분석 등에서 좋은 성능을 보여준다.

 

허깅페이스 코스 :

https://huggingface.co/learn/nlp-course/ko/chapter1/3?fw=pt

 

트랜스포머로 무엇을 할 수 있나요? - Hugging Face NLP Course

이번 장에서는 트랜스포머(Transformer) 모델을 사용해 무엇을 할 수 있는지 같이 살펴보고, 🤗 Transformers 라이브러리 툴의 첫 사용을 pipeline() 함수와 함께 시작하겠습니다. 👀 오른쪽 상단에 Open in

huggingface.co

 

한국어로도 지원하니 읽어보면 좋을 것 같고, 여기엔 간단한 튜토리얼도 지원하는데 이것을 따라해보는 것까지 해보겠다.

 

!pip install datasets evaluate transformers[sentencepiece]

 

#트랜스포머의 파이프라인 함수
from transformers import pipeline
classifier = pipeline("sentiment-analysis")  #감정분석
classifier(
    ["I've been waiting for a HuggingFace course my whole life.", # 긍정
     "I hate this so much!",  # 부정
     "힘들다"] # 영어 기반 모델이라 한국어는 정확하지 않다.
)

 

 

pipeline( model = " 모델 찾아서 입력 ") 해주면 한국어 사용되는 걸로도 할 수 있다. 

다양한 기능을 사용해서 한 번씩 적용해보자

# text-generation : 문장생성
generator = pipeline("text-generation", model="skt/kogpt2-base-v2")
generator(
    "점심 메뉴 추천,",
    max_length=30,
    num_return_sequences=2,
)
# mask : 빈칸 채우기
unmasker = pipeline("fill-mask", model = "klue/bert-base")
unmasker("한국인이 좋아하는 음식은 [MASK] 입니다.", top_k=3)
# 질의응답
question_answerer = pipeline("question-answering")
question_answerer(
    question="Where do I work?",
    context="My name is Sylvain and I work at Hugging Face in Brooklyn",
)
# 요약
summarizer = pipeline("summarization")
summarizer(
    """요약할 내용"""
    )

 

위의 내용 말고도 더 다양한 기능이 있으니까 허깅페이스 코스 들어가서 적용해보면 좋을 것 같다!

다음은 허깅페이스에서 제공하는 transformer 라이브러리에 대해 더 공부해보겠다.

 


https://inf.run/zzEax

 

모두의 한국어 텍스트 분석과 자연어처리 with 파이썬 강의 | 박조은 - 인프런

박조은 | 파이썬 한국어 텍스트 분석과 자연어처리 워드클라우드 시각화, 형태소 분석, 토픽모델링, 군집화, 유사도 분석, 텍스트데이터 벡터화를 위한 단어 가방과 TF-IDF, 머신러닝과 딥러닝을

www.inflearn.com