2024. 2. 21. 18:05ㆍTIL
자연어 처리 프레임워크
자연어 처리(Natural Language Processing, NLP)란 컴퓨터가 인간의 언어를 이해하고 해석하는데 사용되는 분야로 컴퓨터 과학, 인공 지능, 언어학의 개념이 사용된다. NLP의 목적은 인간 언어의 구조와 의미 이해를 바탕으로 글을 활용한 문제를 해결하고 향상된 사용자 경험을 제공하고자 함이다. 자연어 처리는 다양한 문제에 사용된다.
- 텍스트 이해 (Text Understanding)
- 질의응답 (QA, Question Answering)
- 문장 이해 (Reading Comprehension)
- 정보 검색 (Information Retrieval)
- 텍스트 생성 (Text Generation)
- 문장 생성 (Text Generation)
- 요약 (Text Summarization)
- 번역 (Neural Machine Translation)
- 텍스트 분류 및 태깅 (Text Classification & Tagging)
- 문장 분류 (Text Classification)
- 개체명 인식 (NER, Named Entity Recognition)
- 품사 태깅 (POS tagging, Part of Speech tagging)
- 텍스트 관계 추출 (Text Relation Extraction)
- 문장 관계 추출 (Relation Extraction)
다음과 같은 자연어 처리 프레임워크가 존재한다.
- Natural Language Tool Kit (NLTK)
- 전통적인 NLP 기법을 구현한 패키지 모음
- 전처리, 딥러닝 이전의 NLP 방법들이 많이 활용됨
- PyTorch, TorchText
- Facebook에서 개발한 머신 러닝 오픈 소스 라이브러리
- 딥러닝에 특화
- TorchText는 PyTorch에서 제공하는 NLP에 특화된 내부 라이브러리
- (초기 ~ 최신의)딥러닝 모델을 쉽게 구현할 수 있는 인터페이스 제공
- 데이터 전/후처리와 모델 학습에 필요한 여러 요소를 제공
- HuggingFace
- 자연어 처리에 특화된 커뮤니티 기반의 라이브러리
- NLP를 비롯해 다양한 연구 분야(이미지, 음성, 생성 등)의 연구 성과를 공유 & 활용 가능
- 손쉬운 사용과 학습을 위한 유용한 기능을 내포
- 데모 사이트(Spaces) 사용, 데이터 업로드 & 다운로드(Datasets)가 가능
- 커뮤니티 기반의 플랫폼이라 매우 다양한 연구 결과물(학습 결과 모델, 데이터, 데모 등)이 빠르게 업데이트
- 연구 결과물을 공통된 인터페이스로 강제하여 코드 진행의 통일성 제공
- KoNLPy
- 자연어 처리(NLP) 중 한글 데이터 처리에 특화된 파이썬 라이브러리
- 한국어에 특화된 전처리 기법을 많이 갖고 있음: 형태소 분석, 품사 태깅 및 추출
- 텍스트 마이닝 과정의 패키지
- 전처리 과정에서 Gensim
- (딥러닝이 아닌) 머신러닝 모델 학습에서 Sklearn
문장 분류
문장 분류는 텍스트 데이터를 활용해 분류 문제를 푸는 것이다. 텍스트의 의미를 이해하고 구조화된 방식으로 분류를 하는 것이 목표이다. 감정 분석도 문장 분류의 한 종류이고 이외에도 주제 분류, 의도 분석, 언어 감지와 같은 다양한 하위 테스크가 존재한다. 복잡한 문제를 풀기 위한 베이스 모델로 문장 분류 모델을 사용한다.
다음과 같은 딥러닝 모델을 활용하여 문장 분류에 접근한다.
- 순환 신경망 (Recurrent Neural Network, RNN)
- 딥러닝을 활용한 초기 텍스트 처리 모델
- 사람이 글을 읽고 이해하는 과정을 모방해 모델을 설계
- 단어를 하나씩 입력 받고 이전에 이해한 내용을 바탕으로 새로운 정보를 생성
- 모든 단어를 처리하는 과정까지 이를 반복 순환(Recurrent)
- 마지막 생성된 정보를 바탕으로 분류 진행
- 주의 메커니즘 (Attention Mechanism)
- 순환 신경망 이후에 나타난 새로운 분석 방법
- 입력으로 받은 텍스트 정보에서 딥러닝 모델이 주의(Attention)를 집중할 단어를 자동을 판단
- 집중된 단어를 바탕으로 NLP 문제를 처리
- 단어의 정보를 모델 스스로 판단
- 높은 성능, 다양한 정보 추출 가능
주의 메커니즘을 활용해 분류 문제를 풀기 위해서는 생성된 문장 임베딩 값을 활용한다. 정리된 문장의 정보를 바탕으로 원하는 타깃 클래스를 예측한다. 문장 임베딩은 Attention이 입혀진 단어를 바탕으로 생성한다. 학습을 위한 데이터 준비 입장에서 분류 데이터가 만들기도 쉬우므로 분류 문제로 데이터의 특성을 익힌 모델을 분류보다 더 복잡한 문제에 적용하는 상황이 많다. 이를, 전이 학습(Transfer Learning) 혹은 미세 조정(Fine-Tuning)이라고 한다.
딥러닝 모델을 활용한 문장 분류 실습
HuggingFace Models 페이지(링크)에서 문장 분류 (Text Classification)를 선택한다. SNS 데이터로 학습한 감정 분석 모델을 사용할 것이다. 이 모델은 문장 분류에 기본이 되는 BERT라는 딥러닝 모델을 개선한 RoBERTa라는 모델을 기본으로 하고 Tweet 데이터로 추가 학습 한 모델이다. 실습에서는 따로 학습을 진행하지 않는다.
딥러닝 모델의 전처리는 모델마다 상이하다. HuggingFace는 특정 모델에 맞는 전처리 코드를 제공한다. 목표하는 모델 HF 페이지 이름을 제공하면 그 모델의 전처리 Tokenizer를 제공한다. AutoTokenizer는 HF 페이지 이름만으로 목표하는 것들을 자동으로 가져올 수 있다. Tokenizer의 결과로 Token의 index와 기타 모델 입력 데이터가 생성된다. Token의 Index는 Token과 Embedding vector 사이를 이어주는 mapping value이다. Token index를 사용하면 메모리적 이득과 Embedding Vector를 모델에 귀속시켜 관리 용이한 장점이 있다.
Auto 모델 로더를 바탕으로 HF 페이지 이름으로 간단하게 학습된 모델을 호출 가능하다. 불러온 model을 print하면 구조 파악이 가능하고 Embeddings 모듈만 추론하여 embedding 값 도출도 가능하다. 모델을 사용하기 위해서는 적절한 입력 인자를 넘겨주어야 한다. 이 입력 인자는 모델 연구자의 활용 사례 혹은 모델 설명을 통해 확인한다. 모델의 출력은 각 감정 상태를 예측하는 점수(score)의 형태이다. 점수 값은 해석이 어려우므로 softmax 함수를 활용하여 확률의 형태로 변환한다. 각 위치의 감정을 알기 위해서는 모델이 설정한 감정의 index를 알아야 하는데 이런 정보는 config라는 변수에 저장 후 Auto 로더로 호출한다.
실습은 Yelp 데이터를 사용한다. 앞에서 학습된 딥러닝 모델을 활용하여 과거 GloVe Embedding과 Logistic Regression 학습 결과와 비교할 것이다. 딥러닝 모델은 Neutral 클래스의 존재로 잘못된 예측이 있지만 과거 머신러닝 모델보다 전체적인 성능은 높았다. 특히, Pos와 Neg 사이의 혼동이 거의 없었다.
'TIL' 카테고리의 다른 글
| 데이터 마이닝 방법 (0) | 2024.02.22 |
|---|---|
| 데이터 마이닝 (1) | 2024.02.22 |
| 토픽 모델링과 워드 클라우드 (0) | 2024.02.21 |
| 감정 분석 (0) | 2024.02.20 |
| 단어 임베딩과 문장 임베딩 (1) | 2024.02.20 |