Introduktion af tekst- og kodeindlejringer i OpenAI API PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Introduktion af tekst- og kodeindlejringer i OpenAI API

Introduktion af tekst- og kodeindlejringer i OpenAI API

Vi introducerer indlejringer, et nyt slutpunkt i OpenAI API, der gør det nemt at udføre naturlige sprog- og kodeopgaver som semantisk søgning, klyngedannelse, emnemodellering og klassificering. Indlejringer er numeriske repræsentationer af begreber konverteret til talsekvenser, som gør det nemt for computere at forstå sammenhængen mellem disse begreber. Vores indlejringer overgår topmodeller i 3 standard benchmarks, herunder en relativ forbedring på 20 % i kodesøgning.

Læs dokumentationLæs papir

Indlejringer er nyttige til at arbejde med naturligt sprog og kode, fordi de let kan forbruges og sammenlignes af andre maskinlæringsmodeller og algoritmer som clustering eller søgning.

Introduktion af tekst- og kodeindlejringer i OpenAI API
Introduktion af tekst- og kodeindlejringer i OpenAI API
Introduktion af tekst- og kodeindlejringer i OpenAI API
Introduktion af tekst- og kodeindlejringer i OpenAI API
Introduktion af tekst- og kodeindlejringer i OpenAI API
Introduktion af tekst- og kodeindlejringer i OpenAI API

Indlejringer, der er numerisk ens, er også semantisk ens. For eksempel vil indlejringsvektoren for "hunde-ledsager siger" være mere lig indlejringsvektoren for "woof" end den for "miav".

Introduktion af tekst- og kodeindlejringer i OpenAI API
Introduktion af tekst- og kodeindlejringer i OpenAI API

Det nye endepunkt bruger neurale netværksmodeller, som er efterkommere af GPT-3, til at kortlægge tekst og kode til en vektorrepræsentation - "indlejring" af dem i et højdimensionelt rum. Hver dimension fanger nogle aspekter af inputtet.

Den nye /indlejringer endepunkt i Åbn AI API giver tekst- og kodeindlejringer med et par linjer kode:

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

Vi udgiver tre familier af indlejringsmodeller, som hver er indstillet til at fungere godt på forskellige funktioner: tekstlighed, tekstsøgning og kodesøgning. Modellerne tager enten tekst eller kode som input og returnerer en indlejringsvektor.

Modeller Brug cases
Tekst lighed: Fanger semantisk lighed mellem tekststykker. tekst-lighed-{ada, babbage, curie, davinci}-001 Clustering, regression, anomalidetektion, visualisering
Tekstsøgning: Semantisk informationssøgning over dokumenter. text-search-{ada, babbage, curie, davinci}-{query, doc}-001 Søgning, kontekstrelevans, informationssøgning
Kodesøgning: Find relevant kode med en forespørgsel i naturligt sprog. kode-søgning-{ada, babbage}-{kode, tekst}-001 Kodesøgning og relevans

Tekstlighedsmodeller

Tekstlighedsmodeller giver indlejringer, der fanger den semantiske lighed mellem tekststykker. Disse modeller er nyttige til mange opgaver, herunder klyngedannelse, datavisualiseringog klassificering.

Følgende interaktive visualisering viser indlejringer af teksteksempler fra DBpedia-datasættet:

Træk for at panorere, rul eller knib for at zoome

Indstøbninger fra text-similarity-babbage-001 model, anvendt på DBpedia datasæt. Vi udvalgte tilfældigt 100 prøver fra datasættet, der dækkede 5 kategorier, og beregnede indlejringerne via /indlejringer endepunkt. De forskellige kategorier vises som 5 klare klynger i indlejringsrummet. For at visualisere indlejringsrummet reducerede vi indlejringsdimensionaliteten fra 2048 til 3 vha. PCA. Koden til, hvordan man visualiserer indlejringsrum i 3D-dimension er tilgængelig link..

For at sammenligne ligheden mellem to stykker tekst, bruger du blot prik produkt på tekstindlejringerne. Resultatet er en "lighedsscore", nogle gange kaldet "cosinus lighed,” mellem –1 og 1, hvor et højere tal betyder mere lighed. I de fleste applikationer kan indlejringerne forudberegnes, og så er prikproduktsammenligningen ekstremt hurtig at udføre.

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 anvendelse af indlejringer er at bruge dem som funktioner i maskinlæringsopgaver, såsom klassificering. I maskinlæringslitteratur kaldes denne klassifikationsopgave, når du bruger en lineær klassifikator, en "lineær sonde". Vores tekstlighedsmodeller opnår nye state-of-the-art resultater på lineær sondeklassificering i SentEval (Conneau et al., 2018), et almindeligt brugt benchmark til evaluering af indlejringskvalitet.

Lineær sondeklassificering over 7 datasæt
Tidligere SOTA (Gao et al. 2021)
90.2 %
tekst-lighed-davinci-001
92.2 %
Vis mere

Tekstsøgningsmodeller

Tekstsøgemodeller giver indlejringer, der muliggør store søgeopgaver, som at finde et relevant dokument blandt en samling af dokumenter, der får en tekstforespørgsel. Indlejring af dokumenterne og forespørgslen produceres separat, og derefter bruges cosinus-lighed til at sammenligne ligheden mellem forespørgslen og hvert dokument.

Indlejringsbaseret søgning kan generalisere bedre end ordoverlapningsteknikker, der bruges i klassisk søgeordssøgning, fordi den fanger den semantiske betydning af tekst og er mindre følsom over for eksakte sætninger eller ord. Vi evaluerer tekstsøgemodellens ydeevne på BEIR (Thakur, et al. 2021) søgeevalueringspakke og opnå bedre søgeydelse end tidligere metoder. Vores guide til tekstsøgning giver flere detaljer om brug af indlejringer til søgeopgaver.

Kodesøgningsmodeller

Kodesøgningsmodeller giver kode- og tekstindlejringer til kodesøgningsopgaver. Givet en samling af kodeblokke er opgaven at finde den relevante kodeblok til en naturlig sprogforespørgsel. Vi evaluerer kodesøgningsmodellerne på CodeSearchNet (Husian et al., 2019) evalueringssuite, hvor vores indlejringer opnår væsentligt bedre resultater end tidligere metoder. Tjek ud kode søge guide at bruge indlejringer til kodesøgning.

Gennemsnitlig nøjagtighed over 6 programmeringssprog
Tidligere SOTA (Guo et al. 2021)
77.4 %
code-search-babbage-{doc, query}-001
93.5 %
Vis mere

Eksempler på Embeddings API i aktion

JetBrains Research

JetBrains Research Astropartikelfysiklaboratorium analyserer data som f.eks Astronomens telegram og NASA GCN-cirkulærer, som er rapporter, der indeholder astronomiske begivenheder, som ikke kan analyseres af traditionelle algoritmer.

Drevet af OpenAI's indlejringer af disse astronomiske rapporter er forskere nu i stand til at søge efter begivenheder som "krabbepulsarudbrud" på tværs af flere databaser og publikationer. Indlejringer opnåede også 99.85 % nøjagtighed på datakildeklassificering gennem k-betyder klyngedannelse.

FineTune læring

FineTune læring er en virksomhed, der bygger hybride human-AI-løsninger til læring, som f.eks adaptive læringsløkker som hjælper eleverne med at nå akademiske standarder.

OpenAI's indlejringer forbedrede markant opgaven med at finde lærebogsindhold baseret på læringsmål. Med en top-5-nøjagtighed på 89.1 % overgik OpenAIs tekst-search-curie-indlejringsmodel tidligere tilgange som Sentence-BERT (64.5 %). Mens menneskelige eksperter stadig er bedre, er FineTune-teamet nu i stand til at mærke hele lærebøger på få sekunder, i modsætning til de timer, det tog eksperterne.

Sammenligning af vores indlejringer med Sentence-BERT, GPT-3 søgning og menneskelige fageksperter til at matche lærebogsindhold med lærte mål. Vi melder nøjagtighed@k, antallet af gange det rigtige svar er inden for top-k forudsigelser.

Fabius

Fabius hjælper virksomheder med at gøre kundesamtaler til strukturerede indsigter, der informerer om planlægning og prioritering. OpenAI's indlejringer giver virksomheder mulighed for lettere at finde og tagge kundeopkaldsudskrifter med funktionsanmodninger.

For eksempel kan kunder bruge ord som "automatiseret" eller "let at bruge" til at bede om en bedre selvbetjeningsplatform. Tidligere brugte Fabius fuzzy søgeordssøgning til at forsøge at mærke disse transskriptioner med selvbetjeningsplatformen. Med OpenAI's indlejringer er de nu i stand til at finde 2x flere eksempler generelt, og 6x-10x flere eksempler på funktioner med abstrakte use cases, som ikke har et klart søgeord, kunder kan bruge.

Alle API-kunder kan komme i gang med indlejringsdokumentation for at bruge indlejringer i deres applikationer.

Læs dokumentation


Tak

Tak til følgende for deres bidrag til denne udgivelse:

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ådan, Kenny Hsu, Madeleine Thompson, Tabarak Khan og Toki Sherbakov.

Tak til følgende for deres feedback på dette indlæg: 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: ingen;
}
.vector-diagram img:first-child { display: blok;
}

var printResponse = function (btn) { // tilføj svar var responseEl = document .querySelector('.endpoint-code-response') .querySelector('code') var callParentEl = document .querySelector('.endpoint-code-call' ) .querySelector('pre') hvis (!responseEl || !callParentEl) returnerer; callParentEl.appendChild(responsEl); // hide button btn.style.display= 'ingen';
}; var initRotate = function () { var rotates = document.querySelectorAll('.js-rotate'); hvis (!roterer.længde) returnerer; // for hvert sæt rotates rotates.forEach(function (r) { // flyt det første barn for at afslutte hvert n. sekund window.setInterval(function(){ moveToEnd(r, r.firstElementChild); }, 1500); }) ;
};
var moveToEnd = funktion (forælder, barn) { parent.removeChild(child); parent.appendChild(child); // føje til foræ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 = 'blok'; this.style.display = 'ingen'; }); });
}; // i det
document.addEventListener('DOMContentLoaded', function () { initRotate(); initShowMore();
});
importere {Runtime, Inspector, Library} fra "https://unpkg.com/@observablehq/runtime@4.5.0/dist/runtime.js";
import notebook_topk from “https://api.observablehq.com/d/20c1e51d6e663e6d.js?v=3”;
importer notebook_embed3d fra "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(“ resize”, ændret størrelse); return function() { window.removeEventListener(“ændre størrelse”, ændret størrelse); }; });
}; 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 eksisterer returner ny 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 eksisterer returner ny Inspector(document.querySelector(selector)); } else { return true; }
});

Tidsstempel:

Mere fra OpenAI