Introducerea înglobărilor de text și cod în API-ul OpenAI PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Introducerea textului și a codurilor încorporate în API-ul OpenAI

Introducerea textului și a codurilor încorporate în API-ul OpenAI

Introducem încorporarea, un nou punct final în API-ul OpenAI, care facilitează efectuarea de sarcini în limbaj natural și cod, cum ar fi căutarea semantică, gruparea, modelarea subiectelor și clasificarea. Înglobările sunt reprezentări numerice ale conceptelor convertite în secvențe de numere, care facilitează înțelegerea de către computere a relațiilor dintre aceste concepte. Înglobarile noastre depășesc modelele de top în 3 benchmark-uri standard, inclusiv o îmbunătățire relativă cu 20% a căutării codului.

Citiți documentațiaCitiți hârtia

Înglobările sunt utile pentru lucrul cu limbaj natural și cod, deoarece pot fi ușor consumate și comparate de alte modele și algoritmi de învățare automată, cum ar fi gruparea sau căutarea.

Introducerea textului și a codurilor încorporate în API-ul OpenAI
Introducerea textului și a codurilor încorporate în API-ul OpenAI
Introducerea textului și a codurilor încorporate în API-ul OpenAI
Introducerea textului și a codurilor încorporate în API-ul OpenAI
Introducerea textului și a codurilor încorporate în API-ul OpenAI
Introducerea textului și a codurilor încorporate în API-ul OpenAI

Înglobările care sunt similare numeric sunt, de asemenea, similare din punct de vedere semantic. De exemplu, vectorul de încorporare a „însoțitorii canini spun” va fi mai asemănător cu vectorul de încorporare a „woof” decât cu cel de „miau”.

Introducerea textului și a codurilor încorporate în API-ul OpenAI
Introducerea textului și a codurilor încorporate în API-ul OpenAI

Noul punct final folosește modele de rețea neuronală, care sunt descendenți ai GPT-3, pentru a mapa textul și codul într-o reprezentare vectorială - „înglobându-le” într-un spațiu de dimensiuni înalte. Fiecare dimensiune surprinde un anumit aspect al intrării.

Noul /embeddings punctul final în API OpenAI oferă text și coduri încorporate cu câteva linii de cod:

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

Lansăm trei familii de modele de încorporare, fiecare reglat pentru a funcționa bine pe diferite funcționalități: similaritate text, căutare text și căutare cod. Modelele iau fie text, fie cod ca intrare și returnează un vector de încorporare.

modele Utilizați cazuri
Asemănarea textului: Captează asemănarea semantică între fragmente de text. text-similarity-{ada, babage, curie, davinci}-001 Clustering, regresie, detectarea anomaliilor, vizualizare
Căutare text: Preluare semantică a informațiilor peste documente. text-search-{ada, babbage, curie, davinci}-{query, doc}-001 Căutare, relevanța contextului, regăsirea informațiilor
Căutare cod: Găsiți codul relevant cu o interogare în limbaj natural. code-search-{ada, babage}-{code, text}-001 Căutarea codului și relevanța

Modele de similaritate text

Modelele de similaritate text oferă înglobare care surprind similaritatea semantică a fragmentelor de text. Aceste modele sunt utile pentru multe sarcini, inclusiv clustering, vizualizarea datelor, și clasificare.

Următoarea vizualizare interactivă arată încorporarea mostrelor de text din setul de date DBpedia:

Trageți pentru a deplasa, derulați sau ciupiți pentru a mări

Înglobări din text-similarity-babbage-001 model, aplicat la DBpedia set de date. Am selectat aleatoriu 100 de mostre din setul de date care acoperă 5 categorii și am calculat înglobările prin intermediul /embeddings punctul final. Diferitele categorii apar ca 5 grupuri clare în spațiul de încorporare. Pentru a vizualiza spațiul de încorporare, am redus dimensionalitatea de încorporare de la 2048 la 3 folosind APC. Codul pentru vizualizarea spațiului de încorporare în dimensiunea 3D este disponibil aici.

Pentru a compara asemănarea a două bucăți de text, utilizați pur și simplu produs dot pe înglobările de text. Rezultatul este un „scor de similaritate”, numit uneori „asemănarea cosinusului”, între –1 și 1, unde un număr mai mare înseamnă mai multă similitudine. În majoritatea aplicațiilor, înglobările pot fi pre-calculate, iar apoi compararea produsului punct este extrem de rapid de realizat.

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)

O utilizare populară a înglobărilor este utilizarea acestora ca caracteristici în sarcinile de învățare automată, cum ar fi clasificarea. În literatura de învățare automată, atunci când se utilizează un clasificator liniar, această sarcină de clasificare este numită „sondă liniară”. Modelele noastre de similaritate text obțin rezultate noi de ultimă generație privind clasificarea sondelor liniare în SentEval (Conneau et al., 2018), un punct de referință utilizat în mod obișnuit pentru evaluarea calității înglobării.

Clasificare liniară a sondei pe 7 seturi de date
SOTA anterioară (Gao şi colab. 2021)
90.2%
text-similaritate-davinci-001
92.2%
Arată mai multe

Modele de căutare text

Modelele de căutare text oferă înglobare care permit activități de căutare la scară largă, cum ar fi găsirea unui document relevant într-o colecție de documente pentru o interogare de text. Încorporarea documentelor și a interogării sunt produse separat, iar apoi asemănarea cosinus este utilizată pentru a compara similitudinea dintre interogare și fiecare document.

Căutarea bazată pe încorporare se poate generaliza mai bine decât tehnicile de suprapunere a cuvintelor utilizate în căutarea clasică de cuvinte cheie, deoarece captează semnificația semantică a textului și este mai puțin sensibilă la fraze sau cuvinte exacte. Evaluăm performanța modelului de căutare text pe BEIR (Thakur și colab. 2021) suită de evaluare a căutării și obține performanțe de căutare mai bune decât metodele anterioare. Al nostru ghid de căutare text oferă mai multe detalii despre utilizarea înglobărilor pentru sarcini de căutare.

Modele de căutare cod

Modelele de căutare de coduri oferă coduri și înglobări de text pentru sarcinile de căutare a codului. Având în vedere o colecție de blocuri de cod, sarcina este de a găsi blocul de cod relevant pentru o interogare în limbaj natural. Evaluăm modelele de căutare a codului pe CodeSearchNet (Husian și colab., 2019) suită de evaluare în care înglobările noastre obțin rezultate semnificativ mai bune decât metodele anterioare. Verificați ghid de căutare a codului pentru a utiliza încorporarea pentru căutarea codului.

Precizie medie peste 6 limbaje de programare
SOTA anterioară (Guo și colab. 2021)
77.4%
cod-căutare-babbage-{doc, interogare}-001
93.5%
Arată mai multe

Exemple de API Embeddings în acțiune

Cercetarea JetBrains

Cercetarea JetBrains Laboratorul de fizică a astroparticulelor analizează date precum Telegrama astronomului și a NASA Circulare GCN, care sunt rapoarte care conțin evenimente astronomice care nu pot fi analizate de algoritmi tradiționali.

Având la bază încorporarea OpenAI a acestor rapoarte astronomice, cercetătorii sunt acum capabili să caute evenimente precum „exploziile pulsarilor de crab” în mai multe baze de date și publicații. Embeddings a atins, de asemenea, o precizie de 99.85% la clasificarea surselor de date prin clustering k-means.

Învățare FineTune

Învățare FineTune este o companie care construiește soluții hibride om-AI pentru învățare, cum ar fi bucle de învățare adaptive care îi ajută pe studenți să atingă standardele academice.

Înglobările OpenAI au îmbunătățit semnificativ sarcina de a găsi conținut de manuale bazat pe obiectivele de învățare. Obținând o precizie de top 5 de 89.1%, modelul de încorporare text-search-curie al OpenAI a depășit abordările anterioare precum Sentence-BERT (64.5%). În timp ce experții umani sunt încă mai buni, echipa FineTune este acum capabilă să eticheteze manuale întregi în câteva secunde, spre deosebire de orele pe care le-au luat experților.

Comparație a înglobărilor noastre cu Sentence-BERT, Căutare GPT-3 și experți umani în materie pentru potrivirea conținutului manualului cu obiectivele învățate. Raportăm acuratețe@k, de câte ori răspunsul corect este în cadrul predicțiilor top-k.

fabius

fabius ajută companiile să transforme conversațiile cu clienții în perspective structurate care informează planificarea și prioritizarea. Încorporarile OpenAI permit companiilor să găsească și să eticheteze mai ușor transcrierea apelurilor clienților cu solicitări de funcții.

De exemplu, clienții ar putea folosi cuvinte precum „automatizat” sau „ușor de utilizat” pentru a solicita o platformă de autoservire mai bună. Anterior, Fabius folosea căutarea de cuvinte cheie neclară pentru a încerca să eticheteze acele transcrieri cu eticheta platformei de autoservire. Cu încorporarea OpenAI, aceștia sunt acum capabili să găsească de 2 ori mai multe exemple în general și de 6 ori până la 10 ori mai multe exemple pentru caracteristici cu cazuri de utilizare abstracte care nu au un cuvânt cheie clar pe care clienții l-ar putea folosi.

Toți clienții API pot începe cu documentația de încorporare pentru utilizarea înglobărilor în aplicațiile lor.

Citiți documentația


recunoasteri

Mulțumim următorilor pentru contribuțiile lor la această ediție:

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 Astfel, Kenny Hsu, Madeleine Thompson, Tabarak Khan și Toki Sherbakov.

Mulțumim următorilor pentru feedback-ul lor despre această postare: 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) { // anexează răspunsul var responseEl = document .querySelector('.endpoint-code-response') .querySelector('code') var callParentEl = document .querySelector('.endpoint-code-call') ) .querySelector('pre') if (!responseEl || !callParentEl) return; callParentEl.appendChild(responseEl); // ascunde butonul btn.style.display= 'niciun';
}; var initRotate = function () { var roteste = document.querySelectorAll('.js-rotate'); dacă (!roteste.lungime) întoarce; // pentru fiecare set de rotații rotește.forEach(funcție (r) { // mută primul copil la fiecare n secunde window.setInterval(function(){ moveToEnd(r, r.firstElementChild); }, 1500); }) ;
};
var moveToEnd = function (parinte, copil) { parent.removeChild(copil); parent.appendChild(copil); // anexează la părinte
}; 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 (!mai mult) return; more.style.display = „blocare”; this.style.display = „niciunul”; }); });
}; // init
document.addEventListener('DOMContentLoaded', function () { initRotate(); initShowMore();
});
importați {Runtime, Inspector, Library} din „https://unpkg.com/@observablehq/runtime@4.5.0/dist/runtime.js”;
import notebook_topk from “https://api.observablehq.com/d/20c1e51d6e663e6d.js?v=3”;
import notebook_embed3d din „https://api.observablehq.com/d/fef0801cb0a0b322.js?v=3” const customWidth = function (selector) { return (new Library).Generators.observe(function(change) { var width = schimbare(document.querySelector(selector).clientWidth); function resized() { var w = document.querySelector(selector).clientWidth; if (w !== width) change(width = w); } window.addEventListener(“ redimensionare”, redimensionat); return function() { window.removeEventListener(„redimensionare”, redimensionat); }; });
}; 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 există returnează Inspector nou (document.querySelector(selector)); } else { returnează adevărat; }
}); 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 există returnează Inspector nou (document.querySelector(selector)); } else { returnează adevărat; }
});

Timestamp-ul:

Mai mult de la OpenAI