Pachetul Ellmer pentru utilizarea LLM -urilor cu R este un schimbător de jocuri pentru oamenii de știință

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(Acest articol a fost publicat pentru prima dată pe BLUECOLOGIE BLOGși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)


Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.

De ce Ellmer este un schimbător de jocuri pentru oamenii de știință?

În acest tutorial vom analiza cum putem accesa agenții LLM prin apeluri API. Vom folosi această abilitate pentru datele structurate create din documente.

Vom folosi r ellmer Pachet (lansat 25 februarie 2025).

Există câteva opțiuni de pachete (am folosit și eu
tidychatmodels înainte).

ellmer este un schimbător de jocuri pentru oamenii de știință care utilizează R: acceptă utilizarea instrumentelor și are funcții pentru date structurate.

Înainte ellmer A trebuit să cunoașteți alte limbi și structuri de date, cum ar fi JSON. Ellmer înseamnă că multe utilizări puternice ale LLM sunt acum ușor accesibile utilizatorilor R.

Utilizarea instrumentului înseamnă că LLM poate rula comenzi pe computer pentru a prelua informații. Știți cum LLM -urile pot fi rele la matematica simplă, cum ar fi 2+2 sau data de astăzi? Ei bine, cu un instrument, LLM ar ști să folosească R pentru a calcula acest lucru pentru a returna răspunsul corect. Instrumentele se pot conecta, de asemenea, la API -urile web, înseamnă că pot fi utilizate și pentru a prelua informații sau baze de date de pe web.

Funcțiile care vă ajută în crearea de date structurate din text sunt, de asemenea, importante.

De exemplu, prin combinarea utilizării instrumentului cu extracția structurată a datelor, ellmer
ar putea fi utilizat pentru a sintetiza literatura pentru o revizuire cantitativă. Vom acoperi asta aici.

O altă aplicație ar fi interpretarea meta-datelor dintr-o bază de date online, descărcarea datelor, scrierea și rularea analizei și apoi scrierea rezultatelor.

Deoarece rulați LLM de la R înseamnă că puteți solicita prompturi de proces, cum ar fi să solicitați să rezume multe documente.

Sunt câteva utilizări evidente. Sunt sigur că oamenii vor veni în curând cu multe altele.

Să vedem cum să folosim Ellmer pentru a extrage date structurate din studiile revizuite de la egal la egal.

Autorizare de configurare

În primul rând, trebuie să obțineți o cheie API de la furnizor. Conectați -vă pe site -ul furnizorului și urmați instrucțiunile.

Apoi, trebuie să adăugați cheia la .Renviron fişier:

usethis::edit_r_environ()

Apoi introduceți cheia ca aceasta:

ANTHROPIC_API_KEY="xxxxxx"

Apoi reporniți R. ellmer Vă va găsi automat cheia, atât timp cât utilizați numele de variabile de mediu recomandate. Vedea ?ellmer::chat_claude (sau chat_xxx unde XXX este orice furnizor pe care îl utilizați).

Chat interactiv

Posit recomandă acest lucru este util pentru experimentarea cu noi prompturi. De asemenea, poate fi mai bun decât interfețele web cu care s -ar putea fi obișnuit. Acest lucru se datorează faptului că, spre deosebire de interfețele web, puteți controla mesajul sistemului.

Majoritatea modelelor au trei tipuri de mesaje: sistem, care stabilește utilizatorul de context, care este ceea ce tastați asistent, care este răspunsul

Mulți profesioniști prompți au găsit rezultate mai bune dacă puneți cât mai mult din solicitarea dvs. în sistem. Așa că vă recomand să vă jucați cu asta singur.

library(ellmer)

chat <- chat_claude(
  system_prompt = "You are a friendly but terse assistant.",
  model = "claude-3-5-haiku-20241022", 
  max_tokens = 1000
)

live_console(chat)
live_browser(chat)

Încercați acest lucru, dar experimentați cu un nou sistem de sistem. Iată un exemplu, încercați -vă propriul.

chat <- chat_claude(
  system_prompt = "You are a mystic with expertise in R programming. You answer questions indirectly in riddles and rhymes.",
  model = "claude-3-5-haiku-20241022", 
  max_tokens = 1000
)

live_console(chat)

Utilizator: Cum pot face un GLM în R?

*Swirling mystical orb glows with R code*

Through statistics' mist, a model takes flight,
glm() is the spell to cast in the night,
With family bound, be it gaussian or more,
And formula written as y ~ x4.
...

Generează programatic conținut

Deci, după ce ați testat promptul, îl puteți rula astfel:

chat <- chat_claude(
  system_prompt = "You are a surfy dude who likes waves, tubes and statistics.",
  model = "claude-3-5-haiku-20241022", 
  max_tokens = 1000
)

chat$chat("How can I do a glm in R?")

‘… agățați zece cu placa de surf statistică! 🏄‍♂️📊 ‘

Asta a fost cheesy …

Exemplu: Curățați textul PDF -uri și rezumați

Acum să vedem dacă putem folosi ellmer Pentru a curăța un text de la un PDF și a -l rezuma. ellmer
Are câteva funcții la îndemână pentru procesarea PDF -urilor pentru a face text, astfel încât acestea pot fi apoi alimentate în prompturi.

Voi încerca să rezum hârtia mea recentă despre pescuitul țestoasei.

x <- content_pdf_url("https://conbio.onlinelibrary.wiley.com/doi/epdf/10.1111/conl.13056")

Acest lucru nu reușește cu o eroare 403. Aceasta înseamnă că serverul blochează solicitarea, probabil presupune (corect) că sun la PDF programatic: crede că sunt un bot (pe care acest tip de tutorial îl creează).

Putem încerca, de asemenea, cu un fișier pe hard disk, trebuie doar să descărcăm manual PDF.

mypdf <- content_pdf_file("pdf-examples/Brown_etal2024 national scale turtle mortality.pdf")

Asta funcționează, acum să -l folosim într -un chat. Mai întâi configurați chatul nostru:

chat <- chat_claude(
  system_prompt = "You are a research assistant who specializes in extracting structured data from scientific papers.",
  model = "claude-3-5-haiku-20241022", 
  max_tokens = 1000
)

Acum, putem folosi funcțiile Ellmer pentru specificarea datelor structurate. Multe LLM -uri pot fi utilizate pentru a genera date în formatul JSON (au fost instruite în mod special cu asta în minte).

ellmer gestionează conversia de la JSON în obiecte R care sunt mai ușor pentru noi utilizatorii R.

Folosești type_object apoi type_number, type_string etc. pentru a specifica tipurile de date. Citiți mai multe în Vignetele pachetului Ellmer

paper_stats <- type_object(
  sample_size = type_number("Sample size of the study"),
  year_of_study = type_number("Year data was collected"),
  method = type_string("Summary of statistical method, one paragraph max")
)

În cele din urmă, trimitem cererea pentru un rezumat către furnizor:

turtle_study <- chat$extract_data(mypdf, type = paper_stats)

turtle_study Obiectul va conține datele structurate din PDF. I Gândește -te
(Documentația Ellmer este un pic redusă în detaliile implementării) Ellmer transformă un JSON care vine de la LLM într -o listă R Friendly R.

class(turtle_study)
#list

Şi:

turtle_study$sample_size
#11935
turtle_study$year_of_study
#2018
turtle_study$method
#The study estimated national-scale turtle catches for two fisheries in the Solomon Islands 
#- a small-scale reef fishery and a tuna longline fishery - using community surveys and 
#electronic monitoring. The researchers used nonparametric bootstrapping to scale up 
#catch data and calculate national-level estimates with confidence intervals.

Funcționează, dar, ca orice revizuire structurată, trebuie să fiți atenți la ce întrebări puneți. Cu atât mai mult cu un LLM, deoarece nu citiți lucrarea și înțelegeți contextul.

În acest caz, dimensiunea eșantionului pe care ni le -a fost oferită este numărul estimat de țestoase prinse. Aceasta a fost o ieșire a modelului, nu o dimensiune a eșantionului. De fapt, această lucrare are mai multe metode cu diferite dimensiuni de eșantion. Așadar, ar fi necesară unele lucrări pentru a regla promptul, mai ales dacă prelucrați loturi multe lucrări.

De asemenea, ar trebui să experimentați cu modele, am folosit Claude Haiku, deoarece sonetul său ieftin, dar Claude ar fi probabil mai precis.

Prompturi de procesare a loturilor

Să încercăm acest lucru cu un lot de lucrări (aici voi folosi doar două). Pentru acest exemplu, voi folosi doar două rezumate, pe care le -am obținut ca text simplu. Primul este dintr -un alt studiu pe Turtle Catch din Madagascar. Al doilea este din studiul meu de mai sus.

Ceea ce vom face este să creăm o funcție care să citească în text, apoi să o treacă la LLM, folosind cererea de date structurate de mai sus.

  process_abstract <- function(file_path, chat) {
  # Read in the text file
  abstract_text <- readLines(file_path, warn = FALSE)
  
  # Extract data from the abstract
  result <- chat$extract_data(abstract_text, type = paper_stats)
  
  return(result)
}

Acum configurați-ne cererea de chat și date

# Create chat object if not already created
chat <- chat_claude(
      system_prompt = "You are a research assistant who specializes in extracting structured data from scientific papers.",
      model = "claude-3-5-haiku-20241022", 
      max_tokens = 1000
)

Există riscul ca LLM să halucineze datele dacă nu poate găsi un răspuns. Pentru a încerca să prevenim acest lucru, putem seta o opțiune, necesară = falsă. Atunci LLM ar trebui să returneze „nul” dacă nu poate găsi datele.

# Define the structured data format
paper_stats <- type_object(
    sample_size = type_number("Number of surveys conducted to estimate turtle catch", required = FALSE),
    turtles_caught = type_number("Estimate for number of turtles caught", required = FALSE),
    year_of_study = type_number("Year data was collected", required = FALSE),
    region = type_string("Country or geographic region of the study", required = FALSE)
  )

Acum putem prelucra rezumate și obținem datele structurate

abstract_files <- list.files(path = "pdf-examples", pattern = "\.txt$", full.names = TRUE)
results <- lapply(abstract_files, function(file) process_abstract(file, chat))
names(results) <- basename(abstract_files)

# Display results
print(results)

În prima mea luare fără a fi necesară = falsă, am obținut rezultate false. S -a halucinat că studiul Humber a fost realizat în 2023 (a fost publicat în 2010!) Și că au existat 2 sate examinate în studiul meu. Problema a fost că nu puteți obține aceste date din rezumate. Deci modelul este halucinant un răspuns.

Din păcate, cu necesară = false, este încă răspunsuri halucinate. Am încercat apoi Claude Sonet (un model de raționament mai puternic) și a pus corect nul pentru dimensiunea eșantionului studiului meu, dar totuși am greșit anul pentru studiul Humber.

Cred că acest lucru ar putea funcționa, dar ar fi nevoie de unele lucrări la prompturi.

Reflecții

Pachetul Ellmer rezolvă unele dintre provocările pe care le -am prezentat în ultimul meu blog pe LLM Access de la R., dar altele sunt provocări conceptuale mai profunde și rămân. Le voi repeta aici

Incertitudinea costurilor

Acest lucru ar trebui să fie ieftin. A costat <1c pentru a face această postare cu toate testările. Deci, în teorie, puteți face 100 de secțiuni de metode pentru <100USD. Cu toate acestea, dacă testați înapoi și înainte sau utilizați lucrări complete, costul s -ar putea adăuga. Va fi greu să estimați acest lucru până când oamenii nu obțin mai multă experiență.

Obținerea lucrărilor și tratarea textului nestructurat în PDFS sau HTML

O mare provocare va fi introducerea textului într -un format pe care LLM îl poate folosi. Apoi, există probleme precum obținerea textului. Descărcarea PDF -urilor consumă mult timp și intensă date. Încercarea de a citi date text de pe paginile web poate fi, de asemenea, dificilă, din cauza pereților de plată și a limitelor de rată (s -ar putea să vă blocați pentru a face solicitări de reqeat).

De exemplu, într -un studiu trecut, am făcut acolo unde am făcut simplu „Bag of Words Analysis”, fie am descărcat manual PDF -urile, fie am stabilit cronometre pentru a întârzia accesurile web și pentru a evita să ne blocăm.

Formatul HTML ar fi ideal, deoarece etichetele înseamnă secțiunile hârtiei, iar figurile deja semi-structurate.

Funcția de utilitate Ellmer PDF pare să funcționeze bine pentru obținerea textului de la PDF. Presupun că ar putea fi îmbunătățit, de exemplu, pentru a elimina textul Wastefull (= $), cum ar fi anteturile paginii.

Solicitare

Trebuie să experimentați cu acest lucru pentru a -l înțelege corect. De asemenea, ar putea fi bine să repetați același text pentru a triangula rezultate exacte.

Validare

Cu siguranță veți dori să verificați manual ieșirea și să raportați statisticile de precizie în studiul dvs. Poate că recenzia dvs. are 1000 de lucrări, veți dori să verificați manual 100 dintre ele pentru a vedea cât de precis a fost LLM.

Mai va trebui să citiți o mulțime de lucrări pentru a scrie o recenzie bună

O revizuire aprinsă este mai mult decât datele sistematice. Încă cred că trebuie să citești o mulțime de lucrări pentru a înțelege literatura și pentru a face o sinteză utilă. Dacă utilizați AI, sunteți vulnerabil la „iluzia înțelegerii”.

Concluzie

Acest instrument va fi cel mai bun pentru sarcini bine definite și lucrări scrise constant. De exemplu, un caz de utilizare ideal ar fi revizuirea a 500 de lucrări de acidificare oceanică care au folosit toate proiectele experimentale similare și terminologia. Vei putea apoi să obții răspunsuri consistente la solicitări despre dimensiunea eșantionului, etc …

Un alt caz de utilizare ar fi extragerea tipurilor de model din documentele modelului de distribuție a speciilor.

Sarcinile mai grele vor fi în cazul în care lucrările provin din diverse discipline sau vor folosi terminologie inconsistentă sau metode. Studiul meu a fost un bun exemplu în acest sens, au fost raportate aproximativ 5 dimensiuni diferite de eșantion. Așadar, în acest exemplu, mai întâi ar trebui să ne gândim clar la ce dimensiune a eșantionului ați dorit să extrageți înainte de a scrie promptul.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.