Sentence-Transformer, Word2Vec, Transformer 기반 임베딩에 대해 공부해보자!
Word2Vec
장점 : 단어 간의 의미적인 관계의 파악에 적합함.
단점 : 문장 단위에서는 유연성이 부족함.
- 우선 긴 문장을 한문장 한문장 토큰화 시킴.
- Word2Vec 모델을 불러와 토큰화된 문장을 학습시킨다.
- 학슴된 문장에서 특정 단어와 가장 유사한 단어 찾기
# Python 기본 split() 사용해 간단하게 토큰화
tokenized_sentences = [sentence.split() for sentence in sentences]
# Word2Vec 모델 학습
word2vec_model = Word2Vec(sentences=tokenized_sentences, vector_size=100, window=5, min_count=1, workers=4)
# 단어 '고양이'와 유사한 단어 찾기
similar_words = word2vec_model.wv.most_similar("고양이")
print(similar_words)
Sentence-Transformer
장점 : 문장간의 유사성을 측정, 문맥을 고려하여 임베딩을함.
단점 : 학습의 속도가 느림.
'sentence-transformer/kr-sentence_bert-base' 모델을 사용
# 최신 Ko-Sentence-BERT 모델 로드
model = SentenceTransformer('sentence-transformers/kr-sentence_bert-base')
# 문장 임베딩 생성
embeddings = model.encode(sentences)
# 첫 번째 문장 임베딩 확인
print(embeddings[0])
Transformer
장점 : 양방향으로 문맥을 이해, 문장 전체의 의미를 반영
단점 : 계산의 비용과 모델의 크기가 큼
- bert 토큰화와 bert모델을 불러온다.
- 문장을 토큰화 시키며 데이터를 파이토치 텐서 형식으로 변환한다는 뜻이다.
- 모델의 인풋으로 임베딩을 생성
- 임베딩 한 벡터를 평균화 하여 추출한다.
# KLUE-BERT 모델과 토크나이저 로드
tokenizer = BertTokenizer.from_pretrained('klue/bert-base')
model = BertModel.from_pretrained('klue/bert-base')
# 토큰화 및 텐서 변환
inputs = tokenizer(sentence, return_tensors='pt')
# 임베딩 생성
with torch.no_grad():
outputs = model(**inputs)
# 임베딩 벡터 추출 (평균값으로 계산)
embedding = outputs.last_hidden_state.mean(dim=1)
print(embedding)
'용어정리 > LLM & RAG' 카테고리의 다른 글
LLM & RAG 용어정리 (LangChain과 FAISS 실습) (3) | 2024.11.13 |
---|---|
LLM & RAG 용어정리 (LangChain 개념과 활용) (0) | 2024.11.13 |
LLM & RAG 용어정리 (텍스트 처리 기법과 임베딩) (0) | 2024.11.12 |
LLM & RAG 용어정리 (Vector DB 와 RAG의 개념) (0) | 2024.11.12 |
LLM & RAG 용어정리 (LLM 사용 전 중요한 개념) (1) | 2024.11.12 |