Closed lovit closed 2 years ago
language model > pretrained LM
language model
소개 장 과 이 장에서 몇 단어에 대한 공백 및 영어 표현의 capital 이 혼용되고 있습니다. 언어모델 (Language Model)
이라는 표현과 미리 학습된 언어 모델 (pretrained language model)
의 공백과 영어 첫 글자의 대소문자 유무를 통일하면 좋을 듯 합니다. 이후 내용들에서도 병렬 표기 시 고유 명사가 아니면 소문자를 이용하는 듯하니 이 방향으로 통일하면 어떨까요language model > Transformers
attention(카페, cafe)
), 셀프 어텐션은 인코더나 디코더 각각의 입력 문장 내 단어 간 정보를 연결하기 위해 사용됩니다. (예: self-attention(어제, 카페)
)language model > Transformers > self attention
이 행렬은 태스크(예컨대 기계번역)를 가장 잘 수행하는 방향으로 학습 과정 중 업데이트됩니다.
라는 문장이 붙어 있습니다. 수식 8 이후에 한 번에 몰아서 네 종류의 행렬이 모두 학습 과정 중 업데이트 된다고 정리하여 표현하는게 어떨까요?여기에서 전치란 원래 행렬의 행(row)과 열(column)을 교환해 주는 걸 뜻합니다.
문장이 transpose 단어가 두번째로 등장할 때 나타나는데, 이를 transpose 가 처음 사용되는 문장 뒤로 이동하는게 어떨까요language model > Transformers > technics
feed forward
부분의 상세도는 다른 장들과 맞지 않아 보입니다. self-attention 은 Transformer 의 핵심적인 부분이기에 그나마 간단한 예시로라도 살펴보는 게 의미있지만, feed forward 부분을 굳이 디테일하게 예시 코드와 함께 볼 필요가 있을까 싶습니다. 이 레이어의 역할은 두 번의 벡터 차원 변환을 통하여 Transformer block output 을 정제한다 정도의 추상적인 표현으로 바꿔도 어떨까 싶습니다. 독자 입장에서는 책에 수식이 나오면 모두 알아야 할 것 같은 압박감이 들 수 있을 것 같아요. 거기에 활성함수와 같은 설명되지 않은 개념들이 계속 등장하니까요. 상세도의 수준은 이 장의 드롭아웃이나 옵티마이저의 수준에 맞추는게 어떨까요?language model > bert & gpt
language model > embedding tutorial
document classification > overview
SEP
token 의 역할도 "문장이 종결되었음을 표현하는 스페셜 토큰입니다"처럼 한 줄로 이야기해주면 좋을 듯 합니다.팁
부분에서 ‘이어진 문서인지 여부 맞추기’도 있습니다. 에서 문서가 아니라 문장이라 표현하는게 좋지 않을까요? (next sentence prediction) 으로 정식 pre-train task 이름도 적어주면 더 좋을 듯 합니다.named entity recognition
tokens
, labels
의 정보를 보여줄 때 padding 값을 모두 보여주고 있습니다. 종이책은 특히나 지면이 작은 만큼 [PAD] ... [PAD] 로 중략을 하는게 공통적으로 필요해 보입니다.if "PER" in label: label = "인명"
과 같은 코드 부분이 있는데, if label[2:] == "PER"
이 더 좋은 표현 방식 아닐까요? 어자피 python string slicing 에서는 길이가 2보다 짧은 str 에 대해서는 empty str 이 return 되니 오류도 나지 않습니다. document classification 부터 sentence generation 부분에서는 리뷰 입장에서 불편한 점과 독자 입장에서 공통적으로 불편한 점이 다음과 같을 거 같아요.
model = GPT2LMHeadModel.from_pretrained(args.pretrained_model_name)
처럼 한 줄에 적어줘도 좋을 듯 합니다. 아는 내용이라면 장황하지 않는 수준에서 여러 줄 보다 한줄이 더 가독성이 좋을 듯 합니다.
from transformers import GPT2LMHeadModel
from ratsnlp.nlpbook.generation import GenerationTask
model = GPT2LMHeadModel.from_pretrained(args.pretrained_model_name) task = GenerationTask(model, args) trainer = nlpbook.get_trainer(args) trainer.fit( task, train_dataloader=train_dataloader, val_dataloaders=val_dataloader, )
모든 피드백을 원고에 반영하였으므로 이슈 닫습니다. 귀한 코멘트 감사드립니다!
Home 부터 Preprocess 까지의 피드백입니다.
introduction
introduction > deep learning
introduction > transfer learning
introduction > pipeline
preprocess > byte pair encoding
aaabdaaadac
를Z
로 만들면 길이가 1인 데이터가 만들어지지 않느냐는 질문이 생길 수 있습니다. 또한 처음에aa
를 병합하는 것이 아니라aaa
를 병합하면 더 짧아지지 않느냐는 질문, 2번째 병합 시ab
가 아닌Za
를 병합하면 어떻게 되느냐 (tie) 의 질문이 나올 것 같습니다. 아래처럼 예시와 설명을 바꾸면 어떨까요?바이트 페어 인코딩은 데이터에 등장한 글자를 사전으로 구성하며, 연속된 두 글자를 한 글자로 병합합니다. 이 문자열에서는
aa
가 가장 많이 등장하였으므로 이를Z
로 병합(치환)하면 위의 문자열을 다음과 같이 압축할 수 있습니다.ZabdZabacabZ
이 문자열은 한번 더 압축 가능합니다. 살펴보니
ab
가 가장 많이 나타났으므로 이를Y
로 병합(치환)합니다. 다음과 같습니다.ZYdZYacYZ
BPE 수행 이전에는 원래 데이터를 표현하기 위한 사전은 길이가 1인 3개 글자(a, b, c)로 구성되었습니다. 수행 이후엔 그 크기가 5개(a, b, c, Z, Y)로 늘었습니다. 반면 데이터의 길이는 15개에서 9로 줄었습니다. 길이가 2인 글자를 추가하여 (+2 x 2) 길이를 -6 으로 줄였습니다. 이처럼 BPE는 사전 크기를 지나치게 늘리지 않으면서도 각 데이터를 효율적으로 압축할 수 있도록 합니다.
preprocessing > vocab tutorial
vocab tutorial
->Tutorial for training tokenizer
tokenization tutorial
소챕터에 모두 등장합니다. Introduction 을 꼭 참고하라고 강조하는 것으로 정리하는게 더 좋을 듯 합니다.워드피스
부분의 링크 주소가 깨졌습니다.preprocessing > tokenization tutorial
Tokenization tutorial
->Tutorial for tokenizing texts
preprocess > tokenization
소챕터와 다른 말투의 표현들이 자주 등장하여 따로 쓰인 챕터처럼 어투가 느껴집니다. 하나의 어투로 다듬어지면 더 좋을 듯 합니다.