sailorCat

전체 글 250

카테고리 설명
😘
카테고리
작성일
2022. 3. 15. 22:37
작성자
sailorCat
728x90

Background

기존모델

RNN, LSTM, 게이트 순환 신경망에서 언어모델과 번역모델에서 sequence 모델링을 사용해왔다.

재귀 모델은 입력의 순차적인 흐름을 통해 hidden states를 만들지만 병렬구조가 불가능 하다.

또한 실제 연관성보다 가까운 위치의 단어끼리 연관성이 무조건 높게 나오기 때문에 정확도가 떨어진다.

 

 

Attention 매카니즘으로 만들어진 인코더 디코더의 구조이다.

연속된 기호 X들을 입력으로 받는 encoder가 표현 Z를 decoder로 받아 출력인 기호 Y로 생성한다.

매 순간 모델은 자동 순환하며 이전에 만들어진 기호를 다음 기호를 생성하는데 추가적인 입력으로 받는다.

예를들어 Y의 m번째 기호는 Y m-1번째 기호를 추가적인 입력으로 참고하여 생성된다.

 

인코더 디코더의 구조는 전체 입력 문장이 하나의 벡터로 압축되는데 여기에 attention이라는 구조를 추가하면 문장의 모든 정보를 고정 길이 벡터로 인코딩 하지 않아도 정보 손실이 일어나지 않는다.

 

self-attention 을 통해 행렬곱을 사용하여 한번에 병렬처리가 가능하다.

한번의 연산으로 모든 중요한 정보들을 임베딩 한다.

 

Transformer는 기존의 encoder - decoder 구조는 유지하지만 행렬곱으로 시간을 단축한다.

또한 행렬을 이용할 때 입력의 순서가 뒤섞이기 때문에 position encoding을 통해 위치정보를 저장한다.

 

Stack 구조를 통해 이 과정이 진행된다.

 

위의 그림에서 

Encoder 

- N이 6개인 레이어로 구성

 

- 각각의 레이어는 2개의 서브 레이어로 구성

multi-head self-attention mechanism

position-wise fully connected feed-forward network

 

- 서브 레이어의 normalization을 위한 연결이 존재

각각의 서브 레이어의 출력으로 LayerNorm(x + Sublayer(x))

레이어 normalization을 위한 연결을 위해 모든 서브 레이어와 임베딩 레이어의 출력 디멘션은 512로 일원화 한다.

dmodel = 512

 

Decoder

- N이 6개인 레이어로 구성

 

- 각각의 레이어가 3개의 서브 레이어로 구성

multi-head self-attention mechanism

position-wise fully connected feed-forward network

masked multi-head attention over the output of the encoder stack

 

- 서브 레이어의 normalization을 위한 연결이 존재

 

- masked-multi-head attention

self-attention 하는 경우 값의 처리 이후에 단어를 볼 수 없도록 가린다.

 

attention 함수는 쿼리 Q와 key-value 쌍의 출력으로 이루어진다.

Query, Key, Value 출력 값은 모두 벡터이다.

출력은 Value의 가중치 합이고, Key와 Query의 호환 함수에 의해 계산된다.

 

 

 

Scaled Dot-Product Attention

input : queries and keys of dimension dk, and values of dimension dv

Query, Key를 통해 attention 가중치를 구하고, Value 값을 곱한다.

그 후에 소프트 맥스 함수를 적용한다.

 

위의 식에서 dk의 제곱근으로 나누는 것은 dk가 커질 경우 행렬곱의 결과는 더욱 증가하기 때문에 이를 방지하기 위해 나눈다.

또한 self-attention은 Query, Key, Value 값의 출처가 모두 같다.

Query는 decoder의 하나의 셀 값이고, Key, Value 값은 encoder의 모든 시점에서의 셀의 값이다.

 

 

 

Multi-Head Attention

scaled dot-product attention 레이어를 h개 만큼 동시에 실행한다.

이로써 병렬처리가 가능하다.

기존의 512 디멘션을 8로 나눈 64의 디멘션으로 레이어를 실행한다.

h = 8

head1에서 64 디멘션, head2에서 64 디멘션 , ... , head8에서 64 디멘션

 

입력 벡터를 64 디멘션씩 분할하고 이것을 concat 결합한다.

 

초기 입력으로 4 디멘션의 단어 벡터가 주어지면

4 X 3의 Query 가중치 벡터, Key 가중치 벡터, Value 가중치 벡터와 곱해져서 3차원의 벡터를 만든다. 

 

 

Attention을 여러번 수행하여 다양한 시각으로 정보를 수집하게 된다.

 

 

 

Position-wise Feed-Forward Networks

attention 레이어 이외에 인코더와 디코더에 완전연결 순방향 신경망이 포함된다.

rnn 구조가 아니기 때문에 단어의 순서 정보를 포함해야 한다.

Linear Transformation -> 활성함수 Relu -> Linear Transformation

파라미터 W와 b값은 변하지 않는다.

하지만 인코더가 달라지면 다른 파라미터 값을 갖는다.

 

입력 디멘션 512에서 출력 디멘션 2048로 생성된다.

 

 

Self-Attention, Recurrent, Convolutional, 제한된 Self-Attention 레이어 네가지를 비교했다.

Positional Encoding

RNN에서와 달리 Transformer는 병렬적으로 연산을 하다보니 입력 벡터의 순서에 혼동이 생길 수 있기 때문에 위치 정보를 저장하여 사용한다.

이 포지션 인코딩 값은 단어 임베딩 베거와 결합하여 초기 입력으로 사용된다.

레이어를 거치기 전에 초기 단계에 실행된다.

각각의 attention head 가 연관 있는 단어들을 연결한 모습

728x90
작성일
2022. 3. 15. 14:06
작성자
sailorCat
728x90

단어 word

 

He stepped out into the hall, was delighted to encounter a water brother.

다음 문장은 몇개의 단어를 가지고 있을까?

문장 부호를 단어에 포함시켜야 할까? 15 - 13

상황에 따라서 다르다.

문장안에 쉼표는 구과 구를 나누는 boundary 역할을 하기 때문에 중요하다.

 

구어체 문장에서

I do uh main - mainly business data processing

깨진 단어 fragments, filled pauses(uh, um..)

 

Susie's cat in the hat is different from other cats!

표제어 lemma는 여러단어들이 공유하는 뿌리언어

단어형태 wordform 같은 표제어를 공유하지만 다양한 형태를 가진다.

cat, cats는 두가지의 형태이지만 표제어 cat을 공유한다.

 

 

Vocabulary 

단어의 집합

 

Type 

단어의 한 원소

 

Token 

문장 내에 나타나는 한 단어

an instance of a type in running text

 

They picnicked by the pool, then lay back on the grass and looked at the stars.

16 token

14 types 관사 the 반복

 

말뭉치 Corpus

 

말뭉치는 대용량의 문서 집합이다.

 

말뭉치의 특성 요소

- 언어 (7097개의 언어가 존재)

- 방언

- 장르 (뉴스, 소설, 과학기술문서, SNS, 수필, 위키피디아, 종교문서 ..)

- 인구통계적 속성 (나이, 성별, 인종 ..)

 

이런 다양한 말뭉치에 적용할 수 있는 NLP 알고리즘을 개발해야 한다.

 

 Unix 명령으로 텍스트 파일 안의 단어들을 토큰화 한다.

 

https://shakespeare.folger.edu/shakespeares-works/hamlet/

 

Hamlet | The Folger SHAKESPEARE

Read Shakespeare’s Hamlet for free from the Folger Shakespeare Library! Full text, summaries, illustrations, guides for reading, and more.

shakespeare.folger.edu

햄릿 데이터를 사용한다.

 

tr -sc 'A-Za-z' '\n' < hamlet.txt
#단어 토큰화

tr -sc 'A-Za-z' '\n' < hamlet.txt | sort | uniq -c | sort -n -r
#단어 토큰화 후 빈도수로 정렬

tr 'A-Z''a-z' < hamlet.txt | tr -sc'a-z' '\n' | sort | uniq-c | sort -n -r
#소문자로 변환하여 정렬

 

NLP 에서 해결해야 하는 문제는 다음과 같다

 

- 문장부호 punctuation을 구분해서 사용해야한다.

m.p.h, AT&T, Ph.D와 같이 단어안에 나타나는 문장 부호

$ 화폐단위

01/02/2021 날짜

https://lsann38.tistory.com/ URLS

 

서안이

><

lsann38.tistory.com

#ml 해쉬태그

이런 경우에는 단어의 의미를 문장 부호가 결정하기 때문에 제외하지 않는것이 좋다.

 

- 접어 clitics

다른 단어에 붙어서 존재하는 형태

we're = we are

 

- 여러개의 단어가 붙어야 의미있는 경우

New York, rock'n'roll

 

 

 

국어

 

- 띄어쓰기가 잘 지켜지지 않고, 한 어절이 하나 이상의 의미가 있을 수 있다

 

- 형태소 morpheme가 존재한다

자립형태소 : 명사, 대명사, 부사

의존형태소 : 어미, 접사, 조사

 

- 단어보다 작은 단위 subword로 토큰화가 필요하다

 

Subword Tokenization

학습 데이터에서 새로운 단어가 나타난다면

new low newer

테스트 데이터가 -er -est를 분류할 수 있으면 좋을 것이다.

 

- Byte-Pair Encoding BPE

- WordPiece

- Unigram Language modeling

 

두가지의 구성요소

- Token Learner

말뭉치에서 Vocabulary를 만든다

- Token Segmenter

새로운 문장을 토큰화 한다

 

 

 

Token Learner BPE

byte pair encoding

 

 

 

Token Segmenter BPE

 

lower segmentation 순서

l o w e r _

l o w er _

l o w er_

lo w er_

low er_

 

BPE를 통해 새로운 단어가 들어와도 자주쓰는 pair를 인식하기 때문에 segmentation으로 보다 인식률을 높일 수 있다.

이미 Voca에 존재하는 단어로 인식할 수 있고, NLP에서 조금 더 인식률이 좋다.

 

 

 

WordPiece

 

문장이 나타날 확률 likelihood를 계산해서 기호들의 쌍을 찾는다.

 

 

 

Unigram

확률모델 (언어모델) 을 사용여러개의 기호 병합이 동시에 일어날 수 있게 한다.학습데이터 내의 문장을 관측 observed 확률변수로 정의

 

Tokenization을 잠재 latent 확률변수로 정의- 연속적인 변수

 

데이터의 주변 우도 marginal likelihood를 최대화 시키는 tokenization을 구한다.- EM expectation maximization 사용- Maximization step 에서 Viterbi 알고리즘을 사용

 

wordpiece는 우도를 greedy 한 방식으로 향상시킨다.

 

 

단어정규화

 

단어들을 정규화된 형식으로 표현한다.U.S.A USA US uhhuh uh-huhFed fedam is be are다른 표현이지만 같은 뜻을 지니고 있는 단어들이다.

 

검색엔진에서 문서들을 추출할 때 유용하다.

 

 

Case Folding

 

모든 문자를 소문자로 만든다.- 일반화를 위해서 유용하다- 정보검색, 음성인식에서 유용하다

 

하지만 감성분석과 같은 문서 분류 문제에서는 대소문자 구분이 유용하다.US 미국, us 우리의

 

 

Lemmatization

 

어근을 사용해서 표현한다.am are is -> becar car's cars cars' -> car

 

He is reading detective storiesHe be read detective story

 

 

 

 

최근에는 단어정규화를 무조건 하는 추세가 아니다.단어정규화가 필요한 이유는 단어사이의 유사성을 발견하고 같은 의미를 가진 여러 형태의 단어를 하나의 단어로 대응시키는 것이다.만약 단어를 Voca로 정의된 공간인 고차원 희소벡터가 아닌 저차원 밀집 벡터로 대응시킨다면 정규화의 필요성이 낮아진다.

 

단어 임베딩은 이미 단어 사이의 유사성을 알고 있는 벡터이기 때문에 정규화가 필요 없어진다.car [0.13, 0.52, 0.01]cars [0.15, 0.49, 0.02]

 

 

728x90
카테고리
작성일
2022. 3. 15. 06:50
작성자
sailorCat
728x90
from pyspark2pmml import PMMLBuilder

pmmlBuilder = PMMLBuilder(spark.sparkContext, train, cvModel)
pmmlBuilder.buildFile("Titanic.pmml")

## 빌딩 예제

from pypmml import Model

model = Model.load("Titanic.pmml")
model.predict(df)

## 로딩, 호출 예제

 

 

범용 머신러닝 모델 파일 포멧

Scikit-Learn, PyTorch, Tensorflow, Spark MLlib 등의 다양한 머신러닝 개발 플랫폼의 환경에서 통용되는 머신러닝 파일 포맷이 있다.

PMML과 MLeap 등이 있다.

 

이 공통 파일 포맷을 이용하면 어디서나 호환이 가능하다.

하지만 공통 파일 포맷이 지원해주는 기능이 미약하기 때문에 복잡한 모델에서는 지원이 복잡하다.

 

PMML 

Predictive Model Markup Language

ML 모델을 마크업 언어로 표현하는 XML 언어

간단한 입력 데이터 전처리와 후처리도 지원하지만 제약사항이 많다.

 

Java 기반으로 PMML 엔진을 구현한다.

 

PySpark 에서는 pyspark2pmml을 사용하지만 내부적으로는 jpmml-sparkml이라는 자바 jar 파일을 사용한다.

 

 

PMML process

1. ML Pipeline을 PMML 파일로 저장한다

- pyspark2pmml 모듈을 설치

- pyspark2pmml.PMMLBuilder로 ML Pipeline을 PMML 파일로 저장

 

2. PMML 파일을 기반으로 모델 예측 API로 런치한다

- openscoring 프레임 워크

- AWS SageMaker

- Flask + PyPMML

 

3. 이 API를 통해 예측 결과를 받는 클라이언트 코드를 작성한다

 

 

728x90
카테고리
작성일
2022. 3. 14. 19:32
작성자
sailorCat
728x90

Logistic Regression으로 모델을 훈련한 결과

 

반복횟수에 따라 값을 찾는다.

 

 

 

 

 

GBT로 모델학습을 진행한 결과

 

똑같은 코드로 하이퍼 파라미터 값들을 찾았다.

 

 

 

728x90
카테고리
작성일
2022. 3. 14. 15:47
작성자
sailorCat
728x90

ML 라이브러리의 모델 튜닝은 최적의 하이퍼 파라미터를 선택하는 것에서 시작한다.

하나씩 테스트 해보는 것과 다수를 동시에 테스트 하는 방법이 있다.

 

모델 선택에서 테스트 방법으로는 

교차검증 Cross Validation

홀드아웃 Train-Validation Split 

 

이 두가지 테스트는 보통 ML Pipeline과 함께 사용된다.

 

교차검증이 홀드아웃 테스트보다 오버피팅 문제가 감소하기 때문에 안정적이다.

 

Estimator 머신러닝 모델 혹은 ML Pipeline

Evaluator 머신러닝 모델의 성능

Parameter 훈련 반복 회수 등의 하이퍼 파라미터

- ParamGridBuilder을 사용해 ParamGrid 타입의 변수를 생성한다.

- 주로 트리 관련 알고리즘에서 깊이, 훈련횟수와 관련있다.

 

이 지표들을 통해 최종적으로 결과가 가장 좋은 모델을 리턴한다.

 

Evaluator

evaluate 함수

- 테스트셋의 결과가 들어있는 데이터 프레임, 파라미터가 인자로 제공된다.

 

머신러닝 알고리즘에 따라 다양한 Evaluator가 제공된다.

- RegressionEvaluator

- BinaryClassificationEvaluator (AUC: Area Under the Curve)

- MulticlassClassificationEvaluator

- MultilabelClassificationEvaluator

- RankingEvaluator

- LogisticRegression (probability 제공)

 

 

ML 모델 빌딩 프로세스

 

728x90
카테고리
작성일
2022. 3. 13. 21:41
작성자
sailorCat
728x90

728x90
카테고리
작성일
2022. 3. 13. 21:38
작성자
sailorCat
728x90

728x90
작성일
2022. 3. 11. 06:33
작성자
sailorCat
728x90

우선 세가지만 조사해봤다.

기능

비슷한 앱

데이터



감성일기
혐오단어 식별기




두 가지 다 괜찮아 보인다.

 

728x90