임베딩 벡터 - 9. 실습 예제 및 코드
2025. 3. 26. 20:14ㆍAI/AI
📘 9. 실습 예제 및 코드
🔹 9.1 Python을 활용한 Word2Vec 예제
✅ 목적
간단한 문장 데이터로 단어 임베딩을 학습하고, 유사 단어를 벡터 기반으로 검색합니다.
🛠 사용 라이브러리
gensim, nltk
💡 주요 파라미터
파라미터 | 설명 |
vector_size | 생성할 임베딩 벡터의 차원 수 |
window | 주변 단어를 몇 개까지 볼 것인지 (문맥 크기) |
min_count | 최소 등장 횟수 미만 단어는 학습 제외 |
sg | 1: Skip-gram / 0: CBOW 방식 선택 |
🧪 예제 코드
from gensim.models import Word2Vec
from nltk.tokenize import word_tokenize
sentences = [
word_tokenize("I love natural language processing."),
word_tokenize("Word embeddings are useful in NLP.")
]
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, sg=1)
print(model.wv.most_similar("language"))
⚠️ 에러 핸들링
- LookupError: resource 'punkt' not found → nltk.download('punkt')
- KeyError: 'word not in vocabulary' → min_count 낮추거나 말뭉치 확장
🔹 9.2 BERT 임베딩 추출 실습
✅ 목적
사전학습된 BERT 모델을 이용해 문장 내 [CLS] 벡터를 추출합니다.
🛠 사용 라이브러리
transformers, torch
💡 주요 파라미터
파라미터 | 설명 |
return_tensors="pt" | 토크나이저 결과를 PyTorch 텐서로 반환 |
last_hidden_state | 각 토큰의 벡터 (보통 [CLS] 사용) |
🧪 예제 코드
from transformers import BertTokenizer, BertModel
import torch
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
model = BertModel.from_pretrained("bert-base-uncased")
inputs = tokenizer("I love AI.", return_tensors="pt")
outputs = model(**inputs)
embedding = outputs.last_hidden_state[:, 0, :] # [CLS] 토큰 임베딩
print(embedding.shape)
⚠️ 에러 핸들링
- GPU 부족 → model.to("cpu") 사용
- 모델 로딩 실패 → 버전 확인, 인터넷 연결 확인
🔹 9.3 Sentence-BERT / SimCSE 임베딩 실습
✅ 목적
문장 간 의미 유사도를 계산하기 위해 문장 단위 임베딩을 생성합니다.
🛠 사용 라이브러리
sentence-transformers
💡 주요 파라미터
파라미터 | 설명 |
convert_to_tensor=True | PyTorch 텐서 형식 반환 |
util.pytorch_cos_sim | 문장 간 코사인 유사도 계산 |
🧪 예제 코드
from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
sentences = ["I love machine learning.", "I enjoy studying AI."]
embeddings = model.encode(sentences, convert_to_tensor=True)
similarity = util.pytorch_cos_sim(embeddings[0], embeddings[1])
print(similarity)
🔁 SimCSE 사용 시 모델 이름만 교체: "princeton-nlp/sup-simcse-bert-base-uncased"
⚠️ 에러 핸들링
- GPU 오류 → model = model.to("cpu")
- ModuleNotFoundError → pip install sentence-transformers 필요
🔹 9.4 벡터 유사도 검색 데모 (FAISS)
✅ 목적
대량의 벡터 중 입력 벡터와 가장 유사한 벡터를 빠르게 검색합니다.
🛠 사용 라이브러리
faiss, numpy
💡 주요 파라미터
파라미터 | 설명 |
IndexFlatL2(dim) | L2 거리 기반 인덱스 생성 |
add() | 벡터 추가 |
search(query, k) | 상위 k개 유사 벡터 반환 |
🧪 예제 코드
import faiss
import numpy as np
vectors = np.random.rand(100, 128).astype("float32")
index = faiss.IndexFlatL2(128)
index.add(vectors)
query = np.random.rand(1, 128).astype("float32")
D, I = index.search(query, k=5)
print("Top 5 indices:", I)
⚠️ 에러 핸들링
- ModuleNotFoundError → pip install faiss-cpu 또는 faiss-gpu
- TypeError → 벡터는 반드시 float32 타입이어야 함
🔹 📌 요약 정리
항목 | 실습 목적 | 주요 도구 | 주의사항 |
Word2Vec | 단어 임베딩 학습 | gensim | 토큰화, 어휘 수 부족 |
BERT | [CLS] 임베딩 추출 | transformers | CUDA 오류, 로딩 실패 |
SBERT / SimCSE | 문장 유사도 계산 | sentence-transformers | 모델 로딩, GPU 사용 |
FAISS 검색 | 벡터 유사 항목 찾기 | faiss | float32 필수, 라이브러리 설치 필요 |
'AI > AI' 카테고리의 다른 글
임베딩 벡터 - 10. 정리 및 참고자료 (0) | 2025.03.26 |
---|---|
임베딩 벡터 - 8. 임베딩 벡터 활용 시 주의사항 (0) | 2025.03.26 |
임베딩 벡터 - 7. 최신 동향과 기술 (0) | 2025.03.26 |
임베딩 벡터 - 6. 임베딩 품질 평가 (0) | 2025.03.26 |
임베딩 벡터 - 5. 임베딩 벡터의 활용 (0) | 2025.03.26 |