분류 전체보기 20

LLaMA

Abstract Token의 개수를 수조개로 늘림 파라미터의 개수는 7B(70억) 개로 줄었음 저작권 없는 오픈된 데이터셋 사용 다른모델과 비교하여 SOTA 달성 1 Introduction GPT, BERT등 많은 Large Language Model에서 파라미터 갯수를 놓여 → 성능을 높임 파라미터가 많다고 해서 무조건 좋은 모델은 아니라는 연구결과 있음 BEST성능을 내는 파라미터갯수를 찾는 것이 목표 Train 속도가 빨라 지는것은 아니지만 추론시간은 줄어드는 장점이 있음 그결과 7BG ~ 65B범위의 경쟁력있는 BEST모델을 찾음 이를 LLaMA라고 정의 LLaMA-13B 모델에서 GPT3를 능가(GPT3 파라미터 175B보다 약 10배이상 작음) SINGLE GPU에서 돌아 갈수 있기 때문에 연..

논문 2023.05.17

(keras) Timedistributed Layer

시계열 데이터를 LSTM 혹은 BILSTM으로 학습을 하고 최종 Output Layer가 many to many 일경우 마지막 층으로 Dense나 기타다른 층으로 연결하고 싶었다. 하지만 LSTM(BILSTM)은 출력층이 시퀀스 데이터이므로 Dense Layer를 그대로 사용하지 못한다. 그럴때 사용하는 레이어가 바로 Timedistributed Layer이다. (이 레이어가 특정 레이어를 시계열형식의 연속적인 형태로 만들어주는 기능을 하는것 같다.) 예시) 1234from tensorflow.keras.layers import * bilstm = Bidirectional(LSTM(100,return_sequences=True))(emb)tag = TimeDistributed(Dense(len(tag.k..

NLP TASK Feature 추출 방법

다양한 자연어처리 TASK에서는 문장 혹은 문서내의 feature(혹은 토큰화)를 어떻게 추출하는지에 따라 모델의 정확도가 달라진다. 오늘은 NLP Task에서 많이 사용되는 Feature 추출 방법에 대해 소개하고자 한다. 1. Ngram 딥러닝에서는 음절기반방식을 많이 사용됨 예시 문장) 나는 밥을 먹고 학교에 갔다. - 음절기반 Ngram ->음절단위로 N개의 쌍을 지어 feature를 추출하는 방법 unigram : ['나' '는' '밥' '을' '먹' '고' '학' '교' '에' '갔' '다' '.'] bigram : ['나는' '는[공백]' '[공백]밥' '밥을' '을[공백]' '[공백]먹' '먹고' '고[공백]' '[공백]고' '고[공백]' '고학' .......] trigram : [ '나..

프로그래밍/NLP 2021.12.21

ELECTRA: PRE-TRAINING TEXT ENCODERS AS DISCRIMINATORS RATHER THAN GENERATORS

ELECTRA - GAN 과 유사하게 Generator와 Discriminator로 구성됨 - Generator : 원본 문장에서 일부 단어를 [MASK] 태그로 변환후 [MASK] 토크의 단어를 예측하여 다른 토큰으로 변환 하는 모델 - Discriminator : Generator가 생성한 문장의 각단어들의 토큰들이 치환(replaced)된 데이터인지 원본(original) 데이터인지 식별, FineTuning 시 Discriminator 사용 - Generator Loss function : 마스크 된 토큰을 특정토큰으로 치환시킬 확률 - Discriminator Loss function : 해당토큰이 치환된 토큰인지 아닌지 판별하는 Classification 확률 - Generator and Di..

논문 2021.12.21

NLP TASK의 평가 방법

RECALL(재현율) 실제로 True인 데이터를 모델이 True라고 인식한 데이터의 수 PRECISION True로 예측한 데이터 중 실제로 True인 데이터이 수 F1-SCORE F1 score는 precision 과 recall의 조화평균 아래블로그 기반한내용 https://eunsukimme.github.io/ml/2019/10/21/Accuracy-Recall-Precision-F1-score/ Accuracy(정확도), Recall(재현율), Precision(정밀도), 그리고 F1 Score ML 모델의 성능을 측정하는 네 가지 지표에 대해서 알아봅시다 eunsukimme.github.io BLEU Score 기계 번역 결과와 사람이 직접 번역한 결과가 얼마나 유사한지 비교하여 번역에 대한 성..

프로그래밍/NLP 2021.06.24

언어모델의 평가방법

현재 딥러닝 관련 언어모델에는 다양한 언어 모델들이 있다 ( BERT, GPT, BART, ELMO,...) 그래서 이러한 언어모델들에 대한 다양한 평가 방법을 소개하고자 한다. PPL PPL은 perplexity의 약자(?) 이며 ppl의 우리나라말은 헷갈리는과 유사한 의미를 갖는다고 한다. 굳이 직역하자면 헷갈리는정도라고 한다. ppl 낮아야지 좋은점수이며 높을수록 안좋은 점수라고 한다. PPL을 최소화한다는 것은 문장의 확률을 최대화하는 것과 같다고 한다. 보다 자세한 설명은 아래의 링크로 https://wikidocs.net/21697

프로그래밍/NLP 2021.06.24

NEURAL MACHINE TRANSLATIONBY JOINTLY LEARNING TO ALIGN AND TRANSLATE

기존 Encoder Decoder의 문제점 고정된 길이의 Sentence의 hidden state를 context-vector 사용함으로 인해 Sentence의 길이가 길어질수록 제대로 예측하지 못하는 문제 발생 논문에서 제안하는바 -> 고정된 길이의 state를 하나의 context-vector로 압축하여 사용 기존 Encoder Decoder 구조 Proposed Approach(Alignment) 식(2)에서 si는 time i에서의 RNN hidden state이다. Encoder-Decoder와의 차이는 context-vector가 중복되지 않는것이다. context vector ci는 입력 문장과 매핑된 encoder의 annotation(hidden state)에 의존적이다. 각 annota..

논문 2021.05.13

(keras) Big Train data 학습

딥러닝을 이용해 모델을 학습시키기 위해서는 학습데이터의 양이 많으면 좋다 하지만 이러한 많은양의 데이터를 학습시키기 위해서 데이터 전체를 메모리에 Load하면 메모리가 부족한 현상이 발생할수 있다. 이러한 문제를 해결하기위해서는 학습시 epoch 전체의 데이터를 전달하는게 아니라 batch 사이즈마다 데이터를 나누어서 모델에게 데이터를 전달하여 학습시키는 방법이 있다. 이러한 방법중에는 Sequence 클래스를 상속하는 방법도 있지만 간단하게 할 수 있는 방법도 있어서 기록을 남긴다. 1 2 3 4 5 6 data_size = 90000 batch_size = 100 def train(batch): yield X[:batch], y[:batch] #example model.fit(train(batch_s..

(keras) tensorflow-addons CRF 사용법

NER 코드를 짜던중 CRF를 사용하여야하는데 keras-contrib 라는 라이브러리에 CRF가 있는것 같다. 하지만 해당라이브러리는 tensorflow 1.14버전에서 정상 작동하는것 같다. 현재 tensorflow 버전은 2.4 까지 나왔는데 말이다..... 그러던중 tensorflow-addons 에 CRF가 있는 것을 확인하였다. 하지만 설치를 하였지만 loss function을 어떻게 사용하는지 한참을 찾던중 (API 문서에는 나와있지 않았음...) tensorflow-addons github에 test 코드가 있는 것을 확인 하였다. 그렇게 테스트코드를 참고하여서 작성하니 정상 작동을 하였다. 잊어 버리지 않게 링크를 올려둔다. github.com/tensorflow/addons/blob/m..

(keras) Input Layer Split

텍스트 데이터를 처리하다가 시퀀스데이터를 Input Layer를 토큰단위로 나누어서 처리할 일이 필요하였다. 물론 에초에 Input Layer를 여러개 할수도 있지만 필요한 Input Layer가 200개나 되어서 별로 효율적이지 못하였다. 그래서 Tensorflow의 tf.split을 사용할수 없을까 하다가 Lambda(람다) 레이어란것을 찾을수 있었다. 람다 레이어란 레이어로 부터 받은 데이터를 사용자가 정의한 함수를 이용해 레이어단 에서 데이터를 처리(특정한 작업)를 할수 있는 것 같다. 내가 필요한 것은 tf.split 이므로, 내가 사용한 방법은 아래와 같다. 1 2 3 4 5 i2 = Input(shape=(200,10), name="x2") pos = Embedding(len(pos_set...