본문 바로가기

(63)
07 트랜스포머 (2) GPT GPT(Generative Pre-trained Transformer)는 2018년 OpenAI에서 발표한 트랜스포머 기반 언어 모델이다. 이 모델은 ELMo(Embeddings from Language Model)와 같이 대규모 말뭉치로 사전 학습된 모델로 다양한 다운스트림 작업에서 우수한 성능을 보인다. ELMo는 다른 포스팅을 참고 2024.02.06 - [Deep Learning/NLP] - ELMo(Embeddings from Language Model) ELMo(Embeddings from Language Model) 자료 출처 paper 1. ELMo Bank라는 단어는 Bank Account와 River Bank에서 전혀 다른 의미를 가진다. 그러나 Word2Vec이나 GloVe는 Bank..
07 트랜스포머 (1) Transformer 트랜스포머의 이론적인 내용은 이전 글에서 볼 수 있습니다. 여기서는 파이토치에서 트랜스포머를 사용하는 방법에 대해서만 다룹니다. 2024.01.11 - [Deep Learning/NLP] - 트랜스포머 1. 포지셔널 인코딩 import math import torch from torch import nn from matplotlib import pyplot as plt class PositionalEncoding(nn.Module): def __init__(self, d_model, max_len, dropout=0.1): super().__init__() self.dropout = nn.Dropout(p=dropout) position = torch.arange(max_len).unsqueeze(1) ..
06 임베딩 (3) CNN CNN의 이론적인 내용은 예전에 다룬적이 있어서 여기서는 파이토치에서 CNN을 사용하는 방법에 대해서만 다룬다. 2023.09.21 - [책/밑바닥부터 시작하는 딥러닝] - 7장 CNN (1) 합성곱 신경망(Convolutional Neural Network, CNN) 합성곱 계층 클래스 conv = torch.nn.Conv2d( in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros' ) groups : 입력 채널을 그룹으로 나누는데 사용되는 매개변수. groups가 1인 경우에는 전체 입력 채널에 대한 컨볼루션을 수행하지만, groups가 입력 채널수로 ..
06 임베딩 (2) RNN RNN, LSTM의 이론적인 내용은 이전에 다룬적이 있기 때문에 여기서는 파이토치에서 RNN과 LSTM을 사용하는 방법만 다룬다. 2023.09.26 - [책/밑바닥부터 시작하는 딥러닝 2] - 5장 RNN (1) 2023.10.27 - [책/밑바닥부터 시작하는 딥러닝 2] - 6장 게이트가 추가된 RNN (1) 순환 신경망(Recurrent Neural Network, RNN) RNN 클래스 rnn = torch.nn.RNN( input_size, hidden_size, num_layers=1, nonlinerity='tanh', bias=False, batch_first=True, dropout=0, bidirectional=False, ) num_layers : 순환 신경망의 층수를 의미, 2 이상..
06 임베딩 (1) N-gram, TF-IDF, Word2Vec, fastText 토큰화만으로는 모델을 학습할 수 없기 때문에 텍스트를 숫자로 변환하는 텍스트 벡터화 과정이 필요하다. 기초적인 텍스트 벡터화로는 원-핫 인코딩과, 빈도 벡터화 등이 있다. 그러나 원-핫 인코딩은 벡터의 sparsity가 크다는 단점이 있고, 둘 다 텍스트의 벡터가 입력 텍스트의 의미를 내포하고 있지 않다는 단점이 있다. 이를 위해 Word2Vec나 fastText 등과 같이 단어의 의미를 학습해 표현하는 워드 임베딩(Word Embedding) 기법을 사용한다. 워드 임베딩은 단어를 고정된 길이의 실수 벡터로 표현하는 방법으로, 단어의 의미를 벡터 공간에서 다른 단어와의 상대적인 위치로 표현해 단어 간의 관계를 추론한다. 워드 임베딩은 고정된 임베딩을 학습하기 때문에 다의어나 문맥 정보를 다루기 어렵다는..
05 토큰화 (2) 하위 단어 토큰화 하위 단어 토큰화 현대 자연어 처리에서는 신조어의 발생, 오탈자, 축약어 등을 고려해야 하기 때문에 분석할 단어의 양이 많아져 어려움을 겪는다, 이를 해결하기 위한 방법 중 하나로 하위 단어 토큰화(Subword Tokenization)가 있다. 하위 단어 토큰화란 하나의 단어가 빈번하게 사용되는 하위 단어(Subword)의 조합으로 나누어 토큰화 하는 방법이다. 예를 들어 'reinforcement'라는 단어를 'rein', 'force', 'ment' 로 나눠 처리할 수 있다. 하위 단어 코느화를 적용하면 단어의 길이를 줄일 수 있어서 처리 속도가 빨리질 뿐만 아니라, OOV 문제, 신조어, 은어, 고유어 등으로 인한 문제를 완화할 수 있다. 바이트 페어 인코딩 이전 포스팅 참고 2023.10.05 ..
05 토큰화 (1) 단어 및 글자 토큰화, 형태소 토큰화 자연어 처리 모델은 다음과 같은 문제를 해결할 수 있어야 한다. 모호성 : 단어와 구가 사용되는 맥락에 따라 여러 의미를 갖게 되어 모호한 경우가 많다. 가변성 : 사투리, 강세, 신조어, 작문 스타일로 인해 매우 가변적이다. 구조 : 문장이나 구의 의미를 이해할 때 구문을 파악하여 의미를 해석해야 한다. 위와 같은 문제를 이해하고 구분할 수 있는 모델을 만들려면 우선 말뭉치(Corpus)를 일정한 단위인 토큰(Token)으로 나눠야 한다. 토큰은 개별 단어나 문장 부호와 같이 텍스트를 의미하며 말뭉치보다 더 작은 단위이다. 토큰으로 나누는 과정을 토큰화(Tokenization)이라 한다. 그리고 텍스트 문자열을 토큰으로 나누는 알고리즘이나 소프트웨어를 토크나이저(Tokenizer)라고 한다. 토큰을 어..
04 파이토치 심화 (4) 데이터 증강 및 변환 데이터 증강 및 변환 데이터 증강(Data Augmentation)이란 데이터가 가진 고유한 특징을 유지한 채 변형하거나 노이즈를 추가해 데이터세트의 크기를 인위적으로 늘리는 방법이다. 데이터세트를 인위적으로 늘리면 모델의 과대적합을 줄이고 일반화 능력을 향상시키며 모델의 분산관 편향을 줄일 수 있다. 또한 클래스 불균형 문제를 완화할 수 있다. 그러나 너무 많은 변형이나 노이즈를 추가한다면 기존 데이터가 가진 특징이 파괴될 수 있다. 텍스트 데이터 텍스트 데이터 증강 방법은 삽입, 삭제, 교체, 대체, 생성, 반의어, 맞춤법 교정, 역번역 등이 있다. 자연어 처리 데이터 증강(NLPAUG) 라이브러리를 활용해 텍스트 데이터를 증강해보자. !pip install nlpaug transformers sac..