본문 바로가기

카테고리 없음

Chapter 1, 2

1. 기본 개념

 

지도학습: 샘플에 대응하는 타깃의 정답을 제공하는 방식

샘플: 예측에 사용하는 아이템 (입력, x)

타깃: 샘플에 상응하는 레이블 (정답, y)

 

모델: 샘플 x를 받아 타깃을 예측하는 함수

파라미터: 모델을 규정 (가중치, w)

예측: 모델이 추측하는 타깃 (y hat)

손실함수: y hat과 y의 차이, 모델의 평가 척도 (L)

 

2. 경사 하강법

 

확률적 경사 하강법: 초깃값을 랜덤하게 선택하여 그레디언트 계산, 후에 반복적으로 업데이트(역전파)

 정방향 계산: 현재 파라미터 값으로 입력을 평가 -> 손실 함수 계산

 역방향 계산: 손실의 그레디언트를 사용 -> 파라미터 업데이트

 

3. 입력과 타깃을 표현하는 방법

 

수치 벡터를 사용

원-핫 표현: 0 벡터에서 시작해 사용 단어에 상응하는 원소를 1로 설정

 

tf 표현: 단순히 소속 단어의 원-핫 표현을 합해 생성

from sklearn.feature_extraction.text import CountVectorizer

 vectorizer 생성 -> fit

 

tf-idf 표현: 흔한 토큰의 점수 하향, 드문 토큰의 점수 상향

IDF(w) = log(N/n)

 w: 각 토큰

 N: 전체 문장의 개수

 n: w를 포함한 문장의 개수

tf-idf 점수 = TF(w) * IDF(w)

from sklearn.feature_extraction.text import TfidfVectorizer
 vectorizer 생성 -> fit

사이킷런의 idf 계산 식도 존재

 

기계 번역, 요약, 질의 응답 -> 타깃도 텍스트, 원-핫 인코딩 사용

타깃이 범주형으로 바꿔야 할 때도 있음

 

4. 계산 그래프

y = wx + b

-> z=wx 와 y=z+b 로 나눔

파이토치로 만들 수 있음

 

5. 텐서 연산

텐서 -> 다차원의 수학 객체

 

import torch

tensor = torch.arange(5)

tensor = torch.Tensor(2, 3) -> 리스트를 넣어줄 수도 있음

tensor = torch.rand(2,3) -> uniform

tensor = torch.randn(2,3) -> normal

tensor = torch.zeros(2,3)

tensor = torch.ones(2,3)

tensor = torch.from_numpy(np객체)

tensor.fill_(5)

 

기본 타입은 float

tensor.long() -> 타입 변경

텐서 생성할때 설정해줄 수도 있음 (dtype=torch.int64)

 

+ - * / 등의 연산 가능

torch.add(x,x) -> 합

 

tensor.view(2,3) -> 차원 변경

 

torch.sum(x, dim=0) -> 행끼리 연산 -> 1x3

torch.sum(x, dim=1) -> 열끼리 연산 -> 2x1

 

torch.transpose(x,0,1) -> 전치행렬

 

6. 텐서 인덱스

 

x -> 2x3 텐서

x[:1, :2] -> 간단한 기본 인덱싱 -> 1x2

 

indices = torch.LongTensor([0,2])

torch.index_select(x, dim=1, index=indices) -> 0,2 열만 뽑아냄 -> 2x2

 

indices = torch.LongTensor([0,0])

torch.index_select(x, dim=0, index=indices) -> 첫 행을 두번 뽑아냄 -> 2x3

 

row = torch.arange(2).long()

col = torch.LongTensor([0,1])

x[row,col] -> (0,0), (1,1) 인덱스에 맞는 데이터 두개 추출

 

torch.cat([x,x], dim=0) -> 행에 추가

torch.stack([x,x]) -> 차원 늘려서 최고차원에 추가

 

torch.mm(x,y) -> 행렬 곱 연산

 

7. 계산 그래프

 

텐서 만들어줄때 requires_grad = True 해주면 손실과 그레디언트를 기록

 

8. cuda 텐서

 

gpu에서 선형 대수 연산 수행 설정

cuda api 사용하여 gpu 활용

 

torch.cuda.is_available()

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

x = torch.rand(3,3).to(device)

 

같은 장치에 있는 객체들끼리만 연산 가능

 

9. 말뭉치, 토큰, 타입

 

말뭉치: 텍스트 데이터 -> 원시 텍스트와 메타 데이터를 포함

토큰: 기본 단위

토큰화: 텍스트를 토큰으로 나누는 과정

샘플(데이터 포인트): 메타 데이터가 붙은 텍스트

데이터셋: 샘플의 모음인 말뭉치

 

import spacy

nlp = spacy.load('en')

text = "I am ddddddd"

[str(token) for token in nlp(text.lower())] -> 토큰 리스트

 

 

10. n-그램

 

n-그램: 연속된 토큰 시퀀스

 

11. 표제어

 

is was -> be

token.lemma_ 해주면 표제어로 바꿔줌

 

12. 단어 분류: 품사 태깅

 

token.pos_ -> 품사 리턴

 

import spacy

nlp = spacy.load('en')

doc = nlp(u"Mary slapped the green witch.")

for token in doc:

  print('{} - {}'.format(token, token.pos_))

 

13. 청크 나누기, 개체명 인식

 

token.label_ -> 명사구 리턴

 

import spacy

nlp = spacy.load('en')

doc = nlp(u"Mary slapped the green witch.")

for chunk in doc.noun_chunks:

  print ('{} - {}'.format(chunk, chunk.label_))

 

14. 문장 구조

 

구성 구문 분석 -> 계층적 구문 분석 트리

의존 구문 분석

 

15. 단어 의미, 의미론

 

동음이의어 문제에 직결해야 함

준지도 학습을 통해 해결하지만, 이 책에서 다루지는 않음