From aaf6db4d5440ad8845722c24fba704c0f533505b Mon Sep 17 00:00:00 2001 From: ChengZi Date: Thu, 24 Oct 2024 16:08:06 +0800 Subject: [PATCH] use image to represent colpali formula Signed-off-by: ChengZi --- .../quickstart/use_ColPali_with_milvus.ipynb | 7 +++---- images/colpali_formula.png | Bin 0 -> 24084 bytes 2 files changed, 3 insertions(+), 4 deletions(-) create mode 100644 images/colpali_formula.png diff --git a/bootcamp/tutorials/quickstart/use_ColPali_with_milvus.ipynb b/bootcamp/tutorials/quickstart/use_ColPali_with_milvus.ipynb index 95aa089b3..1253cf5c4 100644 --- a/bootcamp/tutorials/quickstart/use_ColPali_with_milvus.ipynb +++ b/bootcamp/tutorials/quickstart/use_ColPali_with_milvus.ipynb @@ -16,9 +16,8 @@ "\n", "Modern retrieval models typically use a single embedding to represent text or images. ColBERT, however, is a neural model that utilizes a list of embeddings for each data instance and employs a \"MaxSim\" operation to calculate the similarity between two texts. Beyond textual data, figures, tables, and diagrams also contain rich information, which is often disregarded in text-based information retrieval.\n", "\n", - "$$\n", - "S_{q,d} := \\sum_{i \\in |E_q|} \\max_{j \\in |E_d|} E_{q_i} \\cdot E_{d_j}^T\n", - "$$\n", + "![](../../../images/colpali_formula.png)\n", + "\n", "MaxSim function compares a query with a document (what you're searching in) by looking at their token embeddings. For each word in the query, it picks the most similar word from the document (using cosine similarity or squared L2 distance) and sums these maximum similarities across all words in the query\n", "\n", "ColPali is a method that combines ColBERT's multi-vector representation with PaliGemma (a multimodal large language model) to leverage its strong understanding capabilities. This approach enables a page with both text and images to be represented using a unified multi-vector embedding. The embeddings within this multi-vector representation can capture detailed information, improving the performance of retrieval-augmented generation (RAG) for multimodal data.\n", @@ -473,4 +472,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/images/colpali_formula.png b/images/colpali_formula.png new file mode 100644 index 0000000000000000000000000000000000000000..ba63859226a577a0cca6a9b607f64da3d2200136 GIT binary patch literal 24084 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 literal 0 HcmV?d00001