Introductie van tekst- en code-insluitingen in de OpenAI API PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Introductie van tekst- en code-insluitingen in de OpenAI API

Introductie van tekst- en code-insluitingen in de OpenAI API

We introduceren inbeddingen, een nieuw eindpunt in de OpenAI API dat het gemakkelijk maakt om natuurlijke taal- en codetaken uit te voeren, zoals semantisch zoeken, clustering, onderwerpmodellering en classificatie. Inbeddingen zijn numerieke representaties van concepten die zijn geconverteerd naar nummerreeksen, waardoor het voor computers gemakkelijk is om de relaties tussen die concepten te begrijpen. Onze inbeddingen presteren beter dan topmodellen in 3 standaard benchmarks, waaronder een relatieve verbetering van 20% in het zoeken naar codes.

Lees documentatieLees paper

Insluitingen zijn handig voor het werken met natuurlijke taal en code, omdat ze gemakkelijk kunnen worden gebruikt en vergeleken door andere machine learning-modellen en algoritmen zoals clustering of zoeken.

Introductie van tekst- en code-insluitingen in de OpenAI API
Introductie van tekst- en code-insluitingen in de OpenAI API
Introductie van tekst- en code-insluitingen in de OpenAI API
Introductie van tekst- en code-insluitingen in de OpenAI API
Introductie van tekst- en code-insluitingen in de OpenAI API
Introductie van tekst- en code-insluitingen in de OpenAI API

Inbeddingen die numeriek vergelijkbaar zijn, zijn ook semantisch vergelijkbaar. Bijvoorbeeld, de inbeddingsvector van "hondachtige metgezellen zeggen" zal meer lijken op de inbeddingsvector van "inslag" dan die van "miauw".

Introductie van tekst- en code-insluitingen in de OpenAI API
Introductie van tekst- en code-insluitingen in de OpenAI API

Het nieuwe eindpunt maakt gebruik van neurale netwerkmodellen, die afstammelingen zijn van GPT-3, om tekst en code toe te wijzen aan een vectorrepresentatie - ze 'inbedden' in een hoogdimensionale ruimte. Elke dimensie legt een bepaald aspect van de invoer vast.

De nieuwe /inbeddingen eindpunt in de OpenAI-API biedt tekst- en code-insluitingen met een paar regels code:

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

We brengen drie families van inbeddingsmodellen uit, elk afgestemd om goed te presteren op verschillende functionaliteiten: tekstovereenkomst, tekst zoeken en code zoeken. De modellen nemen tekst of code als invoer en retourneren een inbeddingsvector.

Modellen Cases
Tekstovereenkomst: Legt semantische overeenkomst tussen stukken tekst vast. tekst-overeenkomst-{ada, babbage, curie, davinci}-001 Clustering, regressie, anomaliedetectie, visualisatie
Tekst zoeken: Semantische informatie ophalen over documenten. text-search-{ada, babbage, curie, davinci}-{query, doc}-001 Zoeken, contextrelevantie, informatie ophalen
Code zoeken: Vind relevante code met een zoekopdracht in natuurlijke taal. code-zoeken-{ada, babbage}-{code, tekst}-001 Code zoeken en relevantie

Tekstovereenkomstmodellen

Tekstovereenkomstmodellen bieden inbeddingen die de semantische overeenkomst van stukken tekst vastleggen. Deze modellen zijn nuttig voor veel taken, waaronder: clustering, data visualisatie en classificatie.

De volgende interactieve visualisatie toont inbeddingen van tekstvoorbeelden uit de DBpedia-dataset:

Sleep om te pannen, scrollen of knijpen om te zoomen

Inbeddingen van de text-similarity-babbage-001 model, toegepast op de DBpedia gegevensset. We selecteerden willekeurig 100 monsters uit de dataset die 5 categorieรซn dekt, en berekenden de inbeddingen via de /inbeddingen eindpunt. De verschillende categorieรซn verschijnen als 5 duidelijke clusters in de inbeddingsruimte. Om de inbeddingsruimte te visualiseren, hebben we de dimensionaliteit van de inbedding teruggebracht van 2048 naar 3 met behulp van PCA. De code voor het visualiseren van inbeddingsruimte in 3D-dimensie is beschikbaar hier.

Om de overeenkomst van twee stukken tekst te vergelijken, gebruikt u eenvoudig de punt product op de tekstinsluitingen. Het resultaat is een "overeenkomstscore", ook wel "cosinus gelijkenisโ€, tussen โ€“1 en 1, waarbij een hoger getal meer overeenkomst betekent. In de meeste toepassingen kunnen de inbeddingen vooraf worden berekend, en dan is de puntproductvergelijking extreem snel uit te voeren.

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)

Een populair gebruik van inbeddingen is om ze te gebruiken als functies in machine learning-taken, zoals classificatie. In de literatuur over machine learning wordt deze classificatietaak een 'lineaire sonde' genoemd wanneer een lineaire classificatie wordt gebruikt. Onze tekstovereenkomstmodellen bereiken nieuwe state-of-the-art resultaten op lineaire sondeclassificatie in VerzondenEval (Conneau et al., 2018), een veelgebruikte benchmark voor het evalueren van de inbeddingskwaliteit.

Lineaire sondeclassificatie over 7 datasets
Vorige SOTA (Gao et al. 2021)
90.2%
tekst-overeenkomst-davinci-001
92.2%
Meer

Tekstzoekmodellen

Tekstzoekmodellen bieden insluitingen die grootschalige zoektaken mogelijk maken, zoals het vinden van een relevant document in een verzameling documenten met een tekstquery. Inbedding voor de documenten en query worden afzonderlijk geproduceerd en vervolgens wordt cosinusovereenkomst gebruikt om de overeenkomst tussen de query en elk document te vergelijken.

Zoeken op basis van inbedding kan beter generaliseren dan technieken voor het overlappen van woorden die worden gebruikt bij het zoeken op klassieke trefwoorden, omdat het de semantische betekenis van tekst vastlegt en minder gevoelig is voor exacte woordgroepen of woorden. We evalueren de prestaties van het tekstzoekmodel op de BEIR (Thakur, et al. 2021) zoekevaluatiesuite en betere zoekprestaties verkrijgen dan eerdere methoden. Ons tekstzoekgids biedt meer details over het gebruik van insluitingen voor zoektaken.

Code zoeken modellen

Codezoekmodellen bieden code- en tekstinsluitingen voor codezoektaken. Gegeven een verzameling codeblokken, is het de taak om het relevante codeblok voor een natuurlijke taalquery te vinden. We evalueren de code-zoekmodellen op de CodeSearchNet (Husian et al., 2019) evaluatiesuite waar onze inbeddingen aanzienlijk betere resultaten opleveren dan eerdere methoden. Bekijk de code zoekgids om insluitingen te gebruiken voor het zoeken naar codes.

Gemiddelde nauwkeurigheid over 6 programmeertalen
Vorige SOTA (Guo et al. 2021)
77.4%
code-zoeken-babbage-{doc, query}-001
93.5%
Meer

Voorbeelden van de Embeddings-API in actie

JetBrains-onderzoek

JetBrains Research's Astrodeeltjesfysica Lab analyseert gegevens zoals: Het telegram van de astronoom en die van NASA GCN-circulaires, dit zijn rapporten die astronomische gebeurtenissen bevatten die niet kunnen worden geparseerd door traditionele algoritmen.

Aangedreven door OpenAI's inbedding van deze astronomische rapporten, kunnen onderzoekers nu zoeken naar gebeurtenissen zoals "crab pulsar bursts" in meerdere databases en publicaties. Inbeddingen behaalden ook een nauwkeurigheid van 99.85% bij de classificatie van gegevensbronnen door middel van k-means-clustering.

FineTune leren

FineTune leren is een bedrijf dat hybride mens-AI-oplossingen voor leren bouwt, zoals: adaptieve leerlussen die studenten helpen academische normen te bereiken.

De inbeddingen van OpenAI hebben de taak om leerboekinhoud te vinden op basis van leerdoelen aanzienlijk verbeterd. Met een top-5-nauwkeurigheid van 89.1%, presteerde het inbeddingsmodel van OpenAI voor tekst-zoek-curie beter dan eerdere benaderingen zoals Sentence-BERT (64.5%). Hoewel menselijke experts nog steeds beter zijn, is het FineTune-team nu in staat om hele studieboeken in een kwestie van seconden te labelen, in tegenstelling tot de uren die het de experts kostte.

Vergelijking van onze inbeddingen met Sentence-BERT, GPT-3 zoeken en deskundigen op het gebied van menselijke materie voor het matchen van leerboekinhoud met geleerde doelstellingen. Wij melden nauwkeurigheid@k, het aantal keren dat het juiste antwoord binnen de top-k-voorspellingen valt.

Fabius

Fabius helpt bedrijven om klantgesprekken om te zetten in gestructureerde inzichten die de planning en prioritering informeren. Dankzij de inbedding van OpenAI kunnen bedrijven gemakkelijker transcripties van klantgesprekken vinden en taggen met functieverzoeken.

Klanten kunnen bijvoorbeeld woorden als 'geautomatiseerd' of 'gemakkelijk te gebruiken' gebruiken om te vragen om een โ€‹โ€‹beter zelfbedieningsplatform. Voorheen gebruikte Fabius fuzzy keyword search om te proberen die transcripties te taggen met het selfservice platformlabel. Met de inbedding van OpenAI kunnen ze nu 2x meer voorbeelden in het algemeen vinden, en 6x-10x meer voorbeelden voor functies met abstracte use-cases die geen duidelijk zoekwoord hebben dat klanten zouden kunnen gebruiken.

Alle API-klanten kunnen aan de slag met de inbeddingsdocumentatie voor het gebruik van inbeddingen in hun toepassingen.

Lees documentatie


Dankwoord

Met dank aan de volgende personen voor hun bijdragen aan deze 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 Zoals Kenny Hsu, Madeleine Thompson, Tabarak Khan en Toki Sherbakov.

Met dank aan de volgende personen voor hun feedback op dit bericht: 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: geen;
}
.vectordiagram 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') als (!responseEl || !callParentEl) terugkeer; callParentEl.appendChild(responseEl); // verberg knop btn.style.display= 'none';
}; var initRotate = function () { varrotaties = document.querySelectorAll('.js-rotate'); als (!roteert.lengte) terugkeer; // voor elke set rotaties roteert.forEach(function (r) {// verplaats het eerste kind naar het einde van elke n seconden window.setInterval(function(){ moveToEnd(r, r.firstElementChild); }, 1500); }) ;
};
var moveToEnd = functie (ouder, kind) { parent.removeChild (kind); ouder.appendChild(kind); // toevoegen aan ouder
}; 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 = 'block'; this.style.display = 'none'; }); });
}; // in het
document.addEventListener('DOMContentLoaded', function () { initRotate(); initShowMore();
});
importeer {Runtime, Inspector, Library} van "https://unpkg.com/@observablehq/runtime@4.5.0/dist/runtime.js";
import notebook_topk from โ€œhttps://api.observablehq.com/d/20c1e51d6e663e6d.js?v=3โ€;
importeer notebook_embed3d van "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(โ€œ formaat wijzigen", formaat wijzigen); return function() { window.removeEventListener(โ€œformaat wijzigenโ€, formaat wijzigen); }; });
}; const topk_renders = { โ€œgrafiekโ€: โ€œ#topk-grafiekโ€,
};
new Runtime(Object.assign(new Library, {width: customWidth(โ€œ#topk-chartโ€)})).module(notebook_topk, name => { const selector = topk_renders[name]; if (selector) { // key bestaat retourneer nieuwe Inspector (document.querySelector (selector)); } else { return true; }
}); const embed3d_renders = { โ€œgrafiekโ€: โ€œ#embed3d-chartโ€, โ€œlegendeโ€: โ€œ#embed3d-legendโ€,
};
new Runtime(Object.assign(nieuwe bibliotheek, {width: customWidth(โ€œ#embed3d-chartโ€)})).module(notebook_embed3d, name => { const selector = embed3d_renders[name]; if (selector) { // key bestaat retourneer nieuwe Inspector (document.querySelector (selector)); } else { return true; }
});

Tijdstempel:

Meer van OpenAI