ratsgo / embedding

한국어 임베딩 (Sentence Embeddings Using Korean Corpora)
https://ratsgo.github.io/embedding
MIT License
455 stars 130 forks source link

오타 제보 및 기타 궁금증 문의 #44

Closed SonHyeSeon closed 4 years ago

SonHyeSeon commented 4 years ago

안녕하세요

이해하기 쉽게 책을 내주셔서 공부하던 중 발견한 오타들을 제보하고 몇가지 궁금증을 문의하려고 합니다.

자잘한 오타의 경우 나름대로 수정하여 이해하고 공부하다가 몇가지 질문할 것들이 생겨 질문하는 김에 정리하여 제보하였습니다. 정리도 잘 안되고 두서없는 많은 내용을 문의드려 불쾌하게 해드렸다면 죄송합니다ㅜㅜ

ratsgo commented 4 years ago

@SonHyeSeon 님! 불쾌하다니요! 이렇게까지 꼼꼼하게 읽어주셔서 감사할 따름입니다. 말씀주신 질문들을 차근차근 이 이슈 통해 답변 드리겠습니다.

ratsgo commented 4 years ago

@SonHyeSeon 님, 답변과 관련해 몇 가지 여쭤볼 게 있는데요. 제 메일로 연락 주시면 감사하겠습니다. @SonHyeSeon 님 메일 주소를 이 이슈에 남겨주셔도 됩니다.

SonHyeSeon commented 4 years ago

@ratsgo님 제 메일 주소 남겨드리겠습니다!

ratsgo commented 4 years ago

먼저 말씀드릴 수 있는 것부터 순서대로 답 드리겠습니다.

ratsgo commented 4 years ago
ratsgo commented 4 years ago
ratsgo commented 4 years ago
ratsgo commented 4 years ago
ratsgo commented 4 years ago
ratsgo commented 4 years ago
ratsgo commented 4 years ago
ratsgo commented 4 years ago
ratsgo commented 4 years ago
ratsgo commented 4 years ago
ratsgo commented 4 years ago
ratsgo commented 4 years ago
ratsgo commented 4 years ago
ratsgo commented 4 years ago
스크린샷 2019-11-28 오전 11 17 32
ratsgo commented 4 years ago
ratsgo commented 4 years ago
스크린샷 2019-11-28 오전 11 24 44
ratsgo commented 4 years ago
ratsgo commented 4 years ago
ratsgo commented 4 years ago
ratsgo commented 4 years ago
ratsgo commented 4 years ago
ratsgo commented 4 years ago
ratsgo commented 4 years ago
ratsgo commented 4 years ago
def truncate_seq_pair(tokens_a, tokens_b, max_num_tokens, rng):
  """Truncates a pair of sequences to a maximum sequence length."""
  while True:
    total_length = len(tokens_a) + len(tokens_b)
    if total_length <= max_num_tokens:
      break

    trunc_tokens = tokens_a if len(tokens_a) > len(tokens_b) else tokens_b
    assert len(trunc_tokens) >= 1

    # We want to sometimes truncate from the front and sometimes from the
    # back to add more randomness and avoid biases.
    if rng.random() < 0.5:
      del trunc_tokens[0]
    else:
      trunc_tokens.pop()
ratsgo commented 4 years ago
SonHyeSeon commented 4 years ago
  • 6. p106의 코드 3-27에서 /notebooks/embedding 위치에서 python을 실행하면 from bert.tokenization이 아니라 from models.bert.tokenization으로 실행해야 제대로 되는 것 같습니다. 토크나이즈를 전체 자동화하는 스크립트엔 sys.path함수로 경로 확장하는 부분이 있는데, 코드 3-27에는 이게 없어서 해당 오류가 나는 것 같습니다. 역시 전자책과 정오표에 반영하겠습니다.
  1. from models.bert.tokenization import FullTokenizer

  2. import sys sys.path.append('models') from bert.tokenization import FullTokenizer

2번 처럼 sys.path 부분을 추가하니 정상적으로 작동하네요. 감사합니다!

SonHyeSeon commented 4 years ago
  • 19. p165, 코드 4-42, 'self.embeddings = defaultdict(list)' --> self.embeddings = defaultdict(list)) (오른쪽 끝에 우괄호 추가) 저는 다음 같이 이상없이 실행이 되는데요. 혹시 코드 다른 부분에 문제가 있는걸까요? 의견 부탁드립니다.
스크린샷 2019-11-28 오전 11 17 32

아 제가 직접 따라 치다가 p165 윗 부분의 'embedding_method)'를 보지 못하고 'self.embeddings=defaultdict(list)'부분이 p164 아래 self.load_word_embeddings 함수의 매개변수라고 착각한 부분이네요. 혼란을 드려 죄송합니다.

hccho2 commented 4 years ago
  • 13. p146, 코드 4-27의 model path 부분 "data/word-embeddings/glove/glove.txt" --> "data/word-embeddings/glove/glove.vecs.txt" 전자책과 정오표에 반영하겠습니다.

glove.txt가 맞지 않나요?

SonHyeSeon commented 4 years ago
  • 13. p146, 코드 4-27의 model path 부분 "data/word-embeddings/glove/glove.txt" --> "data/word-embeddings/glove/glove.vecs.txt" 전자책과 정오표에 반영하겠습니다.

glove.txt가 맞지 않나요?

아 다시 실행해보니 glove.txt가 맞는 것 같네요! 죄송합니다ㅜ

ratsgo commented 4 years ago

@hccho2 @SonHyeSeon 님 13번 질문과 관련해서 먼저 답해주셔서 감사합니다. 검토할 양이 많다 보니 제가 실수를 했네요. 다시 한번 감사드립니다.

ratsgo commented 4 years ago
model = Word2Vec(corpus, size=100, workers=4, sg=1, seed=0)

만일 책에 나와있는 유사도 수치들을 그대로 재현해보고 싶다면 이 책에서 제공하는 워드 임베딩들을 다운로드 받아서 평가코드(WordEmbeddingEvaluator)를 실행하면 됩니다. 다운로드는 다음과 같이 하면 됩니다. 이후 코드 4-5나 코드 4-9를 실행해 보세요.

git pull origin master
bash preprocess.sh dump-word-embeddings

임베딩 수행할 때마다 그 유사도 값이 달라지고, 랜덤 시드를 고정하면 같은 결과를 보장받는다는 내용 등은 전자책에도 반영해 두겠습니다.

ratsgo commented 4 years ago
p.117
네 번째 단어가 running인 데이터를 뽑아보면 그림 4-5와 같다.
> 
문장에서 네 번째 단어가 running인 3-gram을 뽑아보면 그림 4-5와 같다.
p.118
다섯 번째 단어가 in인 데이터를 뽑아보면 그림 4-6이 된다.
> 
문장에서 다섯 번째 단어가 in인 3-gram을 뽑아보면 그림 4-6이 된다.
SonHyeSeon commented 4 years ago
  • 13. p146, 코드 4-27의 model path 부분 "data/word-embeddings/glove/glove.txt" --> "data/word-embeddings/glove/glove.vecs.txt"

제가 책의 코드 순서대로 실행하다가 처음에 glove 학습 시엔 glove.txt라는 파일이 만들어지지 않아서 저렇게 질문했던 것 같습니다. 코드 뒤쪽에 프리트레인된 단어 임베딩을 다운받으면서 glove.txt 파일이 생성된게 아닐까 싶습니다.

학습 후 생성된 파일은 ch4 glove 이렇네요

ratsgo commented 4 years ago
스크린샷 2019-12-04 오후 9 10 48
ratsgo commented 4 years ago
mwmw7 commented 4 years ago
  1. 샘플 실행 시 --train_prefix 'data/sentence-embeddings/elmo/pretrain-ckpt/traindata/*' 하니되네요

root@2b80adaefe45:/notebooks/embedding# time python models/train_elmo.py --train_prefix 'data/sentence-embeddings/elmo/pretrain-ckpt/traindata/*' --vocab_file data/sentence-embeddings/elmo/pretrain-ckpt/elmo-vocab.txt --save_dir data/sentence-embeddings/elmo/pretrain-ckpt/ --n_gpus 2

하지만 트레이닝 중에 죽네요

Found 6 shards at data/sentence-embeddings/elmo/pretrain-ckpt/traindata/ Loading data from: data/sentence-embeddings/elmo/pretrain-ckpt/traindata/data_ab Loaded 100000 sentences. Finished loading Found 6 shards at data/sentence-embeddings/elmo/pretrain-ckpt/traindata/ Loading data from: data/sentence-embeddings/elmo/pretrain-ckpt/traindata/data_ae Loaded 100000 sentences. Finished loading WARNING:tensorflow:From /notebooks/embedding/models/bilm/training.py:217: calling squeeze (from tensorflow.python.ops.array_ops) with squeeze_dims is deprecated and will be removed in a future version. Instructions for updating: Use the axis argument instead USING SKIP CONNECTIONS WARNING:tensorflow:From /usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/nn_impl.py:1124: sparse_to_dense (from tensorflow.python.ops.sparse_ops) is deprecated and will be removed in a future version. Instructions for updating: Create a tf.sparse.SparseTensor and use tf.sparse.to_dense instead. WARNING:tensorflow:Variable += will be deprecated. Use variable.assign_add if you want assignment to the variable value or 'x = x + y' if you want a new python Tensor object. [['global_step:0', TensorShape([])], ['lm/CNN/W_cnn_0:0', TensorShape([Dimension(1), Dimension(1), Dimension(16), Dimension(32)])], ['lm/CNN/W_cnn_1:0', TensorShape([Dimension(1), Dimension(2), Dimension(16), Dimension(32)])], ['lm/CNN/W_cnn_2:0', TensorShape([Dimension(1), Dimension(3), Dimension(16), Dimension(64)])], ['lm/CNN/W_cnn_3:0', TensorShape([Dimension(1), Dimension(4), Dimension(16), Dimension(128)])], ['lm/CNN/W_cnn_4:0', TensorShape([Dimension(1), Dimension(5), Dimension(16), Dimension(256)])], ['lm/CNN/W_cnn_5:0', TensorShape([Dimension(1), Dimension(6), Dimension(16), Dimension(512)])], ['lm/CNN/W_cnn_6:0', TensorShape([Dimension(1), Dimension(7), Dimension(16), Dimension(1024)])], ['lm/CNN/b_cnn_0:0', TensorShape([Dimension(32)])], ['lm/CNN/b_cnn_1:0', TensorShape([Dimension(32)])], ['lm/CNN/b_cnn_2:0', TensorShape([Dimension(64)])], ['lm/CNN/b_cnn_3:0', TensorShape([Dimension(128)])], ['lm/CNN/b_cnn_4:0', TensorShape([Dimension(256)])], ['lm/CNN/b_cnn_5:0', TensorShape([Dimension(512)])], ['lm/CNN/b_cnn_6:0', TensorShape([Dimension(1024)])], ['lm/CNN_high_0/W_carry:0', TensorShape([Dimension(2048), Dimension(2048)])], ['lm/CNN_high_0/W_transform:0', TensorShape([Dimension(2048), Dimension(2048)])], ['lm/CNN_high_0/b_carry:0', TensorShape([Dimension(2048)])], ['lm/CNN_high_0/b_transform:0', TensorShape([Dimension(2048)])], ['lm/CNN_high_1/W_carry:0', TensorShape([Dimension(2048), Dimension(2048)])], ['lm/CNN_high_1/W_transform:0', TensorShape([Dimension(2048), Dimension(2048)])], ['lm/CNN_high_1/b_carry:0', TensorShape([Dimension(2048)])], ['lm/CNN_high_1/b_transform:0', TensorShape([Dimension(2048)])], ['lm/CNN_proj/W_proj:0', TensorShape([Dimension(2048), Dimension(128)])], ['lm/CNN_proj/b_proj:0', TensorShape([Dimension(128)])], ['lm/RNN_0/rnn/multi_rnn_cell/cell_0/lstm_cell/bias:0', TensorShape([Dimension(4096)])], ['lm/RNN_0/rnn/multi_rnn_cell/cell_0/lstm_cell/kernel:0', TensorShape([Dimension(256), Dimension(4096)])], ['lm/RNN_0/rnn/multi_rnn_cell/cell_0/lstm_cell/projection/kernel:0', TensorShape([Dimension(1024), Dimension(128)])], ['lm/RNN_0/rnn/multi_rnn_cell/cell_1/lstm_cell/bias:0', TensorShape([Dimension(4096)])], ['lm/RNN_0/rnn/multi_rnn_cell/cell_1/lstm_cell/kernel:0', TensorShape([Dimension(256), Dimension(4096)])], ['lm/RNN_0/rnn/multi_rnn_cell/cell_1/lstm_cell/projection/kernel:0', TensorShape([Dimension(1024), Dimension(128)])], ['lm/RNN_1/rnn/multi_rnn_cell/cell_0/lstm_cell/bias:0', TensorShape([Dimension(4096)])], ['lm/RNN_1/rnn/multi_rnn_cell/cell_0/lstm_cell/kernel:0', TensorShape([Dimension(256), Dimension(4096)])], ['lm/RNN_1/rnn/multi_rnn_cell/cell_0/lstm_cell/projection/kernel:0', TensorShape([Dimension(1024), Dimension(128)])], ['lm/RNN_1/rnn/multi_rnn_cell/cell_1/lstm_cell/bias:0', TensorShape([Dimension(4096)])], ['lm/RNN_1/rnn/multi_rnn_cell/cell_1/lstm_cell/kernel:0', TensorShape([Dimension(256), Dimension(4096)])], ['lm/RNN_1/rnn/multi_rnn_cell/cell_1/lstm_cell/projection/kernel:0', TensorShape([Dimension(1024), Dimension(128)])], ['lm/char_embed:0', TensorShape([Dimension(261), Dimension(16)])], ['lm/softmax/W:0', TensorShape([Dimension(100003), Dimension(128)])], ['lm/softmax/b:0', TensorShape([Dimension(100003)])], ['train_perplexity:0', TensorShape([])]] WARNING:tensorflow:From /usr/local/lib/python3.5/dist-packages/tensorflow/python/util/tf_should_use.py:189: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02. Instructions for updating: Use tf.global_variables_initializer instead. 2020-01-28 12:03:19.774738: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA 2020-01-28 12:03:19.898953: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:964] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero 2020-01-28 12:03:19.899387: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1432] Found device 0 with properties: name: GeForce RTX 2070 SUPER major: 7 minor: 5 memoryClockRate(GHz): 1.815 pciBusID: 0000:0d:00.0 totalMemory: 7.79GiB freeMemory: 6.55GiB 2020-01-28 12:03:19.972458: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:964] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero 2020-01-28 12:03:19.972950: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1432] Found device 1 with properties: name: GeForce GTX 1080 Ti major: 6 minor: 1 memoryClockRate(GHz): 1.683 pciBusID: 0000:0e:00.0 totalMemory: 10.92GiB freeMemory: 10.77GiB 2020-01-28 12:03:19.972975: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1511] Adding visible gpu devices: 0, 1 2020-01-28 12:03:20.482839: I tensorflow/core/common_runtime/gpu/gpu_device.cc:982] Device interconnect StreamExecutor with strength 1 edge matrix: 2020-01-28 12:03:20.482880: I tensorflow/core/common_runtime/gpu/gpu_device.cc:988] 0 1 2020-01-28 12:03:20.482888: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1001] 0: N N 2020-01-28 12:03:20.482893: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1001] 1: N N 2020-01-28 12:03:20.482999: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6293 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2070 SUPER, pci bus id: 0000:0d:00.0, compute capability: 7.5) 2020-01-28 12:03:20.483255: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:1 with 10419 MB memory) -> physical GPU (device: 1, name: GeForce GTX 1080 Ti, pci bus id: 0000:0e:00.0, compute capability: 6.1) WARNING:tensorflow:Issue encountered when serializing lstm_output_embeddings. Type is unsupported, or the types of the items don't match field type in CollectionDef. Note this is a warning and probably safe to ignore. 'list' object has no attribute 'name' Training for 10 epochs and 3002530 batches 세그멘테이션 오류 (core dumped)