[Model] 간단한 bge-m3 모델 테스트
임베딩 용어를 이해하기 위해 bg3-m3 모델을 활용하여 테스트를 진행하였습니다.
개요
여러 임베딩 용어를 이해하고, 동작 방식을 이해하기 위해 bge-m3 모델을 통해 간단한 테스트를 진행하였습니다
bge 임베딩 방식
FlagEmbedding
에서 제공하는 세 가지 접근법을 지원하며 , 더욱 강력한 검색 시스템을 구축할 수 있습니다.
- Dense Vector: BGE-M3의 다국어, 다중 작업 능력을 기반으로 함
- Lexical weight를 활용한 sparse embedding으로 정확한 단어 매칭을 수행
- ColBERT의 multi-vector 접근법으로 문맥을 고려한 세밀한 매칭 수행
!pip install -U FlagEmbedding peft # faiss-gpu LM_Cocktail 파인튜닝시 필요
Sparse Embedding (Lexical Weight)
Sparse embedding은 벡터의 대부분의 값이 0인 고차원 벡터를 사용하는 임베딩 방식입니다. Lexical weight를 활용한 방식은 단어의 중요도를 고려하여 임베딩을 생성합니다.
작동 방식
1. 각 단어에 대해 lexical weight(어휘적 가중치)를 계산합니다. 이는 TF-IDF나 BM25 같은 방법을 사용할 수 있습니다.
2. 문서나 쿼리의 각 단어에 대해, 해당 단어의 lexical weight를 사용하여 sparse vector의 해당 차원에 값을 할당합니다.
3. 결과적으로 문서나 쿼리는 대부분의 값이 0인 고차원 벡터로 표현됩니다.
장점 - 단어의 중요도를 직접적으로 반영할 수 있습니다. - 특정 단어나 구문을 정확히 매칭할 수 있습니다. - 계산이 상대적으로 빠릅니다.
from FlagEmbedding import BGEM3FlagModel
model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=True) # Setting use_fp16 to True speeds up computation with a slight performance degradation
sentences_1 = ["What is BGE M3?", "Defination of BM25"]
sentences_2 = ["BGE M3 is an embedding model supporting dense retrieval, lexical matching and multi-vector interaction.",
"BM25 is a bag-of-words retrieval function that ranks a set of documents based on the query terms appearing in each document"]
output_1 = model.encode(sentences_1, return_dense=True, return_sparse=True, return_colbert_vecs=False)
output_2 = model.encode(sentences_2, return_dense=True, return_sparse=True, return_colbert_vecs=False)
# you can see the weight for each token:
print(model.convert_id_to_token(output_1['lexical_weights']))
# [{'What': 0.08356, 'is': 0.0814, 'B': 0.1296, 'GE': 0.252, 'M': 0.1702, '3': 0.2695, '?': 0.04092},
# {'De': 0.05005, 'fin': 0.1368, 'ation': 0.04498, 'of': 0.0633, 'BM': 0.2515, '25': 0.3335}]
# compute the scores via lexical mathcing
lexical_scores = model.compute_lexical_matching_score(output_1['lexical_weights'][0], output_2['lexical_weights'][0])
print(lexical_scores)
# 0.19554901123046875
print(model.compute_lexical_matching_score(output_1['lexical_weights'][0], output_1['lexical_weights'][1]))
# 0.0
Multi-Vector (ColBERT)
ColBERT(Contextualized Late Interaction over BERT)는 문서 검색을 위한 효율적인 방법입니다. 이 방식은 문서와 쿼리를 여러 개의 벡터로 표현하는 multi-vector 접근법을 사용합니다.
작동 방식
- 문서의 각 토큰에 대해 별도의 벡터를 생성합니다. 즉, 하나의 문서는 여러 개의 벡터로 표현됩니다.
- 쿼리도 마찬가지로 각 토큰에 대해 별도의 벡터를 생성합니다.
- 검색 시, 쿼리의 각 토큰 벡터와 문서의 모든 토큰 벡터 사이의 유사도를 계산합니다.
- 이 유사도들을 종합하여 최종 검색 점수를 계산합니다.
장점
- 토큰 수준의 세밀한 매칭이 가능합니다.
- 문맥을 고려한 임베딩을 생성할 수 있습니다.
- 긴 문서에 대해서도 효과적으로 작동합니다.
from FlagEmbedding import BGEM3FlagModel
model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=True)
sentences_1 = ["What is BGE M3?", "Defination of BM25"]
sentences_2 = ["BGE M3 is an embedding model supporting dense retrieval, lexical matching and multi-vector interaction.",
"BM25 is a bag-of-words retrieval function that ranks a set of documents based on the query terms appearing in each document"]
output_1 = model.encode(sentences_1, return_dense=True, return_sparse=True, return_colbert_vecs=True)
output_2 = model.encode(sentences_2, return_dense=True, return_sparse=True, return_colbert_vecs=True)
print(model.colbert_score(output_1['colbert_vecs'][0], output_2['colbert_vecs'][0]))
print(model.colbert_score(output_1['colbert_vecs'][0], output_2['colbert_vecs'][1]))
# 0.7797
# 0.4620
Hybrid 테스트
# 테스트용 질문과 답변 데이터
sentences_1 = [
"부산의 특징은 무엇인가요?",
"인천의 주요 산업은 무엇인가요?",
"대전은 어떤 도시인가요?",
"광주의 문화적 특징은?",
"대구의 기후는 어떤가요?"
]
sentences_2 = [
"부산은 대한민국 제2의 도시로, 동남해안에 위치한 대표적인 항구도시입니다. 해운대 해수욕장, 광안대교 등 관광명소로 유명하며, 국제영화제가 열리는 문화도시이기도 합니다.",
"인천은 국제공항과 항만을 보유한 물류 중심지입니다. 주요 산업으로는 항공, 해운, 물류 산업이 발달해 있으며, 송도 국제도시를 중심으로 첨단 산업과 바이오 산업도 성장하고 있습니다.",
"대전은 대한민국의 중앙에 위치한 과학기술의 중심도시입니다. 대덕연구개발특구를 중심으로 많은 연구소와 대학이 집중되어 있어 '한국의 실리콘밸리'로 불리기도 합니다.",
"광주는 예술과 민주주의의 도시로 알려져 있습니다. 국립아시아문화전당이 위치해 있으며, 5.18 민주화운동의 역사적 현장으로서 민주, 인권, 평화의 가치를 상징하는 도시입니다.",
"대구는 분지 지형으로 인해 여름에는 매우 덥고 겨울에는 춥습니다. '대프리카'라는 별명이 있을 정도로 여름 기온이 높기로 유명하며, 이로 인해 섬유산업이 발달하게 되었습니다."
]
# 모든 질문-답변 쌍 생성
sentence_pairs = [[q, a] for q in sentences_1 for a in sentences_2]
# 모델을 사용하여 점수 계산
scores = model.compute_score(sentence_pairs,
max_passage_length=128,
weights_for_different_modes=[0.4, 0.2, 0.4])
# 결과 출력
print(scores)
질문 | 답변 | ColBERT | Sparse | Dense | Sparse+Dense | ColBERT+Sparse+Dense |
---|---|---|---|---|---|---|
부산의 특징은 무엇인가요? | 부산은 대한민국 제2의 도시로, 동남해안에 위치한 대표적인 항구도시입니다. 해운대 해수욕장, 광안대교 등 관광명소로 유명하며, 국제영화제가 열리는 문화도시이기도 합니다. | 0.6201 | 0.1656 | 0.6226 | 0.4703 | 0.6213236451148987 |
부산의 특징은 무엇인가요? | 인천은 국제공항과 항만을 보유한 물류 중심지입니다. 주요 산업으로는 항공, 해운, 물류 산업이 발달해 있으며, 송도 국제도시를 중심으로 첨단 산업과 바이오 산업도 성장하고 있습니다. | 0.3820 | 0.0194 | 0.3855 | 0.2635 | 0.38374465703964233 |
부산의 특징은 무엇인가요? | 대전은 대한민국의 중앙에 위치한 과학기술의 중심도시입니다. 대덕연구개발특구를 중심으로 많은 연구소와 대학이 집중되어 있어 '한국의 실리콘밸리'로 불리기도 합니다. | 0.3805 | 0.0403 | 0.3757 | 0.2639 | 0.3105 |
부산의 특징은 무엇인가요? | 광주는 예술과 민주주의의 도시로 알려져 있습니다. 국립아시아문화전당이 위치해 있으며, 5.18 민주화운동의 역사적 현장으로서 민주, 인권, 평화의 가치를 상징하는 도시입니다. | 0.4150 | 0.0184 | 0.3806 | 0.2599 | 0.3219 |
부산의 특징은 무엇인가요? | 대구는 분지 지형으로 인해 여름에는 매우 덥고 겨울에는 춥습니다. '대프리카'라는 별명이 있을 정도로 여름 기온이 높기로 유명하며, 이로 인해 섬유산업이 발달하게 되었습니다. | 0.3907 | 0.0000 | 0.4402 | 0.2935 | 0.3324 |
인천의 주요 산업은 무엇인가요? | 부산은 대한민국 제2의 도시로, 동남해안에 위치한 대표적인 항구도시입니다. 해운대 해수욕장, 광안대교 등 관광명소로 유명하며, 국제영화제가 열리는 문화도시이기도 합니다. | 0.4241 | 0.0205 | 0.4031 | 0.2756 | 0.3350 |
인천의 주요 산업은 무엇인가요? | 인천은 국제공항과 항만을 보유한 물류 중심지입니다. 주요 산업으로는 항공, 해운, 물류 산업이 발달해 있으며, 송도 국제도시를 중심으로 첨단 산업과 바이오 산업도 성장하고 있습니다. | 0.7196 | 0.2162 | 0.6865 | 0.5297 | 0.6057 |
인천의 주요 산업은 무엇인가요? | 대전은 대한민국의 중앙에 위치한 과학기술의 중심도시입니다. 대덕연구개발특구를 중심으로 많은 연구소와 대학이 집중되어 있어 '한국의 실리콘밸리'로 불리기도 합니다. | 0.3961 | 0.0195 | 0.3516 | 0.2409 | 0.3030 |
인천의 주요 산업은 무엇인가요? | 광주는 예술과 민주주의의 도시로 알려져 있습니다. 국립아시아문화전당이 위치해 있으며, 5.18 민주화운동의 역사적 현장으로서 민주, 인권, 평화의 가치를 상징하는 도시입니다. | 0.3496 | 0.0098 | 0.2974 | 0.2015 | 0.2607 |
인천의 주요 산업은 무엇인가요? | 대구는 분지 지형으로 인해 여름에는 매우 덥고 겨울에는 춥습니다. '대프리카'라는 별명이 있을 정도로 여름 기온이 높기로 유명하며, 이로 인해 섬유산업이 발달하게 되었습니다. | 0.4235 | 0.0000 | 0.3706 | 0.2471 | 0.3176 |
대전은 어떤 도시인가요? | 부산은 대한민국 제2의 도시로, 동남해안에 위치한 대표적인 항구도시입니다. 해운대 해수욕장, 광안대교 등 관광명소로 유명하며, 국제영화제가 열리는 문화도시이기도 합니다. | 0.4861 | 0.0683 | 0.4319 | 0.3107 | 0.3808 |
대전은 어떤 도시인가요? | 인천은 국제공항과 항만을 보유한 물류 중심지입니다. 주요 산업으로는 항공, 해운, 물류 산업이 발달해 있으며, 송도 국제도시를 중심으로 첨단 산업과 바이오 산업도 성장하고 있습니다. | 0.3780 | 0.0186 | 0.3508 | 0.2401 | 0.2953 |
대전은 어떤 도시인가요? | 대전은 대한민국의 중앙에 위치한 과학기술의 중심도시입니다. 대덕연구개발특구를 중심으로 많은 연구소와 대학이 집중되어 있어 '한국의 실리콘밸리'로 불리기도 합니다. | 0.7237 | 0.1498 | 0.6860 | 0.5073 | 0.5939 |
대전은 어떤 도시인가요? | 광주는 예술과 민주주의의 도시로 알려져 있습니다. 국립아시아문화전당이 위치해 있으며, 5.18 민주화운동의 역사적 현장으로서 민주, 인권, 평화의 가치를 상징하는 도시입니다. | 0.4800 | 0.0403 | 0.4275 | 0.2984 | 0.3711 |
대전은 어떤 도시인가요? | 대구는 분지 지형으로 인해 여름에는 매우 덥고 겨울에는 춥습니다. '대프리카'라는 별명이 있을 정도로 여름 기온이 높기로 유명하며, 이로 인해 섬유산업이 발달하게 되었습니다. | 0.4319 | 0.0000 | 0.4524 | 0.3016 | 0.3537 |
광주의 문화적 특징은? | 부산은 대한민국 제2의 도시로, 동남해안에 위치한 대표적인 항구도시입니다. 해운대 해수욕장, 광안대교 등 관광명소로 유명하며, 국제영화제가 열리는 문화도시이기도 합니다. | 0.4183 | 0.0578 | 0.3938 | 0.2818 | 0.3364 |
광주의 문화적 특징은? | 인천은 국제공항과 항만을 보유한 물류 중심지입니다. 주요 산업으로는 항공, 해운, 물류 산업이 발달해 있으며, 송도 국제도시를 중심으로 첨단 산업과 바이오 산업도 성장하고 있습니다. | 0.3170 | 0.0084 | 0.2998 | 0.2027 | 0.2484 |
광주의 문화적 특징은? | 대전은 대한민국의 중앙에 위치한 과학기술의 중심도시입니다. 대덕연구개발특구를 중심으로 많은 연구소와 대학이 집중되어 있어 '한국의 실리콘밸리'로 불리기도 합니다. | 0.3024 | 0.0192 | 0.2878 | 0.1983 | 0.2400 |
광주의 문화적 특징은? | 광주는 예술과 민주주의의 도시로 알려져 있습니다. 국립아시아문화전당이 위치해 있으며, 5.18 민주화운동의 역사적 현장으로서 민주, 인권, 평화의 가치를 상징하는 도시입니다. | 0.6564 | 0.1237 | 0.6284 | 0.4602 | 0.5387 |
광주의 문화적 특징은? | 대구는 분지 지형으로 인해 여름에는 매우 덥고 겨울에는 춥습니다. '대프리카'라는 별명이 있을 정도로 여름 기온이 높기로 유명하며, 이로 인해 섬유산업이 발달하게 되었습니다. | 0.3706 | 0.0000 | 0.3652 | 0.2435 | 0.2943 |
대구의 기후는 어떤가요? | 부산은 대한민국 제2의 도시로, 동남해안에 위치한 대표적인 항구도시입니다. 해운대 해수욕장, 광안대교 등 관광명소로 유명하며, 국제영화제가 열리는 문화도시이기도 합니다. | 0.3704 | 0.0109 | 0.4019 | 0.2715 | 0.3111 |
대구의 기후는 어떤가요? | 인천은 국제공항과 항만을 보유한 물류 중심지입니다. 주요 산업으로는 항공, 해운, 물류 산업이 발달해 있으며, 송도 국제도시를 중심으로 첨단 산업과 바이오 산업도 성장하고 있습니다. | 0.3169 | 0.0000 | 0.3313 | 0.2209 | 0.2593 |
대구의 기후는 어떤가요? | 대전은 대한민국의 중앙에 위치한 과학기술의 중심도시입니다. 대덕연구개발특구를 중심으로 많은 연구소와 대학이 집중되어 있어 '한국의 실리콘밸리'로 불리기도 합니다. | 0.3992 | 0.0100 | 0.4268 | 0.2878 | 0.3324 |
대구의 기후는 어떤가요? | 광주는 예술과 민주주의의 도시로 알려져 있습니다. 국립아시아문화전당이 위치해 있으며, 5.18 민주화운동의 역사적 현장으로서 민주, 인권, 평화의 가치를 상징하는 도시입니다. | 0.3643 | 0.0222 | 0.3552 | 0.2442 | 0.2923 |
대구의 기후는 어떤가요? | 대구는 분지 지형으로 인해 여름에는 매우 덥고 겨울에는 춥습니다. '대프리카'라는 별명이 있을 정도로 여름 기온이 높기로 유명하며, 이로 인해 섬유산업이 발달하게 되었습니다. | 0.6971 | 0.1381 | 0.7041 | 0.5154 | 0.5881 |
… |
요약
- ColBERT:
- 장점:
- 문맥을 잘 이해하고 의미적 유사성을 잘 포착합니다.
- 긴 문장에서도 좋은 성능을 보입니다.
- 단점:
- 장점:
- 계산 비용이 높고 처리 속도가 느릴 수 있습니다.
- 대량의 데이터로 사전 학습이 필요합니다.
- Sparse:
- 장점:
- 계산이 빠르고 리소스 사용이 적습니다.
- 키워드 매칭에 효과적입니다.
- 단점:
- 장점:
- 의미적 유사성을 포착하는 데 한계가 있습니다.
- 동의어나 문맥을 고려하지 못합니다.
- Dense:
- 장점:
- 의미적 유사성을 잘 포착합니다.
- ColBERT보다 계산 효율성이 높습니다.
- 단점:
- 장점:
- Sparse 모델보다는 계산 비용이 높습니다.
- 매우 특정한 키워드 매칭에는 약할 수 있습니다.
- Sparse+Dense:
- 장점:
- 키워드 매칭과 의미적 유사성을 모두 고려합니다.
- Sparse와 Dense의 장점을 결합합니다.
- 단점:
- 장점:
- 두 모델을 모두 실행해야 하므로 계산 비용이 증가합니다.
- 두 점수의 균형을 맞추는 것이 어려울 수 있습니다.
- ColBERT+Sparse+Dense:
- 장점:
- 가장 comprehensive한 분석을 제공합니다.
- 키워드, 의미, 문맥을 모두 고려합니다.
- 단점:
- 장점:
- 계산 비용이 가장 높습니다.
- 복잡성이 증가하여 결과 해석이 어려울 수 있습니다.
- 세 모델의 가중치를 적절히 조정하는 것이 중요하고 어려울 수 있습니다.
각 조합은 특정 사용 사례나 요구 사항에 따라 선택될 수 있습니다. 예를 들어, 빠른 처리가 필요한 경우 Sparse 모델만 사용할 수 있고, 정확도가 가장 중요한 경우 ColBERT+Sparse+Dense 조합을 선택할 수 있습니다.