*Sim, este é um nome gerado pela AI.
Esta é uma biblioteca experimental para usar o GPT / CHATGPT para ajudar com tarefas difíceis de automatizar, como analisar texto não estruturado em dados estruturados.
O ChatGPT é novo e tende a alucinar, por isso retornará dados que estão errados ou nem existem.
Observe também que o ChatGPT pode responder com uma saída diferente ou mesmo formatação diferente, mesmo se você enviar exatamente o mesmo prompt duas vezes. Por exemplo, pode optar aleatoriamente por exibir valores ausentes como um espaço, ou como hífen, ou como na.
Isso significa que você não pode incorporá -lo com segurança em um fluxo de trabalho maior e espera que ele produza o mesmo resultado de forma consistente.
No momento, a biblioteca é uma coleção de scripts exploratórios que falham com frequência e sem aviso prévio. As coisas mudarão e as salvaguardas serão implementadas à medida que a biblioteca amadurece.
O novo GPT-4 da OpenAI tem um limite de token mais alto (o que significa instruções mais longas) e deve ser melhor que o GPT-3.5 na análise de dados. No entanto, ainda não tenho acesso ao GPT-4, então todos esses exemplos são escritos com o GPT-3.5 em mente.
Use por sua conta e risco.
Você pode instalar a biblioteca no GitHub.
remotes :: install_github( " nicucalcea/RAISE " )
library( RAISE )Você precisará de uma chave de API do OpenAI. A maneira mais fácil de aumentar o acesso à chave é salvá -la em seu ambiente R.
Execute usethis::edit_r_environ() para abrir seu arquivo de ambiente R e adicione uma nova linha que contém sua tecla API. Deve parecer algo assim.
OPENAI_API_KEY = "API_KEY_HERE"
Salve e reinicie.
Se você usar ChatGPT, GPTStudio ou GPTTools, já deve estar configurado.
Raise pode ajudá -lo a enviar um prompt para ChatGPT e obter uma resposta como uma tabela.
Digamos que você queira uma mesa dos maiores edifícios do mundo e sua altura.
buildings <- create_ai( " Top 10 tallest buildings in the world " ,
cols = c( " Building " , " Country " , " Developer " , " Year built " , " Height in metres " ))Como mencionado acima, o GPT é um modelo de idioma, não um mecanismo de pesquisa factual. Embora os dados possam estar corretos, há uma chance de que não sejam e precisam verificar manualmente.
Digamos que você tenha uma lista de endereços de e -mail e deseja extrair os primeiros e sobrenomes deles. Ou uma lista de nomes e você está tentando estimar o gênero mais provável?
Você pode usar o GPT para aumentar seus dados existentes. Aqui está um exemplo.
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 , " : " )))Nesse caso, a função chamará a API para cada uma de suas linhas e salvará as respostas a uma nova coluna.
O GPT parece muito bom em analisar dados de texto não estruturado.
Vamos tomar o registro dos interesses financeiros dos membros, um banco de dados notoriamente desajeitado para analisar, dificultando o controle de alterações ao longo do tempo.
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 " ))Outro exemplo:
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 " ))Em ambos os casos, o GPT-3.5 extraiu e preencheu as colunas que pedimos.
Como antes, o processo não é isento de falhas e os resultados precisarão ser verificados, mas pode economizar muitas horas de trabalho manual e nos fornecer informações rápidas, mesmo que os dados não sejam finais.
A API tem algumas limitações em termos de quão grande pode ser um prompt e resposta, por isso estamos dividindo a consulta em pedaços e junte as peças depois.
Isso pode lançar alguns erros no futuro, por isso é um trabalho em andamento.
Analisar dados não estruturados também se aplica às páginas da web. Vejamos um exemplo.
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'] " )Aqui, estamos recebendo um artigo da CNN listando todos os vencedores dos 2023 do Oscars e dizendo ao GPT o que raspar a página. Ele retorna uma tabela com as colunas que especificamos.
Existem dois parâmetros adicionais que estamos nos alimentando da função:
O clean = "text" tira todo o nosso conteúdo das tags HTML, que é útil no nosso caso, pois não nos importamos com a formatação. Ele pode ser definido como clean = "html" para raspar apenas html desnecessário ou clean = FALSE para manter a coisa toda.
O seletor CSS tem como alvo uma parte específica da página, o que significa que não enviamos a página inteira com menus de navegação, barras laterais etc. Como alternativa, você pode usar um seletor de XPath.
Ambos são opcionais e são projetados para reduzir o tamanho do prompt que estamos enviando e, posteriormente, reduzir o custo de uma consulta.
Por enquanto, o raspador da web não pode lidar com instruções maiores que o limite de token.