-
Notifications
You must be signed in to change notification settings - Fork 0
Weekly Report #2
- 기계번역 흐름에 대한 파이프라인이 kh-kim님이 정리해 놓으신 여기에 잘 정리 되어 있다.
-
위 사진의 4. 미니배치 구성에서 배치 내 문장 길이를 통일해주는 것이 시간을 최소화할 수 있는 방법이다. (예) 단어 개수가 5인 문장 & 단어 개수가 70인 문장이 같은 미니배치에 포함되면, 단어 개수가 5인 것은 65번의 time step을 더 돌게 되어 비효율적.
-
데이터를 통해 학습을 진행할 때, Encoder의 RNN에는 하나의 미니 배치가 삽입됨. 이 때, 하나의 미니 배치 내에 길이의 차이가 많이 나는 문장이 동시에 존재할 경우 time-step이 낭비될 수 있음. 하나의 layer에 존재하는 단일의 RNN은 여러 번의 time-step을 진행하므로 이와 같은 현상이 나타날 수 있음.
-
그럼 1 epoch 이 끝난 후 데이터를 랜덤으로 shuffle 해 미니배치를 구성할 때, 문장 길이에 제한을 두고 비슷한 길이의 문장끼리 shuffle 해야 하는 걸까? (예) 길이 4~5인 것들 안에서 shuffle 해야되는걸까? 이 부분 더 공부해보기.
-
Q. data_loader부분에서 BucketIterator함수의 인자 중 "sort_within_batch = True"가 있는데, 배치 내에서 정렬은 어떤 의미와 효과가 있는가?
-
A. sort_within_batch를 해주었기 때문에 두 번째 tensor가 길이의 순서대로 나왔음을 알 수 있다. ex) tensor([8, 8, 8, 7, 7, 7, 6, 1]))
-
padding을 처음에 1로 설정해주었기 때문에 아래와 같이 길이를 맞춰주기 위해 src와 tgt 각각의 긴 문장에 대해서 1로 채워졌음을 알 수 있다.
- MeCab을 이용해 조사를 제거하여 vocabulary 사전 구축
- 구축한 사전을 이용해 sentencepiece 적용하여 단어를 분절하였다.
- 고민해 볼 것!
- vocab 사전 구축할 때 조사만 제거했는데, 사전 구축할 때 또 삭제할 형태소가 있을까?
- vocabulary size 도 잘 정해주어야 할 듯. 너무 많아도 오버피팅 날 수 있을 것 같다.
sentencepiece 사용하여 분절.
- 김기현님의 seq2seq 코드 공부.
- embedding 어떻게 이루어지는지
- nn.embedding(input size, dim_size) 사용할 듯.



- Embedding Size Rule
- nn.embedding의 두 번째 인수(embedding_dim(=word_vec_dim))
- 여기에 자세히 설명되어있음.
- number_of_categories = vocabulary size
- 왜 1/4승?
- 추후에 고려하면 좋을 것 같은 방법
: Gluon으로 만나는 영한기계번역_전희원.pdf에 나오는 영어-한국어를 함께 쌍을 이루어 학습을 시키는 방법 (아래 참고)
- embedding에 관한 내용 더 공부해오기


