inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

구현하며 배우는 Transformer

Positional Embedding을 적용한 BERT의 입력 Embedding 모듈 구현하기

bert encoding input_ids.size(1)에 대하여

62

임해빈

작성한 질문수 20

0

안녕하세요 강사님.

BERT 관련 강의를 매우 유익하게 듣고 있습니다.

 

Embedding 파트를 학습하던 중 궁금한 점이 생겨 질문드립니다.
BERTEmbeddings 클래스 구현에서 초기화 시 max_len이 주어지는데, forward 단계에서는 input_ids.size(1)을 사용해 position embedding의 인덱스를 다시 정의하는 과정이 있습니다.

 

제가 이해한 바로는 이후 tokenizer에서 설정한 max_length와 실제 입력 길이가 달라질 수 있기 때문에 이러한 처리가 필요한 것으로 보였습니다. 혹시 강사님께서 강의 시 빠른 실행을 위해 tokenizer의 max_length를 모델의 max_len과 다르게 설정하셨기 때문에 해당 코드를 넣으신 것인지 궁금합니다.

 

일반적인 학습 환경에서는 tokenizer의 max_length와 모델의 max_len을 동일하게 맞추는 것이 자연스러울 것 같은데, 혹시 제가 놓친 부분이 있다면 설명해주시면 감사하겠습니다.

딥러닝 pytorch encoder-decoder bert transformer

답변 2

0

권 철민

안녕하십니까,

좋은 질문이군요.

BERT 모델의 Position Embedding의 max_len은 동적으로 입력되는 문장들의 최대 sequence length와는 다를 수 있는 상황을 고려해야 했기에 forward()에서 seq_len = input_ids.size(1) 적용한 것입니다.

예를 들어 시나리오와 같이, 짧은 대화형의 문장들은 BertTokenizer 적용할 때 padding='max_length', max_length=200를 설정할 수도 있고, 긴 연설문 문장들은 padding='max_length', max_length=1000 을 설정할 수도 있습니다. 또한 max_length를 적용하지 않고, padding='longest' 를 적용할 수도 있습니다.

그래서 일반적으로 Position Embedding의 max_len과 tokenizer의 max_length를 일치 시키지 않습니다.

Position Embedding의 max_len은 모든 경우에 대해서 할당할 수 있는 최대 position 값이라고 생각해 주시면 됩니다.

감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 임해빈님.

BERT 및 관련 트랜스포머 모델의 학습을 진행하시면서 이론적인 부분을 깊이 이해하고 계신 것 같습니다. 질문해 주신 내용은 BERT 모델의 포지션 임베딩 처리에 관한 부분인데요, 여기에 대해 제가 간단히 설명을 드리도록 하겠습니다.

BERT의 BERTEmbeddings 클래스에서는 실제 입력 input_ids의 길이, 즉 input_ids.size(1)을 기준으로 포지션 임베딩을 참조하여 모델 내에서 사용하도록 처리하고 있습니다. 이는 주로 입력 시퀀스 길이가 설정된 max_length보다 짧을 경우, 즉 실제 입력 데이터의 길이에 맞는 포지션 임베딩을 사용하도록 유연성을 제공하기 위함입니다.

일반적으로 학습 환경에서는 tokenizer의 max_length와 모델의 max_len을 일치시키는 것이 보편적이지만, 입력 데이터가 항상 동일한 길이를 가지진 않기 때문에 처리 단계에서 유연한 대응이 이루어지도록 이러한 설계가 사용됩니다. 이를 통해, 설정된 max_length보다 짧은 실제 데이터에 대해서도 효과적으로 대응할 수 있고, 이는 메모리 관리 측면에서의 효율성을 증대시켜 줄 수 있습니다.

이전에 비슷한 주제에 대한 질문이 있었는데 참고하시면 이해하는데 도움이 되실 것 같습니다:
- BERT 모델의 포지션 임베딩과 입력 토큰 길이의 관계

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

실습 코드

0

26

2

[참고] Cannot connect to host host.docker.internal:8080

0

41

2

40강 Multi GPU 필요성 설명이 두번 나오는 것 같아요

0

42

2

There are no longer any instances available with the requested specifications. Please refresh and try again.

0

72

2

MMDetection 버전 이슈

0

50

2

질문있는데요.. vLLM은 말씀하신 사양에 적용이되나요?

0

61

2

[업로드오류] 강의 내용과 제목 불일치

0

43

2

섹션22 퀴즈 질문

0

50

1

import torch가 안되는 경우는 어떻게 하나요?

0

49

1

소리가 겹쳐서 들려요

0

56

2

20강에서 파인튜닝 때 사용한 데이터가 없어졌습니다. LoRA Trainer 매개변수도 라이브러리 업그레이드로 수정되었습니다.

0

43

1

[개정판] 딥러닝 컴퓨터 비전 완벽 가이드 먼저? 구현하며 배우는 Transformer 먼저?

0

55

1

Embedding 모델 fine tuning 관련 질문

0

82

2

코드에 오타가 있는 것 같습니다

0

63

2

코드 오타가 있는것 같습니다.

0

73

2

트랜스포머 모델 구조에서 Encode-Decoder Attenttion에 대해서

0

74

2

트랜스포머 구조에서 블럭갯수에 대해서

0

67

2

RNN에서 출력 y에대해서..

0

67

1

embedding 값 시각화 해보기에서

0

60

1

length_penalty 부분이 없는 것 같습니다.

1

62

1

멀티 헤드 셀프 어텐션에서 Wq, Wk, Wv의 구조 관련 질문

0

87

3

MLM, NSP 구현 여부

0

79

2

트랜스포머 학습 강의

0

97

2

Q, K, V 초기 임베딩

0

75

1