요즘 텍스트 임베딩을 하는 프로젝트를 하는데 팀원분이 sequence length에 대한 질문을 했다. 어렴풋이 알고는 있었는데 명확하게 문장형태로 설명해주지 못했다. 남에게 설명해줄 수 있어야 아는것 이라고 했다. 결론적으로 말하자면 sequence를 처음 알게된게 주가 프로젝트였고 지금 하는건 자연어 프로젝트이다. 이 두 케이스에서 사용되는 sequence의 의미가 조금 다르다. 이로 인해 설명하기 어려웠던 것 같다.
우선 sequence의 사전적 정의부터 찾아보겠다.

이 외에 위키백과는 "수학에서 수열(數列) 또는 열(列, sequence)은 수 또는 다른 대상의 순서 있는 나열이다" 라고 한다.
짧게 말하면 "순차적인 순서, 순차적인 나열" 이다. 이는 영화, 수학, 카드게임 등등 맥락에 맞게 쓰인다.
그럼 lstm에서 sequence는 어떻게 쓰일까?
lstm은 주식, 날씨, 음성, 영상, 자연어 등 다양한 영역에서 쓰일 수 있다. lstm의 input 데이터는 [Batch Size, Sequence Length, Input Dimension] 의 형태로 되어 있다. 이때 Sequence Length에 주목해보자
다음은 각 영역 별로 상이한 sequence의 의미이다.
특정 날짜까지의 주식가격과 날씨를 예측한다고 가정해보자. 이들은 시간 단위에 따라 고려해주어야한다. 전날의 가격,날씨가 다음날의 가격,날씨에 영향을 주기 때문이다. 이 때 10일 단위로 예측을 한다고 해보자 그럼 Sequence Length는 10이다.
음성 인식 시스템이 1초 분량의 오디오 클립을 분석한다고 가정해 보자. 만약 이 시스템이 10밀리초 단위로 오디오 신호를 샘플링한다면, 1초 동안 총 100개의 오디오 프레임을 얻게 된다. 여기서 Sequence Length는 이 100개의 오디오 프레임을 의미한다.
영상 처리에서 LSTM을 사용하는 경우에 일반적으로 비디오 클립의 각 프레임을 시퀀스로 간주한다다. 5초 길이의 비디오 클립을 분석한다고 가정해보자. 이 비디오가 초당 30프레임(fps)으로 촬영되었다면, 총 150개의 프레임이 있을 것이다.
"The quick brown fox jumps over the lazy dog" 라는 문장을 예시로 생각해보자.
단어 수를 기준으로 나누는 경우
이 문장에는 9개의 단어가 있으므로 sequence length 는 9이다.
하지만 단어 수를 기준으로 나눌 때 dog와 dogs는 다른 단어로 인식된다.
토큰 수를 기준으로 나누는 경우
이 문장을 토큰화하면 "The", "quick", "brown", "fox", "jump", "##s", "over", "the", "lazy", "dog"와 같이 분리될 수 있다. 이때 jump와 ##s는 다른 단어로 인식되어 sequence length는 10이다.
이처럼 토큰을 기준으로 나누면 언어의 세밀한 특성을 포착한다는 특징이 있다.
LLM은 pre-trained 모델이라는 특징답게 이미 수많은 수의 토큰이 학습되어있다. 토큰화의 기준은 모델마다 상이하다. 따라서 LLM은 토큰을 기준으로 Sequence length가 나뉜다.
그럼 이런 생각이 들 수 있다. '토큰이 무조건 많으면 성능이 좋아지는 것 아닌가?'
=> 그럼 모델이 너무 무거워져서 임베딩하는데 시간이 너무 오래걸린다. 따라서 각자의 gpu 성능을 고려해 적당한 토큰을 가진 모델을 사용해야한다.
lstm은 다양한 분야에서 사용되므로 sequence length는 그 분야의 맥락에 따라 달라진다. 간단히 말하면 "한번에 처리하고자 하는 단위" 라고 보면 될것 같다. 이는 시간, hz, fps, 단어, 토큰 등등이 될 수 있다.
LLM은 이름 그대로 Large language model인 만큼 sequence가 자연어를 기준으로 한다. LLM은 pre-trained model이란 특징으로 sequence length는 입력 문장의 토큰 수이다.