Einführung von Text- und Code-Einbettungen in der OpenAI API PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Einführung von Text- und Code-Einbettungen in der OpenAI-API

Einführung von Text- und Code-Einbettungen in der OpenAI-API

Wir führen Einbettungen ein, einen neuen Endpunkt in der OpenAI-API, der es einfach macht, natürliche Sprache und Codeaufgaben wie semantische Suche, Clustering, Themenmodellierung und Klassifizierung auszuführen. Einbettungen sind numerische Darstellungen von Konzepten, die in Zahlenfolgen umgewandelt wurden, die es Computern erleichtern, die Beziehungen zwischen diesen Konzepten zu verstehen. Unsere Embeddings übertreffen Top-Modelle in 3 Standard-Benchmarks, einschließlich einer relativen Verbesserung von 20 % bei der Codesuche.

Dokumentation lesenPapier lesen

Einbettungen sind nützlich für die Arbeit mit natürlicher Sprache und Code, da sie leicht von anderen maschinellen Lernmodellen und Algorithmen wie Clustering oder Suche verwendet und verglichen werden können.

Einführung von Text- und Code-Einbettungen in der OpenAI-API
Einführung von Text- und Code-Einbettungen in der OpenAI-API
Einführung von Text- und Code-Einbettungen in der OpenAI-API
Einführung von Text- und Code-Einbettungen in der OpenAI-API
Einführung von Text- und Code-Einbettungen in der OpenAI-API
Einführung von Text- und Code-Einbettungen in der OpenAI-API

Numerisch ähnliche Einbettungen sind auch semantisch ähnlich. Beispielsweise ist der Einbettungsvektor von „Hundebegleiter sagen“ dem Einbettungsvektor von „Woof“ ähnlicher als dem von „Miau“.

Einführung von Text- und Code-Einbettungen in der OpenAI-API
Einführung von Text- und Code-Einbettungen in der OpenAI-API

Der neue Endpunkt verwendet neuronale Netzwerkmodelle, die Nachkommen von GPT-3 sind, um Text und Code auf eine Vektordarstellung abzubilden und sie in einen hochdimensionalen Raum „einzubetten“. Jede Dimension erfasst einen Aspekt der Eingabe.

The new /Einbettungen Endpunkt in der OpenAI-API bietet Text- und Code-Einbettungen mit wenigen Codezeilen:

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

Wir veröffentlichen drei Familien von Einbettungsmodellen, die jeweils auf unterschiedliche Funktionalitäten abgestimmt sind: Textähnlichkeit, Textsuche und Codesuche. Die Modelle nehmen entweder Text oder Code als Eingabe und geben einen Einbettungsvektor zurück.

Modelle Anwendungsbeispiele
Textähnlichkeit: Erfasst semantische Ähnlichkeit zwischen Textteilen. Textähnlichkeit-{ada, babbage, curie, davinci}-001 Clustering, Regression, Anomalieerkennung, Visualisierung
Textsuche: Semantischer Informationsabruf über Dokumente. Textsuche-{ada, babbage, curie, davinci}-{query, doc}-001 Suche, Kontextrelevanz, Informationsabruf
Codesuche: Relevanten Code mit einer Abfrage in natürlicher Sprache finden. Codesuche-{ada, babbage}-{code, text}-001 Codesuche und Relevanz

Textähnlichkeitsmodelle

Textähnlichkeitsmodelle stellen Einbettungen bereit, die die semantische Ähnlichkeit von Textteilen erfassen. Diese Modelle sind für viele Aufgaben nützlich, einschließlich Clustering, Datenvisualisierung und Einstufung.

Die folgende interaktive Visualisierung zeigt Einbettungen von Textbeispielen aus dem DBpedia-Datensatz:

Zum Schwenken ziehen, scrollen oder zum Zoomen ziehen

Einbettungen aus der text-similarity-babbage-001 Modell, angewandt auf die DBpedia Datensatz. Wir haben zufällig 100 Proben aus dem Datensatz ausgewählt, der 5 Kategorien abdeckt, und die Einbettungen über die berechnet /Einbettungen Endpunkt. Die verschiedenen Kategorien erscheinen als 5 klare Cluster im Einbettungsbereich. Um den Einbettungsraum zu visualisieren, haben wir die Einbettungsdimensionalität von 2048 auf 3 reduziert PCA. Der Code zur Visualisierung des Einbettungsraums in 3D-Dimension ist verfügbar hier.

Um die Ähnlichkeit zweier Textteile zu vergleichen, verwenden Sie einfach die Skalarprodukt zu den Texteinbettungen. Das Ergebnis ist ein „Ähnlichkeitswert“, manchmal auch „Kosinusähnlichkeit”, zwischen –1 und 1, wobei eine höhere Zahl mehr Ähnlichkeit bedeutet. In den meisten Anwendungen können die Einbettungen vorberechnet werden, und dann ist der Skalarproduktvergleich extrem schnell durchzuführen.

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)

Eine beliebte Verwendung von Einbettungen besteht darin, sie als Features in maschinellen Lernaufgaben wie der Klassifizierung zu verwenden. In der Literatur zum maschinellen Lernen wird diese Klassifizierungsaufgabe bei Verwendung eines linearen Klassifikators als „lineare Sonde“ bezeichnet. Unsere Textähnlichkeitsmodelle erzielen neue State-of-the-Art-Ergebnisse zur linearen Sondenklassifikation in GesendetEval (Conneauet al., 2018), ein häufig verwendeter Benchmark zur Bewertung der Einbettungsqualität.

Lineare Sondenklassifizierung über 7 Datensätze
Zurück SOTA (Gaoet al. 2021)
90.2%
textähnlichkeit-davinci-001
92.2%
Mehr anzeigen

Modelle für die Textsuche

Textsuchmodelle bieten Einbettungen, die umfangreiche Suchaufgaben ermöglichen, wie z. B. das Auffinden eines relevanten Dokuments in einer Sammlung von Dokumenten bei einer Textabfrage. Die Einbettung für die Dokumente und die Abfrage wird separat erzeugt, und dann wird die Kosinus-Ähnlichkeit verwendet, um die Ähnlichkeit zwischen der Abfrage und jedem Dokument zu vergleichen.

Die einbettungsbasierte Suche kann besser verallgemeinern als Wortüberlappungstechniken, die bei der klassischen Schlüsselwortsuche verwendet werden, da sie die semantische Bedeutung von Text erfasst und weniger empfindlich auf exakte Phrasen oder Wörter reagiert. Wir bewerten die Leistung des Textsuchmodells auf der BEIR (Thakur et al. 2021) Search Evaluation Suite und erhalten eine bessere Suchleistung als frühere Methoden. Unsere Anleitung zur Textsuche enthält weitere Details zur Verwendung von Einbettungen für Suchaufgaben.

Codesuchmodelle

Codesuchmodelle bieten Code- und Texteinbettungen für Codesuchaufgaben. Bei einer gegebenen Sammlung von Codeblöcken besteht die Aufgabe darin, den relevanten Codeblock für eine Abfrage in natürlicher Sprache zu finden. Wir evaluieren die Codesuchmodelle auf der CodeSearchNet (Husianet al., 2019) Evaluierungssuite, bei der unsere Einbettungen deutlich bessere Ergebnisse erzielen als frühere Methoden. Probier das aus Anleitung zur Codesuche Einbettungen für die Codesuche zu verwenden.

Durchschnittliche Genauigkeit über 6 Programmiersprachen
Zurück SOTA (Guo et al. 2021)
77.4%
code-search-babbage-{doc, query}-001
93.5%
Mehr anzeigen

Beispiele für die Einbettungs-API in Aktion

JetBrains-Forschung

JetBrains Research Labor für Astroteilchenphysik analysiert Daten wie Das Telegramm des Astronomen und NASAs GCN-Rundschreiben, bei denen es sich um Berichte handelt, die astronomische Ereignisse enthalten, die von herkömmlichen Algorithmen nicht geparst werden können.

Angetrieben von OpenAIs Einbettungen dieser astronomischen Berichte sind Forscher nun in der Lage, in mehreren Datenbanken und Publikationen nach Ereignissen wie „Krabbenpulsarausbrüchen“ zu suchen. Einbettungen erzielten außerdem eine Genauigkeit von 99.85 % bei der Datenquellenklassifizierung durch K-Means-Clustering.

FineTune-Lernen

FineTune-Lernen ist ein Unternehmen, das hybride Human-AI-Lösungen für das Lernen entwickelt, wie z adaptive Lernschleifen die den Schülern helfen, akademische Standards zu erreichen.

Die Einbettungen von OpenAI haben die Aufgabe, Lehrbuchinhalte basierend auf Lernzielen zu finden, erheblich verbessert. Mit einer Top-5-Genauigkeit von 89.1 % übertraf das Textsuche-Curie-Einbettungsmodell von OpenAI frühere Ansätze wie Sentence-BERT (64.5 %). Während menschliche Experten immer noch besser sind, ist das FineTune-Team jetzt in der Lage, ganze Lehrbücher in Sekundenschnelle zu beschriften, im Gegensatz zu den Stunden, die die Experten dafür brauchten.

Vergleich unserer Einbettungen mit Satz-BERT, GPT-3-Suche und menschliche Fachexperten für den Abgleich von Lehrbuchinhalten mit erlernten Zielen. Wir melden Genauigkeit@k, die Häufigkeit, mit der die richtige Antwort in den Top-k-Vorhersagen enthalten ist.

Fabius

Fabius hilft Unternehmen, Kundengespräche in strukturierte Erkenntnisse umzuwandeln, die die Planung und Priorisierung unterstützen. Die Einbettungen von OpenAI ermöglichen es Unternehmen, Anrufprotokolle von Kunden mit Funktionsanfragen einfacher zu finden und zu markieren.

Beispielsweise könnten Kunden Wörter wie „automatisiert“ oder „benutzerfreundlich“ verwenden, um nach einer besseren Self-Service-Plattform zu fragen. Zuvor verwendete Fabius eine unscharfe Schlüsselwortsuche, um zu versuchen, diese Transkripte mit dem Label der Self-Service-Plattform zu versehen. Mit den Einbettungen von OpenAI können sie jetzt im Allgemeinen 2x mehr Beispiele finden und 6x–10x mehr Beispiele für Funktionen mit abstrakten Anwendungsfällen, die kein klares Schlüsselwort haben, das Kunden verwenden könnten.

Alle API-Kunden können mit der beginnen Einbettungsdokumentation für die Verwendung von Einbettungen in ihren Anwendungen.

Dokumentation lesen


Anerkennungen

Vielen Dank an die folgenden Personen für ihre Beiträge zu dieser Version:

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 So Kenny Hsu, Madeleine Thompson, Tabarak Khan und Toki Sherbakov.

Vielen Dank für ihr Feedback zu diesem Beitrag: Tom Kleinpeter, Morgan Gallant, Sam Altman, Ilya Sutskever, Steve Dowling, Rachel Lim, Arun Vijayvergiya, Rajeev Nayak, Peter Welinder, Justin Jay Wang.

.vector-diagram img { Anzeige: keine;
}
.Vektordiagramm img:first-child { display: block;
}

var printResponse = function (btn) { // Antwort anhängen 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); // Schaltfläche ausblenden btn.style.display= 'none';
}; var initRotate = function () { var rotiert = document.querySelectorAll('.js-rotate'); if (!rotates.length) return; // für jeden Rotationssatz rotiert.forEach(function (r) { // erstes untergeordnetes Element alle n Sekunden zum Ende verschieben window.setInterval(function(){ moveToEnd(r, r.firstElementChild); }, 1500); }) ;
};
var moveToEnd = function (Elternteil, Kind) { parent.removeChild(child); parent.appendChild(Kind); // An Elternteil anhängen
}; 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'; }); });
}; // drin
document.addEventListener('DOMContentLoaded', function () { initRotate(); initShowMore();
});
importiere {Runtime, Inspector, Library} aus „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 from „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(“ Größe ändern", Größe geändert); return function() { window.removeEventListener("Größe ändern", Größe geändert); }; });
}; const topk_renders = { „Diagramm“: „#topk-Diagramm“,
};
new Runtime(Object.assign(new Library, {width: customWidth("#topk-chart")})).module(notebook_topk, name => { const selector = topk_renders[name]; if (selector) { // key existiert gibt neuen Inspektor(document.querySelector(selector)); } else {return true; }
}); const embed3d_renders = { „Diagramm“: „#embed3d-Diagramm“, „Legende“: „#embed3d-Legende“,
};
new Runtime(Object.assign(new Library, {width: customWidth("#embed3d-chart")})).module(notebook_embed3d, name => { const selector = embed3d_renders[name]; if (selector) { // key existiert gibt neuen Inspektor zurück(document.querySelector(selector)); } else { return true; }
});

Zeitstempel:

Mehr von OpenAI