이 글은 파이토치로 배우는 자연어처리(O'REILLY, 한빛미디어)를 공부한 내용을 바탕으로 작성하였습니다.

 

샘플(텍스트)의 인코딩

one-hot vector 만들기

from sklearn.feature_extraction.text import CountVectorizer

corpus = ['Time flies like an arrow.',
		'Fruit flies like a banana.']
one_hot_vectorizer = CountVectorizer(binary=True)
one_hot = one_hot_vectorizer.fit_transform(corpus).toarray()

문장 one-hot vector 표현

 

TF-IDF

  • TF (Term Frequency) : 특정 단어가 특정 문서에서 등장한 횟수
    • 'Time flies like an arrow.'에서 flies의 등장 횟수 = 1 =  TF
    • 높을 수록 중요도 ↑
  • IDF (Inverse-Document-Frequency) : 특정 단어가 등장한 문서의 수에 반비례
    • 특정 단어가 포함된 문서의 수 Nw 가 작을 수록 중요도 ↑

IDF

from sklearn.feature_extraction.text import TfidfVectorizer

tfidf_vectorizer = TfidfVectorizer()
tfidf = tfidf_vectorizer.fit_transform(corpus).toarray()

TF-IDF 표현


Pytorch Tensor 다루기

# Tensor 랜덤 초기화

import torch
torch.rand(2,3) # 2행 3열의 텐서 생성, 0 ~ 1 사이 균등분포 원소
torch.randn(2,3) # 평균 0, 표준편차 1인 표준정규분포 원소
# 0으로 이루어진 텐서
x = torch.zeros(2, 3)

# 1로 이루어진 텐서
x = torch.ones(2, 3)

# 원소를 5로 채우기
x.fill_(5)

# numpy 에서 tensor로
torch.from_numpy(npy)

# Tensor 원소를 범위(range)로 만들기
x = torch.arange(6)

# Tensor shape을 재설정하기
x.view(2,3)
# 원소별 덧셈
torch.add(x, x)
x + x

# 전치
torch.transpose(x, 0, 1)

# tensor 인덱싱
indices = torch.LongTensor([0, 2])
torch.index_select(x, dim=0, index=indices)

# 차원 추가
x.unsqueeze(dim=1) # dim 차원에 추가

# 차원 삭제
x.squeeze() # flatten 작업 등에 쓰임

# 텐서 행, 열 방향으로 연결하기
torch.cat([x, x], dim=0)
torch.cat([x, x], dim=1)

# 텐서를 쌓아 새로운 0번째 차원에 연결하기
torch.stack([x, x])

그래디언트와 계산 그래프

# gradient 계산에 사용하는 부가정보 관리 하기
x = torch.tensor([[2.0, 3.0]], requires_grad=True)
z = 3 * x

# .backward() 호출 후 grad 값 출력 (역전파 후에 grad가 기록된다.)

loss = z.sum()
loss.backward()

print(x.grad)

CUDA 설정하기

device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 어떤 환경에서든 실행되도록 코드 짜기
x = torch.rand(3, 3).to(device)

 

'AI 인공지능' 카테고리의 다른 글

yelp 리뷰 감성 분석 (3)  (0) 2023.03.30
yelp 리뷰 감성 분류 (2)  (0) 2023.03.30
yelp 리뷰 감성 분류 (1)  (0) 2023.03.30
파이토치 신경망 구성하기  (0) 2023.03.24
자연어처리(NLP) 기본 용어 정리  (0) 2023.03.21

+ Recent posts