*Да, это имя, сгенерированное AI.
Это экспериментальная библиотека для использования GPT / CHATGPT, чтобы помочь с трудностями в автоматизации задач, таких как анализ неструктурированного текста в структурированные данные.
CHATGPT является новым и имеет тенденцию к галлюцинации, поэтому он возвращает данные, которые неверны или даже не существуют.
Также обратите внимание, что CHATGPT может ответить другим выводом или даже другим форматированием, даже если вы дважды отправляете одинаковую подсказку. Например, он может случайным образом выбрать отображение пропущенных значений как пространство, или в качестве дефиса, или как NA.
Это означает, что вы не можете надежно включить его в больший рабочий процесс и ожидать, что он будет приносить тот же результат последовательно.
На данный момент библиотека представляет собой коллекцию исследовательских сценариев, которые часто терпят неудачу и без предупреждения. Дело изменится, и гарантия будут внедрены по мере взросления библиотеки.
Новый GPT-4 OpenAI имеет более высокий предел токена (что означает более длительные подсказки) и предполагается, что GPT-3.5 при данных диапазона. Тем не менее, у меня еще нет доступа к GPT-4, поэтому все эти примеры написаны с учетом GPT-3.5.
Используйте свой собственный риск.
Вы можете установить библиотеку из GitHub.
remotes :: install_github( " nicucalcea/RAISE " )
library( RAISE )Вам понадобится ключ API OpenAI. Самый простой способ для повышения доступа к ключу - это сохранить его в вашей среде R.
Запустите usethis::edit_r_environ() чтобы открыть файл среды R и добавить новую строку, содержащую ваш ключ API. Это должно выглядеть примерно так.
OPENAI_API_KEY = "API_KEY_HERE"
Сохраните и перезапустите.
Если вы используете CHATGPT, GPTStudio или GPTTools, вы уже должны быть настроены.
Повышение может помочь вам отправить подсказку в CHATGPT и получить ответ в качестве таблицы.
Допустим, вам нужен стол из самых больших зданий в мире и их рост.
buildings <- create_ai( " Top 10 tallest buildings in the world " ,
cols = c( " Building " , " Country " , " Developer " , " Year built " , " Height in metres " ))Как упоминалось выше, GPT является языковой моделью, а не фактической поисковой системой. Хотя данные могут быть правильными, есть вероятность, что это не так, и необходимо проверить вручную.
Допустим, у вас есть список адресов электронной почты, и вы хотите извлечь из них первые и фамилии. Или список имен, и вы пытаетесь оценить их наиболее вероятный пол?
Вы можете использовать GPT, чтобы увеличить свои существующие данные. Вот пример.
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 , " : " )))В этом случае функция будет вызывать API для каждого из ваших строк, и она сохранит ответы на новый столбец.
GPT кажется довольно хорошим для анализа данных из неструктурированного текста.
Давайте возьмем реестр финансовых интересов членов, общеизвестно неуклюжей базой данных, в которой затрудняет отслеживание изменений с течением времени.
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 " ))Другой пример:
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 " ))В обоих случаях GPT-3.5 извлек и заполнил колонны, которые мы просили.
Как и прежде, процесс не без вины, и результаты должны быть проверены, но он может сэкономить много часов ручного труда и дать нам быстрое понимание, даже если данные не являются окончательными.
У API есть некоторые ограничения с точки зрения того, насколько большой может быть подсказка и ответ, поэтому мы разделим запрос на куски и впоследствии присоединяемся к деталям.
Это может привести к некоторым ошибкам в будущем, так что это работа в процессе.
Неструктурированные данные анализа также применяются к веб -страницам. Давайте посмотрим на пример.
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'] " )Здесь мы получаем статью CNN, в которой перечислены все победители Оскара 2023 года и рассказываем GPT, что сорвать страницу. Возвращает таблицу с указанными нами столбцов.
Есть два дополнительных параметра, которые мы питаем в функции:
clean = "text" лишивает весь наш содержание тегов HTML, что полезно в нашем случае, поскольку нас не волнует форматирование. Он может быть настроен на clean = "html" чтобы отбрасывать только ненужный HTML или для clean = FALSE , чтобы сохранить все это.
Селектор CSS нацелен на определенную часть страницы, что означает, что мы не отправляем всю страницу с помощью меню навигации, боковых панелей и т. Д. В качестве альтернативы, вы можете использовать селектор XPath.
Оба они являются необязательными и предназначены для уменьшения размера подсказки, которую мы отправляем, и впоследствии снизить стоимость запроса.
На данный момент веб -скребок не может справиться с подсказками больше, чем предел токена.