Wyszukiwanie wielowektorowe (ColBERT)
Indeksuj wiele wektorów dla każdego dokumentu (po jednym na token lub fragment), aby uzyskać dokładniejsze dopasowanie.
Wyszukiwanie wielowektorowe (ColBERT) to bezpłatna lekcja AI Agents na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.
Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.
Jeden wektor to za mało
Standardowy RAG osadza każdy fragment w pojedynczym wektorze. Taki wektor uśrednia całą zawartość fragmentu, tracąc szczegółowe informacje.
Pobieranie wielowektorowe przechowuje WIELE wektorów na dokument i dopasowuje je dokładniej.
Pomysł ColBERT
ColBERT (Khattab & Zaharia, 2020) osadza każdy TOKEN dokumentu i każdy token zapytania, a następnie oblicza maksymalne podobieństwo:
score(q, d) = sum over q_token in q: max over d_token in d: cos(q_token, d_token)Dlaczego ColBERT przewyższa pojedynczy wektor
- Reprezentuje wiele aspektów dokumentu, czego nie potrafi jeden wektor
- Lepiej obsługuje długie dokumenty
- Zapewnia większą pełność pobierania w przypadku rzadkich terminów
Koszt ColBERT
Przechowywanie jednego wektora na token zamiast jednego na fragment:
- Jeśli fragment ma 500 tokenów, oznacza to 500 razy więcej miejsca
- Każde wyszukiwanie porównuje znacznie więcej par
Kwantyzacja i przycinanie zmniejszają ten koszt 10–50 razy, ale rozwiązanie nadal jest kosztowne.
ColBERTv2
ColBERTv2 dodaje kompresję resztową — tokeny są grupowane wokół centroidów, a każdy token jest przechowywany jako (centroid_id, mała wartość resztowa). Zajętość pamięci spada 50 razy.
Uruchamianie ColBERT
Biblioteka RAGatouille znacznie to ułatwia:
# pip install ragatouille
from ragatouille import RAGPretrainedModel
rag = RAGPretrainedModel.from_pretrained('colbert-ir/colbertv2.0')
rag.index(collection=documents, index_name='my_corpus')
results = rag.search(query='What is the refund policy?', k=5)Wielowektorowość w praktyce
Oprócz ColBERT istnieją także inne podejścia wielowektorowe:
- Parent-child — osadzanie małych fragmentów i pobieranie dużych elementów nadrzędnych
- Summary + chunks — osadzanie zarówno podsumowania dokumentu, jak i poszczególnych fragmentów
- Hypothetical questions — osadzanie par pytań i odpowiedzi utworzonych na podstawie każdego dokumentu
Hypothetical Questions Pattern
def index_with_hypos(doc):
# Generate 5 plausible questions this doc could answer
questions = llm.invoke(f'Write 5 questions answered by this doc:\n{doc}').content.split('\n')
for q in questions:
vector_db.add(embed(q), payload={'doc': doc, 'question': q})
# Now queries that match a stored hypothetical question retrieve the doc.Parent-Child with LangChain
from langchain.retrievers import ParentDocumentRetriever
from langchain.storage import InMemoryStore
store = InMemoryStore()
retriever = ParentDocumentRetriever(
vectorstore=child_vectorstore,
docstore=store,
child_splitter=child_splitter, # small
parent_splitter=parent_splitter # large
)
retriever.add_documents(documents)
# Indexes small chunks, returns large parents.Kiedy używać ColBERT
- Wyszukiwanie o krytycznym znaczeniu (prawo, medycyna)
- Długie dokumenty
- Gdy można ponieść koszt przechowywania
Kiedy zrezygnować
- Małe korpusy
- Ścieżki wrażliwe na opóźnienia
- Projekty z ograniczonym budżetem
Hybrydowe wyszukiwanie z BM25
Aby uzyskać maksymalną pełność, należy połączyć pobieranie wielowektorowe z klasycznym wyszukiwaniem słów kluczowych BM25. Do połączenia wyników należy użyć Reciprocal Rank Fusion.
Kompromis związany z ColBERT
Jaki jest główny kompromis związany z używaniem pobierania wielowektorowego w stylu ColBERT?
Podsumowanie
Jeden wektor na fragment powoduje utratę informacji. ColBERT przechowuje wektory dla poszczególnych tokenów, zapewniając większą precyzję. RAGatouille ułatwia jego użycie. Należy go stosować, gdy pełność ma znaczenie, a koszty są akceptowalne.
Często zadawane pytania
Czy lekcja „Wyszukiwanie wielowektorowe (ColBERT)” jest bezpłatna?
Tak — pełny tekst „Wyszukiwanie wielowektorowe (ColBERT)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.
Co nauczysz się w „Wyszukiwanie wielowektorowe (ColBERT)”?
Indeksuj wiele wektorów dla każdego dokumentu (po jednym na token lub fragment), aby uzyskać dokładniejsze dopasowanie. Ćwiczysz AI Agents z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć AI Agents?
Nie wymagamy żadnego doświadczenia. AI Agents w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Wyszukiwanie wielowektorowe (ColBERT)”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents?
Tak. Każda lekcja AI Agents zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Ponowne szeregowanie za pomocą cross-encoderów
- HyDE: embeddingi hipotetycznych dokumentów
- Wyszukiwanie wielowektorowe (ColBERT)
- Ocena RAG (RAGAS, Recall@K)