Răspunsuri la întrebări folosind Retrieval Augmented Generation cu modele de fundație în Amazon SageMaker JumpStart

Răspunsuri la întrebări folosind Retrieval Augmented Generation cu modele de fundație în Amazon SageMaker JumpStart

Astăzi, anunțăm disponibilitatea unor exemple de notebook-uri care demonstrează sarcini de răspuns la întrebări folosind o abordare bazată pe Retrieval Augmented Generation (RAG) cu modele de limbaj mari (LLM) în Amazon SageMaker JumpStart. Generarea de text folosind RAG cu LLM-uri vă permite să generați ieșiri de text specifice domeniului prin furnizarea de date externe specifice ca parte a contextului alimentat LLM-urilor.

JumpStart este un hub de învățare automată (ML) care vă poate ajuta să vă accelerați călătoria ML. JumpStart oferă multe modele de limbaj pre-antrenate numite modele de fundație care vă pot ajuta să efectuați sarcini precum rezumarea articolelor, răspunsul la întrebări și generarea de conversații și generarea de imagini.

În această postare, descriem RAG și avantajele sale și demonstrăm cum să începeți rapid folosind un exemplu de blocnotes pentru a rezolva o sarcină de răspuns la întrebări folosind implementarea RAG cu LLM-uri în Jumpstart. Demonstrăm două abordări:

  • Cum să rezolvi problema cu sursă deschisă LangChain bibliotecă și Amazon SageMaker puncte finale în câteva linii de cod
  • Cum să utilizați algoritmul SageMaker KNN pentru a efectua căutarea semantică a datelor la scară largă folosind punctele finale SageMaker

LLMS și constrângeri

LLM-urile sunt instruite pe cantități mari de date nestructurate și sunt excelente la generarea generală de text. LLM-urile pot stoca cunoștințe faptice prin antrenarea parametrilor lor pe un corp mare de date în limbaj natural.

Există câteva limitări ale utilizării LLM-urilor pre-instruite de la raft:

  • De obicei, aceștia sunt instruiți offline, ceea ce face ca modelul să fie agnostic față de cele mai recente informații (de exemplu, un chatbot antrenat în perioada 2011-2018 nu are informații despre COVID-19).
  • Ei fac predicții doar căutând informațiile stocate în parametrii săi, ceea ce duce la o interpretabilitate inferioară.
  • Aceștia sunt în mare parte instruiți pe corpuri de domenii generale, ceea ce îi face mai puțin eficienți în sarcinile specifice domeniului. Există scenarii în care doriți ca modelele să genereze text pe baza unor date specifice, mai degrabă decât a datelor generice. De exemplu, o companie de asigurări de sănătate poate dori ca robotul său de răspuns la întrebări să răspundă la întrebări folosind cele mai recente informații stocate în depozitul sau baza de date a documentelor companiei, astfel încât răspunsurile să fie exacte și să reflecte regulile lor unice de afaceri.

În prezent, există două moduri populare de a face referire la date specifice în LLM:

  • Inserați date ca context în promptul modelului ca o modalitate de a furniza informațiile pe care modelul le poate folosi în timpul creării rezultatului
  • Finiți modelul furnizând un fișier cu perechi prompt și completare

Provocarea abordării bazate pe context este că modelele vin cu dimensiune limitată a contextului și includerea tuturor documentelor, deoarece contextul poate să nu se încadreze în dimensiunea contextului permisă a modelului. În funcție de modelul utilizat, pot exista și costuri suplimentare pentru un context mai larg.

Pentru abordarea reglajului fin, generarea informațiilor formatate corect este consumatoare de timp și implică costuri. În plus, dacă datele externe utilizate pentru reglarea fină se modifică frecvent, ar implica reglaje fine frecvente și sunt necesare reinstruire pentru a crea rezultate precise. Instruirea frecventă are un impact asupra vitezei de intrare pe piață și se adaugă la costul global al soluției.

Pentru a demonstra aceste constrângeri, am folosit un model LLM Flan T5 XXL și am pus următoarea întrebare:

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

Primim următorul răspuns:

"""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. """

După cum puteți vedea, răspunsul nu este corect. Răspunsul corect ar trebui să fie toate instanțele SageMaker care acceptă Managed Spot Training.

Am încercat aceeași întrebare, dar cu context suplimentar transmis împreună cu întrebarea:

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? """

De data aceasta am primit următorul răspuns:

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

Răspunsul este mai bun, dar încă nu este exact. Cu toate acestea, în cazurile reale de utilizare a producției, utilizatorii pot trimite diverse interogări și, pentru a oferi răspunsuri precise, este posibil să doriți să includeți toate sau majoritatea informațiilor disponibile ca parte a contextului static pentru a crea răspunsuri precise. Prin urmare, cu această abordare, putem atinge constrângerea de limitare a dimensiunii contextului, deoarece chiar și informațiile nerelevante pentru întrebarea adresată sunt trimise ca parte a contextului. Aici puteți utiliza abordarea bazată pe RAG pentru a crea răspunsuri scalabile și precise pentru interogările unui utilizator.

Recuperare Augmented Generation

Pentru a rezolva constrângerile pe care le-am discutat, putem folosi Retrieval Augmented Generation (RAG) cu LLM-uri. RAG preia datele din afara modelului de limbaj (non-parametric) și mărește solicitările prin adăugarea datelor relevante extrase în context. Modelele RAG au fost introduse de Lewis şi colab. în 2020 ca model în care memoria parametrică este un model seq2seq pre-antrenat și memoria neparametrică este un index vectorial dens al Wikipedia, accesat cu un retriever neuronal pre-antrenat.

În RAG, datele externe pot proveni din mai multe surse de date, cum ar fi un depozit de documente, baze de date sau API-uri. Primul pas este să convertiți documentele și interogarea utilizatorului în format, astfel încât să poată fi comparate și să poată fi efectuată căutarea de relevanță. Pentru a face formatele comparabile pentru efectuarea căutării de relevanță, o colecție de documente (biblioteca de cunoștințe) și interogarea trimisă de utilizator sunt convertite în reprezentare numerică folosind modele de limbaj de încorporare. Înglobările sunt în esență reprezentări numerice ale conceptului în text. Apoi, pe baza interogării de încorporare a utilizatorului, textul său relevant este identificat în colecția de documente printr-o căutare de similaritate în spațiul de încorporare. Apoi, promptul oferit de utilizator este atașat cu textul relevant care a fost căutat și este adăugat la context. Solicitarea este acum trimisă la LLM și deoarece contextul are date externe relevante împreună cu promptul original, rezultatul modelului este relevant și precis.

Pentru a menține informații actualizate pentru documentele de referință, puteți actualiza asincron documentele și puteți actualiza reprezentarea încorporată a documentelor. În acest fel, documentele actualizate vor fi folosite pentru a genera răspunsuri la întrebările viitoare pentru a oferi răspunsuri corecte.

Următoarea diagramă arată fluxul conceptual al utilizării RAG cu LLM-uri.

Răspunsuri la întrebări folosind Retrieval Augmented Generation cu modele de bază în Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

În această postare, demonstrăm cum să implementăm o aplicație de răspuns la întrebări cu următorii pași:

  1. Generați încorporare pentru fiecare document din biblioteca de cunoștințe cu un model de încorporare SageMaker GPT-J-6B.
  2. Identificați primele K cele mai relevante documente pe baza interogării utilizatorului.
    1. Pentru interogarea dvs., generați încorporarea interogării folosind același model de încorporare.
    2. Căutați în indexurile celor mai relevante K documente din spațiul de încorporare folosind o căutare FAISS în memorie.
    3. Utilizați indexurile pentru a prelua documentele corespunzătoare.
  3. Utilizați documentele relevante preluate ca context cu solicitarea și întrebarea și trimiteți-le la SageMaker LLM pentru a genera răspunsul.

Demonstrăm următoarele abordări:

  • Cum să rezolvi o sarcină de răspuns la întrebări cu SageMaker LLM-uri și încorporarea punctelor finale și a bibliotecii cu sursă deschisă LangChain în câteva linii de cod. În special, folosim două puncte finale SageMaker pentru LLM (Flan T5 XXL) și modelul de încorporare (GPT-J 6B), iar baza de date vectorială utilizată este în memorie FAISS. Pentru mai multe detalii, consultați GitHub repo.
  • Dacă FAISS în memorie nu se încadrează în setul dvs. mare de date, vă oferim a Algoritmul SageMaker KNN pentru a efectua căutarea semantică, care folosește și FAISS ca algoritm de căutare subiacent. Pentru detalii, consultați GitHub repo.

Următoarea diagramă prezintă arhitectura soluției.

Răspunsuri la întrebări folosind Retrieval Augmented Generation cu modele de bază în Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Blocnotes de implementare bazat pe JumpStart RAG cu LangChain

LangChain este un cadru open-source pentru dezvoltarea de aplicații bazate pe modele de limbaj. LangChain oferă o interfață generică pentru multe LLM-uri diferite. De asemenea, face mai ușor pentru dezvoltatori să conecteze diferite LLM-uri împreună și să construiască aplicații puternice. LangChain oferă o interfață standard pentru memorie și o colecție de implementări de memorie pentru a persista starea dintre apelurile agenților sau lanțurile.

LangChain are multe alte caracteristici utilitare care pot contribui la productivitatea dezvoltatorului. Aceste caracteristici includ un șablon de prompt care ajută la personalizarea solicitărilor folosind variabile din șablonul de prompt, agenți pentru a construi aplicații end-to-end, indexuri pentru pașii de căutare și recuperare ai lanțului și multe altele. Pentru a explora în continuare capabilitățile LangChain, consultați Documentația LangChain.

Creați model LLM

Ca prim pas, implementați modelul JumpStart LLM la alegere. În această demonstrație, folosim un punct final al modelului Jumpstart Flan T5 XXL. Pentru instrucțiuni de implementare, consultați Solicitare zero-shot pentru modelul de fundație Flan-T5 în Amazon SageMaker JumpStart. Pe baza cazului dvs. de utilizare, puteți implementa și alte modele reglate cu instrucțiuni, cum ar fi Flan T5 UL2 or BloomZ 7B1. Pentru detalii, consultați exemplu caiet.

Pentru a folosi punctul final SageMaker LLM cu LangChain, folosim langchain.llms.sagemaker_endpoint.SagemakerEndpoint, care retrage punctul final SageMaker LLM. Trebuie să efectuăm o transformare pentru sarcina utilă de solicitare și răspuns, așa cum se arată în următorul cod pentru integrarea LangChain SageMaker. Rețineți că poate fi necesar să ajustați codul ContentHandler bazeze pe content_type și acceptă formatul modelului LLM pe care alegeți să îl utilizați.

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,
)

Creați modelul de încorporare

În continuare, trebuie să pregătim modelul încorporat. Implementăm GPT-J 6B model ca model de încorporare. Dacă utilizați un model de încorporare JumpStart, trebuie să personalizați clasa de încorporare a punctului final LangChain SageMaker și să transformați cererea și răspunsul modelului pentru a se integra cu LangChain. Pentru o implementare detaliată, consultați GitHub repo.

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

Încărcați documente specifice domeniului utilizând încărcătorul de documente LangChain și creați un index

Noi folosim CSVLoader pachet în LangChain pentru a încărca documente în format CSV în încărcătorul de documente:

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

Apoi, folosim TextSplitter pentru a preprocesa datele în scopuri de încorporare și folosim modelul de încorporare SageMaker GPT-J -6B pentru a crea încorporarea. Stocăm încorporarea într-un magazin de vectori FAISS pentru a crea un index. Folosim acest index pentru a găsi documente relevante care sunt similare din punct de vedere semantic cu interogarea utilizatorului.

Următorul cod arată cum sunt efectuate toți acești pași de către VectorstoreIndexCreator clasă în doar câteva linii de cod în LangChain pentru a crea o implementare concisă a răspunsului la întrebări cu RAG:

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

Utilizați indexul pentru a căuta context relevant și transmiteți-l modelului LLM

Apoi, utilizați metoda de interogare pe indexul creat și transmiteți întrebarea utilizatorului și SageMaker endpoint LLM. LangChain selectează primele patru documente cele mai apropiate (K=4) și transmite contextul relevant extras din documente pentru a genera un răspuns precis. Vezi următorul cod:

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

Obținem următorul răspuns pentru interogare folosind abordarea bazată pe RAG cu 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 """

Răspunsul pare mai precis în comparație cu răspunsul pe care l-am primit cu alte abordări pe care le-am demonstrat mai devreme, care nu au context sau context static care poate să nu fie întotdeauna relevant.

Abordare alternativă pentru implementarea RAG cu mai multă personalizare folosind SageMaker și LangChain

În această secțiune, vă prezentăm o altă abordare pentru implementarea RAG folosind SageMaker și LangChain. Această abordare oferă flexibilitatea de a configura parametrii K de top pentru o căutare de relevanță în documente. De asemenea, vă permite să utilizați caracteristica LangChain a șabloane prompte, care vă permit să parametrizați cu ușurință crearea promptului în loc să le codificați.

În următorul cod, folosim în mod explicit FAISS pentru a genera încorporare pentru fiecare document din biblioteca de cunoștințe cu modelul de încorporare SageMaker GPT-J-6B. Apoi identificăm primele K (K=3) documente cele mai relevante pe baza interogării utilizatorului.

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

Apoi, folosim un șablon prompt și îl conectăm cu 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)

Trimitem primele trei (K=3) documente relevante pe care le-am găsit ca context la prompt folosind un lanț LangChain:

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

Cu această abordare a implementării RAG, am reușit să profităm de flexibilitatea suplimentară a șabloanelor de prompt LangChain și să personalizăm numărul de documente căutate pentru o potrivire de relevanță folosind hiperparametrul K de sus.

Blocnotes de implementare bazat pe JumpStart RAG cu SageMaker KNN

În această secțiune, implementăm abordarea bazată pe RAG folosind algoritmul KNN pentru a găsi documente relevante pentru a crea un context îmbunătățit. În această abordare, nu folosim LangChain, dar folosim același set de date Întrebări frecvente Amazon SageMaker ca documente de cunoștințe, încorporând modelele GPT-J-6B și LLM Flan T5 XXL așa cum am făcut în abordarea LangChain anterioară.

Dacă aveți un set mare de date, Algoritmul SageMaker KNN vă poate oferi o căutare semantică eficientă. Algoritmul SageMaker KNN folosește, de asemenea, FAISS ca algoritm de căutare de bază. Notebook-ul pentru această soluție poate fi găsit pe GitHub.

În primul rând, implementăm modelele de încorporare LLM Flan T5 XXL și GPT-J 6B în același mod ca în secțiunea anterioară. Pentru fiecare înregistrare din baza de date de cunoștințe, generăm un vector de încorporare folosind modelul de încorporare GPT-J.

În continuare, folosim a SageMaker KNN job de formare pentru a indexa încorporarea datelor de cunoștințe. Algoritmul de bază utilizat pentru indexarea datelor este FAISS. Dorim să găsim primele cinci documente cele mai relevante, așa că am stabilit TOP_K variabilă la 5. Creăm estimatorul pentru algoritmul KNN, rulăm jobul de instruire și implementăm modelul KNN pentru a găsi indici din primele cinci documente care se potrivesc cu interogarea. Vezi următorul cod:

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)

Apoi, creăm o reprezentare de încorporare a interogării folosind modelul de încorporare GPT-J-6B pe care l-am folosit pentru a crea o încorporare a documentelor bibliotecii de cunoștințe:

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

Apoi folosim punctul final KNN și transmitem încorporarea interogării la punctul final KNN pentru a obține indecșii celor mai relevante K documente de top. Folosim indexurile pentru a prelua documentele textuale corespunzătoare. Apoi, concatenăm documentele, asigurându-ne că lungimea maximă permisă a contextului nu este depășită. Vezi următorul cod:

"""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. """

Acum ajungem la pasul final în care combinăm interogarea, promptul și contextul care conține text din documentele relevante și îl transmitem modelului LLM Flan T5 XXL de generare de text pentru a genera răspunsul.

Obținem următorul răspuns pentru interogare folosind o abordare bazată pe RAG cu 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 """

A curăța

Asigurați-vă că ștergeți punctele finale pe care le-am creat în acest notebook atunci când nu le folosiți pentru a evita costurile recurente.

Concluzie

În această postare, am demonstrat implementarea unei abordări bazate pe RAG cu LLM-uri pentru sarcini de răspuns la întrebări folosind două abordări: LangChain și algoritmul KNN încorporat. Abordarea bazată pe RAG optimizează acuratețea generării textului folosind Flan T5 XXL, oferind în mod dinamic context relevant care a fost creat prin căutarea într-o listă de documente.

Puteți utiliza aceste notebook-uri în SageMaker așa cum sunt sau le puteți personaliza în funcție de nevoile dvs. Pentru a personaliza, puteți utiliza propriul set de documente din biblioteca de cunoștințe, puteți utiliza alte implementări de căutare de relevanță, cum ar fi OpenSearch, și puteți utiliza alte modele de încorporare și LLM-uri de generare de text disponibile pe JumpStart.

Așteptăm cu nerăbdare să vedem ce construiești pe JumpStart folosind o abordare bazată pe RAG!


Despre autori

Răspunsuri la întrebări folosind Retrieval Augmented Generation cu modele de bază în Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Dr. Xin Huang este cercetător aplicat senior pentru algoritmii încorporați Amazon SageMaker JumpStart și Amazon SageMaker. El se concentrează pe dezvoltarea de algoritmi scalabili de învățare automată. Interesele sale de cercetare sunt în domeniul prelucrării limbajului natural, al învățării profunde explicabile pe date tabulare și al analizei robuste a grupării non-parametrice spațiu-timp. A publicat multe lucrări în ACL, ICDM, conferințe KDD și Royal Statistical Society: Series A.

Răspunsuri la întrebări folosind Retrieval Augmented Generation cu modele de bază în Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Rachna Chadha este arhitect principal de soluții AI/ML în conturi strategice la AWS. Rachna este o optimistă care crede că utilizarea etică și responsabilă a inteligenței artificiale poate îmbunătăți societatea în viitor și poate aduce prosperitate economică și socială. În timpul liber, Rachnei îi place să petreacă timpul cu familia ei, să facă drumeții și să asculte muzică.

Răspunsuri la întrebări folosind Retrieval Augmented Generation cu modele de bază în Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Dr. Kyle Ulrich este un om de știință aplicat cu echipa de algoritmi încorporați Amazon SageMaker. Interesele sale de cercetare includ algoritmi scalabili de învățare automată, viziunea computerizată, serii temporale, non-parametrice bayesiene și procese gaussiene. Doctoratul său este de la Universitatea Duke și a publicat lucrări în NeurIPS, Cell, and Neuron.

Răspunsuri la întrebări folosind Retrieval Augmented Generation cu modele de bază în Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Hemant Singh este un inginer de învățare automată cu experiență în algoritmii încorporați Amazon SageMaker JumpStart și Amazon SageMaker. Și-a obținut masterul de la Institutul Courant de Științe Matematice și B.Tech de la IIT Delhi. A avut experiență în lucrul la o gamă variată de probleme de învățare automată în domeniul procesării limbajului natural, viziunii computerizate și analizei serii de timp.

Răspunsuri la întrebări folosind Retrieval Augmented Generation cu modele de bază în Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Manas Dadarkar este un manager de dezvoltare software care deține ingineria serviciului Amazon Forecast. El este pasionat de aplicațiile învățării automate și de a face tehnologiile ML ușor disponibile pentru ca toată lumea să le adopte și să le implementeze în producție. În afara serviciului, are mai multe interese, inclusiv călătoriile, cititul și petrecerea timpului cu prietenii și familia.

Răspunsuri la întrebări folosind Retrieval Augmented Generation cu modele de bază în Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Dr. Ashish Khetan este un om de știință senior aplicat cu algoritmi încorporați Amazon SageMaker și ajută la dezvoltarea algoritmilor de învățare automată. Și-a luat doctoratul la Universitatea din Illinois Urbana-Champaign. Este un cercetător activ în învățarea automată și inferența statistică și a publicat multe lucrări în conferințele NeurIPS, ICML, ICLR, JMLR, ACL și EMNLP.

Timestamp-ul:

Mai mult de la Învățare automată AWS