ratsgo / embedding

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

WordEmbeddingTuner.make_input() 버그 #53

Closed hccho2 closed 4 years ago

hccho2 commented 4 years ago

page 258-259

WordEmbeddingTuner() --> make_input()에서 PAD의 token id를 만들 때.

if len(tokens) < max_token_length:
    token_ids.extend([len(self.vocab) - 1] * (max_token_length - tokens_length))

이렇게 되어 있는데, self.vocab가 [UNK],[PAD]를 포함하지 않고 있기 때문에,

if len(tokens) < max_token_length:
    token_ids.extend([len(self.vocab) + 1] * (max_token_length - tokens_length))

이렇게 되어야 될 것 같습니다. 확인 부탁드립니다.

page 258에서 ID(len(self.vocab) -1)를 붙혀 해당길이로 맞춰준다. --> ID(len(self.vocab) +1)를 붙혀 해당길이로 맞춰준다.

ratsgo commented 4 years ago

@hccho2 님 오류 제보 정말 감사드립니다. 말씀하신 것이 정확합니다. 다음과 같습니다.

그런데 기존 코드에서는 make_input이 호출될 때마다 self.vocab의 길이(len)를 확인하는 비효율이 발생하므로, 실제 실행 코드에서는 unk id와 pad id를 클래스 변수로 빼두는 쪽으로 개선하였습니다. (전자/종이)책에는 코드의 핵심을 보는게 더 중요하므로 token_ids.extend([len(self.vocab) + 1] * (max_token_length - tokens_length)) 이대로 표시를 해두었습니다. 한편 attention을 포함해 해당 버그까지 반영한 점수는 51번 이슈에 공유드리겠습니다. 관심 가져주셔서 진심으로 감사드립니다.