데이터의 특징을 누가 뽑는지에 따라 달라짐.

임베딩은 데이터의 의미와 특징을 포착해 숫자로 표현한 것임.
임베딩은 딥러닝을 이해할 때 가장 중요한 개념 중 하나임.
2013년 구글에서 “백터 공간에서 단어 표현의 효율적인 추정“ 논문에서 word2vec 모델 통해 단어를 임베딩으로 변환하는 방법 소개.(레퍼런스 원문 확인)
트랜스포머 아키텍처는 맥락을 압축하지 않고 그대로 활용하므로, 성능을 높일 수 있지만, 맥락 데이터를 모두 저장해야해서 메모리 사용량이 증가함. 입력이 길어지면 예측에 걸리는 시간도 증가함.
많은 연산량이 필요하다는 단점이 있으나, 성능이 좋고 순차적으로 처리하는 RNN과 달리 병렬처리 통해 학습 속도 높일 수 있어 현재는 대부분의 LLM이 트랜스포머 아키텍처를 기반으로 하고 있음.
LLM 애플리케이션 개발 시, 크게 두 가지 방법이 있음.
1) 상업용 API를 사용하는 방법(GPT-4, 제미나이) : 모델이 크고 범용 텍스트 생성 능력 뛰어남.
2) 오픈소스 LLM 활용해 직접 LLM API 생성해 사용하는 방법 : 원하는 도메인 데이터, 작업 위한 데이터로 자유롭게 추가 학습 할 수 있는 장점. = 추가학습 하는 경우 모델 크기 작으면서도 특정 도메인 데이터나 작업ㄱ에서 높은 성능 보이는 모델을 만들 수 있음 = sLLM
LLM은 잘못된 정보, 실제로 존재하지 않는 정보를 만들어내는 현상인 할루시네이션이 발생함.
지시 데이터셋으로 LLM을 지도 미세 조정하는 과정에서 기존에 알지 못하는 정보가 포함된 경우 할루시네이션 현상을 유발 할 수 있다 함. > 이런 문제를 줄이기 위해 검색 증강 생성인 RAG 기술을 사용한다. 이는 프롬프트에서 LLM이 답변할 때 필요한 정보를 미리 추가함으로써 잘못된 정보를 생성하는 문제를 줄인다.

책 64페이지 발췌

# 띄어쓰기 단위로 분리
input_text = "나는 최근 파리 여행을 다녀왔다"
input_text_list = input_text.split()
print("input_text_list: ", input_text_list)
# 토큰 -> 아이디 딕셔너리와 아이디 -> 토큰 딕셔너리 만들기
str2idx = {word:idx for idx, word in enumerate(input_text_list)}
idx2str = {idx:word for idx, word in enumerate(input_text_list)}
print("str2idx: ", str2idx)
print("idx2str: ", idx2str)
# 토큰을 토큰 아이디로 변환
input_ids = [str2idx[word] for word in input_text_list]
print("input_ids: ", input_ids)