From 5f229b2bc3e3ed30dfcdabbcc0ed0a420bbcf1c4 Mon Sep 17 00:00:00 2001 From: NirantK Date: Fri, 25 Aug 2023 13:40:23 +0530 Subject: [PATCH] Binary Quantisation --- .../experimental/Accuracy_vs_SamplingRate.png | Bin 0 -> 122653 bytes docs/experimental/Binary Quantisation.ipynb | 509 ++++++++++++++++++ 2 files changed, 509 insertions(+) create mode 100644 docs/experimental/Accuracy_vs_SamplingRate.png create mode 100644 docs/experimental/Binary Quantisation.ipynb diff --git a/docs/experimental/Accuracy_vs_SamplingRate.png b/docs/experimental/Accuracy_vs_SamplingRate.png new file mode 100644 index 0000000000000000000000000000000000000000..7e27e1ef675b0cec65f5479b849c5a6613f00eab GIT binary patch literal 122653 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 a91E}R^8`A1+G<~bKeCedCGy1{dHpZ!F=Rjh literal 0 HcmV?d00001 diff --git a/docs/experimental/Binary Quantisation.ipynb b/docs/experimental/Binary Quantisation.ipynb new file mode 100644 index 0000000..6885e88 --- /dev/null +++ b/docs/experimental/Binary Quantisation.ipynb @@ -0,0 +1,509 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Binary Quantization of OpenAI Embeddings: A Leap in Retrieval Efficiency\n", + "\n", + "In the world of large-scale data retrieval and processing, efficiency is crucial. With the exponential growth of data, the ability to retrieve information quickly and accurately can significantly affect system performance. This blog post explores a technique known as binary quantization applied to OpenAI embeddings, demonstrating how it can enhance retrieval latency by a factor of 20 or more.\n", + "\n", + "## What Are OpenAI Embeddings?\n", + "OpenAI embeddings are numerical representations of textual information. They transform text into a vector space where semantically similar texts are mapped close together. This mathematical representation enables computers to understand and process human language more effectively.\n", + "\n", + "## Binary Quantization\n", + "Binary quantization is a method which converts continuous numerical values into binary values (0 or 1). It simplifies the data structure, allowing faster computations. Here's a brief overview of the binary quantization process applied to OpenAI embeddings:\n", + "\n", + "1. Load Embeddings: OpenAI embeddings are loaded from parquet files.\n", + "2. Binary Transformation: The continuous-valued vectors are converted into binary form. Values greater than 0 are set to 1, and others remain 0.\n", + "3. Comparison & Retrieval: Binary vectors are used for comparison using logical XOR operations and other efficient algorithms." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setup: Install Dependencies, Imports & Download Embeddings" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!pip install matplotlib tqdm pandas numpy --quiet" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "id": "WBVTItUX4yyr" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "from tqdm import tqdm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Download Embeddings" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Code Walkthrough\n", + "Here's an explanation of the code structure provided:\n", + "\n", + "1. Loading Data: OpenAI embeddings are loaded from a parquet files (we can load upto 1M embedding) and concatenated into one array.\n", + "2. Binary Conversion: A new array with the same shape is initialized with zeros, and the positive values in the original vectors are set to 1.\n", + "3. Accuracy Function: The accuracy function compares original vectors with binary vectors for a given index, limit, and oversampling rate. The comparison is done using dot products and logical XOR, sorting the results, and measuring the intersection.\n", + "4. Testing: The accuracy is tested for different oversampling rates (1, 2, 4), revealing a correctness of 0.9697 for an oversampling of 4.\n", + "\n", + "\n", + "### 💿 Loading Data" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 250 + }, + "id": "REJpFqkG7EG2", + "outputId": "7a43c0ae-fbcc-45fe-fd58-bfe691297b22" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 26/26 [00:12<00:00, 2.02it/s]\n" + ] + }, + { + "data": { + "text/plain": [ + "(1000000, 1536)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def get_openai_vectors(force_download: bool = False):\n", + " res = []\n", + " for i in tqdm(range(26)):\n", + " if force_download:\n", + " !wget https://huggingface.co/api/datasets/KShivendu/dbpedia-entities-openai-1M/parquet/KShivendu--dbpedia-entities-openai-1M/train/{i}.parquet\n", + " df = pd.read_parquet(f\"{i}.parquet\", engine=\"pyarrow\")\n", + " res.append(np.stack(df.openai))\n", + " del df\n", + "\n", + " openai_vectors = np.concatenate(res)\n", + " del res\n", + " return openai_vectors\n", + "\n", + "\n", + "openai_vectors = get_openai_vectors(force_download=False)\n", + "openai_vectors.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Binary Conversion\n", + "\n", + "Here, we will use 0 as the threshold for the binary conversion. All values greater than 0 will be set to 1, and others will remain 0. This is a simple and effective way to convert continuous values into binary values for OpenAI embeddings." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "id": "0JM2-Bj2Jkab" + }, + "outputs": [], + "source": [ + "openai_bin = np.zeros_like(openai_vectors, dtype=np.int8)\n", + "openai_bin[openai_vectors > 0] = 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Accuracy Function\n", + "\n", + "We will use the accuracy function to compare the original vectors with the binary vectors for a given index, limit, and oversampling rate. The comparison is done using dot products and logical XOR, sorting the results, and measuring the intersection." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "id": "FqshI-GlIERd" + }, + "outputs": [], + "source": [ + "def accuracy(idx, limit: int, oversampling: int):\n", + " scores = np.dot(openai_vectors, openai_vectors[idx])\n", + " dot_results = np.argsort(scores)[-limit:][::-1]\n", + "\n", + " bin_scores = 1536 - np.logical_xor(openai_bin, openai_bin[idx]).sum(axis=1)\n", + " bin_results = np.argsort(bin_scores)[-(limit * oversampling) :][::-1]\n", + "\n", + " return len(set(dot_results).intersection(set(bin_results))) / limit" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 📊 Results" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "qtzUlq_sFTRf", + "outputId": "17fe04ea-4f73-4a57-990b-180f1c04b472" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 0%| | 0/5 [00:00\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sampling_ratelimitaccuracy
01100.800
111000.708
22100.950
321000.877
44100.970
541000.956
68100.990
781000.990
816101.000
9161000.998
\n", + "" + ], + "text/plain": [ + " sampling_rate limit accuracy\n", + "0 1 10 0.800\n", + "1 1 100 0.708\n", + "2 2 10 0.950\n", + "3 2 100 0.877\n", + "4 4 10 0.970\n", + "5 4 100 0.956\n", + "6 8 10 0.990\n", + "7 8 100 0.990\n", + "8 16 10 1.000\n", + "9 16 100 0.998" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results = pd.DataFrame(results)\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![image.png](./Accuracy_vs_SamplingRate.png)\n", + "\n", + "## Observations\n", + "As the sampling rate increases, the accuracy generally improves. Higher limits also tend to yield higher accuracy, especially at larger sampling rates. The accuracy reaches 1.0 for a sampling rate of 16 and a limit of 10.\n", + "\n", + "## Conclusion\n", + "The binary quantization of OpenAI embeddings offers a highly efficient way to improve latency in data retrieval. With a correctness of nearly 97% and an impressive 20x or more improvement in retrieval speed, this technique is a promising avenue for systems dealing with large-scale data." + ] + } + ], + "metadata": { + "colab": { + "machine_shape": "hm", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.17" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}