*是的,這是一個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,則應該已經設置了。
加薪可以幫助您發送提示來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選擇器。
兩者都是可選的,旨在減少我們發送的提示的大小,然後降低查詢的成本。
目前,網絡刮板無法處理比令牌限制更大的提示。