From 1d82e43b22b4cb6b71a8ca951b0a055d0cda1a1c Mon Sep 17 00:00:00 2001 From: dylanra-openai <149511600+dylanra-openai@users.noreply.github.com> Date: Wed, 10 Apr 2024 15:21:38 +0100 Subject: [PATCH] Dylanra/synthetic data gen (#1109) --- authors.yaml | 8 +- examples/SDG1.ipynb | 1276 ++++++++++++++++++++++++++++++++++++++++ images/elbow_chart.png | Bin 0 -> 126413 bytes registry.yaml | 28 +- 4 files changed, 1303 insertions(+), 9 deletions(-) create mode 100644 examples/SDG1.ipynb create mode 100644 images/elbow_chart.png diff --git a/authors.yaml b/authors.yaml index f18180a7..54c948aa 100644 --- a/authors.yaml +++ b/authors.yaml @@ -83,7 +83,13 @@ jbeutler-openai: website: "https://joebeutler.com" avatar: "https://avatars.githubusercontent.com/u/156261485?v=4" +dylanra-openai: + name: "Dylan Royan Almeida" + website: "https://www.linkedin.com/in/dylan-almeida-604522167/" + avatar: "https://avatars.githubusercontent.com/u/149511600?v=4" + royziv11: name: "Roy Ziv" website: "https://www.linkedin.com/in/roy-ziv-a46001149/" - avatar: "https://media.licdn.com/dms/image/D5603AQHkaEOOGZWtbA/profile-displayphoto-shrink_400_400/0/1699500606122?e=1716422400&v=beta&t=wKEIx-vTEqm9wnqoC7-xr1WqJjghvcjjlMt034hXY_4" \ No newline at end of file + avatar: "https://media.licdn.com/dms/image/D5603AQHkaEOOGZWtbA/profile-displayphoto-shrink_400_400/0/1699500606122?e=1716422400&v=beta&t=wKEIx-vTEqm9wnqoC7-xr1WqJjghvcjjlMt034hXY_4" + diff --git a/examples/SDG1.ipynb b/examples/SDG1.ipynb new file mode 100644 index 00000000..02fd5eb3 --- /dev/null +++ b/examples/SDG1.ipynb @@ -0,0 +1,1276 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "I_IHQTO8xXBn" + }, + "source": [ + "# Synthetic Data generation (Part 1)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "VBoxtnxVdTWZ" + }, + "source": [ + "\n", + "Synthetic data generation using large language models (LLMs) offers a powerful solution to a commonly faced problem: the availability of high-quality, diverse, and privacy-compliant data. This could be used in a number of scenarios such as training a data science machine learning model (SVMs, decision trees, KNN's), finetuning a different GPT model on the data, as a solution to the coldstart problem, helping build compelling demos/apps with realistic data, scenario testing etc.\n", + "\n", + "There are a number of key drivers which may see you wanting to leverage synthetic data. \n", + "1. Human data may have privacy restrictions and/or identifiable data within it which we do not want to be used. \n", + "2. Synthetic data can be much more structured and therefore easier to manipulate than real data. \n", + "3. In domains where data is sparse or data of certain categories is sparse we may want to augment the data. \n", + "4. When dealing with imbalanced datasets or datasets which lack diversity, we may want to create data to improve the richness of our datasets.\n", + "\n", + "Unlike traditional data augmentation or manual data creation methods, using LLMs allows for the generation of rich, nuanced, and contextually relevant datasets that can significantly enhance it's usefulness to enterprises and developers.\n", + "\n", + "We split this tutorial into 2 parts. In this cookbook, we will have the following agenda:\n", + "1. CSV with a structured prompt\n", + "2. CSV with a Python program\n", + "3. Multitable CSV with a python program\n", + "4. Simply creating textual data\n", + "5. Dealing with imbalanced or non-diverse textual data\n", + "while in part 2, we will look at prompting strategies for getting better textual data.\n", + "\n", + "The last two in particular are useful for creating synthetic data to finetune another GPT model. For example using higher quality data produced by gpt-4 to finetune the cheaper and quicker gpt-3.5 for improved performance while reducing costs.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NE9Rr29zlRsA" + }, + "source": [ + "### Getting setup" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "YGncxYrgQ8eb" + }, + "outputs": [], + "source": [ + "%pip install openai\n", + "%pip install pandas\n", + "%pip install scikit-learn\n", + "%pip install matplotlib" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "id": "8pzwvE-YQPtU" + }, + "outputs": [], + "source": [ + "from openai import OpenAI\n", + "import re\n", + "import numpy as np\n", + "import pandas as pd\n", + "from sklearn.cluster import KMeans\n", + "import matplotlib.pyplot as plt\n", + "import json\n", + "import matplotlib" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "B8eAx4-JxaZB" + }, + "source": [ + "### 1. CSV with a structure prompt\n", + "Here we create data in the simplest way. You can quickly generate data by addressing 3 key points: telling it the format of the data (CSV), the schema, and useful information regarding how columns relate (the LLM will be able to deduce this from the column names but a helping hand will improve performance)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "dqbvepd0n4vS", + "outputId": "8735cacc-baa5-463e-938c-783e6b508b00" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "```csv\n", + "id,house size,house price,location,number of bedrooms\n", + "1,100,220000,Suburbs,3\n", + "2,80,180000,Suburbs,2\n", + "3,120,320000,Suburbs,4\n", + "4,65,160000,Countryside,2\n", + "5,150,500000,City Center,4\n", + "6,90,200000,Countryside,3\n", + "7,200,700000,City Center,5\n", + "8,180,600000,Suburbs,5\n", + "9,70,140000,Countryside,2\n", + "10,130,400000,City Center,3\n", + "```\n" + ] + } + ], + "source": [ + "datagen_model = \"gpt-4-0125-preview\"\n", + "question = \"\"\"\n", + "Create a CSV file with 10 rows of housing data.\n", + "Each row should include the following fields:\n", + " - id (incrementing integer starting at 1)\n", + " - house size (m^2)\n", + " - house price\n", + " - location\n", + " - number of bedrooms\n", + "\n", + "Make sure that the numbers make sense (i.e. more rooms is usually bigger size, more expensive locations increase price. more size is usually higher price etc. make sure all the numbers make sense). Also only respond with the CSV.\n", + "\"\"\"\n", + "\n", + "response = client.chat.completions.create(\n", + " model=datagen_model,\n", + " messages=[\n", + " {\"role\": \"system\", \"content\": \"You are a helpful assistant designed to generate synthetic data.\"},\n", + " {\"role\": \"user\", \"content\": question}\n", + " ]\n", + ")\n", + "res = response.choices[0].message.content\n", + "print(res)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6ym0NiIyxiVj" + }, + "source": [ + "### 2. CSV with a Python program\n", + "The issue with generating data directly is we are limited in the amount of data we can generate because of the context. Instead what we can do is ask the LLM to generate a python program to generate the synthetic data. This allows us to scale to much more data while also providing us a view into how the data was generated by inspecting the python program.\n", + "\n", + "This would then let us edit the python program as we desire while giving us a good basis to start from.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "2yDuwB5ZxWS3", + "outputId": "dcbe1093-90f0-4f60-d9c6-34bf679bb092" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "To generate synthetic housing data and output it as a Pandas DataFrame, we can use Python with the `pandas` and `numpy` libraries. Below is a script that creates 100 rows of housing data considering the prescribed logic for house size, price, and number of bedrooms. It also takes into account the impact of location on house price.\n", + "\n", + "First, ensure you have pandas and numpy installed. You can install them via pip if you haven't already:\n", + "\n", + "```\n", + "pip install pandas numpy\n", + "```\n", + "\n", + "The script:\n", + "\n", + "```python\n", + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "# Seed for reproducibility\n", + "np.random.seed(42)\n", + "\n", + "# Initialize the lists\n", + "ids = list(range(1, 101))\n", + "sizes = np.random.normal(150, 50, 100).astype(int) # House sizes with a mean of 150 m^2 and a std of 50\n", + "bedrooms = np.random.choice([1, 2, 3, 4, 5], 100) # Number of bedrooms\n", + "locations = np.random.choice(['Downtown', 'Suburb', 'Countryside'], 100, p=[0.4, 0.4, 0.2]) # Location of houses with a preferential distribution\n", + "\n", + "# Prices will be influenced by location, size, and bedrooms. This part is simplistic and can be made more complex.\n", + "base_price = 100000 # Base price\n", + "price_per_m2 = 1000 # Base price per m^2\n", + "extra_per_bedroom = 5000 # Extra cost per additional bedroom\n", + "\n", + "prices = []\n", + "\n", + "for i in range(100):\n", + " base_location_multiplier = 1.5 if locations[i] == 'Downtown' else 1.2 if locations[i] == 'Suburb' else 1\n", + " location_multiplier = base_location_multiplier * (1 + (sizes[i] / 1000)) # More expensive if bigger, especially downtown\n", + " price = base_price + (sizes[i] * price_per_m2) + (bedrooms[i] * extra_per_bedroom)\n", + " prices.append(int(price * location_multiplier))\n", + "\n", + "# Create DataFrame\n", + "data = {\n", + " 'id': ids,\n", + " 'house size (m^2)': sizes,\n", + " 'number of bedrooms': bedrooms,\n", + " 'location': locations,\n", + " 'house price': prices\n", + "}\n", + "\n", + "df = pd.DataFrame(data)\n", + "\n", + "print(df)\n", + "```\n", + "\n", + "This program initializes with a seed for reproducibility while creating randomized but plausible data for housing. The sizes are normally distributed around a mean value, and bedrooms are chosen from a set number. The pricing logic uses base values plus increases according to size, bedroom count, and a location multiplier, with downtown locations inflating prices more than suburbs or countryside locations. Adjustments are simplistic for the purpose of example and can be refined for more nuanced simulations.\n" + ] + } + ], + "source": [ + "question = \"\"\"\n", + "Create a Python program to generate 100 rows of housing data.\n", + "I want you to at the end of it output a pandas dataframe with 100 rows of data.\n", + "Each row should include the following fields:\n", + " - id (incrementing integer starting at 1)\n", + " - house size (m^2)\n", + " - house price\n", + " - location\n", + " - number of bedrooms\n", + "\n", + "Make sure that the numbers make sense (i.e. more rooms is usually bigger size, more expensive locations increase price. more size is usually higher price etc. make sure all the numbers make sense).\n", + "\"\"\"\n", + "\n", + "response = client.chat.completions.create(\n", + " model=datagen_model,\n", + " messages=[\n", + " {\"role\": \"system\", \"content\": \"You are a helpful assistant designed to generate synthetic data.\"},\n", + " {\"role\": \"user\", \"content\": question}\n", + " ]\n", + ")\n", + "res = response.choices[0].message.content\n", + "print(res)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We need to make sure to parse the output of this appropriately as often there may be surrounding text to the python code. We can also explicitly ask it to state all assumptions it made about the data it's generating, however in this circumstance it told us that automatically." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HZaJs7q8xm3L" + }, + "source": [ + "### 3. Multitable CSV with a python program\n", + "For more complex relationships however we need to make sure to specify a few more characteristics. \n", + "\n", + "To create multiple different datasets which relate to each other (for example housing, location, house type), as before we would need to specify the format, schema and useful information. However, the useful information required to get good performance is higher now. It's case-specific but a good amount of things to describe would be how the datasets relate to each other, addressing the size of the datasets in relation to one another, making sure foreign and primary keys are made appropriately and ideally using previously generated datasets to populate new ones so the actual data values match where necessary." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3TWAhIYIxnbS", + "outputId": "8f766838-b2f0-419a-a4fb-543d029afce5" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "To create a Python program generating three Pandas DataFrames as described, I'll lay out a step-by-step process considering the relationships between the different types of data:\n", + "\n", + "1. Install pandas if you haven't yet: `pip install pandas`\n", + "2. Import pandas and generate each DataFrame. I'll make some assumptions for the synthetic data to keep it relatively simple.\n", + "\n", + "Let's start coding:\n", + "\n", + "```python\n", + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "# Generating Location DataFrame\n", + "np.random.seed(42) # For reproducibility\n", + "location_data = {\n", + " 'id': range(1, 11), # Assuming 10 unique locations\n", + " 'country': ['CountryA'] * 5 + ['CountryB'] * 5,\n", + " 'city': ['City' + str(i) for i in range(1, 11)],\n", + " 'population': np.random.randint(100000, 1000000, size=10),\n", + " 'area': np.random.randint(500, 20000, size=10),\n", + "}\n", + "locations_df = pd.DataFrame(location_data)\n", + "\n", + "# Generating House Types DataFrame\n", + "house_types_data = {\n", + " 'id': range(1, 5), # Assuming 4 unique house types\n", + " 'house type': ['Villa', 'Apartment', 'Townhouse', 'Bungalow'],\n", + " 'average house type price': [300000, 200000, 250000, 220000], # Just arbitrary prices\n", + " 'number of houses': [25, 50, 15, 10], # Total = 100 houses, matching the housing data requirement\n", + "}\n", + "house_types_df = pd.DataFrame(house_types_data)\n", + "\n", + "# Generating Housing Data\n", + "housing_data = {\n", + " 'id': range(1, 101),\n", + " 'house size': np.random.randint(50, 500, size=100),\n", + " 'house price': [], # To be calculated based on size, location, etc.\n", + " 'location_id': np.random.choice(locations_df['id'], size=100),\n", + " 'number of bedrooms': np.random.randint(1, 6, size=100),\n", + " 'house_type_id': np.random.choice(house_types_df['id'], size=100),\n", + "}\n", + "# Simple model to calculate house price based on size, type, and a base price from the location's median\n", + "base_prices = locations_df['population'] / 100000 # Simplified assumption: more populous => more expensive\n", + "housing_data['house price'] = [\n", + " (1200 * size) + (house_types_df.loc[type_id - 1, 'average house type price']) + (base_prices[loc_id - 1] * 1000)\n", + " for size, type_id, loc_id\n", + " in zip(housing_data['house size'], housing_data['house_type_id'], housing_data['location_id'])\n", + "]\n", + "\n", + "housing_df = pd.DataFrame(housing_data)\n", + "\n", + "# Display the first few rows of each DataFrame\n", + "print(locations_df.head())\n", + "print(house_types_df.head())\n", + "print(housing_df.head())\n", + "```\n", + "\n", + "Notes:\n", + "- This script assumes 10 unique locations and 4 house types for simplicity.\n", + "- House prices are arbitrarily calculated using the house size, type, and a base price influenced by the location's population. Reality would require a more complex model.\n", + "- `numpy.random.randint` is used to generate integer values. Similarly, `numpy.random.choice` is used to randomly assign locations and house types to each house, demonstrating a form of foreign key relationship.\n", + "- For simplicity, foreign keys are represented by corresponding ID fields (e.g., `location_id` in the housing data references the `id` in the location data).\n", + "\n", + "This simple synthetic data generation strategy illustrates creating related data sets with Python and pandas. The synthetic data should make general sense within the constraints provided, but keep in mind that for more complex or realistic data modeling, you'd need to incorporate more detailed rules and possibly real-world data.\n" + ] + } + ], + "source": [ + "question = \"\"\"\n", + "Create a Python program to generate 3 different pandas dataframes.\n", + "\n", + "1. Housing data\n", + "I want 100 rows. Each row should include the following fields:\n", + " - id (incrementing integer starting at 1)\n", + " - house size (m^2)\n", + " - house price\n", + " - location\n", + " - number of bedrooms\n", + " - house type\n", + " + any relevant foreign keys\n", + "\n", + "2. Location\n", + "Each row should include the following fields:\n", + " - id (incrementing integer starting at 1)\n", + " - country\n", + " - city\n", + " - population\n", + " - area (m^2)\n", + " + any relevant foreign keys\n", + "\n", + " 3. House types\n", + " - id (incrementing integer starting at 1)\n", + " - house type\n", + " - average house type price\n", + " - number of houses\n", + " + any relevant foreign keys\n", + "\n", + "Make sure that the numbers make sense (i.e. more rooms is usually bigger size, more expensive locations increase price. more size is usually higher price etc. make sure all the numbers make sense).\n", + "Make sure that the dataframe generally follow common sense checks, e.g. the size of the dataframes make sense in comparison with one another.\n", + "Make sure the foreign keys match up and you can use previously generated dataframes when creating each consecutive dataframes.\n", + "You can use the previously generated dataframe to generate the next dataframe.\n", + "\"\"\"\n", + "\n", + "response = client.chat.completions.create(\n", + " model=datagen_model,\n", + " messages=[\n", + " {\"role\": \"system\", \"content\": \"You are a helpful assistant designed to generate synthetic data.\"},\n", + " {\"role\": \"user\", \"content\": question}\n", + " ]\n", + ")\n", + "res = response.choices[0].message.content\n", + "print(res)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Yv9XlRtauZYZ" + }, + "source": [ + "### 4. Simply creating textual data\n", + "Here we take a first look at creating textual data. This can be used to finetune another GPT model for example. In this case we imagine ourselves a retailer trying to streamline the process of creating descriptions for items they are selling. We again need to specify the format of the data, in particular in this case we want one which is easy to parse as an output." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The example we consider below is one in which we want to create input output training pairs for GPT model to finetune on. We will have the products' name and the category it belongs to as input and the output will be a description. \n", + "\n", + "Specifying the structure of the output explicitly and giving commands to not deviate from this help enforce the output structure. You can run this in a loop and append the data to generate more synthetic data. Again, as before we will need to parse the data well so that our code further downstream does not break." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "id": "2KJVwjV0upby" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.\n", + "Input: Northface Waterproof Jacket, Clothing\n", + "Output: Stay dry and stylish with the Northface Waterproof Jacket. Perfect for outdoor adventurers and city dwellers alike, this jacket combines cutting-edge waterproof technology with a sleek, modern design. Ideal for unpredictable weather, it ensures you're prepared for anything Mother Nature throws your way.\n", + "\n", + "2.\n", + "Input: Apple iPhone 12, Electronics\n", + "Output: Experience the next level of innovation with the Apple iPhone 12. Featuring a stunning Super Retina XDR display, a powerful A14 Bionic chip, and advanced dual-camera system, this phone is designed to push the boundaries of what's possible. With 5G capability for super-fast downloads and high-quality streaming, it's the perfect device for tech enthusiasts.\n", + "\n", + "3.\n", + "Input: Adidas Ultraboost Sneakers, Footwear\n", + "Output: Revolutionize your running experience with Adidas Ultraboost Sneakers. Engineered for long-lasting comfort and superior performance, these sneakers feature the innovative Boost \n" + ] + } + ], + "source": [ + "output_string = \"\"\n", + "for i in range(3):\n", + " question = f\"\"\"\n", + " I am creating input output training pairs to fine tune my gpt model. The usecase is a retailer generating a description for a product from a product catalogue. I want the input to be product name and category (to which the product belongs to) and output to be description.\n", + " The format should be of the form:\n", + " 1.\n", + " Input: product_name, category\n", + " Output: description\n", + " 2.\n", + " Input: product_name, category\n", + " Output: description\n", + "\n", + " Do not add any extra characters around that formatting as it will make the output parsing break.\n", + " Create as many training pairs as possible.\n", + " \"\"\"\n", + "\n", + " response = client.chat.completions.create(\n", + " model=datagen_model,\n", + " messages=[\n", + " {\"role\": \"system\", \"content\": \"You are a helpful assistant designed to generate synthetic data.\"},\n", + " {\"role\": \"user\", \"content\": question}\n", + " ]\n", + " )\n", + " res = response.choices[0].message.content\n", + " output_string += res + \"\\n\" + \"\\n\"\n", + "print(output_string[:1000]) #displaying truncated response\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "K5EmKTEa7GlC" + }, + "source": [ + "Note: the above output is truncated. And now we can parse it as below to get a list of products, categories and their descriptions. For example, let's take a look at the products it's generated." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "owvoyJBh0o2n", + "outputId": "ee48bcc9-fd29-42bf-9beb-ef3800cdbcb2" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['Northface Waterproof Jacket',\n", + " 'Apple iPhone 12',\n", + " 'Adidas Ultraboost Sneakers',\n", + " 'LEGO Star Wars Millennium Falcon',\n", + " 'Vitamix Professional Series 750 Blender',\n", + " 'Panasonic Lumix GH5 Camera',\n", + " 'Moleskine Classic Notebook',\n", + " 'Bodum French Press Coffee Maker',\n", + " 'Classic White Sneakers',\n", + " 'Multi-Purpose Blender',\n", + " 'Eco-Friendly Yoga Mat',\n", + " 'Organic Green Tea',\n", + " 'Smart LED Light Bulb',\n", + " 'Waterproof Hiking Boots',\n", + " 'Bamboo Toothbrush',\n", + " 'Modern Minimalist Floor Lamp',\n", + " 'Classic Leather Office Chair',\n", + " 'Stainless Steel French Press',\n", + " 'Eco-Friendly Bamboo Cutting Board',\n", + " 'Ultimate Gaming Laptop',\n", + " 'Waterproof Hiking Boots',\n", + " 'Compact Travel Umbrella',\n", + " \"Professional Chef's Knife\"]" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#regex to parse data\n", + "pattern = re.compile(r'Input:\\s*(.+?),\\s*(.+?)\\nOutput:\\s*(.+?)(?=\\n\\n|\\Z)', re.DOTALL)\n", + "matches = pattern.findall(output_string)\n", + "products = []\n", + "categories = []\n", + "descriptions = []\n", + "\n", + "for match in matches:\n", + " product, category, description = match\n", + " products.append(product.strip())\n", + " categories.append(category.strip())\n", + " descriptions.append(description.strip())\n", + "products" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bO3PgRwpyocn" + }, + "source": [ + "\n", + "### 5. Dealing with imbalanced or non-diverse textual data\n", + "Some of the most important aspects of generating high-quality synthetic data are accuracy (does the data make sense), consistency (are two separate data points for the same input roughly the same) and diversity (making sure our data distribution matches as much of the distribution that exists in production).\n", + "\n", + "\n", + "To increase the diversity of our data, we start first by clustering the data. This will provide us information about which clusters are underrepresented (imbalanced dataset) or which data is not addressed at all (widening the data distribution). Then, we will either suggest new clusters (using self-reflection type call from GPT) or ask the next iteration of our synthetic generation calls to explicitly target the underrepresented clusters. \n", + "\n", + "We can then recursively run this generation and analysis of cluster loop to automate generating diverse synthetic data." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ubdPEFYR-myU" + }, + "source": [ + "For demonstrative purposes, we explicitly prompt the LLM to generate information about 4 different topical areas: vehicle, clothing, toiletries, food. We will then cluster the data and see if it managed to find these 4 topic areas." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "m-yncn8s1hWZ", + "outputId": "35ae248d-4859-4d3f-ba29-94478aed7305" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2) toiletries\n", + "Input: \"Toothbrush X5+, Electronic toothbrush\"\n", + "Output: \"Experience a superior cleanse with the Toothbrush X5+. It comes equipped with an advanced sonic technology that guarantees a gentle yet effective clean every time.\"\n", + "\n", + "3) vehicle\n", + "Input: \"Pegasus Pro 300, Motorcycle\"\n", + "Output: \"Dominate the road with the stylish Pegasus Pro 300. This motorcycle guarantees a powerful, efficient, and thrilling performance on every ride.\"\n", + "\n", + "4) food\n", + "Input: \"Tasty Delight Instant Noodles, Instant food\"\n", + "Output: \"Tasty Delight Instant Noodles offer a quick, delicious meal ready in minutes. The perfect solution for those stepping up their cooking game.\"\n", + "\n", + "5) clothing\n", + "Input: \"UltraSport Men's Running Jacket, Sportswear\"\n", + "Output: \"UltraSport Men's Running Jacket combines functionality and style. The breathable material allows for comfortable workouts, even in colder weather.\"\n", + "\n", + "6) toiletries\n", + "Input: \"FreshBliss Shower Gel, Bath and body\"\n", + "Output: \"Indulge in luxury every morning with the FreshBliss Showe\n" + ] + } + ], + "source": [ + "output_string = \"\"\n", + "for i in range(3):\n", + " question = f\"\"\"\n", + " I am creating input output training pairs to fine tune my gpt model. I want the input to be product name and category and output to be description. the category should be things like: mobile phones, shoes, headphones, laptop, electronic toothbrush, etc. and also more importantly the categories should come under 4 main topics: vehicle, clothing, toiletries, food)\n", + " After the number of each example also state the topic area. The format should be of the form:\n", + " 1. topic_area\n", + " Input: product_name, category\n", + " Output: description\n", + "\n", + " Do not add any extra characters around that formatting as it will make the output parsing break.\n", + "\n", + " Here are some helpful examples so you get the style of output correct.\n", + "\n", + " 1) clothing\n", + " Input: \"Shoe Name, Shoes\"\n", + " Output: \"Experience unparalleled comfort. These shoes feature a blend of modern style and the traditional superior cushioning, perfect for those always on the move.\"\n", + " \"\"\"\n", + "\n", + " response = client.chat.completions.create(\n", + " model=\"gpt-4\",\n", + " messages=[\n", + " {\"role\": \"system\", \"content\": \"You are a helpful assistant designed to generate synthetic data.\"},\n", + " {\"role\": \"user\", \"content\": question}\n", + " ]\n", + " )\n", + " res = response.choices[0].message.content\n", + " output_string += res + \"\\n\" + \"\\n\"\n", + "print(output_string[:1000]) #displaying truncated response" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note: The above output is truncated. In the example above, we would explicitly include the topic area as part of the response per example as it helps condition the proceeding output and tends to give better performance. We can also give it an actual example of what the output should look like so it gets the right idea of style of output but also to help enforce structure." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "id": "k7GAokEC1hUY" + }, + "outputs": [], + "source": [ + "pattern = re.compile(r'(\\d+)\\) (\\w+(?: \\w+)?)\\s*Input: \"(.+?), (.+?)\"\\s*Output: \"(.+?)\"', re.DOTALL)\n", + "matches = pattern.findall(output_string)\n", + "\n", + "\n", + "topics = []\n", + "products = []\n", + "categories = []\n", + "descriptions = []\n", + "\n", + "for match in matches:\n", + " number, topic, product, category, description = match\n", + " topics.append(topic)\n", + " products.append(product)\n", + " categories.append(category)\n", + " descriptions.append(description)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Z49B3LrJ1hSG", + "outputId": "d76a9038-1879-44d9-f1db-dc933e066c54" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['Toothbrush X5+',\n", + " 'Pegasus Pro 300',\n", + " 'Tasty Delight Instant Noodles',\n", + " \"UltraSport Men's Running Jacket\",\n", + " 'FreshBliss Shower Gel',\n", + " 'OceanBlue Yacht 700',\n", + " 'FarmFresh Organic Apples',\n", + " \"Elegance Women's Velvet Dress\",\n", + " \"GentleCare Men's Face Wash\",\n", + " 'AquaBreathe',\n", + " 'Lunar Ride',\n", + " 'Sunrise Juice',\n", + " 'TitanFlex',\n", + " 'GlowRadiant',\n", + " 'SolarSpeed',\n", + " 'HealthyBite',\n", + " 'Brushify',\n", + " 'Choco Crunchy',\n", + " 'Super X100',\n", + " 'Le Bliz',\n", + " 'Purely Lavender',\n", + " 'Cheesy Delight',\n", + " 'EcoSprint',\n", + " 'Denim Duo',\n", + " 'Fresh Dawn']" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "products" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "J1qKxLkAzKq0" + }, + "source": [ + "We will now cluster the data to analyze it. We will use K-means clustering to segregate the data. An important parameter of K-means to set is K, the number of clusters.\n", + "\n", + "We know that there should be 4 cluster (4 topics) since we specified this in prompt: vehicle, electronics, clothing, food. However in general for our data, we do not know the number of clusters that exist. Therefore we will use the elbow method to find the optimal number of clusters.\n", + "\n", + "In the elbow method, we iterate through a range of different K's, each time storing the inertia. The inertia measures the sum of the squared distances between each point in a cluster and the centroid of that cluster thus telling us how well-separated and dense each cluster is. If we plot K against the inertia, we are able to see how the inertia drops and where the drop in inertia is least rapid (often making an elbow shape) we can set our optimal number of clusters. You can read into more depth about the elbow method [here](https://en.wikipedia.org/wiki/Elbow_method_(clustering))." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1BxwPTkpGzu8" + }, + "source": [ + "First let's store our data into a pandas dataframe for ease of analysis\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "id": "XcPBzORtKWv6" + }, + "outputs": [], + "source": [ + "data = {\n", + " 'Product': products,\n", + " 'Category': categories,\n", + " 'Description': descriptions\n", + "}\n", + "\n", + "df = pd.DataFrame(data)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HQbg6r37KjG0" + }, + "source": [ + "Next let us embed our data as the embeddings is what we will cluster since they should be close to each other in vector space if they are similar." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "id": "l8M7MX-1Jctr" + }, + "outputs": [], + "source": [ + "def get_embedding(text, model=\"text-embedding-3-small\"):\n", + " text = text.replace(\"\\n\", \" \")\n", + "\n", + " response = client.embeddings.create(input=[text], model=model)\n", + "\n", + " return response.data[0].embedding\n", + "\n", + "embedding_model = \"text-embedding-3-small\"\n", + "df[\"embedding\"] = df.Category.apply(lambda x: get_embedding(x, model=embedding_model))\n", + "\n", + "matrix = np.vstack(df.embedding.values)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZcdZscBNKy0F" + }, + "source": [ + "Now we perform the elbow method. " + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 981 + }, + "id": "1Azw_xgVl_aY", + "outputId": "5b7076aa-a03c-4a40-f52c-08b09248cf18" + }, + "outputs": [], + "source": [ + "# Determine the optimal number of clusters using the elbow method\n", + "inertias = []\n", + "range_of_clusters = range(1, 13) # Adjust the range as necessary\n", + "\n", + "for n_clusters in range_of_clusters:\n", + " kmeans = KMeans(n_clusters=n_clusters, init=\"k-means++\", random_state=42, n_init=10)\n", + " kmeans.fit(matrix)\n", + " inertias.append(kmeans.inertia_)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This will output a chart for us in which we have to visually tell where the optimal cluster point is. We can see below that we see a gradual decrease of inertia rather than a sharp elbow but the point of steepest decrease appears to occur around 3, 4 or 5 clusters which lines up with our expectations given our prompt. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Plotting the elbow plot\n", + "plt.figure(figsize=(10, 6))\n", + "plt.plot(range_of_clusters, inertias, '-o')\n", + "plt.title('Elbow Method to Determine Optimal Number of Clusters')\n", + "plt.xlabel('Number of Clusters')\n", + "plt.ylabel('Inertia')\n", + "plt.xticks(range_of_clusters)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![elbow_chart](../images/elbow_chart.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NN7NbTmiLe_-" + }, + "source": [ + "For demonstration purposes we will pick 5 as the optimal cluster number to show it doesn't matter exactly where we pick it as long as we are approximately right. There are numerous correct ways to categorize data. We also store which cluster each data point belongs to." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "KvrDe3WYKWgZ", + "outputId": "d0d95227-b9d2-4c52-a5f7-59159ba848d2" + }, + "outputs": [], + "source": [ + "n_clusters = 5\n", + "\n", + "kmeans = KMeans(n_clusters=n_clusters, init=\"k-means++\", random_state=42)\n", + "kmeans.fit(matrix)\n", + "labels = kmeans.labels_\n", + "df[\"Cluster\"] = labels" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tLvO4AISDM0J" + }, + "source": [ + "We will analyze the cluster data now. There are two separate things we will look to address. 1. imbalanced data, 2. Expanding the data distribution." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zaQ_mdhpOJqs" + }, + "source": [ + "First for imbalanced data we count the number of examples in each cluster. Then we select a few examples from each cluster at random and ask the LLM what topics these map to. " + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "crUT7OR7QcFD", + "outputId": "04f49ac2-1259-4622-bcf2-0686af93068c" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cluster\n", + "0 4\n", + "1 7\n", + "2 6\n", + "3 4\n", + "4 4\n", + "Name: count, dtype: int64\n" + ] + } + ], + "source": [ + "cluster_counts = df[\"Cluster\"].value_counts().sort_index()\n", + "print(cluster_counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8i1FGtM-Xx3k" + }, + "source": [ + "We can see the topics found here:\n", + "Eco-friendly Transportation, Luxury and Leisure Items, Personal Care Products, Electronic Toothbrushes and Clothing and Apparel\n", + "match well enough but not exactly to our initial prompt of:\n", + "vehicle, clothing, toiletries, food.\n", + "\n", + "As we chose 5 clusters, it split up toiletries into Skincare and Personal Care which doesn't affect us too much further downstream." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "RRwIet9DUdKe", + "outputId": "8e7835c9-884a-4504-bbed-f556382dd9f5" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\n", + " {\n", + " \"cluster\": 0,\n", + " \"topic\": \"Electronic Toothbrushes\"\n", + " },\n", + " {\n", + " \"cluster\": 1,\n", + " \"topic\": \"Clothing and Apparel\"\n", + " },\n", + " {\n", + " \"cluster\": 2,\n", + " \"topic\": \"Personal Care Products\"\n", + " },\n", + " {\n", + " \"cluster\": 3,\n", + " \"topic\": \"Eco-friendly Transportation\"\n", + " },\n", + " {\n", + " \"cluster\": 4,\n", + " \"topic\": \"Luxury and Leisure Items\"\n", + " }\n", + "]\n" + ] + } + ], + "source": [ + "selected_examples = df.groupby('Cluster').apply(lambda x: x.sample(3)).reset_index(drop=True)\n", + "\n", + "# Format the selected examples\n", + "formatted_examples = \"\\n\".join(\n", + " f'Input: \"{row[\"Product\"]}, {row[\"Category\"]}\"\\nOutput: \"{row[\"Description\"]}\"\\nCluster: \"{row[\"Cluster\"]}\"'\n", + " for _, row in selected_examples.iterrows()\n", + ")\n", + "\n", + "topic_prompt = f\"\"\"\n", + " I previously generated some examples of input output trainings pairs and then I clustered them based on category. From each cluster I picked 3 example data point which you can find below.\n", + " I want you identify the broad topic areas these clusters belong to.\n", + " Previous examples:\n", + " {formatted_examples}\n", + "\n", + "\n", + " Your output should be strictly of the format:\n", + " Cluster: number, topic: topic\n", + " Cluster: number, topic: topic\n", + " Cluster: number, topic: topic\n", + "\n", + " Do not add any extra characters around that formatting as it will make the output parsing break.\n", + " \"\"\"\n", + "\n", + "response = client.chat.completions.create(\n", + " model=datagen_model,\n", + " messages=[\n", + " {\"role\": \"system\", \"content\": \"You are a helpful assistant designed analyze clustered data\"},\n", + " {\"role\": \"user\", \"content\": topic_prompt}\n", + " ]\n", + ")\n", + "res = response.choices[0].message.content\n", + "\n", + "pattern = r\"Cluster: (\\d+), topic: ([^\\n]+)\"\n", + "matches = re.findall(pattern, res)\n", + "clusters = [{\"cluster\": int(cluster), \"topic\": topic} for cluster, topic in matches]\n", + "json_output = json.dumps(clusters, indent=2)\n", + "print(json_output)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "x5hszl-SZVdi" + }, + "source": [ + "We now have the clusters and their counts so we could prompt the LLM to generate more examples within the topics we want. However for this example we won't take that further as they are well-split and you would just follow the procedure above for prompting the model to generate data while passing in the underrepresented topics." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yVD_TPsHYvDb" + }, + "source": [ + "Next, we will try and deal with increasing the diversity of our data distribution. \n", + "\n", + "First we start in a similar way by finding a few examples from each cluster at random and ask the LLM what topics these map to. In addition to this in the same LLM call, we will ask it to generate more topics to increase the diversity of our data. We do this in one call to save time/cost." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 53 + }, + "id": "mZjBbfFaZ3mn", + "outputId": "8864421a-e9d4-4ea6-f747-a76a3291a593" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1. Cluster topic mapping\n", + "Cluster: 0, topic: Electronic/Health Products\n", + "Cluster: 1, topic: Fashion and Food\n", + "Cluster: 2, topic: Personal Care/Wellness\n", + "Cluster: 3, topic: Eco-friendly Transportation\n", + "Cluster: 4, topic: Chocolate/Motorcycles\n", + "\n", + "2. New topics\n", + "1. Home Automation Gadgets\n", + "2. Educational Tools and Apps\n", + "3. Renewable Energy Solutions\n", + "4. Virtual Reality Experiences\n" + ] + } + ], + "source": [ + "selected_examples = df.groupby('Cluster').apply(lambda x: x.sample(3)).reset_index(drop=True)\n", + "\n", + "# Format the selected examples\n", + "formatted_examples = \"\\n\".join(\n", + " f'Input: \"{row[\"Product\"]}, {row[\"Category\"]}\"\\nOutput: \"{row[\"Description\"]}\"\\nCluster: \"{row[\"Cluster\"]}\"'\n", + " for _, row in selected_examples.iterrows()\n", + ")\n", + "\n", + "topic_prompt = f\"\"\"\n", + " I previously generated some examples of input output trainings pairs and then I clustered them based on category. From each cluster I picked 3 example data point which you can find below.\n", + " I want to promote diversity in my examples across categories so follow the procedure below:\n", + " 1. You must identify the broad topic areas these clusters belong to.\n", + " 2. You should generate further topic areas which don't exist so I can generate data within these topics to improve diversity.\n", + "\n", + "\n", + " Previous examples:\n", + " {formatted_examples}\n", + "\n", + "\n", + " Your output should be strictly of the format:\n", + "\n", + " 1. Cluster topic mapping\n", + " Cluster: number, topic: topic\n", + " Cluster: number, topic: topic\n", + " Cluster: number, topic: topic\n", + "\n", + " 2. New topics\n", + " 1. topic\n", + " 2. topic\n", + " 3. topic\n", + " 4. topic\n", + "\n", + " Do not add any extra characters around that formatting as it will make the output parsing break. It is very important you stick to that output format\n", + " \"\"\"\n", + "\n", + "response = client.chat.completions.create(\n", + " model=datagen_model,\n", + " messages=[\n", + " {\"role\": \"system\", \"content\": \"You are a helpful assistant designed to analyze clustered data\"},\n", + " {\"role\": \"user\", \"content\": topic_prompt}\n", + " ]\n", + ")\n", + "res = response.choices[0].message.content\n", + "print(res)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see here again that we explicitly prompt the output structure it should follow. I also tell it the purpose of generating topics (to promote diversity) so the model has full context." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "s254oJ-Ecka0" + }, + "source": [ + "We then parse the data into a list of cluster-mapping jsons and a list of topics" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "HTS4ybspcivw", + "outputId": "52ea363c-cbf5-420e-b81e-0d2710c50203" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "([{'cluster': 0, 'topic': 'Electronic/Health Products'},\n", + " {'cluster': 1, 'topic': 'Fashion and Food'},\n", + " {'cluster': 2, 'topic': 'Personal Care/Wellness'},\n", + " {'cluster': 3, 'topic': 'Eco-friendly Transportation'},\n", + " {'cluster': 4, 'topic': 'Chocolate/Motorcycles'}],\n", + " ['Home Automation Gadgets',\n", + " 'Educational Tools and Apps',\n", + " 'Renewable Energy Solutions',\n", + " 'Virtual Reality Experiences'])" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "parts = res.split(\"\\n\\n\")\n", + "cluster_mapping_part = parts[0]\n", + "new_topics_part = parts[1]\n", + "\n", + "# Parse cluster topic mapping\n", + "cluster_topic_mapping_lines = cluster_mapping_part.split(\"\\n\")[1:] # Skip the first two lines\n", + "cluster_topic_mapping = [{\"cluster\": int(line.split(\",\")[0].split(\":\")[1].strip()), \"topic\": line.split(\":\")[2].strip()} for line in cluster_topic_mapping_lines]\n", + "\n", + "# Parse new topics\n", + "new_topics_lines = new_topics_part.split(\"\\n\")[1:] # Skip the first line\n", + "new_topics = [line.split(\". \")[1] for line in new_topics_lines]\n", + "\n", + "cluster_topic_mapping, new_topics" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CX26-PGdcui0" + }, + "source": [ + "And finally we can use this information to further prompt a model to keep generating synthetic data. We do this by passing all the topics in the list of jsons to the prompt below." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zHf4LnVk0aHw" + }, + "outputs": [], + "source": [ + "output_string = \"\"\n", + "for i in range(3):\n", + " question = f\"\"\"\n", + " I am creating input output training pairs to fine tune my gpt model. I want the input to be product name and category and output to be description. the category should be things like: mobile phones, shoes, headphones, laptop, electronic toothbrush, etc. and also more importantly the categories should come under some main topics: {[entry['topic'] for entry in cluster_topic_mapping]})\n", + " After the number of each example also state the topic area. The format should be of the form:\n", + " 1. topic_area\n", + " Input: product_name, category\n", + " Output: description\n", + "\n", + " Do not add any extra characters around that formatting as it will make the output parsing break.\n", + "\n", + " Here are some helpful examples so you get the style of output correct.\n", + "\n", + " 1) clothing\n", + " Input: \"Shoe Name, Shoes\"\n", + " Output: \"Experience unparalleled comfort. These shoes feature a blend of modern style and the traditional superior cushioning, perfect for those always on the move.\"\n", + " \"\"\"\n", + "\n", + " response = client.chat.completions.create(\n", + " model=\"gpt-4\",\n", + " messages=[\n", + " {\"role\": \"system\", \"content\": \"You are a helpful assistant designed to generate synthetic data.\"},\n", + " {\"role\": \"user\", \"content\": question}\n", + " ]\n", + " )\n", + " res = response.choices[0].message.content\n", + " output_string += res + \"\\n\" + \"\\n\"\n", + "print(output_string)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "RQMHQxnZdRug" + }, + "source": [ + "You can run this in a loop to append to your previous data and in this way you can keep generating more textual synthetic data to train another GPT model while making sure that we cater to imbalanced datasets and generating a diversity of data." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Hiim8Xg5djGH" + }, + "source": [ + "You have now completed part 1 of the synthetic data generation tutorial where we have gone through:\n", + "* CSV with a structured prompt\n", + "* CSV with a Python program\n", + "* Multitable CSV with a python program\n", + "* Simply creating textual data\n", + "* Dealing with imbalanced or non-diverse textual data\n", + "\n", + "In part 2 you will find find out techniques for better prompting an LLM to enhance textual synthetic data generation." + ] + } + ], + "metadata": { + "colab": { + "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.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/images/elbow_chart.png b/images/elbow_chart.png new file mode 100644 index 0000000000000000000000000000000000000000..1d8645b7d70362563cbee50fada7b84c28bbb6e0 GIT binary patch literal 126413 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 z

I#LQlt?P;T6(;H(pS-Yu%MDifv*`Rw#`n83k+3D!^vHx7DcG7*p)!r}D=9aA-J zoBK{A^CH4=r7Y$A%J+9(YnNHW3b&d2G<;PS=*3E2yzHRjsxh6jsm5lY0C5=b`W|lP zj=7_fK%&i6py5t4I^gmyn6wsfh@=vbVktDVxu?4c(63qNphp=75{Yu!PtfstWA!q; zUgM6V!mnh$<{|0&VT(xTLK;JFHfJgAm?9*AGqyxR(kiM*SIfsmohLSQ-U?Phlg{l; z)DR*Eoiw5@@kA*Hz7}C~70uLx9n5oG;)k!dlu0QINt7xG0i!z9_@RdCRv+4LmC^n- z&rwUJJfADyZ%wm9Ax_I|>? zGn*OFH1^Dl?;sN7j@Fb@olkNPw^Xi%Q8=8z_RuoE(eUii$}d;+Z*^o;?{80_0dwMg z=Q<);s=efWw4`>jOG*^KwcAKk8}bLa+XP4iKMryh_g0_&F2cQ(3UI@bPrm$3`THG9 z{QJeI^u}r+(HDabPMpnVQkP979KJG1fW7oiU0rr literal 0 HcmV?d00001 diff --git a/registry.yaml b/registry.yaml index a6a655d1..49abc42a 100644 --- a/registry.yaml +++ b/registry.yaml @@ -1242,6 +1242,25 @@ - teomusatoiu tags: - moderation + + +- title: Summarizing with controllable detail + path: examples/Summarizing_with_controllable_detail.ipynb + date: 2024-04-01 + authors: + - joe-at-openai + tags: + - chat + + +- title: Synthetic data generation (Part 1) + path: examples/SDG1.ipynb + date: 2024-04-10 + authors: + - dylanra-openai + tags: + - completions + - title: CLIP embeddings to improve multimodal RAG with GPT-4 Vision path: examples/custom_image_embedding_search.ipynb @@ -1251,11 +1270,4 @@ tags: - vision - embeddings - -- title: Summarizing with controllable detail - path: examples/Summarizing_with_controllable_detail.ipynb - date: 2024-04-01 - authors: - - joe-at-openai - tags: - - chat + \ No newline at end of file