Vi introducerar text- och kodinbäddningar i OpenAI API PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Vi introducerar text- och kodinbäddningar i OpenAI API

Vi introducerar text- och kodinbäddningar i OpenAI API

Vi introducerar inbäddningar, en ny slutpunkt i OpenAI API som gör det enkelt att utföra naturliga språk- och koduppgifter som semantisk sökning, klustring, ämnesmodellering och klassificering. Inbäddningar är numeriska representationer av begrepp omvandlade till nummersekvenser, vilket gör det lätt för datorer att förstå sambanden mellan dessa begrepp. Våra inbäddningar överträffar toppmodeller i tre standardriktmärken, inklusive en 3 % relativ förbättring av kodsökning.

Läs dokumentationLäs papper

Inbäddningar är användbara för att arbeta med naturligt språk och kod, eftersom de lätt kan konsumeras och jämföras av andra maskininlärningsmodeller och algoritmer som klustring eller sökning.

Vi introducerar text- och kodinbäddningar i OpenAI API
Vi introducerar text- och kodinbäddningar i OpenAI API
Vi introducerar text- och kodinbäddningar i OpenAI API
Vi introducerar text- och kodinbäddningar i OpenAI API
Vi introducerar text- och kodinbäddningar i OpenAI API
Vi introducerar text- och kodinbäddningar i OpenAI API

Inbäddningar som är numeriskt lika är också semantiskt lika. Till exempel kommer inbäddningsvektorn för "hundkompisar säger" att vara mer lik inbäddningsvektorn för "woof" än den för "mjau".

Vi introducerar text- och kodinbäddningar i OpenAI API
Vi introducerar text- och kodinbäddningar i OpenAI API

Den nya slutpunkten använder neurala nätverksmodeller, som är ättlingar till GPT-3, för att kartlägga text och kod till en vektorrepresentation – "bädda in" dem i ett högdimensionellt utrymme. Varje dimension fångar någon aspekt av inmatningen.

Den nya /inbäddningar slutpunkt i Öppna AI API ger text- och kodinbäddningar med några rader kod:

import openai
response = openai.Embedding.create( input="canine companions say", engine="text-similarity-davinci-001")

Vi släpper tre familjer av inbäddningsmodeller, var och en inställd för att prestera bra på olika funktioner: textlikhet, textsökning och kodsökning. Modellerna tar antingen text eller kod som indata och returnerar en inbäddningsvektor.

Modeller Användningsfall
Textlikhet: Fångar semantisk likhet mellan textstycken. text-likhet-{ada, babbage, curie, davinci}-001 Clustering, regression, anomalidetektering, visualisering
Textsökning: Semantisk informationssökning över dokument. text-search-{ada, babbage, curie, davinci}-{query, doc}-001 Sökning, sammanhangsrelevans, informationssökning
Kodsökning: Hitta relevant kod med en fråga på naturligt språk. Code-Search- {Ada, Babbage}-{Code, Text} -001 Kodsökning och relevans

Textlikhetsmodeller

Textlikhetsmodeller tillhandahåller inbäddningar som fångar den semantiska likheten mellan textstycken. Dessa modeller är användbara för många uppgifter, inklusive klustring, datavisualiseringoch klassificering.

Följande interaktiva visualisering visar inbäddningar av textexempel från DBpedia-dataset:

Dra för att panorera, rulla eller nypa för att zooma

Inbäddningar från text-similarity-babbage-001 modell, tillämpad på Dbpedia dataset. Vi valde slumpmässigt ut 100 prover från datamängden som täcker 5 kategorier och beräknade inbäddningarna via /inbäddningar slutpunkt. De olika kategorierna visas som 5 tydliga kluster i inbäddningsutrymmet. För att visualisera inbäddningsutrymmet minskade vi inbäddningsdimensionaliteten från 2048 till 3 med hjälp av PCA. Koden för hur man visualiserar inbäddningsutrymme i 3D-dimension är tillgänglig här..

För att jämföra likheten mellan två textstycken använder du helt enkelt punkt produkt på textinbäddningarna. Resultatet är ett "likhetspoäng", ibland kallat "cosinuslikhet,” mellan –1 och 1, där ett högre tal betyder mer likhet. I de flesta applikationer kan inbäddningarna vara förberäknade, och då går punktproduktjämförelsen extremt snabb att genomföra.

import openai, numpy as np resp = openai.Embedding.create( input=["feline friends go", "meow"], engine="text-similarity-davinci-001") embedding_a = resp['data'][0]['embedding']
embedding_b = resp['data'][1]['embedding'] similarity_score = np.dot(embedding_a, embedding_b)

En populär användning av inbäddningar är att använda dem som funktioner i maskininlärningsuppgifter, till exempel klassificering. I maskininlärningslitteratur, när du använder en linjär klassificerare, kallas denna klassificeringsuppgift en "linjär sond." Våra textlikhetsmodeller uppnår nya toppmoderna resultat på linjär sondklassificering i Senteval (Conneau et al., 2018), ett vanligt riktmärke för att utvärdera inbäddningskvalitet.

Linjär sondklassificering över 7 dataset
Tidigare SOTA (Gao et al. 2021)
90.2%
text-likhet-davinci-001
92.2%
Visa mer

Textsökningsmodeller

Textsökningsmodeller tillhandahåller inbäddningar som möjliggör storskaliga sökuppgifter, som att hitta ett relevant dokument bland en samling dokument med en textfråga. Inbäddning av dokumenten och frågan produceras separat, och sedan används cosinuslikhet för att jämföra likheten mellan frågan och varje dokument.

Inbäddningsbaserad sökning kan generalisera bättre än ordöverlappningstekniker som används i klassisk nyckelordssökning, eftersom den fångar textens semantiska betydelse och är mindre känslig för exakta fraser eller ord. Vi utvärderar textsökningsmodellens prestanda på Beir (Thakur, et al. 2021) sökutvärderingssvit och få bättre sökprestanda än tidigare metoder. Vår textsökningsguide ger mer information om hur du använder inbäddningar för sökuppgifter.

Modeller för kodsökning

Kodsökningsmodeller tillhandahåller kod- och textinbäddningar för kodsökningsuppgifter. Givet en samling kodblock, är uppgiften att hitta det relevanta kodblocket för en naturlig språkfråga. Vi utvärderar kodsökningsmodellerna på Kodesearchnet (Husian et al., 2019) utvärderingssvit där våra inbäddningar uppnår betydligt bättre resultat än tidigare metoder. Kolla in kodsökningsguide att använda inbäddningar för kodsökning.

Genomsnittlig noggrannhet över 6 programmeringsspråk
Tidigare SOTA (Guo, et al. 2021)
77.4%
Code-Search-Babbage- {doc, query} -001
93.5%
Visa mer

Exempel på Embeddings API i aktion

JetBrains forskning

JetBrains Research Astropartikelfysiklab analyserar data som Astronomens telegram och NASA GCN-cirkulär, som är rapporter som innehåller astronomiska händelser som inte kan analyseras med traditionella algoritmer.

Med hjälp av OpenAI:s inbäddningar av dessa astronomiska rapporter kan forskare nu söka efter händelser som "krabbpulsar" över flera databaser och publikationer. Inbäddningar uppnådde också 99.85 % noggrannhet vid klassificering av datakällor genom k-means-klustring.

Finlärning

Finlärning är ett företag som bygger hybrid human-AI-lösningar för lärande, som adaptiva inlärningsslingor som hjälper eleverna att nå akademiska standarder.

OpenAI:s inbäddningar förbättrade avsevärt uppgiften att hitta läroboksinnehåll baserat på lärandemål. OpenAI:s text-search-curie-inbäddningsmodell uppnådde en topp-5-noggrannhet på 89.1 % och överträffade tidigare tillvägagångssätt som Sentence-BERT (64.5 %). Medan mänskliga experter fortfarande är bättre, kan FineTune-teamet nu märka hela läroböcker på några sekunder, i motsats till de timmar som det tog experterna.

Jämförelse av våra inbäddningar med Sentence-BERT, GPT-3-sökning och mänskliga ämnesexperter för att matcha läroboksinnehåll med inlärda mål. Vi rapporterar noggrannhet@k, antalet gånger det korrekta svaret är inom top-k förutsägelser.

Fabius

Fabius hjälper företag att omvandla kundsamtal till strukturerade insikter som informerar planering och prioritering. OpenAI:s inbäddningar gör det möjligt för företag att lättare hitta och tagga kunders samtalsutskrifter med funktionsförfrågningar.

Kunder kan till exempel använda ord som "automatiserat" eller "lätt att använda" för att be om en bättre självbetjäningsplattform. Tidigare använde Fabius suddig nyckelordssökning för att försöka märka dessa utskrifter med självbetjäningsplattformsetiketten. Med OpenAI:s inbäddningar kan de nu hitta 2x fler exempel i allmänhet och 6x–10x fler exempel för funktioner med abstrakta användningsfall som inte har ett tydligt nyckelord som kunder kan använda.

Alla API-kunder kan komma igång med inbäddningsdokumentation för att använda inbäddningar i sina applikationer.

Läs dokumentation


Erkännanden

Tack till följande för deras bidrag till denna release:

Tao Xu, Chris Hallacy, Raul Puri, Alec Radford, Jesse Michael Han, Jerry Tworek, Qiming Yuan, Nikolas Tezak, Jong Wook Kim, Johannes Heidecke, Pranav Shyam, Tyna Eloundou Nekoul, Girish Sastry, Gretchen Krueger, David Schnurr, Felipe Petroski Sådana, Kenny Hsu, Madeleine Thompson, Tabarak Khan och Toki Sherbakov.

Tack till följande för deras feedback på det här inlägget: Tom Kleinpeter, Morgan Gallant, Sam Altman, Ilya Sutskever, Steve Dowling, Rachel Lim, Arun Vijayvergiya, Rajeev Nayak, Peter Welinder, Justin Jay Wang.

.vector-diagram img {display: none;
}
.vector-diagram img:first-child { display: block;
}

var printResponse = function (btn) { // append response var responseEl = document .querySelector('.endpoint-code-response') .querySelector('code') var callParentEl = document .querySelector('.endpoint-code-call' ) .querySelector('pre') om (!responseEl || !callParentEl) returnerar; callParentEl.appendChild(responseEl); // hide button btn.style.display= 'ingen';
}; var initRotate = function () { var rotates = document.querySelectorAll('.js-rotate'); if (!roterar.längd) returnera; // för varje uppsättning rotationer rotates.forEach(function (r) { // flytta det första barnet till slutet var n:e sekund window.setInterval(function(){ moveToEnd(r, r.firstElementChild); }, 1500); }) ;
};
var moveToEnd = function (förälder, barn) { parent.removeChild(child); parent.appendChild(child); // lägg till förälder
}; var initShowMore = function () { var showmores = document.querySelectorAll('.js-showmore'); showmores.forEach(function (e) { e.addEventListener('click', function () { var showmoreparent = this.parentElement; if (!showmoreparent) return; var more = showmoreparent.querySelector('.js-more'); if (!more) return; more.style.display = 'blockera'; this.style.display = 'ingen'; }); });
}; // i det
document.addEventListener('DOMContentLoaded', function () { initRotate(); initShowMore();
});
importera {Runtime, Inspector, Library} från "https://unpkg.com/@observablehq/runtime@4.5.0/dist/runtime.js";
import notebook_topk from “https://api.observablehq.com/d/20c1e51d6e663e6d.js?v=3”;
importera notebook_embed3d från "https://api.observablehq.com/d/fef0801cb0a0b322.js?v=3" const customWidth = function (selector) { return (new Library).Generators.observe(function(change) { var width = change(document.querySelector(selector).clientWidth); function resized() { var w = document.querySelector(selector).clientWidth; if (w !== width) change(width = w); } window.addEventListener(“ ändra storlek”, ändra storlek); return function() { window.removeEventListener(“ändra storlek”, ändra storlek); }; });
}; const topk_renders = { “chart”: “#topk-chart”,
};
new Runtime(Object.assign(new Library, {width: customWidth(“#topk-chart”)})).module(notebook_topk, name => { const selector = topk_renders[name]; if (selector) { // key existerar return new Inspector(document.querySelector(selector)); } else { return true; }
}); const embed3d_renders = { “chart”: “#embed3d-chart”, “legend”: “#embed3d-legend”,
};
new Runtime(Object.assign(new Library, {width: customWidth(“#embed3d-chart”)})).module(notebook_embed3d, name => { const selector = embed3d_renders[name]; if (selector) { // key existerar return new Inspector(document.querySelector(selector)); } else { return true; }
});

Tidsstämpel:

Mer från OpenAI