1. SentenceTransformer

 

SentenceTransformer 라이브러리의 encode 함수는 주어진 문장이나 문장의 리스트를 고차원의 임베딩 벡터로 변환합니다. 이 함수는 내부적으로 여러 단계의 처리를 거칩니다:

토큰화(Tokenization): 입력 문장을 토큰으로 분리합니다.
임베딩 생성(Embedding Generation): 토큰을 pre-trained 모델을 통과시켜 각 토큰에 대한 임베딩 벡터를 생성합니다.
문장 임베딩(Sentence Embedding): 토큰 임베딩을 어떠한 방식(예: 평균, 합계 등)으로 조합하여 문장 레벨의 임베딩을 생성합니다.

from sentence_transformers import SentenceTransformer
model = SentenceTransformer('paraphrase-MiniLM-L6-v2')
sentences = ["This is an example", "Here is another example"]
embeddings = model.encode(sentences)

 

2. transformers

 

BERT 모델과 관련 토크나이저를 로드합니다.
문장을 토크나이징하고, 텐서로 변환합니다. 이 때 패딩과 트렁케이션을 적용할 수 있습니다.
텐서를 BERT 모델에 통과시켜 임베딩을 생성합니다. 이 예에서는 마지막 hidden layer의 출력을 평균하여 문장 임베딩을 생성합니다.
이 방법은 문장을 임베딩으로 변환하는 가장 기본적인 형태이며, 여러 가지 최적화나 다른 모델 구조를 사용할 수 있습니다.

from transformers import AutoTokenizer, AutoModel
import torch

# BERT 모델과 토크나이저 초기화
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModel.from_pretrained("bert-base-uncased")

# 문장 리스트
sentences = ['This is an example sentence', 'This is a second sentence']

# 문장을 토큰화하고 텐서로 변환
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors="pt")

# 모델을 통해 임베딩 생성
with torch.no_grad():
    outputs = model(**encoded_input)
    embeddings = outputs.last_hidden_state.mean(dim=1)

# 임베딩 출력
print("Generated embeddings:")
for sentence, embedding in zip(sentences, embeddings):
    print(f"Sentence: {sentence}")
    print(f"Embedding: {embedding}")