Esittelyssä tekstin ja koodin upotukset OpenAI API PlatoBlockchain Data Intelligencessä. Pystysuuntainen haku. Ai.

Esittelyssä tekstin ja koodin upottaminen OpenAI API:ssa

Esittelyssä tekstin ja koodin upottaminen OpenAI API:ssa

Esittelemme upotukset, OpenAI API:n uuden päätepisteen, jonka avulla on helppo suorittaa luonnollisen kielen ja koodin tehtäviä, kuten semanttinen haku, klusterointi, aihemallinnus ja luokittelu. Upotukset ovat käsitteiden numeerisia esityksiä, jotka on muunnettu numerosarjoiksi, minkä ansiosta tietokoneiden on helppo ymmärtää näiden käsitteiden väliset suhteet. Upotuksemme ovat tehokkaampia kuin huippumallit kolmessa vakiovertailussa, mukaan lukien 3 %:n suhteellinen parannus koodihaussa.

Lue dokumentaatioLue paperi

Upotukset ovat hyödyllisiä luonnollisen kielen ja koodin kanssa työskentelyssä, koska niitä voidaan helposti käyttää ja verrata muihin koneoppimismalleihin ja -algoritmeihin, kuten klusterointiin tai hakuun.

Esittelyssä tekstin ja koodin upottaminen OpenAI API:ssa
Esittelyssä tekstin ja koodin upottaminen OpenAI API:ssa
Esittelyssä tekstin ja koodin upottaminen OpenAI API:ssa
Esittelyssä tekstin ja koodin upottaminen OpenAI API:ssa
Esittelyssä tekstin ja koodin upottaminen OpenAI API:ssa
Esittelyssä tekstin ja koodin upottaminen OpenAI API:ssa

Numeerisesti samankaltaiset upotukset ovat myös semanttisesti samanlaisia. Esimerkiksi "koiran kumppanit sanovat" upotusvektori on samankaltainen kuin "woof" kuin "miau" upotusvektori.

Esittelyssä tekstin ja koodin upottaminen OpenAI API:ssa
Esittelyssä tekstin ja koodin upottaminen OpenAI API:ssa

Uusi päätepiste käyttää hermoverkkomalleja, jotka ovat GPT-3:n jälkeläisiä, kartoittaakseen tekstin ja koodin vektoriesitykseen - "upotamalla" ne korkean ulottuvuuden tilaan. Jokainen ulottuvuus kaappaa jonkin osan syötteestä.

Uusi / upotukset päätepiste kohdassa OpenAI-sovellusliittymä tarjoaa tekstin ja koodin upotukset muutamalla koodirivillä:

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

Julkaisemme kolme upotusmalliperhettä, joista jokainen on viritetty toimimaan hyvin eri toiminnoissa: tekstin samankaltaisuus, tekstihaku ja koodihaku. Mallit syöttävät joko tekstiä tai koodia ja palauttavat upotusvektorin.

Mallit Käytä koteloita
Tekstin samankaltaisuus: Vangitsee semanttisen samankaltaisuuden tekstin osien välillä. text-similarity-{ada, babbage, curie, davinci}-001 Klusterointi, regressio, poikkeamien havaitseminen, visualisointi
Tekstihaku: Semanttisen tiedon haku asiakirjoista. text-search-{ada, babbage, curie, davinci}-{query, doc}-001 Haku, kontekstin relevanssi, tiedonhaku
Koodihaku: Etsi asiaankuuluva koodi kyselyllä luonnollisella kielellä. koodihaku-{ada, babbage}-{koodi, teksti}-001 Koodin haku ja osuvuus

Tekstin samankaltaisuusmallit

Tekstin samankaltaisuusmallit tarjoavat upotuksia, jotka vangitsevat tekstin osien semanttisen samankaltaisuuden. Nämä mallit ovat hyödyllisiä moniin tehtäviin, mukaan lukien klustereiden, datan visualisointija luokittelu.

Seuraava interaktiivinen visualisointi näyttää tekstinäytteiden upotukset DBpedia-tietojoukosta:

Panoroi vetämällä, zoomaa vierittämällä tai nipistämällä

Upotukset alkaen text-similarity-babbage-001 mallia, jota sovelletaan DBpedia tietojoukko. Valitsimme satunnaisesti 100 näytettä tietojoukosta, jotka kattavat 5 luokkaa, ja laskemme upotukset / upotukset päätepiste. Eri luokat näkyvät 5 selkeänä klusterina upotustilassa. Upotustilan visualisoimiseksi pienensimme upotusulottuvuutta 2048:sta 3:een käyttämällä PCA. Koodi tilan upottamisen visualisointiin 3D-ulottuvuudessa on saatavilla tätä.

Vertaaksesi kahden tekstin samankaltaisuutta, käytät yksinkertaisesti pistetuote tekstin upotuksissa. Tuloksena on "samankaltaisuuspisteet", jota joskus kutsutaan "kosinin samankaltaisuus”, välillä –1 ja 1, jossa suurempi luku tarkoittaa enemmän samankaltaisuutta. Useimmissa sovelluksissa upotukset voidaan laskea etukäteen, jolloin pistetuotevertailu on erittäin nopea suorittaa.

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)

Yksi suosittu upotusten käyttötapa on käyttää niitä ominaisuuksina koneoppimistehtävissä, kuten luokittelussa. Koneoppimiskirjallisuudessa, kun käytetään lineaarista luokittelijaa, tätä luokittelutehtävää kutsutaan "lineaariseksi koettimeksi". Tekstin samankaltaisuusmallimme saavuttavat uusia huippuluokan tuloksia lineaarisen koettimen luokittelussa SentEval (Conneau ym., 2018), yleisesti käytetty vertailukohta upottamisen laadun arvioinnissa.

Lineaarinen koetinluokitus yli 7 tietojoukon
Edellinen SOTA (Gao et ai. 2021)
90.2%
text-similarity-davinci-001
92.2%
Näytä lisää

Tekstihaun mallit

Tekstihakumallit tarjoavat upotuksia, jotka mahdollistavat suuren mittakaavan hakutehtävät, kuten sopivan asiakirjan löytämisen tekstikyselyllä annettujen asiakirjojen joukosta. Asiakirjojen ja kyselyn upotus tuotetaan erikseen, ja sitten kosinin samankaltaisuutta käytetään vertaamaan kyselyn ja kunkin asiakirjan samankaltaisuutta.

Upotuspohjainen haku voi yleistää paremmin kuin perinteisessä avainsanahaussa käytetyt sanojen päällekkäisyystekniikat, koska se vangitsee tekstin semanttisen merkityksen ja on vähemmän herkkä tarkille lauseille tai sanoille. Arvioimme tekstihakumallin suorituskyvyn BEIR (Thakur et ai. 2021) etsi arviointiohjelmistoa ja saat paremman hakutuloksen kuin aikaisemmat menetelmät. Meidän tekstihakuopas sisältää lisätietoja upotusten käyttämisestä hakutehtävissä.

Koodihakumallit

Koodihakumallit tarjoavat koodin ja tekstin upotuksia koodihakutehtäviin. Kun on annettu kokoelma koodilohkoja, tehtävänä on löytää asiaankuuluva koodilohko luonnollisen kielen kyselylle. Arvioimme koodihakumalleja CodeSearchNet (Husian ym., 2019) arviointisarja, jossa upotuksillamme saavutetaan huomattavasti parempia tuloksia kuin aikaisemmilla menetelmillä. Tutustu koodihakuopas käyttääksesi upotuksia koodihakuun.

Keskimääräinen tarkkuus yli 6 ohjelmointikielellä
Edellinen SOTA (Guo et ai. 2021)
77.4%
koodi-haku-babbage-{doc, kysely}-001
93.5%
Näytä lisää

Esimerkkejä Embeddings API:sta toiminnassa

JetBrains-tutkimus

JetBrains Research's Astroparticle Physics Lab analysoi dataa esim Tähtitieteilijän sähke ja NASA: n GCN-kiertokirjeet, jotka sisältävät tähtitieteellisiä tapahtumia, joita ei voida jäsentää perinteisillä algoritmeilla.

OpenAI:n näiden tähtitieteellisten raporttien upotusten avulla tutkijat voivat nyt etsiä tapahtumia, kuten "rapupulsaaripurkauksia" useista tietokannoista ja julkaisuista. Embeddings saavutti myös 99.85 % tarkkuuden tietolähteiden luokittelussa k-means-klusteroinnin avulla.

FineTune-oppiminen

FineTune-oppiminen on yritys, joka rakentaa hybridi-ihmis-AI-ratkaisuja oppimiseen, kuten mukautuvat oppimissilmukat jotka auttavat opiskelijoita saavuttamaan akateemiset tasot.

OpenAI:n upotukset paransivat merkittävästi oppikirjasisällön löytämistä oppimistavoitteiden perusteella. OpenAI:n teksti-haku-curie-upotusmalli saavutti viiden parhaan 5 prosentin tarkkuuden, joka ylitti aiemmat lähestymistavat, kuten Sentence-BERT (89.1 %). Vaikka ihmisten asiantuntijat ovat edelleen parempia, FineTune-tiimi pystyy nyt merkitsemään kokonaisia ​​oppikirjoja muutamassa sekunnissa, toisin kuin asiantuntijoiden tuntimäärässä.

Upotuksiemme vertailu lauseeseen BERT, GPT-3 haku ja ihmisaiheen asiantuntijoita oppikirjan sisällön ja opittujen tavoitteiden yhdistämiseksi. Raportoimme tarkkuus@k, kuinka monta kertaa oikea vastaus on top-k-ennusteiden sisällä.

Fabius

Fabius auttaa yrityksiä muuttamaan asiakaskeskustelut jäsennellyiksi oivalluksiksi, jotka auttavat suunnittelussa ja priorisoinnissa. OpenAI:n upotusten avulla yritykset voivat helpommin löytää ja merkitä asiakkaiden puhelujen transkriptioita ominaisuuspyynnöillä.

Asiakkaat voivat esimerkiksi käyttää sanoja "automaattinen" tai "helppokäyttöinen" pyytääkseen parempaa itsepalvelualustaa. Aiemmin Fabius käytti sumeaa avainsanahakua yrittääkseen merkitä nämä transkriptit itsepalvelualustan tunnisteella. OpenAI:n upotusten avulla he voivat nyt löytää 2x enemmän esimerkkejä yleensä ja 6x–10x enemmän esimerkkejä ominaisuuksista, joissa on abstrakteja käyttötapauksia, joilla ei ole selkeää avainsanaa, jota asiakkaat voisivat käyttää.

Kaikki API-asiakkaat voivat aloittaa upotusten dokumentaatio upotusten käyttämisestä sovelluksissaan.

Lue dokumentaatio


Kiitokset

Kiitos seuraaville heidän panoksestaan ​​tähän julkaisuun:

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

Kiitos seuraaville palautteesta tähän viestiin: Tom Kleinpeter, Morgan Gallant, Sam Altman, Ilya Sutskever, Steve Dowling, Rachel Lim, Arun Vijayvergiya, Rajeev Nayak, Peter Welinder, Justin Jay Wang.

.vector-diagram img { näyttö: ei mitään;
}
.vector-diagram img:first-child { näyttö: block;
}

var printResponse = funktio (btn) { // liitä vastaus var vastausEl = document .querySelector('.endpoint-code-response') .querySelector('code') var callParentEl = asiakirja .querySelector('.endpoint-code-call' ) .querySelector('pre') if (!responseEl || !callParentEl) return; callParentEl.appendChild(responseEl); // piilota painike btn.style.display= 'ei mitään';
}; var initRotate = funktio () { var kiertää = document.querySelectorAll('.js-rotate'); if (!rotates.length) return; // kullekin rotates-joukolle rotates.forEach(function (r) { // siirrä ensimmäinen lapsi loppuun n sekunnin välein window.setInterval(function(){ moveToEnd(r, r.firstElementChild); }, 1500; }) ;
};
var moveToEnd = funktio (vanhempi, lapsi) { vanhempi.poistaLapsi(lapsi); vanhempi.appendLapsi(lapsi); // liittää vanhemmalle
}; 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 = 'ei mitään'; }); });
}; // sen sisällä
document.addEventListener('DOMContentLoaded', function () { initRotate(); initShowMore();
});
tuo {Runtime, Inspector, Library} osoitteesta https://unpkg.com/@observablehq/runtime@4.5.0/dist/runtime.js;
import notebook_topk from “https://api.observablehq.com/d/20c1e51d6e663e6d.js?v=3”;
tuo notebook_embed3d osoitteesta “https://api.observablehq.com/d/fef0801cb0a0b322.js?v=3” const customWidth = function (valitsin) { return (uusi kirjasto).Generators.observe(function(change) { var width = change(document.querySelector(selector).clientWidth); funktio resized() { var w = document.querySelector(selector).clientWidth; if (w !== leveys) change(width = w); } window.addEventListener(“ muuta kokoa", kokoa muutettu); return function() { window.removeEventListener("muuta kokoa", kokoa muutettu); }; });
}; const topk_renders = { "kaavio": "#topk-kaavio",
};
new Runtime(Object.assign(new Library, {width: customWidth(“#topk-chart”)})).module(notebook_topk, name => { const selector = topk_renders[name]; if (valitsin) { //-näppäin olemassa return new Inspector(document.querySelector(selector)); } else { return true; }
}); const embed3d_renders = { "kaavio": "#embed3d-kaavio", "legend": "#embed3d-legend",
};
new Runtime(Object.assign(new Library, {width: customWidth("#embed3d-chart"}))).module(notebook_embed3d, name => { const selector = embed3d_renders[name]; if (valitsin) { // avain olemassa return new Inspector(document.querySelector(selector)); } else { return true; }
});

Aikaleima:

Lisää aiheesta OpenAI