Code Monkey home page Code Monkey logo

tensorflow-ml-nlp-tf2's Introduction

텐서플로우와 머신러닝으로 시작하는 자연어처리 첫번째 책은 아래 링크를 참고해주시기 바랍니다.

첫번째 책 링크: https://github.com/NLP-kr/tensorflow-ml-nlp

*공지: GPT2 모델은 더 이상 Dropbox에서 지원하지 않습니다. 모델 다운로드는 다음과 같이 받아주시기 바랍니다.

wget https://github.com/NLP-kr/tensorflow-ml-nlp-tf2/releases/download/v1.0/gpt_ckpt.zip -O gpt_ckpt.zip

NLPBOOK

텐서플로2와 머신러닝으로 시작하는 자연어처리(로지스틱회귀부터 BERT와 GPT3까지)

소개 (Introduction)

책에 수록된 자연어 처리 예제들을 모아놓은 저장소입니다.

본 저장소는 텐서플로우와 머신러닝으로 시작하는 자연어처리 책과 같이 활용하여 공부하시면 더욱 도움이 되실겁니다.

설치방법 (Environments)

해당 자연어처리 예제에 대한 다양한 개발 환경 지원을 위해 도커(Docker) 가이드를 추가하였습니다.

향후 예제에 대한 실습 패키지 업데이트 변화에 대응하기 위해 도커 사용을 권장 합니다.

Jupyter Docker 실행 (권장)

Docker 환경 사용시 19.03 이후 버전을 사용하길 권장합니다.

  • bash build_jupyter_for_cpu.sh 또는 bash build_jupyter_for_gpu.sh를 실행하면 docker image을 생성합니다.
  • bash exec_jupyter_for_cpu.sh 또는 bash exec_jupyter_for_gpu.sh를 실행하면 docker환경에서 jupyter가 실행됩니다.
  • jupyter 실행 포트번호는 8889 이므로 해당 포트번호에 대해서 사용이 가능해야 합니다.

아나콘다 설치

아나콘다 설치 파일을 못찾으셨다면 다음 링크에서 다음 버전을 찾아 다운받으세요.

https://repo.anaconda.com/archive
# windows 권장 버전: Anaconda3-5.3.0-Windows-x86_64.exe
# linux 권장 버전: Anaconda3-5.3.0-Linux-x86_64.sh
# MacOS 권장 버전: Anaconda3-5.3.0-MacOSX-x86_64.pkg
# 해당 버전을 받지 않아도 환경 구성을 하는데 큰 문제는 없습니다.
  • 아나콘다 파이썬 가상 환경 구성
conda create -n {사용할 환경 이름} python=3.6
conda activate {사용할 환경 이름} # 경우에 따라 동작이 안될 수 있습니다. 아래의 명령어를 입력해보세요.
# source activate {사용할 환경 이름} 
pip install -r requirements.txt

만약 설치가 정상적으로 진행되지 않으신다면 python 3.6을 설치하여 진행해주시기 바랍니다.

conda install python=3.6

목차 (Table of Contents)

준비 단계 - 자연어 처리에 대한 배경과 개발에 대한 준비를 위한 챕터입니다.

  1. 들어가며
  2. 자연어 처리 개발 준비
  3. 자연어 처리 개요

자연어 처리 기본 - 자연어 처리에 기본적인 모델에 대한 연습 챕터입니다.

  1. 텍스트 분류
  2. 텍스트 유사도

자연어 처리 심화 - 챗봇 모델을 통해 보다 심화된 자연어 처리에 대한 연습 챕터입니다.

  1. 챗봇 만들기
  2. 미세 조정 학습
  3. GPT3

Colab 실습

Colab 실습은 7, 8장에 한하여 별도 저장소를 공개하였습니다.

문의사항 (Inquiries)

Pull Request는 언제든 환영입니다. 문제나 버그, 혹은 궁금한 사항이 있으면 이슈에 글을 남겨주세요.

**이슈를 확인하기 전에 Wiki에 도큐먼트 먼저 보시고 이슈에 글을 남겨주세요!

저자 (Authors)

ChangWookJun / @changwookjun ([email protected])
Taekyoon / @taekyoon ([email protected])
JungHyun Cho / @JungHyunCho ([email protected])
Ryan S. Shin / @aiscientist ([email protected])

tensorflow-ml-nlp-tf2's People

Contributors

changwookjun avatar rainmaker712 avatar reniew avatar taekyoon avatar ychoi-kr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tensorflow-ml-nlp-tf2's Issues

Ch4 텍스트 분류 오타

P179
test_data_vecs = get_dataset(sentences, model, num_features
train_data_vecs = get_dataset(sentences, model, num_features 이 되어야 하는게 아닌지 조심스럽게 추측해 봅니다.

P181

for review in test_data: 
    test_sentences.append(review.split())

부분이

for review in test_review:    
    test_sentences.append(review.split())

가 되어야 할것 같습니다.

2장 27페이지 합성곱 신경망 ValueError

실습 환경

  • macOS BigSur 11.2
  • conda 가상 환경
  • python version 3.6.12
  • tensorflow version 2.2.0
  • jupyter version 1.0.0
  • 기타 : 1장 14페이지에 기재된 requirement 라이브러리 항목 모두 설치

code

  • 27페이지 Conv1D
import tensorflow as tf 
INPUT_SIZE=(1, 28, 28)

inputs = tf.keras.Input(shape=INPUT_SIZE)
conv=tf.keras.layers.Conv1D(
        filters=10,
        kernel_size=3,
        padding='same',
        activation=tf.nn.relu)(inputs)

error massage

ValueError: Input 0 of layer conv1d is incompatible with the layer: expected ndim=3, found ndim=4. Full shape received: [None, 1, 28, 28]

etc.

  • 코랩에서 동일한 코드 실행하면 오류 없음.
  • tensorflow version 2.4.0-rc0 버전에서 실행하면 오류 없음.

tensorflow2.6.0 호환성

제 환경은 ubuntu 20.04에 tensorflow 2.6.0을 쓰고 있는데 책에서는 2.2.0을 써서 cuda 버전이 맞지 않아 혹여나 2.6.0 버전을 쓰고 싶으신 분들을 위해 환경을 적어놓습니다.
requirements.txt

chat6 챗봇 seq2seq 모델 학습할때 에러

chat6 챗봇 seq2seq 파트에서 실습을 따라하는 도중에(model.fit)
아래 그림과 같은 Invalid argument..오류가 발생합니다.

index_inputs, index_outputs, index_targets 모두 shape해서 출력해보고 len해서 출력해봤는데 서로 같은 모양을 가지고 있습니다.

대체 무엇이 문제인지 몰라서... 질문 드립니다.
211

chap 6 챗봇 seq2seq 모델 학습후. load_weights() 안돼서 질문드립니다.

에폭 30로 트레이닝 후에, 저장된 weights hdf5로 다시 불러와서 테스트해볼려고하는데 아래 그림과 같은 에러가 발생합니다.
Screenshot from 2020-11-16 10-39-27

아래는 실행한 소스코드입니다.
계속 질문해서 죄송합니다 ㅠㅠ.

import tensorflow as tf
import numpy as np
import os

from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
import matplotlib.pyplot as plt

from preprocess import *

def plot_grphs(history, string):
    plt.plot(history.history[string])
    plt.plot(history.history['val_'+string],'')
    plt.xlabel("Epochs")
    plt.ylabel(string)
    plt.legend([string, 'val_'+string])
    plt.show()


DATA_IN_PATH = './t-data/'
DATA_OUT_PATH = './data_out/'
TRAIN_INPUTS = 'train_inputs.npy'
TRAIN_OUTPUTS = 'train_outputs.npy'
TRAIN_TARGETS = 'train_targets.npy'
DATA_CONFIGS = 'data_configs.json'



SEED_NUM = 1234
tf.compat.v1.random.set_random_seed(SEED_NUM)

index_inputs = np.load(open(DATA_IN_PATH + TRAIN_INPUTS, 'rb'))
index_outputs = np.load(open(DATA_IN_PATH + TRAIN_OUTPUTS , 'rb'))
index_targets = np.load(open(DATA_IN_PATH + TRAIN_TARGETS , 'rb'))
prepro_configs = json.load(open(DATA_IN_PATH + DATA_CONFIGS, 'r'))

print(np.shape(index_inputs),  np.shape(index_outputs), np.shape(index_targets))



MODEL_NAME = 'kko_seq2seq_kor'
BATCH_SIZE = 2
MAX_SEQUENCE = 25
EPOCH = 30
UNITS = 1024
EMBEDDING_DIM = 256
VALIDATION_SPLIT = 0.1


char2idx = prepro_configs['char2idx']
idx2char = prepro_configs['idx2char']
std_index = prepro_configs['std_symbol']
end_index = prepro_configs['end_symbol']
vocab_size = prepro_configs['vocab_size']


class Encoder(tf.keras.layers.Layer):
    def __init__(self, vocab_size, embedding_dim, enc_units, batch_sz):
        super(Encoder, self).__init__()
        self.batch_sz = batch_sz
        self.enc_units = enc_units
        self.vocab_size = vocab_size 
        self.embedding_dim = embedding_dim          
        
        self.embedding = tf.keras.layers.Embedding(self.vocab_size, self.embedding_dim)
        self.gru = tf.keras.layers.GRU(self.enc_units,
                                       return_sequences=True,
                                       return_state=True,
                                       recurrent_initializer='glorot_uniform')

    def call(self, x, hidden):
        x = self.embedding(x)
        output, state = self.gru(x, initial_state = hidden)
        return output, state

    def initialize_hidden_state(self, inp):
        return tf.zeros((tf.shape(inp)[0], self.enc_units))



class BahdanauAttention(tf.keras.layers.Layer):
    def __init__(self, units):
        super(BahdanauAttention, self).__init__()
        self.W1 = tf.keras.layers.Dense(units)
        self.W2 = tf.keras.layers.Dense(units)
        self.V = tf.keras.layers.Dense(1)

    def call(self, query, values):
        hidden_with_time_axis = tf.expand_dims(query, 1)

        score = self.V(tf.nn.tanh(
            self.W1(values) + self.W2(hidden_with_time_axis)))

        attention_weights = tf.nn.softmax(score, axis=1)

        context_vector = attention_weights * values
        context_vector = tf.reduce_sum(context_vector, axis=1)

        return context_vector, attention_weights


class Decoder(tf.keras.layers.Layer):
    def __init__(self, vocab_size, embedding_dim, dec_units, batch_sz):
        super(Decoder, self).__init__()
        
        self.batch_sz = batch_sz
        self.dec_units = dec_units
        self.vocab_size = vocab_size 
        self.embedding_dim = embedding_dim  
        
        self.embedding = tf.keras.layers.Embedding(self.vocab_size, self.embedding_dim)
        self.gru = tf.keras.layers.GRU(self.dec_units,
                                       return_sequences=True,
                                       return_state=True,
                                       recurrent_initializer='glorot_uniform')
        self.fc = tf.keras.layers.Dense(self.vocab_size)

        self.attention = BahdanauAttention(self.dec_units)
        
    def call(self, x, hidden, enc_output):
        context_vector, attention_weights = self.attention(hidden, enc_output)

        x = self.embedding(x)

        x = tf.concat([tf.expand_dims(context_vector, 1), x], axis=-1)

        output, state = self.gru(x)
        output = tf.reshape(output, (-1, output.shape[2]))
            
        x = self.fc(output)
        
        return x, state, attention_weights


optimizer = tf.keras.optimizers.Adam()

loss_object = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True, reduction='none')

train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='accuracy')

def loss(real, pred):
    mask = tf.math.logical_not(tf.math.equal(real, 0))
    loss_ = loss_object(real, pred)
    mask = tf.cast(mask, dtype=loss_.dtype)
    loss_ *= mask
    return tf.reduce_mean(loss_)

def accuracy(real, pred):
    mask = tf.math.logical_not(tf.math.equal(real, 0))
    mask = tf.expand_dims(tf.cast(mask, dtype=pred.dtype), axis=-1)
    pred *= mask    
    acc = train_accuracy(real, pred)

    return tf.reduce_mean(acc)


class seq2seq(tf.keras.Model):
    def __init__(self, vocab_size, embedding_dim, enc_units, dec_units, batch_sz, end_token_idx=2):    
        super(seq2seq, self).__init__()
        self.end_token_idx = end_token_idx
        self.encoder = Encoder(vocab_size, embedding_dim, enc_units, batch_sz) 
        self.decoder = Decoder(vocab_size, embedding_dim, dec_units, batch_sz) 

    def call(self, x):
        inp, tar = x
        
        enc_hidden = self.encoder.initialize_hidden_state(inp)
        enc_output, enc_hidden = self.encoder(inp, enc_hidden)

        dec_hidden = enc_hidden

        predict_tokens = list()
        for t in range(0, tar.shape[1]):
            dec_input = tf.dtypes.cast(tf.expand_dims(tar[:, t], 1), tf.float32) 
            predictions, dec_hidden, _ = self.decoder(dec_input, dec_hidden, enc_output)
            predict_tokens.append(tf.dtypes.cast(predictions, tf.float32))   
        return tf.stack(predict_tokens, axis=1)
    
    def inference(self, x):
        inp  = x

        enc_hidden = self.encoder.initialize_hidden_state(inp)
        enc_output, enc_hidden = self.encoder(inp, enc_hidden)

        dec_hidden = enc_hidden
        
        dec_input = tf.expand_dims([char2idx[std_index]], 1)
        
        predict_tokens = list()
        for t in range(0, MAX_SEQUENCE):
            predictions, dec_hidden, _ = self.decoder(dec_input, dec_hidden, enc_output)
            predict_token = tf.argmax(predictions[0])
            
            if predict_token == self.end_token_idx:
                break
            
            predict_tokens.append(predict_token)
            dec_input = tf.dtypes.cast(tf.expand_dims([predict_token], 0), tf.float32)   
            
        return tf.stack(predict_tokens, axis=0).numpy()



model = seq2seq(vocab_size, EMBEDDING_DIM, UNITS, UNITS, BATCH_SIZE, char2idx[end_index])
model.compile(loss=loss, optimizer=tf.keras.optimizers.Adam(1e-3), metrics=[accuracy])


PATH = DATA_OUT_PATH + MODEL_NAME
if not(os.path.isdir(PATH)):
        os.makedirs(os.path.join(PATH))
        
checkpoint_path = DATA_OUT_PATH + MODEL_NAME + '/weights.h5'
    
cp_callback = ModelCheckpoint(checkpoint_path, monitor='val_accuracy', verbose=1, save_best_only=True, save_weights_only=True)

earlystop_callback = EarlyStopping(monitor='val_accuracy', min_delta=0.0001, patience=10)


# history = model.fit( [index_inputs, index_outputs] , index_targets,
#                     batch_size=BATCH_SIZE, epochs=EPOCH,
#                     validation_split=VALIDATION_SPLIT, callbacks=[earlystop_callback, cp_callback])


## TEST

SAVE_FILE_NM = "weights.h5"
model.load_weights(os.path.join(DATA_OUT_PATH, MODEL_NAME, SAVE_FILE_NM))
query = "  "

test_index_inputs, _ = enc_processing([query], char2idx)    
predict_tokens = model.inference(test_index_inputs)
print(predict_tokens)

print(' '.join([idx2char[str(t)] for t in predict_tokens]))

SparseCategorical Accuracy 사용 시 activation function 문의

안녕하세요.

텍스트 분류 모델 중에
비슷한 테스크(감정분류 (0/1)))를 푸는 텍스트 분류 모델을 만들때,

앞에 CNN, RNN 기반 모델들은 마지막 레이어에 activation function을 sigmoid로 따로 지정해주었는데,
뒤의 BERT, GPT2 기반 모델들은 마지막 레이어에 activation function을 따로 지정해주지 않아서 문의 드립니다.
뒤의 BERT, GPT2 기반 모델은 tf.keras.initializers.TruncatedNormal이 softmax의 역할을 해주는 거 맞나요?

소스 통일성을 위한 작업

아래 사항 통일성 위해 넣을지 뺄지 의견 수렴 필요 합니다.
if tf.test.is_gpu_available():
os.environ["CUDA_VISIBLE_DEVICES"]="0"

형태소 분석시 빈칸을 없애는 이유를 알고 싶습니다..

안녕하세요..

책의 282 page 상단의 코드에

morph_tokenized_sentences = [okt.morphs(s.replace(' ', '')) for s in sentences]

위와 같이 형태소 분리가 되어 있습니다.

그런데, 저 코드의 경우 형태소 분리의 결과는

['3', '박', '4일', '정도놀러가고싶다'] 가 됩니다.

코드에서 "s.replace(' ', '')" 과정 없이 형태소를 분리하면

['3', '박', '4일', '정도', '놀러', '가고', '싶다'] 가 됩니다.

그래서, 코드에서 "s.replace(' ', '')" 를 쓰신 이유가 무엇인지 궁금합니다...

7.2.1.bert_finetune_NSMC.ipynb에서 오류가 발생하는 부분이 있네요

9번 셀에서 훈련 데이터를 전처리할 때 원래대로 하면 다음과 같은 오류가 발생했습니다.
Truncation was not explicitely activated but max_length is provided a specific value, please use truncation=True to explicitely truncate examples to max length. Defaulting to 'only_first' truncation strategy. If you encode pairs of sequences (GLUE-style) with the tokenizer you may want to check this is the right behavior.
I know, this warning asks to provide truncation value.

8번 셀에서 tokenizer.encode_plus( )안에 truncation=True를 추가하니 원래대로 작동하네요

헛 근데 이렇게 하면 정확도(0.4965)가 거의 반토막 나네요 ㅜㅜ

BahdanauAttention 에 대해 질문이 있습니다.

책의 309~310 페이지에서 BahdanauAttention 클래스를 구현할때, values를 인코더 순환 신경망의 결괏값으로 하고 있습니다. 이것과 관련하여, 309페이지의 주석 논문(https://arxiv.org/pdf/1409.0473.pdf)에는 h_j 를 입력 문장의 annotation 이라고 하고 있습니다. 논문의 annotation 을 인코더 순환 신경망의 결괏값으로 하신 것인지 알고 싶습니다.

(다른 논문에서는 attention score 를 계산할때 모두 은닉값만 사용하는 것으로 알고 있습니다. 예를 들면 https://www.tensorflow.org/text/tutorials/nmt_with_attention 에서 사용한 논문 https://arxiv.org/pdf/1508.04025v5.pdf 에서 그렇습니다. 그래서 위와 같은 질문을 드립니다...)

konlpy Okt()

okt= Okt()를 할 때 오류가 납니다. 교재에 적힌대로 konlpy 설치 과정을 따랐습니다.
import konlpy 도 문제 없고 from konlpy.tag import Okt도 문제 없습니다만.
그 다음에 okt= Okt()를 하면 바로 오류가 나네요...
Okt 오류

설치하면서 꼬인건가 싶어서 가상환경 새로 구축하고 자바도 다시 싹 지우고 시작해봤습니다만 해결이 안됩니다.

##자바 버전은 아래와 같습니다.

(base) C:\Users\chanh>java -version
java version "1.8.0_281"
Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)

##설치한 JPype1버전은 아래와 같구요

JPype1-1.2.1-cp36-cp36m-win_amd64.whl

파이썬 버전은 Python 3.6.12 입니다.

자바와 JPype버전이 안 맞는걸까요

java


혹시 몰라 자바 32비트로 다운 받아서 다시 해봤습니다만
image

안 되는 것 같습니다.

05_텍스트 유사도 전처리 부분

책 253p의 중반에 '평가 데이터도 마찬가지로 전체 문장의 길이를 11로 맞춰서 전처리를 마무리했다.' 라고 돼 있는데
문장 길이 전처리는 11이 아니라 31이 아닌가요? 학습 데이터와 평가 데이터 모두 같은 문장길이 제한으로 두는 것으로 알고 있습니다.

깃허브에 올리신 코드를 보면 그 쪽에서도 31이라고 돼 있기도 하구요
In [40] 부분 입니다.

ch6 챗봇만들기

챗봇만들기 코드를 따라하면서 한가지 든 궁금점인데요
가중치를 저장하고나서 다른 주피터노트북에서 가중치를 갖고오고 싶은데
책에서의
model.load_weights(os.path.join(DATA_OUT_PATH, model_name, SAVE_FILE_NM))
위 코드를 사용하면
no model found in config file이라는 오류를 접하게 되고
모델 아키텍쳐를 따로 저장해야할 것 같아서
from keras.models import model_from_json

json_string = model.to_json()
위 코드를 사용하면 따로 에러코드 없이 에러가 발생합니다.
혹시 방법이 있으면 알려주실수 있을까요?
따로 코드를 첨부하지않은 이유는 모델 학습 후 바로 사용하는데에는 전혀 문제가 없었기 때문에 첨부하지 않았습니다.

2장에 2.2.sklearn.ipynb 파일에 TfidfVectorizer 코드 오류

코드 실행에 오류가 있는건 아니지만 해당 노트북에 TfidfVectorizer 설명 부분에

sentence = [text_data[3]] # ['점심 먹고 공부 해야지']
print(tfidf_vectorizer.transform(text_data).toarray())

이 부분의 print문의 text_data가 sentence로 바뀌어야 할 것 같네요 :-)

sentence = [text_data[3]] # ['점심 먹고 공부 해야지']
# text_data를  sentence로 수정
print(tfidf_vectorizer.transform(sentence).toarray())

seq2seq 챗봇관련 질문이 있습니다.

안녕하세요...

"텐서플로 2와 머신러닝으로 시작하는 자연어처리" 책을 보다가 이렇게 질문을 드리게 되었습니다. 양해 바랍니다..

seq2seq 로 만든 챗봇 예제(306 ~ 317 page) 관련 2가지 질문이 있습니다.

  1. 예제에서는 디코더 클래스의 call 함수가 반환하는 x 값이 predictions 값으로 되어 있습니다. 그런데 x 값은 self.fc = tf.keras.layers.Dense(self.vocab_size) 에서 활성화함수 없이 그대로 출력되고 있습니다. softmax 함수를 거치지 않고 그냥 출력값이 높은 단어 1개를 정답으로 선택하는 건가요? 부연 설명을 부탁 드립니다....

질문을 많이 드려 죄송합니다.. 제가 부족한 점이 많습니다....

고맙습니다...

4.1.7 CNN_Classification 실행시 kernel이 죽는 문제가 생깁니다

안녕하세요,

텍스트 분류 파트에서 영어 텍스트 분류 파트 중에 CNN 분류 모델 실습파일 실행 중에 주피터 노트북 kernel이 죽는 문제가 생깁니다.
The kernel appears to have died. It will restart automatically. model.fit하는 부분에서 이러한 메세지가 뜨고 kernel이 죽고 다시 시작되서 학습이 진행이 안됩니다. RNN 분류 실습할 때에는 이러한 문제없이 잘 돌아갔는데 CNN 분류 때 이러한 문제가 생기네요... 현재 사용하는 GPU는 NVIDIA GeForce RTX 3060입니다. Tensorflow 버젼은 2.9.1입니다. 실습 파일 그대로 다운받아서 실행해봤는데도 똑같은 문제가 생기네요...

감사합니다.

wordcloud version issue

wordcloud 설치 시 requirements 그대로 설치하시면 제대로 작동하지 않습니다. 정확히 어떤 버전들이 작동하는지는 테스트해보지 않았지만 제 경우
pip install wordcloud==1.8.0
으로 정상작동했습니다. 참고하세요.

Ch7 gpt2 문장생성

안녕하세요! gpt2를 사용하여 문장을 생성하는 듀토리얼(https://github.com/NLP-kr/tensorflow-ml-nlp-tf2/blob/master/7.PRETRAIN_METHOD/7.4.1.gpt2_finetune_LM.ipynb)을 똑같이 따라하고 있는데요

<학습전>

스크린샷 2020-11-03 오후 3 25 17
이번에 리드미에 올라온 것과 같이 gpt2 모델 다운로드도 변경하여 문장생성을 진행하였는데 greedy 방식으로는 제대로된 문장이 생성되지 않습니다.

<학습후>

스크린샷 2020-11-03 오후 3 19 32
위와 같이 깃헙에서 올리신 운수좋은 날 소설을 다운 받아 똑같은 방식으로 학습을 진행하였는데요 학습 진행후, greedy는 더욱 안되며 샘플링 방식 또한 제대로된 문장이 생성되지 않아 이슈란에 올려 봅니다. 코드는 깃허브에 있는 코드 그대로 진행했습니다
스크린샷 2020-11-03 오후 3 28 56

[6장 챗봇만들기] seqence to sequence model weights load

안녕하세요! 6장 챗봇만들기 실습코드를 사용하여 진행하다가 중간에 학습이 중단되어서 저장된 weights 파일을 로드해서 중단된 시점부터 재학습시키고자 하였습니다. 그런데 아래와 같은 오류로..어려움을 겪고 있습니다 ㅠㅠ 구글링을 했을 때, model.build() 를 통해 input_shape를 지정해줘야한다고 하는데 이를 어떻게 해야할지 모르겠어서요... 혹시 도움을 주실 수 있으실까요?

참고사항으로, 저의 사용 환경은 다음과 같습니다.

  • keras==2.6.0
  • tensorflow==2.5.0
  • python==3.6.13

image

Input layer 뉴런 개수에 관한 문의드립니다.

안녕하세요, 먼저 좋은 책을 발간해주셔서 감사합니다.

공부하다 입력층 뉴런개수에 대하여 질문이 들어서 남깁니다. (RNN TextClassification Chapter)
https://github.com/NLP-kr/tensorflow-ml-nlp-tf2/blob/master/4.TEXT_CLASSIFICATION/4.1.6%20RNN%20Classification.ipynb

  1. 임베딩의 디멘션은 100으로 설정되어 있습니다.
  2. LSTM 층에는 인풋레이어에는 150이 입력 뉴런개수로 설정되어 있습니다.

Q: 인풋레이어의 입력 뉴런 개수는 임베딩 차원(여기서는 100차원) 이하로 설정하여 진행하는 것으로 많은 레퍼런스들을 봤는데 입력층에 임베딩 차원보다 더 크게 설정해도 상관이 없는건가요?

Q: 임베딩 차원은 100, 인풋레이어 입력 뉴런 개수는 150이면 각 뉴런에 들어가는 인풋데이터가 어떻게 들어가는 건가요? 보통 x1, x2, x3, x4 ... x100 이렇게 들어가는데 현재 인풋레이어의 뉴런개수가 150이니까 50개가 비는건가요..?

답변 기다리겠습니다!

it takes too long time installing requirements.

pip install -r requirements.txt를 통해 필요한 파일을 받고 있습니다.
텍스트 파일에 나온 건 다 설치 한 것 같은데 이외의 다른 .whl 확장자 파일들을 이틀 정도 다운 중인데 정상적인 현상인지 여쭤보고 싶습니다.

7장 bert_finetune_NER 에서 해결이 안되는 오류가 뜨네요 ㅠㅠ

안녕하세요. 깃허브 이슈는 처음 써보네요.
덕분에 자연어 처리 공부를 잘 하고 있습니다.

다름이 아니라 7장 bert_finetune_NER에서 해결이 안되는 오류가 있네요.

create_inputs_targets() 함수를 실행하면

TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

The above exception was the direct cause of the following exception:

ValueError                                Traceback (most recent call last)
<ipython-input-32-46fb3730d3cc> in <module>
     32     return inputs, train_label_list
     33 
---> 34 train_inputs, train_labels = create_inputs_targets(train_ner_df)
     35 test_inputs, test_labels = create_inputs_targets(test_ner_df)

<ipython-input-32-46fb3730d3cc> in create_inputs_targets(df)
     24         label_list.append(convert_label_id)
     25 
---> 26     train_input_ids = np.array(input_ids, dtype=int)
     27     train_attention_masks = np.array(attention_masks, dtype=int)
     28     train_token_type_ids = np.array(token_type_ids, dtype=int)

ValueError: setting an array element with a sequence.

위와 같은 오류가 뜹니다.

for문을 탈출하고 나서도 print(input_ids)하면 list형으로 인덱스값까지 예쁘게 나오는데 왜 저런 오류가 뜨는걸까요...??

알 수가 없네요 ㅠㅠ

오타

100 page
from bs4 import Beautiful Soup > from bs4 import BeautifulSoup
로 모듈 import할 때 BeutifulSoup에 띄어쓰기가 되어 있어 에러가 납니다.
이 이후로 BeautifulSoup를 import할 때 모두 띄어쓰기가 있습니다.

173 page
testDataVecs = vectorizer.transform(test['review']) > testDataVecs = vectorizer.transform(test_data['review'])
test가 test_data로 수정되어야 할 것 같습니다.

quora-question-pairs-( xg-boost 기법에 TF-IDF 적용방식에 대해서)

챕터 5의 텍스트 유사도에 관한 이슈입니다.
xg-boost 방식의 성능을 올리기 위해서 입력값 데이터를 TF-IDF 를 적용해서 다시 해봤습니다. 그런데 해당 캐글 데이터에 nan 데이터가 있었는지 TF-IDF 방식을 거치려고 하면 진행이 되질 않더군요. 그래서 해당 nan 데이터를 찾아 삭제 하고 학습을 거쳤습니다. 그런데 nan 데이터를 지웠어서 캐글 제출 데이터 형식에 맞지를 않습니다. 제가 과정을 잘못 진행한 것일까요 실제로 데이터에 문제가 있는게 맞을까요.
https://github.com/Ychanho/Machine-Learning-Deep-Learning.../tree/main/quora-question-pairs
링크는 제가 학습을 진행한 코드 입니다. nan 데이터 때문에 진행이 안 됐을 때 데이터를 처리하는 부분은 주석처리로 바꿔져 있습니다. 제가 접근을 잘못 한 것이 있다면 가르쳐주시면 감사하겠습니다.

링크에 올려진 대로 학습을 진행하면 오류가 뜨고 주석 처리된 nan데이터 제거 부분 주석처리 없애고 학습시키면 학습이 됩니다.

requirements.txt 설치하려고 하니 certifi에서 계속 걸려있네요

파이썬 초보임을 감안해주시면 감사하겠습니다
pip install -r requirements.txt로 설치 시도를 했는데 certifi가 계속 호환되는 버전을 찾아서 과거로 과거로만 갑니다.

INFO: pip is looking at multiple versions of certifi to determine which version is compatible with other requirements. This could take a while.
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking

벌써 버전을 10개쯤 더듬어서 2018년까지 가 있는데 정상인가요? 계속 두면 되는 게 맞는지 여쭤봅니다.
가상환경 새로 만들어서 python=3.6으로 깨끗한 상태에서 설치 시도 중입니다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.