*예, 이것은 AI 생성 이름입니다.
이것은 구조화되지 않은 텍스트를 구조화 된 데이터로 구문 분석하는 것과 같은 작업을 자동화하기 어려운 GPT / ChatGpt를 사용하기위한 실험 라이브러리입니다.
Chatgpt는 새롭고 환각을받는 경향이 있으므로 잘못되었거나 존재하지 않는 데이터를 반환합니다.
또한 chatgpt는 정확히 동일한 프롬프트를 두 번 제출하더라도 다른 출력 또는 다른 형식으로 응답 할 수 있습니다. 예를 들어, 결 측값을 공간, 하이픈 또는 NA로 표시하도록 무작위로 선택할 수 있습니다.
즉, 더 큰 워크 플로에 안정적으로 통합 할 수 없으며 동일한 결과를 일관되게 생성 할 것으로 기대합니다.
현재 라이브러리는 자주 실패하고 경고없이 실패 할 탐색 스크립트 모음입니다. 라이브러리가 성숙함에 따라 상황이 바뀌고 보호 수단이 마련됩니다.
OpenAi의 새로운 GPT-4는 토큰 제한이 높고 (더 긴 프롬프트를 의미 함), 데이터를 구문 분석 할 때 GPT-3.5보다 우수해야합니다. 그러나 아직 GPT-4에 액세스 할 수 없으므로이 모든 예제는 GPT-3.5를 염두에두고 작성됩니다.
자신의 위험에 사용하십시오.
Github에서 라이브러리를 설치할 수 있습니다.
remotes :: install_github( " nicucalcea/RAISE " )
library( RAISE )OpenAI API 키가 필요합니다. 키에 액세스하는 가장 쉬운 방법은 키에 액세스하는 것입니다. R 환경에 저장하는 것입니다.
usethis::edit_r_environ() 실행하여 R 환경 파일을 열고 API 키가 포함 된 새 줄을 추가하십시오. 이렇게 보일 것입니다.
OPENAI_API_KEY = "API_KEY_HERE"
저장하고 다시 시작하십시오.
chatgpt, gptstudio 또는 gpttools를 사용하는 경우 이미 설정해야합니다.
Rain은 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 " ))Another example:
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'] " )여기에서 우리는 2023 년 오스카상 수상자를 모두 나열하는 CNN 기사를 얻고 GPT에게 페이지에서 긁어 내야 할 사항을 알려줍니다. 우리가 지정한 열이있는 테이블을 반환합니다.
기능에 공급되는 두 가지 추가 매개 변수가 있습니다.
clean = "text" HTML 태그의 모든 내용을 스트립합니다.이 경우 서식에 신경 쓰지 않기 때문에 유용합니다. 불필요한 HTML을 긁어 내거나 전체를 유지하기 위해 Clean clean = FALSE 하기 위해 clean = "html" 으로 설정할 수 있습니다.
CSS 선택기는 페이지의 특정 부분을 대상으로합니다. 즉, 내비게이션 메뉴, 사이드 바 등으로 전체 페이지를 보내지 않습니다. 또는 XPath 선택기를 사용할 수 있습니다.
이 두 가지 모두 선택 사항이며 우리가 보내는 프롬프트의 크기를 줄이고 쿼리 비용을 줄 이도록 설계되었습니다.
현재 웹 스크레이퍼는 토큰 한도보다 큰 프롬프트를 다룰 수 없습니다.