*Ja, dies ist ein Namen von AI-generiertem Namen.
Dies ist eine experimentelle Bibliothek für die Verwendung von GPT / CHATGPT, um bei schwierigen Automatisierung von Aufgaben zu helfen, z. B. das Parsen unstrukturierter Text in strukturierte Daten.
Chatgpt ist neu und neigt dazu zu halluzinieren, sodass es Daten zurückgibt, die falsch sind oder nicht einmal existieren.
Beachten Sie auch, dass ChatGPT möglicherweise mit einer anderen Ausgabe oder sogar einer anderen Formatierung antworten kann, auch wenn Sie genau die gleiche Eingabeaufforderung zweimal einreichen. Zum Beispiel kann es zufällig entscheiden, fehlende Werte als Raum oder als Bindestrich oder als Na anzuzeigen.
Dies bedeutet, dass Sie es nicht zuverlässig in einen größeren Workflow integrieren und erwarten, dass er das gleiche Ergebnis konsequent erzeugt.
Im Moment ist die Bibliothek eine Sammlung von explorativen Skripten, die oft und ohne Vorwarnung scheitern. Die Dinge werden sich ändern und Schutzmaßnahmen werden eingerichtet, wenn die Bibliothek reift.
OpenAIs neuer GPT-4 hat eine höhere Token-Grenze (dh längere Eingabeaufforderungen) und soll bei der Analyse von Daten besser sein als GPT-3,5. Ich habe jedoch noch keinen Zugriff auf GPT-4, daher werden alle diese Beispiele mit GPT-3,5 geschrieben.
Verwenden Sie auf eigenes Risiko.
Sie können die Bibliothek aus GitHub installieren.
remotes :: install_github( " nicucalcea/RAISE " )
library( RAISE )Sie benötigen einen OpenAI -API -Schlüssel. Der einfachste Weg, um auf den Schlüssel zuzugreifen, besteht darin, ihn in Ihre R -Umgebung zu speichern.
Führen Sie usethis::edit_r_environ() aus, um Ihre R -Umgebungsdatei zu öffnen, und fügen Sie eine neue Zeile hinzu, die Ihren API -Schlüssel enthält. Es sollte ungefähr so aussehen.
OPENAI_API_KEY = "API_KEY_HERE"
Speichern Sie es und starten Sie neu.
Wenn Sie Chatgpt, gptstudio oder gpttools verwenden, sollten Sie bereits eingerichtet sein.
Raise kann Ihnen helfen, eine Eingabeaufforderung an Chatgpt zu senden und eine Antwort als Tabelle zu erhalten.
Nehmen wir an, Sie möchten einen Tisch der größten Gebäude der Welt und ihrer Größe.
buildings <- create_ai( " Top 10 tallest buildings in the world " ,
cols = c( " Building " , " Country " , " Developer " , " Year built " , " Height in metres " ))Wie oben erwähnt, ist GPT ein Sprachmodell, keine sachliche Suchmaschine. Obwohl die Daten korrekt sein können, besteht die Möglichkeit, dass dies nicht der Fall ist, und sie muss manuell überprüft werden.
Angenommen, Sie haben eine Liste von E -Mail -Adressen und möchten die ersten und Nachnamen aus ihnen extrahieren. Oder eine Liste von Namen und Sie versuchen, ihr wahrscheinliches Geschlecht zu schätzen?
Sie können GPT verwenden, um Ihre vorhandenen Daten zu erweitern. Hier ist ein Beispiel.
top_banks <- tribble( ~ bank , " HSBC Holdings " , " Lloyds Banking Group " , " Royal Bank of Scotland Group " , " Barclays " , " Standard Chartered " , " Santander UK " , " Nationwide Building Society " , " Schroders " ) | >
mutate( website = answer_ai(paste0( " Official website of " , bank , " : " )),
phone_nr = answer_ai(paste0( " Customer service number of " , bank , " : " )))In diesem Fall ruft die Funktion die API für jede Ihrer Zeilen auf und speichert die Antworten auf eine neue Spalte.
GPT scheint ziemlich gut darin, Daten aus unstrukturiertem Text zu analysieren.
Nehmen wir das Register der finanziellen Interessen der Mitglieder, eine notorisch klobige Datenbank, analysiert, was es schwierig macht, Änderungen im Laufe der Zeit zu verfolgen.
library( tidyverse )
mps <- read_csv( " https://raw.githubusercontent.com/sparkd/mp-financial-interests/master/data/financial-interests-2010-18.csv " ) | >
filter( type_code == 1 ) | >
head( 100 )
mps_structured <- extract_ai( mps $ description ,
cols = c( " date " , " sum " , " donor " , " donor_address " , " purpose " , " hours " , " date_registered " ))Ein weiteres Beispiel:
addresses <- c( " Majestic Distribution, Halesfield 2, Telford TF7 4QH " , " 1 Reeves Drive, Petersfield GU31 4FN " , " 9 Hawthorn Cottages, Hook Lane, Welling DA16 2LD " , " 4 Silvester Road, Castor PE5 7BA " , " 11 St Georges Close, London SE28 8QE " , " 510 Castle Wharf, East Tucker Street, Bristol BS1 6JU " , " 19 Brookside Close, Wombourne WV5 8JU " , " 384 Hough Fold Way, Bolton BL2 3QA " , " 3 Hadley Croft, Smethwick B66 1DP " , " 5 Field Drive, Crawley Down RH10 4AE " , " Flat 21, Beadnall House, 5 Lingwood Court, Thornaby TS17 0BF " , " 29 St Leonards Close, Bridgnorth WV16 4EJ " , " 3 Colville Road, Bournemouth BH5 2AG " , " Fferm Ganol, Llaithddu LD1 6YS " , " 129 Scott Road, Sheffield S4 7BH " , " R A O B Club, The Exchange Building, Chapel Street, Goole DN14 5RJ " , " Flat 1, Lawrence Court, 15 Highfield South, Birkenhead CH42 4NA " , " 37 Lower Noon Sun, Birch Vale SK22 1AQ " , " 1 Church Mews, Exmouth EX8 2SJ " , " 17 Windsor Drive, Kidderminster DY10 2NA " )
addressses_parsed <- extract_ai( addresses ,
cols = c( " city " , " postcode " , " street name " , " street number " , " flat or unit number " ))In beiden Fällen hat GPT-3.5 die Säulen extrahiert und ausgefüllt.
Wie zuvor ist der Vorgang nicht ohne Fehler und die Ergebnisse müssen überprüft werden, aber er kann viele Stunden manueller Arbeit sparen und uns schnelle Einblicke geben, auch wenn die Daten nicht endgültig sind.
Die API hat einige Einschränkungen hinsichtlich der großen Eingabeaufforderung und Antwort. Daher teilen wir die Abfrage in Stücke auf und treten danach in die Teile zurück.
Dies kann in Zukunft einige Fehler machen, daher ist es eine laufende Arbeit.
Das Parsen unstrukturierter Daten gilt auch für Webseiten. Schauen wir uns ein Beispiel an.
oscar_winners <- scrape_ai( " https://edition.cnn.com/2023/03/12/entertainment/oscar-winners-2023/index.html " ,
cols = c( " category " , " winner " , " nominees " ),
clean = " text " ,
css = " div[itemprop='articleBody'] " )Hier erhalten wir einen CNN -Artikel, in dem alle 2023 Oscars -Gewinner aufgelistet sind und GPT sagen, was von der Seite abkratzen soll. Es gibt eine Tabelle mit den angegebenen Spalten zurück.
Es gibt zwei zusätzliche Parameter, die wir in die Funktion einspeisen:
Das clean = "text" überstreift alle unsere Inhalte von HTML -Tags, was in unserem Fall nützlich ist, da wir uns nicht um die Formatierung kümmern. Es kann auf clean = "html" eingestellt werden, um nur unnötiges HTML abzukratzen, oder um zu clean = FALSE um das Ganze zu halten.
Der CSS -Selektor zielt auf einen bestimmten Teil der Seite ab, was bedeutet, dass wir die gesamte Seite nicht mit Navigationsmenüs, Seitenleisten usw. senden. Alternativ können Sie einen XPath -Selektor verwenden.
Beide sind optional und konzipiert, um die Größe der Eingabeaufforderung zu verringern, die wir senden, und anschließend die Kosten einer Abfrage zu senken.
Derzeit kann der Web -Schaber nicht mit Eingabeaufforderungen umgehen, die größer sind als die Token -Grenze.