Przedstawiamy osadzanie tekstu i kodu w OpenAI API PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Przedstawiamy osadzanie tekstu i kodu w API OpenAI

Przedstawiamy osadzanie tekstu i kodu w API OpenAI

Wprowadzamy osadzanie, nowy punkt końcowy w interfejsie API OpenAI, który ułatwia wykonywanie zadań w języku naturalnym i kodowaniu, takich jak wyszukiwanie semantyczne, klastrowanie, modelowanie tematów i klasyfikacja. Osadzenia to liczbowe reprezentacje pojęć przekonwertowane na sekwencje liczbowe, co ułatwia komputerom zrozumienie relacji między tymi pojęciami. Nasze osadzania przewyższają najlepsze modele w 3 standardowych testach porównawczych, w tym względną poprawę wyszukiwania kodu o 20%.

Przeczytaj dokumentacjęPrzeczytaj artykuł

Osadzania są przydatne do pracy z językiem naturalnym i kodem, ponieważ mogą być łatwo wykorzystywane i porównywane przez inne modele i algorytmy uczenia maszynowego, takie jak klastrowanie lub wyszukiwanie.

Przedstawiamy osadzanie tekstu i kodu w API OpenAI
Przedstawiamy osadzanie tekstu i kodu w API OpenAI
Przedstawiamy osadzanie tekstu i kodu w API OpenAI
Przedstawiamy osadzanie tekstu i kodu w API OpenAI
Przedstawiamy osadzanie tekstu i kodu w API OpenAI
Przedstawiamy osadzanie tekstu i kodu w API OpenAI

Osadzenia, które są podobne numerycznie, są również podobne semantycznie. Na przykład wektor osadzania słowa „psi towarzysze mówią” będzie bardziej podobny do wektora osadzania „hau” niż wektora „miau”.

Przedstawiamy osadzanie tekstu i kodu w API OpenAI
Przedstawiamy osadzanie tekstu i kodu w API OpenAI

Nowy punkt końcowy wykorzystuje modele sieci neuronowych, które są potomkami GPT-3, do mapowania tekstu i kodu na reprezentację wektorową — „osadzając” je w przestrzeni wielowymiarowej. Każdy wymiar oddaje pewien aspekt danych wejściowych.

Nowa /osadzania punkt końcowy w API OpenAI zapewnia osadzanie tekstu i kodu z kilkoma linijkami kodu:

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

Udostępniamy trzy rodziny modeli osadzania, z których każda jest dostosowana do różnych funkcji: podobieństwa tekstu, wyszukiwania tekstu i wyszukiwania kodu. Modele pobierają tekst lub kod jako dane wejściowe i zwracają wektor osadzania.

modele Przypadków użycia
Podobieństwo tekstu: Przechwytuje semantyczne podobieństwo między fragmentami tekstu. tekst-podobieństwo-{ada, babbage, curie, davinci}-001 Klastrowanie, regresja, wykrywanie anomalii, wizualizacja
Wyszukiwanie tekstu: Semantyczne wyszukiwanie informacji w dokumentach. wyszukiwanie tekstowe-{ada, babbage, curie, davinci}-{zapytanie, doc}-001 Wyszukiwanie, znaczenie kontekstowe, wyszukiwanie informacji
Wyszukiwanie kodu: Znajdź odpowiedni kod za pomocą zapytania w języku naturalnym. wyszukiwanie kodu-{ada, babbage}-{kod, tekst}-001 Wyszukiwanie kodu i trafność

Modele podobieństwa tekstu

Modele podobieństwa tekstu zapewniają osadzania, które przechwytują semantyczne podobieństwo fragmentów tekstu. Modele te są przydatne do wielu zadań, w tym: klastrowanie, Wizualizacja danych, klasyfikacja.

Poniższa interaktywna wizualizacja pokazuje osadzanie próbek tekstu z zestawu danych DBpedia:

Przeciągnij, aby przesunąć, przewinąć lub ścisnąć, aby powiększyć

Osadzania z text-similarity-babbage-001 model, zastosowany do DBpedia zbiór danych. Losowo wybraliśmy 100 próbek ze zbioru danych obejmujących 5 kategorii i obliczyliśmy osadzania za pomocą /osadzania punkt końcowy. Różne kategorie są wyświetlane jako 5 wyraźnych klastrów w przestrzeni osadzenia. Aby zwizualizować przestrzeń osadzania, zmniejszyliśmy wymiar osadzania z 2048 do 3 za pomocą PCA. Dostępny jest kod do wizualizacji osadzenia przestrzeni w wymiarze 3D tutaj.

Aby porównać podobieństwo dwóch fragmentów tekstu, wystarczy użyć produkt kropkowy na osadzeniach tekstu. Wynikiem jest „wynik podobieństwa”, czasami nazywany „podobieństwo cosinusowe”, między –1 a 1, gdzie wyższa liczba oznacza większe podobieństwo. W większości zastosowań osadzania można wstępnie obliczyć, a następnie porównanie iloczynów skalarnych jest niezwykle szybkie do przeprowadzenia.

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)

Jednym z popularnych zastosowań osadzania jest używanie ich jako funkcji w zadaniach uczenia maszynowego, takich jak klasyfikacja. W literaturze dotyczącej uczenia maszynowego, gdy używa się klasyfikatora liniowego, to zadanie klasyfikacji nazywa się „sondą liniową”. Nasze modele podobieństwa tekstu osiągają nowe, najnowocześniejsze wyniki w zakresie klasyfikacji sond liniowych w WysłaneEval (Conneau i in., 2018), powszechnie używany punkt odniesienia do oceny jakości osadzania.

Klasyfikacja sondy liniowej w 7 zestawach danych
Poprzednia SOTA (Gao i in. 2021)
90.2%
tekst-podobienstwo-davinci-001
92.2%
Pokaż więcej

Modele wyszukiwania tekstowego

Modele wyszukiwania tekstu zapewniają osadzania, które umożliwiają wykonywanie zadań wyszukiwania na dużą skalę, takich jak znajdowanie odpowiedniego dokumentu w zbiorze dokumentów na podstawie zapytania tekstowego. Osadzania dla dokumentów i zapytania są tworzone oddzielnie, a następnie podobieństwo kosinusowe jest używane do porównania podobieństwa między zapytaniem a każdym dokumentem.

Wyszukiwanie oparte na osadzeniu może uogólniać lepiej niż techniki nakładania się słów stosowane w klasycznym wyszukiwaniu słów kluczowych, ponieważ przechwytuje semantyczne znaczenie tekstu i jest mniej wrażliwe na dokładne frazy lub słowa. Oceniamy skuteczność modelu wyszukiwania tekstowego na BEIR (Thakura i in. 2021) zestaw do oceny wyszukiwania i uzyskać lepszą wydajność wyszukiwania niż poprzednie metody. Nasz przewodnik wyszukiwania tekstu zawiera więcej szczegółów na temat korzystania z osadzeń w zadaniach wyszukiwania.

Modele wyszukiwania kodu

Modele wyszukiwania kodu zapewniają osadzanie kodu i tekstu dla zadań wyszukiwania kodu. Mając zestaw bloków kodu, zadaniem jest znalezienie odpowiedniego bloku kodu dla zapytania w języku naturalnym. Oceniamy modele wyszukiwania kodu na CodeSearchNet (Husian i in., 2019) pakiet ewaluacyjny, w którym nasze osadzania osiągają znacznie lepsze wyniki niż wcześniejsze metody. Sprawdź przewodnik wyszukiwania kodu używać osadzeń do wyszukiwania kodu.

Średnia dokładność w 6 językach programowania
Poprzednia SOTA (Guo i in. 2021)
77.4%
code-search-babbage-{doc, zapytanie}-001
93.5%
Pokaż więcej

Przykłady Embeddings API w działaniu

Badania JetBrains

Badania JetBrains Laboratorium fizyki astrocząstek analizuje dane, takie jak Telegram Astronomera i NASA Okólniki GCN, czyli raporty zawierające zdarzenia astronomiczne, których nie można przeanalizować za pomocą tradycyjnych algorytmów.

Opierając się na osadzeniu tych raportów astronomicznych przez OpenAI, naukowcy są teraz w stanie wyszukiwać zdarzenia, takie jak „wybuchy pulsarów kraba” w wielu bazach danych i publikacjach. Osadzenia osiągnęły również 99.85% dokładność klasyfikacji źródeł danych za pomocą grupowania k-średnich.

Nauka dostrajania

Nauka dostrajania jest firmą budującą hybrydowe rozwiązania człowiek-AI do nauki, takie jak adaptacyjne pętle uczenia się które pomagają uczniom osiągnąć standardy akademickie.

Osadzania OpenAI znacznie poprawiły zadanie wyszukiwania treści podręcznika w oparciu o cele nauczania. Osiągając dokładność top-5 na poziomie 89.1%, model osadzania OpenAI przewyższył poprzednie podejścia, takie jak Sentence-BERT (64.5%). Podczas gdy eksperci są wciąż lepsi, zespół FineTune jest teraz w stanie oznaczyć całe podręczniki w ciągu kilku sekund, w przeciwieństwie do godzin, które zajęło ekspertom.

Porównanie naszych embeddingów z Sentence-BERT, Wyszukiwanie GPT-3 oraz ekspertów w dziedzinie ludzkiej tematyki w celu dopasowania treści podręcznika do wyuczonych celów. Zgłosimy dokładność@k, ile razy poprawna odpowiedź mieści się w górnej k prognoz.

Fabius

Fabius pomaga firmom przekształcać rozmowy z klientami w uporządkowane informacje, które pomagają w planowaniu i ustalaniu priorytetów. Osadzania OpenAI pozwalają firmom łatwiej znajdować i oznaczać transkrypcje połączeń klientów za pomocą żądań funkcji.

Na przykład klienci mogą używać słów takich jak „automatyczny” lub „łatwy w użyciu”, aby poprosić o lepszą platformę samoobsługową. Wcześniej Fabius używał rozmytego wyszukiwania słów kluczowych, aby oznaczyć te transkrypcje etykietą platformy samoobsługowej. Dzięki osadzeniom OpenAI są teraz w stanie znaleźć 2x więcej przykładów ogólnie i 6x-10x więcej przykładów funkcji z abstrakcyjnymi przypadkami użycia, które nie mają jasnego słowa kluczowego, którego mogliby użyć klienci.

Wszyscy klienci API mogą zacząć od dokumentacja osadzeń za wykorzystanie osadzeń w swoich aplikacjach.

Przeczytaj dokumentację


Podziękowanie

Dziękujemy następującym za ich wkład w to wydanie:

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

Dziękuję następującym osobom za opinie na temat tego postu: Tom Kleinpeter, Morgan Gallant, Sam Altman, Ilya Sutskever, Steve Dowling, Rachel Lim, Arun Vijayvergiya, Rajeev Nayak, Peter Welinder, Justin Jay Wang.

.vector-diagram img { wyświetlanie: brak;
}
.vector-diagram img:pierwsze dziecko { wyświetlacz: blok;
}

var printResponse = function (btn) { // dodaj odpowiedź 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); // ukryj przycisk btn.style.display= 'brak';
}; var initRotate = function () { var obraca = document.querySelectorAll('.js-rotate'); if (!rotates.length) return; // dla każdego zestawu obrotów obraca się.forEach(function (r) { // przenieś pierwsze dziecko do końca co n sekund window.setInterval(function(){ moveToEnd(r, r.firstElementChild); }, 1500; }) ;
};
var moveToEnd = function (rodzic, dziecko) { parent.removeChild(dziecko); rodzic.dołączDziecko(dziecko); // dołącz do rodzica
}; var initShowMore = function () { var showmores = document.querySelectorAll('.js-showmore'); showmores.forEach(function (e) { e.addEventListener('kliknij', function () { var showmoreparent = this.parentElement; if (!showmoreparent) return; var more = showmoreparent.querySelector('.js-more'); if (!more) return;more.style.display = 'blok'; this.style.display = 'brak'; }); });
}; // w tym
document.addEventListener('DOMContentLoaded', function () { initRotate(); initShowMore();
});
importuj {Runtime, Inspector, Library} z „https://unpkg.com/@observablehq/runtime@4.5.0/dist/runtime.js”;
import notebook_topk from “https://api.observablehq.com/d/20c1e51d6e663e6d.js?v=3”;
importuj notebook_embed3d z „https://api.observablehq.com/d/fef0801cb0a0b322.js?v=3” const customWidth = function (selector) { return (nowa biblioteka).Generators.observe(function(change) { var width = change(document.querySelector(selector).clientWidth); function resized() { var w = document.querySelector(selector).clientWidth; if (w !== szerokość) change(width = w); } window.addEventListener(“ zmień rozmiar”, zmień rozmiar); return function() { window.removeEventListener(„zmień rozmiar”, zmień rozmiar); }; });
}; const topk_renders = { „wykres”: „#wykres-topk”,
};
new Runtime(Object.assign(new Library, {width: customWidth(“#topk-chart”)})).module(notebook_topk, name => { const selector = topk_renders[name]; if (selector) { // key istnieje return new Inspector(document.querySelector(selector)); } else { return true; }
}); const embed3d_renders = { „wykres”: „#embed3d-chart”, „legenda”: ​​„#embed3d-legend”,
};
new Runtime(Object.assign(new Library, {width: customWidth(“#embed3d-chart”)})).module(notebook_embed3d, name => { const selector = embed3d_renders[name]; if (selector) { // key istnieje return new Inspector(document.querySelector(selector)); } else { return true; }
});

Znak czasu:

Więcej z OpenAI