Risposta alle domande utilizzando Retrieval Augmented Generation con modelli di base in Amazon SageMaker JumpStart

Risposta alle domande utilizzando Retrieval Augmented Generation con modelli di base in Amazon SageMaker JumpStart

Oggi annunciamo la disponibilità di notebook di esempio che dimostrano attività di risposta alle domande utilizzando un approccio basato su Retrieval Augmented Generation (RAG) con modelli di linguaggio di grandi dimensioni (LLM) in JumpStart di Amazon SageMaker. La generazione di testo utilizzando RAG con LLM consente di generare output di testo specifici del dominio fornendo dati esterni specifici come parte del contesto fornito a LLM.

JumpStart è un hub di machine learning (ML) che può aiutarti ad accelerare il tuo viaggio nel machine learning. JumpStart fornisce molti modelli linguistici pre-addestrati chiamati modelli di fondazione che possono aiutarti a eseguire attività come il riepilogo degli articoli, la risposta alle domande e la generazione di conversazioni e immagini.

In questo post, descriviamo RAG e i suoi vantaggi e dimostriamo come iniziare rapidamente utilizzando un notebook di esempio per risolvere un'attività di risposta alle domande utilizzando l'implementazione RAG con LLM in Jumpstart. Dimostriamo due approcci:

  • Come risolvere il problema con l'open source LangChain biblioteca e Amazon Sage Maker endpoint in poche righe di codice
  • Come utilizzare l'algoritmo SageMaker KNN per eseguire la ricerca semantica di dati su larga scala utilizzando gli endpoint SageMaker

LLMS e vincoli

Gli LLM sono addestrati su grandi quantità di dati non strutturati e sono bravissimi nella generazione di testo generale. Gli LLM possono archiviare conoscenze fattuali addestrando i loro parametri su un ampio corpus di dati in linguaggio naturale.

Ci sono alcune limitazioni nell'utilizzo di LLM pre-addestrati disponibili in commercio:

  • Di solito vengono addestrati offline, rendendo il modello agnostico rispetto alle informazioni più recenti (ad esempio, un chatbot addestrato dal 2011 al 2018 non ha informazioni su COVID-19).
  • Fanno previsioni solo cercando le informazioni memorizzate nei suoi parametri, portando a un'interpretazione inferiore.
  • Sono per lo più addestrati su corpora di dominio generale, il che li rende meno efficaci su attività specifiche del dominio. Esistono scenari in cui si desidera che i modelli generino testo in base a dati specifici anziché a dati generici. Ad esempio, una compagnia di assicurazioni sanitarie potrebbe volere che il proprio bot di risposta alle domande risponda alle domande utilizzando le informazioni più recenti memorizzate nel proprio archivio o database di documenti aziendali, in modo che le risposte siano accurate e riflettano le proprie regole aziendali uniche.

Attualmente, ci sono due modi popolari per fare riferimento a dati specifici negli LLM:

  • Inserire i dati come contesto nel prompt del modello per fornire le informazioni che il modello può utilizzare durante la creazione del risultato
  • Perfeziona il modello fornendo un file con le coppie prompt e completamento

La sfida dell'approccio basato sul contesto è che i modelli hanno dimensioni di contesto limitate e includere tutti i documenti come contesto potrebbe non rientrare nelle dimensioni di contesto consentite del modello. A seconda del modello utilizzato, potrebbero esserci anche costi aggiuntivi per un contesto più ampio.

Per l'approccio della messa a punto, la generazione delle informazioni nel formato corretto richiede tempo e comporta costi. Inoltre, se i dati esterni utilizzati per la messa a punto cambiano frequentemente, ciò implicherebbe la necessità di frequenti regolazioni e riqualificazione per creare risultati accurati. La formazione frequente influisce sulla velocità di immissione sul mercato e si aggiunge al costo complessivo della soluzione.

Per dimostrare questi vincoli, abbiamo utilizzato un modello LLM Flan T5 XXL e abbiamo posto la seguente domanda:

question = "Which instances can I use with Managed Spot Training in SageMaker?"

Otteniamo la seguente risposta:

"""For model: huggingface-text2text-flan-t5-xxl, the generated output is: the Managed Spot Training is a subscriptions product available for the following instances: Data Science Virtual Machine (DSVM), DSVM High, and DSVM Low. """

Come puoi vedere, la risposta non è accurata. La risposta corretta dovrebbe essere che tutte le istanze SageMaker supportano Managed Spot Training.

Abbiamo provato la stessa domanda ma con un contesto aggiuntivo passato insieme alla domanda:

question + context + prompt = """
Answer based on context: Managed Spot Training can be used with all instances supported in Amazon SageMaker. Managed Spot Training is supported in all AWS Regions where Amazon SageMaker is currently available. Which instances can I use with Managed Spot Training in SageMaker? """

Questa volta abbiamo ricevuto la seguente risposta:

"""For model: huggingface-text2text-flan-t5-xxl, the generated output is: instances supported in Amazon SageMaker """

La risposta è migliore ma ancora non precisa. Tuttavia, nei casi d'uso di produzione reale, gli utenti possono inviare varie query e, per fornire risposte accurate, potresti voler includere tutte o la maggior parte delle informazioni disponibili come parte del contesto statico per creare risposte accurate. Pertanto, con questo approccio, potremmo raggiungere il vincolo di limitazione della dimensione del contesto perché anche le informazioni non rilevanti per la domanda posta vengono inviate come parte del contesto. È qui che puoi utilizzare l'approccio basato su RAG per creare risposte scalabili e accurate per le query di un utente.

Recupero generazione aumentata

Per risolvere i vincoli di cui abbiamo discusso, possiamo utilizzare Retrieval Augmented Generation (RAG) con LLM. RAG recupera i dati dall'esterno del modello linguistico (non parametrico) e aumenta i prompt aggiungendo i dati recuperati rilevanti nel contesto. I modelli RAG sono stati introdotti da Lewis et al. nel 2020 come modello in cui la memoria parametrica è un modello seq2seq pre-addestrato e la memoria non parametrica è un denso indice vettoriale di Wikipedia, a cui si accede con un retriever neurale pre-addestrato.

In RAG, i dati esterni possono provenire da più origini dati, come un archivio di documenti, database o API. Il primo passaggio consiste nel convertire i documenti e la query dell'utente nel formato in modo che possano essere confrontati e sia possibile eseguire la ricerca per pertinenza. Per rendere i formati comparabili per la ricerca di pertinenza, una raccolta di documenti (libreria della conoscenza) e la query inviata dall'utente vengono convertite in rappresentazione numerica utilizzando modelli di linguaggio incorporati. Gli incorporamenti sono essenzialmente rappresentazioni numeriche del concetto nel testo. Successivamente, in base all'incorporamento della query dell'utente, il suo testo pertinente viene identificato nella raccolta di documenti mediante una ricerca di similarità nello spazio di incorporamento. Quindi il prompt fornito dall'utente viene aggiunto con il testo pertinente che è stato cercato e viene aggiunto al contesto. Il prompt viene ora inviato al LLM e poiché il contesto dispone di dati esterni pertinenti insieme al prompt originale, l'output del modello è pertinente e accurato.

Per mantenere aggiornate le informazioni per i documenti di riferimento, è possibile aggiornare in modo asincrono i documenti e aggiornare la rappresentazione incorporata dei documenti. In questo modo, i documenti aggiornati verranno utilizzati per generare risposte a domande future per fornire risposte accurate.

Il diagramma seguente mostra il flusso concettuale dell'utilizzo di RAG con LLM.

Risposte alle domande utilizzando Retrieval Augmented Generation con modelli di base in Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

In questo post, dimostriamo come implementare un'applicazione di risposta alle domande con i seguenti passaggi:

  1. Genera l'incorporamento per ogni documento nella libreria della conoscenza con un modello di incorporamento SageMaker GPT-J-6B.
  2. Identifica i primi K documenti più rilevanti in base alla query dell'utente.
    1. Per la tua query, genera l'incorporamento della query utilizzando lo stesso modello di incorporamento.
    2. Cerca gli indici dei primi K documenti più rilevanti nello spazio di incorporamento utilizzando una ricerca FAISS in memoria.
    3. Utilizzare gli indici per recuperare i documenti corrispondenti.
  3. Utilizza i documenti pertinenti recuperati come contesto con il prompt e la domanda e inviali a SageMaker LLM per generare la risposta.

Dimostriamo i seguenti approcci:

  • Come risolvere un'attività di risposta alle domande con SageMaker LLM e incorporare gli endpoint e la libreria open source LangChain in poche righe di codice. In particolare, utilizziamo due endpoint SageMaker per il modello LLM (Flan T5 XXL) e di incorporamento (GPT-J 6B) e il database vettoriale utilizzato è in memoria FAISS. Per ulteriori dettagli, vedere il Repository GitHub.
  • Se il FAISS in memoria non rientra nel tuo set di dati di grandi dimensioni, ti forniamo un file Algoritmo SageMaker KNN per eseguire la ricerca semantica, che utilizza anche FAISS come algoritmo di ricerca sottostante. Per i dettagli, vedere il Repository GitHub.

Il diagramma seguente illustra l'architettura della soluzione.

Risposte alle domande utilizzando Retrieval Augmented Generation con modelli di base in Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Notebook di implementazione basato su JumpStart RAG con LangChain

LangChain è un framework open source per lo sviluppo di applicazioni basate su modelli linguistici. LangChain fornisce un'interfaccia generica per molti LLM diversi. Inoltre, rende più facile per gli sviluppatori concatenare insieme vari LLM e creare potenti applicazioni. LangChain fornisce un'interfaccia standard per la memoria e una raccolta di implementazioni di memoria per persistere lo stato tra le chiamate di agenti o catene.

LangChain ha molte altre funzionalità di utilità che possono aumentare la produttività degli sviluppatori. Queste funzionalità includono un modello di prompt che consente di personalizzare i prompt utilizzando le variabili nel modello di prompt, agenti per creare applicazioni end-to-end, indici per i passaggi di ricerca e recupero della catena e molto altro. Per esplorare ulteriormente le funzionalità di LangChain, fare riferimento al Documentazione LangChain.

Crea modello LLM

Come primo passo, distribuisci il modello JumpStart LLM di tua scelta. In questa demo, utilizziamo un punto finale del modello Jumpstart Flan T5 XXL. Per istruzioni sulla distribuzione, fare riferimento a Richiesta zero-shot per il modello base Flan-T5 in Amazon SageMaker JumpStart. In base al tuo caso d'uso, puoi anche distribuire altri modelli ottimizzati per le istruzioni come Flan T5 UL2 or BloomZ7B1. Per i dettagli, vedere il quaderno di esempio.

Per utilizzare l'endpoint SageMaker LLM con LangChain, utilizziamo langchain.llms.sagemaker_endpoint.SagemakerEndpoint, che astrae l'endpoint SageMaker LLM. Dobbiamo eseguire una trasformazione per il payload di richiesta e risposta come mostrato nel codice seguente per l'integrazione di LangChain SageMaker. Si noti che potrebbe essere necessario modificare il codice in ContentHandler basato sul content_type e accetta il formato del modello LLM che scegli di utilizzare.

from langchain.llms.sagemaker_endpoint import SagemakerEndpoint class ContentHandler(ContentHandlerBase): content_type = "application/json" accepts = "application/json" def transform_input(self, prompt: str, model_kwargs={}) -> bytes: input_str = json.dumps({"text_inputs": prompt, **model_kwargs}) return input_str.encode("utf-8") def transform_output(self, output: bytes) -> str: response_json = json.loads(output.read().decode("utf-8")) return response_json["generated_texts"][0] content_handler = ContentHandler() sm_llm = SagemakerEndpoint( endpoint_name=_MODEL_CONFIG_["huggingface-text2text-flan-t5-xxl"]["endpoint_name"], region_name=aws_region, model_kwargs=parameters, content_handler=content_handler,
)

Creare il modello di incorporamento

Successivamente, dobbiamo preparare il nostro modello incorporato. Distribuiamo il GPT-J6B model come modello di incorporamento. Se utilizzi un modello di incorporamento JumpStart, devi personalizzare la classe di incorporamento dell'endpoint LangChain SageMaker e trasformare la richiesta e la risposta del modello per l'integrazione con LangChain. Per un'implementazione dettagliata, fare riferimento a Repository GitHub.

embeddings = SagemakerEndpointEmbeddingsJumpStart( endpoint_name=_MODEL_CONFIG_["huggingface-textembedding-gpt-j-6b"]["endpoint_name"], region_name=aws_region, content_handler=content_handler,
)

Carica documenti specifici del dominio utilizzando il caricatore di documenti LangChain e crea un indice

Usiamo il CSVLoader pacchetto in LangChain per caricare documenti in formato CSV nel caricatore di documenti:

loader = CSVLoader(file_path="rag_data/processed_data.csv")
documents = loader.load()

Successivamente, utilizziamo TextSplitter per preelaborare i dati a scopo di incorporamento e utilizziamo il modello di incorporamento SageMaker GPT-J-6B per creare l'incorporamento. Memorizziamo l'incorporamento in un archivio vettoriale FAISS per creare un indice. Utilizziamo questo indice per trovare documenti pertinenti semanticamente simili alla query dell'utente.

Il codice seguente mostra come tutti questi passaggi vengono eseguiti dal VectorstoreIndexCreator class in poche righe di codice in LangChain per creare un'implementazione concisa della risposta alle domande con RAG:

index_creator = VectorstoreIndexCreator( vectorstore_cls=FAISS, embedding=embeddings, text_splitter=CharacterTextSplitter(chunk_size=300, chunk_overlap=0),
)
index = index_creator.from_loaders([loader])

Usa l'indice per cercare il contesto pertinente e passalo al modello LLM

Successivamente, utilizza il metodo di query sull'indice creato e passa la domanda dell'utente e l'endpoint SageMaker LLM. LangChain seleziona i primi quattro documenti più vicini (K=4) e passa il contesto pertinente estratto dai documenti per generare una risposta accurata. Vedere il seguente codice:

index.query(question=question, llm=sm_llm)

Otteniamo la seguente risposta per la query utilizzando l'approccio basato su RAG con Flan T5 XXL:

"""For model: huggingface-text2text-flan-t5-xxl, the generated output is: Managed Spot Training can be used with all instances supported in Amazon SageMaker """

La risposta sembra più accurata rispetto alla risposta che abbiamo ottenuto con altri approcci che abbiamo dimostrato in precedenza che non hanno contesto o contesto statico che potrebbe non essere sempre rilevante.

Approccio alternativo per implementare RAG con maggiore personalizzazione utilizzando SageMaker e LangChain

In questa sezione, ti mostriamo un altro approccio per implementare RAG utilizzando SageMaker e LangChain. Questo approccio offre la flessibilità di configurare i parametri top K per una ricerca di pertinenza nei documenti. Consente inoltre di utilizzare la funzione LangChain di modelli di prompt, che consentono di parametrizzare facilmente la creazione del prompt invece di codificare i prompt.

Nel codice seguente, utilizziamo esplicitamente FAISS per generare l'incorporamento per ciascuno dei documenti nella libreria della conoscenza con il modello di incorporamento SageMaker GPT-J-6B. Quindi identifichiamo i primi K (K=3) documenti più rilevanti in base alla query dell'utente.

docsearch = FAISS.from_documents(documents, embeddings)
docs = docsearch.similarity_search(question, k=3)

Successivamente, utilizziamo un modello di richiesta e lo concatenamo con SageMaker LLM:

prompt_template = """Answer based on context:nn{context}nn{question}"""
PROMPT = PromptTemplate(template=prompt_template, input_variables=["context", "question"])
chain = load_qa_chain(llm=sm_llm, prompt=PROMPT)

Inviamo i primi tre documenti pertinenti (K=3) che abbiamo trovato come contesto al prompt utilizzando una catena LangChain:

result = chain({"input_documents": docs, "question": question}, return_only_outputs=True)["output_text"]

Con questo approccio all'implementazione di RAG, siamo stati in grado di sfruttare l'ulteriore flessibilità dei modelli di prompt di LangChain e personalizzare il numero di documenti cercati per una corrispondenza di pertinenza utilizzando l'iperparametro top K.

Notebook di implementazione basato su JumpStart RAG con SageMaker KNN

In questa sezione, implementiamo l'approccio basato su RAG utilizzando l'algoritmo KNN per trovare documenti pertinenti per creare un contesto avanzato. In questo approccio, non utilizziamo LangChain, ma utilizziamo lo stesso set di dati Domande frequenti su Amazon SageMaker come documenti di conoscenza, incorporando i modelli GPT-J-6B e LLM Flan T5 XXL proprio come abbiamo fatto nel precedente approccio LangChain.

Se disponi di un set di dati di grandi dimensioni, il file Algoritmo SageMaker KNN può fornire una ricerca semantica efficace. L'algoritmo SageMaker KNN utilizza anche FAISS come algoritmo di ricerca sottostante. Il notebook per questa soluzione può essere trovato su GitHub.

Innanzitutto, distribuiamo i modelli di incorporamento LLM Flan T5 XXL e GPT-J 6B nello stesso modo della sezione precedente. Per ogni record nel database della conoscenza, generiamo un vettore di incorporamento utilizzando il modello di incorporamento GPT-J.

Successivamente, usiamo un file SageMaker KNN lavoro di formazione per indicizzare l'incorporamento dei dati di conoscenza. L'algoritmo sottostante utilizzato per indicizzare i dati è FAISS. Vogliamo trovare i primi cinque documenti più rilevanti, quindi impostiamo il file TOP_K variabile su 5. Creiamo lo stimatore per l'algoritmo KNN, eseguiamo il processo di addestramento e distribuiamo il modello KNN per trovare gli indici dei primi cinque documenti che corrispondono alla query. Vedere il seguente codice:

from sagemaker.amazon.amazon_estimator import get_image_uri def trained_estimator_from_hyperparams(s3_train_data, hyperparams, output_path): """ Create an Estimator from the given hyperparams, fit to training data, and return a deployed predictor """ # set up the estimator knn = sagemaker.estimator.Estimator( get_image_uri(boto3.Session().region_name, "knn"), aws_role, instance_count=1, instance_type="ml.m5.2xlarge", output_path=output_path, sagemaker_session=sess, ) knn.set_hyperparameters(**hyperparams) # train a model. fit_input contains the locations of the train data fit_input = {"train": s3_train_data} knn.fit(fit_input) return knn hyperparams = {"feature_dim": train_features.shape[1], "k": TOP_K,"sample_size": train_features.shape[0], "predictor_type": "classifier"}
output_path = f"s3://{bucket}/{prefix}/default_example/output"
knn_estimator = trained_estimator_from_hyperparams( s3_train_data, hyperparams, output_path)

Successivamente, creiamo una rappresentazione di incorporamento della query utilizzando il modello di incorporamento GPT-J-6B che abbiamo utilizzato per creare un incorporamento dei documenti della libreria della conoscenza:

query_response = query_endpoint_with_json_payload(question, endpoint_name_embed, content_type="application/x-text")
question_embedding = parse_response_text_embed(query_response)

Quindi usiamo l'endpoint KNN e passiamo l'incorporamento della query all'endpoint KNN per ottenere gli indici dei primi K documenti più rilevanti. Utilizziamo gli indici per recuperare i documenti testuali corrispondenti. Successivamente, concateniamo i documenti, assicurandoci che la lunghezza massima consentita del contesto non venga superata. Vedere il seguente codice:

"""With maximum sequence length 500, selected top 4 document sections: Managed Spot Training can be used with all instances supported in Amazon SageMaker. Managed Spot Training is supported in all AWS Regions where Amazon SageMaker is currently available. The difference between Savings Plans for Amazon SageMaker and Savings Plans for EC2 is in the services they include. SageMaker Savings Plans apply only to SageMaker ML Instance usage. There are no fixed limits to the size of the dataset you can use for training models with Amazon SageMaker. """

Ora arriviamo al nostro passaggio finale in cui combiniamo la query, il prompt e il contesto contenente il testo dai documenti pertinenti e lo passiamo al modello LLM Flan T5 XXL di generazione del testo per generare la risposta.

Otteniamo la seguente risposta per la query utilizzando un approccio basato su RAG con Flan T5 XXL:

"""
For model: huggingface-text2text-flan-t5-xxl, the generated output is: Managed Spot Training can be used with all instances supported in Amazon SageMaker """

ripulire

Assicurati di eliminare gli endpoint che abbiamo creato in questo notebook quando non li usi per evitare costi ricorrenti.

Conclusione

In questo post, abbiamo dimostrato l'implementazione di un approccio basato su RAG con LLM per attività di risposta alle domande utilizzando due approcci: LangChain e l'algoritmo KNN integrato. L'approccio basato su RAG ottimizza l'accuratezza della generazione del testo utilizzando Flan T5 XXL fornendo in modo dinamico il contesto pertinente creato mediante la ricerca in un elenco di documenti.

Puoi utilizzare questi taccuini in SageMaker così come sono oppure puoi personalizzarli in base alle tue esigenze. Per personalizzare, puoi utilizzare il tuo set di documenti nella libreria della conoscenza, utilizzare altre implementazioni di ricerca per pertinenza come OpenSearch e utilizzare altri modelli di incorporamento e LLM per la generazione di testo disponibili su JumpStart.

Non vediamo l'ora di vedere cosa crei su JumpStart utilizzando un approccio basato su RAG!


Circa gli autori

Risposte alle domande utilizzando Retrieval Augmented Generation con modelli di base in Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Dott. Xin Huang è Senior Applied Scientist per gli algoritmi integrati di Amazon SageMaker JumpStart e Amazon SageMaker. Si concentra sullo sviluppo di algoritmi di apprendimento automatico scalabili. I suoi interessi di ricerca riguardano l'elaborazione del linguaggio naturale, il deep learning spiegabile su dati tabulari e l'analisi solida del clustering spazio-temporale non parametrico. Ha pubblicato molti articoli nelle conferenze ACL, ICDM, KDD e Royal Statistical Society: Series A.

Risposte alle domande utilizzando Retrieval Augmented Generation con modelli di base in Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Rachna Chada è Principal Solution Architect AI/ML in Strategic Accounts presso AWS. Rachna è un'ottimista che crede che l'uso etico e responsabile dell'IA possa migliorare la società in futuro e portare prosperità economica e sociale. Nel tempo libero, a Rachna piace passare il tempo con la sua famiglia, fare escursioni e ascoltare musica.

Risposte alle domande utilizzando Retrieval Augmented Generation con modelli di base in Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Dottor Kyle Ulrich è uno scienziato applicato con il team di algoritmi integrati di Amazon SageMaker. I suoi interessi di ricerca includono algoritmi di machine learning scalabili, visione artificiale, serie storiche, bayesiani non parametrici e processi gaussiani. Il suo dottorato di ricerca è presso la Duke University e ha pubblicato articoli su NeurIPS, Cell e Neuron.

Risposte alle domande utilizzando Retrieval Augmented Generation con modelli di base in Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Hemant Singh è un Machine Learning Engineer con esperienza in Amazon SageMaker JumpStart e negli algoritmi integrati di Amazon SageMaker. Ha ottenuto i suoi master presso Courant Institute of Mathematical Sciences e B.Tech presso IIT Delhi. Aveva esperienza nel lavorare su una vasta gamma di problemi di Machine Learning nell'ambito dell'elaborazione del linguaggio naturale, della visione artificiale e dell'analisi delle serie temporali.

Risposte alle domande utilizzando Retrieval Augmented Generation con modelli di base in Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Manas Dadarkar è un Software Development Manager che possiede l'ingegneria del servizio Amazon Forecast. È appassionato delle applicazioni dell'apprendimento automatico e rende le tecnologie ML facilmente disponibili per l'adozione e l'implementazione da parte di tutti in produzione. Al di fuori del lavoro, ha molteplici interessi tra cui viaggiare, leggere e trascorrere del tempo con amici e familiari.

Risposte alle domande utilizzando Retrieval Augmented Generation con modelli di base in Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Dottor Ashish Khetan è un Senior Applied Scientist con algoritmi integrati di Amazon SageMaker e aiuta a sviluppare algoritmi di machine learning. Ha conseguito il dottorato di ricerca presso l'Università dell'Illinois Urbana-Champaign. È un ricercatore attivo nell'apprendimento automatico e nell'inferenza statistica e ha pubblicato numerosi articoli nelle conferenze NeurIPS, ICML, ICLR, JMLR, ACL e EMNLP.

Timestamp:

Di più da Apprendimento automatico di AWS