{"id":305,"date":"2023-06-01T06:26:15","date_gmt":"2023-06-01T04:26:15","guid":{"rendered":"https:\/\/www.syntera.ch\/blog\/?p=305"},"modified":"2023-10-12T08:07:59","modified_gmt":"2023-10-12T06:07:59","slug":"customizing-chatgpt-answering-questions-about-your-own-data-with-embeddings","status":"publish","type":"post","link":"https:\/\/www.syntera.ch\/blog\/2023\/06\/01\/customizing-chatgpt-answering-questions-about-your-own-data-with-embeddings\/","title":{"rendered":"Customizing ChatGPT: Answering Questions about Your Own Data with Embeddings"},"content":{"rendered":"\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-f56f613f wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-post-author has-medium-font-size\"><div class=\"wp-block-post-author__avatar\"><img alt='' src='https:\/\/secure.gravatar.com\/avatar\/bd3589b8a6ccc62e37c3cee8f8e06c73a4085816337ad7d6c154e30dc60cc4c1?s=48&#038;d=mm&#038;r=g' srcset='https:\/\/secure.gravatar.com\/avatar\/bd3589b8a6ccc62e37c3cee8f8e06c73a4085816337ad7d6c154e30dc60cc4c1?s=96&#038;d=mm&#038;r=g 2x' class='avatar avatar-48 photo' height='48' width='48' \/><\/div><div class=\"wp-block-post-author__content\"><p class=\"wp-block-post-author__byline\">LEAD DATA ENGINEERING<\/p><p class=\"wp-block-post-author__name\">Dominic Schranz<\/p><\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-top is-layout-flow wp-block-column-is-layout-flow\">\n<ul class=\"wp-block-outermost-social-sharing alignright has-small-icon-size has-icon-color is-style-logos-only is-content-justification-left is-layout-flex wp-container-outermost-social-sharing-is-layout-fa5e4718 wp-block-outermost-social-sharing-is-layout-flex\"><li style=\"color: #1a4548\" class=\"outermost-social-sharing-link outermost-social-sharing-link-linkedin has-primary-color wp-block-outermost-social-sharing-link\">\n\t<a href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fwww.syntera.ch%2Fblog%2F2023%2F06%2F01%2Fcustomizing-chatgpt-answering-questions-about-your-own-data-with-embeddings%2F&#038;title=Customizing%20ChatGPT%3A%20Answering%20Questions%20about%20Your%20Own%20Data%20with%20Embeddings\" aria-label=\"Share on LinkedIn\" rel=\"noopener nofollow\" target=\"_blank\" class=\"wp-block-outermost-social-sharing-link-anchor\">\n\t\t<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg>\t\t<span class=\"wp-block-outermost-social-sharing-link-label screen-reader-text\">\n\t\t\tShare on LinkedIn\t\t<\/span>\n\t<\/a>\n<\/li>\n\n\n<li style=\"color: #1a4548\" class=\"outermost-social-sharing-link outermost-social-sharing-link-mail has-primary-color wp-block-outermost-social-sharing-link\">\n\t<a href=\"mailto:?subject=Customizing%20ChatGPT%3A%20Answering%20Questions%20about%20Your%20Own%20Data%20with%20Embeddings&#038;body=Customizing%20ChatGPT%3A%20Answering%20Questions%20about%20Your%20Own%20Data%20with%20Embeddings%20&mdash;%20https%3A%2F%2Fwww.syntera.ch%2Fblog%2F2023%2F06%2F01%2Fcustomizing-chatgpt-answering-questions-about-your-own-data-with-embeddings%2F\" aria-label=\"Email this Page\"  class=\"wp-block-outermost-social-sharing-link-anchor\">\n\t\t<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20,4H4C2.895,4,2,4.895,2,6v12c0,1.105,0.895,2,2,2h16c1.105,0,2-0.895,2-2V6C22,4.895,21.105,4,20,4z M20,8.236l-8,4.882 L4,8.236V6h16V8.236z\"><\/path><\/svg>\t\t<span class=\"wp-block-outermost-social-sharing-link-label screen-reader-text\">\n\t\t\tEmail this Page\t\t<\/span>\n\t<\/a>\n<\/li>\n\n\n<li style=\"color: #1a4548\" class=\"outermost-social-sharing-link outermost-social-sharing-link-whatsapp has-primary-color wp-block-outermost-social-sharing-link\">\n\t<a href=\"https:\/\/api.whatsapp.com\/send?text=Customizing%20ChatGPT%3A%20Answering%20Questions%20about%20Your%20Own%20Data%20with%20Embeddings%20&mdash;%20https%3A%2F%2Fwww.syntera.ch%2Fblog%2F2023%2F06%2F01%2Fcustomizing-chatgpt-answering-questions-about-your-own-data-with-embeddings%2F\" aria-label=\"Share on WhatsApp\" rel=\"noopener nofollow\" target=\"_blank\" class=\"wp-block-outermost-social-sharing-link-anchor\">\n\t\t<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M 12.011719 2 C 6.5057187 2 2.0234844 6.478375 2.0214844 11.984375 C 2.0204844 13.744375 2.4814687 15.462563 3.3554688 16.976562 L 2 22 L 7.2324219 20.763672 C 8.6914219 21.559672 10.333859 21.977516 12.005859 21.978516 L 12.009766 21.978516 C 17.514766 21.978516 21.995047 17.499141 21.998047 11.994141 C 22.000047 9.3251406 20.962172 6.8157344 19.076172 4.9277344 C 17.190172 3.0407344 14.683719 2.001 12.011719 2 z M 12.009766 4 C 14.145766 4.001 16.153109 4.8337969 17.662109 6.3417969 C 19.171109 7.8517969 20.000047 9.8581875 19.998047 11.992188 C 19.996047 16.396187 16.413812 19.978516 12.007812 19.978516 C 10.674812 19.977516 9.3544062 19.642812 8.1914062 19.007812 L 7.5175781 18.640625 L 6.7734375 18.816406 L 4.8046875 19.28125 L 5.2851562 17.496094 L 5.5019531 16.695312 L 5.0878906 15.976562 C 4.3898906 14.768562 4.0204844 13.387375 4.0214844 11.984375 C 4.0234844 7.582375 7.6067656 4 12.009766 4 z M 8.4765625 7.375 C 8.3095625 7.375 8.0395469 7.4375 7.8105469 7.6875 C 7.5815469 7.9365 6.9355469 8.5395781 6.9355469 9.7675781 C 6.9355469 10.995578 7.8300781 12.182609 7.9550781 12.349609 C 8.0790781 12.515609 9.68175 15.115234 12.21875 16.115234 C 14.32675 16.946234 14.754891 16.782234 15.212891 16.740234 C 15.670891 16.699234 16.690438 16.137687 16.898438 15.554688 C 17.106437 14.971687 17.106922 14.470187 17.044922 14.367188 C 16.982922 14.263188 16.816406 14.201172 16.566406 14.076172 C 16.317406 13.951172 15.090328 13.348625 14.861328 13.265625 C 14.632328 13.182625 14.464828 13.140625 14.298828 13.390625 C 14.132828 13.640625 13.655766 14.201187 13.509766 14.367188 C 13.363766 14.534188 13.21875 14.556641 12.96875 14.431641 C 12.71875 14.305641 11.914938 14.041406 10.960938 13.191406 C 10.218937 12.530406 9.7182656 11.714844 9.5722656 11.464844 C 9.4272656 11.215844 9.5585938 11.079078 9.6835938 10.955078 C 9.7955938 10.843078 9.9316406 10.663578 10.056641 10.517578 C 10.180641 10.371578 10.223641 10.267562 10.306641 10.101562 C 10.389641 9.9355625 10.347156 9.7890625 10.285156 9.6640625 C 10.223156 9.5390625 9.737625 8.3065 9.515625 7.8125 C 9.328625 7.3975 9.131125 7.3878594 8.953125 7.3808594 C 8.808125 7.3748594 8.6425625 7.375 8.4765625 7.375 z\"><\/path><\/svg>\t\t<span class=\"wp-block-outermost-social-sharing-link-label screen-reader-text\">\n\t\t\tShare on WhatsApp\t\t<\/span>\n\t<\/a>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">ChatGPT is trained on a large set of data but what if you want it to answer questions about your own data, for example building a chatbot that answers questions about your knowledge base? The answer is embeddings and in this blog post I explain the underlying mechanisms and how to implement them. The code can be found <a href=\"https:\/\/github.com\/thatdomi\/AILongTermMemory\/tree\/blog\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Large Language Models (LLM) are trained on vast amounts of data but what if you have questions about data that is not in the training dataset? The answers are not usable in most cases or even worse, sometimes the model even \u201challucinates\u201d answers. The simple solution is to provide the model with the full context relevant to your question. This works if you have only small amounts of data, but you can\u2019t just include a whole database with every query.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So what are embeddings? Embeddings are a way of representing a word (or parts of a word, a so-called \u201cToken\u201d) in multidimensional space. The resulting vector is how a large language model \u201csees\u201d and groups together words. As a (very) simplified example, let\u2019s look at the word \u201cHorse\u201d in a two-dimensional space with the Dimensions \u201cObjects\u201d and \u201cSize\u201d, you would find this word embedded somewhere along the X and Y axis: If we now add the word \u201cFork\u201d, we expect it to be far away from the word horse in both dimensions. Adding an additional dimension for Language and putting in the German translations of these words \u201cPferd\u201d and \u201cGabel\u201d, we expect them to be very close in the dimensions \u201cObjects\u201d and \u201cSize\u201d but further away in the Dimension \u201cLanguage\u201d.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"880\" height=\"406\" src=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2023\/05\/image.png\" alt=\"\" class=\"wp-image-306\" srcset=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2023\/05\/image.png 880w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2023\/05\/image-300x138.png 300w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2023\/05\/image-768x354.png 768w\" sizes=\"auto, (max-width: 880px) 100vw, 880px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Again, this is a very simplified example with randomly chosen words, dimensions and values. In reality, there are much more dimensions that are much less understandable to us. But the same concept applies: the distance between two points can be used to infer similarities between words and therefore give a measure of <em>\u201crelevance\u201d<\/em> when comparing in a certain context.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Okay now why is this useful to answer questions about my own data? When working with the OpenAI API you can include only a limited number of words in a query. This means that you can\u2019t just put all your data in the question. This is called the \u201cToken Limit\u201d. You have to make sure to only include the most <em>relevant<\/em> information to answer the question. Thus, resulting the following workflow:<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\">\n<li>Split your data into smaller chunks.<\/li>\n\n\n\n<li>Get the embeddings of these text-chunks.<\/li>\n\n\n\n<li>Store the embeddings together with the corresponding text.<\/li>\n\n\n\n<li>Define your question and get the embeddings of your question.<\/li>\n\n\n\n<li>Compare the embeddings of your question with the embeddings stored in step 3.<\/li>\n\n\n\n<li>Retrieve the most relevant text-chunks in the context of your question based on distance.<\/li>\n\n\n\n<li>Combine the question and the relevant text chunks in one query.<\/li>\n\n\n\n<li>Send the full query to ChatGPT to answer your question.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Example<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Microsoft just unveiled Microsoft Fabric. As it was just recently announced, ChatGPT doesn\u2019t have knowledge about this product yet, because it was not in the training data set of the model:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2023\/05\/image-1.png\" alt=\"\" class=\"wp-image-307\" style=\"width:593px;height:152px\" width=\"593\" height=\"152\" srcset=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2023\/05\/image-1.png 940w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2023\/05\/image-1-300x77.png 300w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2023\/05\/image-1-768x197.png 768w\" sizes=\"auto, (max-width: 593px) 100vw, 593px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This is not the answer we are looking for (But it might hint at some ambiguity regarding product names at Microsoft).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Implementing the previously mentioned workflow with the <a href=\"https:\/\/learn.microsoft.com\/en-us\/fabric\/get-started\/microsoft-fabric-overview\">new Microsoft Fabric documentation provided by Microsoft<\/a> and asking ChatGPT again via an API call yields these results:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Question: <\/strong> <strong>What is Microsoft Fabric?<\/strong><br><strong>Answer: <\/strong>Microsoft Fabric is an all-in-one analytics solution for enterprises that covers everything from data movement to data science, real-time analytics, and business intelligence. It offers a comprehensive suite of services, including data lake, data engineering, and data integration, all in one place. With Fabric, you don&#8217;t need to piece together different services from multiple vendors. Instead, you can enjoy a highly integrated, end-to-end, and easy-to-use product that is designed to simplify your analytics needs. The platform is built on a foundation of Software as a Service (SaaS), which takes simplicity and integration to a whole new level.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Question: What are the components of Microsoft Fabric? <\/strong><br><strong>Answer:<\/strong> Microsoft Fabric is a unified platform that offers a comprehensive suite of services, including data lake, data engineering, and data integration, all in one place. The platform is built on a foundation of Software as a Service (SaaS), which takes simplicity and integration to a whole new level. Microsoft Fabric brings together new and existing components from Power BI, Azure Synapse, and Azure Data Explorer into a single integrated environment. These components are then presented in various customized user experiences. The components of Microsoft Fabric include Data Engineering, Data Factory, Data Science, Data Warehouse, Real-Time Analytics, and Power BI. Additionally, Microsoft Fabric includes OneLake, which is a unified location to store all organizational data where the experiences operate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n<\/blockquote>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-f56f613f wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Question: Tell me about the OneLake<\/strong><br><strong>Answer:<\/strong> OneLake is a unified storage system for all developers that provides a single SaaS experience and a tenant-wide store for data that serves both professional and citizen developers. It eliminates the need for users to understand any infrastructure concepts such as resource groups, RBAC (Role-Based Access Control), Azure Resource Manager, redundancy, or regions. OneLake is built on top of ADLS (Azure Data Lake Storage) Gen2 and is hierarchical in nature to simplify management across an organization. It provides a single-pane-of-glass file-system namespace that spans across users, regions, and even clouds. OneLake is built into the Microsoft Fabric service and is the foundation on which all the Fabric services are built.<\/p>\n<\/blockquote>\n<\/div>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Conclusion<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Embeddings are a great way to allow the latest large language models to work with your own data. With the newer models like GPT-4, which have a much larger token limit, the possibilities of having a tailored and useful assistant are definitely becoming reality. Of course, the provided example is only a demo case. For a fully-fledged solution there is more to do. A few points to improve:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Implementing a vector database to ensure performant vector search and comparison across large amounts of data and embeddings.<\/li>\n\n\n\n<li>Finetuning of the system string, chunk size and token budget management to enable more precise answers.<\/li>\n\n\n\n<li>Preprocessing like summarization or text extraction to ensure the most relevant content when comparing the embeddings.<\/li>\n\n\n\n<li>Chaining multiple tasks in multiple queries. For example, a dedicated summarization step in a separate query and only using the summarized text to further decrease the tokens used in a single question.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Want to try it out yourself? Create a free OpenAI trial <a href=\"https:\/\/openai.com\/blog\/openai-api\">here<\/a> and check out <a href=\"https:\/\/github.com\/thatdomi\/AILongTermMemory\/tree\/blog\">the code<\/a> used for this blog <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you are wondering about the cost, here is an overview of the past few days working with embeddings.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2023\/05\/image-3.png\" alt=\"\" class=\"wp-image-309\" style=\"width:501px;height:283px\" width=\"501\" height=\"283\" srcset=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2023\/05\/image-3.png 940w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2023\/05\/image-3-300x169.png 300w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2023\/05\/image-3-768x434.png 768w\" sizes=\"auto, (max-width: 501px) 100vw, 501px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>ChatGPT is trained on a large set of data but what if you want it to answer questions about your own data, for example building a chatbot that answers questions about your knowledge base? The answer is embeddings and in this blog post I explain the underlying mechanisms and how to implement them. The code [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":316,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,7,14],"tags":[27],"class_list":["post-305","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-allgemein","category-data-engineering","category-data-science","tag-chatgpt"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Customizing ChatGPT: Answering Questions about Your Own Data with Embeddings - Syntera<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.syntera.ch\/blog\/2023\/06\/01\/customizing-chatgpt-answering-questions-about-your-own-data-with-embeddings\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Customizing ChatGPT: Answering Questions about Your Own Data with Embeddings - Syntera\" \/>\n<meta property=\"og:description\" content=\"ChatGPT is trained on a large set of data but what if you want it to answer questions about your own data, for example building a chatbot that answers questions about your knowledge base? The answer is embeddings and in this blog post I explain the underlying mechanisms and how to implement them. The code [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.syntera.ch\/blog\/2023\/06\/01\/customizing-chatgpt-answering-questions-about-your-own-data-with-embeddings\/\" \/>\n<meta property=\"og:site_name\" content=\"Syntera\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-01T04:26:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-12T06:07:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2023\/05\/image-4-e1685537471723.png\" \/>\n\t<meta property=\"og:image:width\" content=\"451\" \/>\n\t<meta property=\"og:image:height\" content=\"250\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Dominic Schranz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dominic Schranz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.syntera.ch\/blog\/2023\/06\/01\/customizing-chatgpt-answering-questions-about-your-own-data-with-embeddings\/\",\"url\":\"https:\/\/www.syntera.ch\/blog\/2023\/06\/01\/customizing-chatgpt-answering-questions-about-your-own-data-with-embeddings\/\",\"name\":\"Customizing ChatGPT: Answering Questions about Your Own Data with Embeddings - Syntera\",\"isPartOf\":{\"@id\":\"https:\/\/www.syntera.ch\/blog\/#website\"},\"datePublished\":\"2023-06-01T04:26:15+00:00\",\"dateModified\":\"2023-10-12T06:07:59+00:00\",\"author\":{\"@id\":\"https:\/\/www.syntera.ch\/blog\/#\/schema\/person\/e038d1dcebeca2193c5503f78783988d\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.syntera.ch\/blog\/2023\/06\/01\/customizing-chatgpt-answering-questions-about-your-own-data-with-embeddings\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.syntera.ch\/blog\/2023\/06\/01\/customizing-chatgpt-answering-questions-about-your-own-data-with-embeddings\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.syntera.ch\/blog\/2023\/06\/01\/customizing-chatgpt-answering-questions-about-your-own-data-with-embeddings\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.syntera.ch\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Customizing ChatGPT: Answering Questions about Your Own Data with Embeddings\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.syntera.ch\/blog\/#website\",\"url\":\"https:\/\/www.syntera.ch\/blog\/\",\"name\":\"Syntera\",\"description\":\"translating data into business value.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.syntera.ch\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.syntera.ch\/blog\/#\/schema\/person\/e038d1dcebeca2193c5503f78783988d\",\"name\":\"Dominic Schranz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.syntera.ch\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bd3589b8a6ccc62e37c3cee8f8e06c73a4085816337ad7d6c154e30dc60cc4c1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bd3589b8a6ccc62e37c3cee8f8e06c73a4085816337ad7d6c154e30dc60cc4c1?s=96&d=mm&r=g\",\"caption\":\"Dominic Schranz\"},\"url\":\"https:\/\/www.syntera.ch\/blog\/author\/domi\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Customizing ChatGPT: Answering Questions about Your Own Data with Embeddings - Syntera","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.syntera.ch\/blog\/2023\/06\/01\/customizing-chatgpt-answering-questions-about-your-own-data-with-embeddings\/","og_locale":"en_US","og_type":"article","og_title":"Customizing ChatGPT: Answering Questions about Your Own Data with Embeddings - Syntera","og_description":"ChatGPT is trained on a large set of data but what if you want it to answer questions about your own data, for example building a chatbot that answers questions about your knowledge base? The answer is embeddings and in this blog post I explain the underlying mechanisms and how to implement them. The code [&hellip;]","og_url":"https:\/\/www.syntera.ch\/blog\/2023\/06\/01\/customizing-chatgpt-answering-questions-about-your-own-data-with-embeddings\/","og_site_name":"Syntera","article_published_time":"2023-06-01T04:26:15+00:00","article_modified_time":"2023-10-12T06:07:59+00:00","og_image":[{"width":451,"height":250,"url":"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2023\/05\/image-4-e1685537471723.png","type":"image\/png"}],"author":"Dominic Schranz","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Dominic Schranz","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.syntera.ch\/blog\/2023\/06\/01\/customizing-chatgpt-answering-questions-about-your-own-data-with-embeddings\/","url":"https:\/\/www.syntera.ch\/blog\/2023\/06\/01\/customizing-chatgpt-answering-questions-about-your-own-data-with-embeddings\/","name":"Customizing ChatGPT: Answering Questions about Your Own Data with Embeddings - Syntera","isPartOf":{"@id":"https:\/\/www.syntera.ch\/blog\/#website"},"datePublished":"2023-06-01T04:26:15+00:00","dateModified":"2023-10-12T06:07:59+00:00","author":{"@id":"https:\/\/www.syntera.ch\/blog\/#\/schema\/person\/e038d1dcebeca2193c5503f78783988d"},"breadcrumb":{"@id":"https:\/\/www.syntera.ch\/blog\/2023\/06\/01\/customizing-chatgpt-answering-questions-about-your-own-data-with-embeddings\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.syntera.ch\/blog\/2023\/06\/01\/customizing-chatgpt-answering-questions-about-your-own-data-with-embeddings\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.syntera.ch\/blog\/2023\/06\/01\/customizing-chatgpt-answering-questions-about-your-own-data-with-embeddings\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.syntera.ch\/blog\/"},{"@type":"ListItem","position":2,"name":"Customizing ChatGPT: Answering Questions about Your Own Data with Embeddings"}]},{"@type":"WebSite","@id":"https:\/\/www.syntera.ch\/blog\/#website","url":"https:\/\/www.syntera.ch\/blog\/","name":"Syntera","description":"translating data into business value.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.syntera.ch\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.syntera.ch\/blog\/#\/schema\/person\/e038d1dcebeca2193c5503f78783988d","name":"Dominic Schranz","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.syntera.ch\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/bd3589b8a6ccc62e37c3cee8f8e06c73a4085816337ad7d6c154e30dc60cc4c1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bd3589b8a6ccc62e37c3cee8f8e06c73a4085816337ad7d6c154e30dc60cc4c1?s=96&d=mm&r=g","caption":"Dominic Schranz"},"url":"https:\/\/www.syntera.ch\/blog\/author\/domi\/"}]}},"_links":{"self":[{"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/posts\/305","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/comments?post=305"}],"version-history":[{"count":7,"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/posts\/305\/revisions"}],"predecessor-version":[{"id":400,"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/posts\/305\/revisions\/400"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/media\/316"}],"wp:attachment":[{"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/media?parent=305"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/categories?post=305"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/tags?post=305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}