*ใช่นี่เป็นชื่อที่สร้างขึ้นโดย 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 )คุณจะต้องใช้คีย์ OpenAI API วิธีที่ง่ายที่สุดในการเพิ่มการเข้าถึงคีย์คือการบันทึกลงในสภาพแวดล้อม R ของคุณ
เรียกใช้ usethis::edit_r_environ() เพื่อเปิดไฟล์สภาพแวดล้อม R ของคุณและเพิ่มบรรทัดใหม่ที่มีคีย์ API ของคุณ มันควรจะดูอะไรแบบนี้
OPENAI_API_KEY = "API_KEY_HERE"
บันทึกและรีสตาร์ท
หากคุณใช้ CHATGPT, GPTSTUDIO หรือ GPTTOOLS คุณควรตั้งค่าแล้ว
Raise สามารถช่วยคุณส่งพรอมต์ไปยัง 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 ได้
ทั้งสองอย่างนี้เป็นตัวเลือกและได้รับการออกแบบมาเพื่อลดขนาดของพรอมต์ที่เรากำลังส่งและลดค่าใช้จ่ายของการสืบค้น
สำหรับตอนนี้เครื่องขูดเว็บไม่สามารถจัดการกับแจ้งให้ใหญ่กว่าขีด จำกัด โทเค็นได้