Zephyrnet-logotyp

Använd RAG för läkemedelsupptäckt med kunskapsbaser för Amazons berggrund | Amazon webbtjänster

Datum:

Amazonas berggrund tillhandahåller ett brett utbud av modeller från Amazon och tredjepartsleverantörer, inklusive Anthropic, AI21, Meta, Cohere och Stability AI, och täcker ett brett utbud av användningsfall, inklusive text- och bildgenerering, inbäddning, chatt, agenter på hög nivå med resonemang och orkestrering med mera. Kunskapsbaser för Amazon Bedrock låter dig bygga prestanda och anpassade Retrieval Augmented Generation (RAG)-applikationer ovanpå AWS och tredjeparts vektorbutiker med både AWS och tredjepartsmodeller. Kunskapsbaser för Amazon Bedrock automatiserar synkroniseringen av dina data med din vektorbutik, inklusive skillnad av data när den uppdateras, dokumentladdning och chunking, såväl som semantisk inbäddning. Det låter dig sömlöst anpassa dina RAG-uppmaningar och hämtningsstrategier – vi tillhandahåller källattributionen och vi hanterar minneshantering automatiskt. Knowledge Bases är helt serverlöst, så du behöver inte hantera någon infrastruktur, och när du använder Knowledge Bases debiteras du bara för de modeller, vektordatabaser och lagring du använder.

RAG är en populär teknik som kombinerar användningen av privata data med stora språkmodeller (LLM). RAG börjar med ett första steg för att hämta relevanta dokument från ett datalager (oftast ett vektorindex) baserat på användarens fråga. Den använder sedan en språkmodell för att generera ett svar genom att beakta både de hämtade dokumenten och den ursprungliga frågan.

I det här inlägget visar vi hur man bygger ett RAG-arbetsflöde med hjälp av Knowledge Bases for Amazon Bedrock för ett användningsfall för läkemedelsupptäckt.

Översikt över kunskapsbaser för Amazon Bedrock

Kunskapsbaser för Amazon Bedrock stöder ett brett utbud av vanliga filtyper, inklusive .txt, .docx, .pdf, .csv och mer. För att möjliggöra effektiv hämtning från privata data är en vanlig praxis att först dela upp dessa dokument i hanterbara bitar. Knowledge Bases har implementerat en standard chunking-strategi som fungerar bra i de flesta fall för att du ska kunna komma igång snabbare. Om du vill ha mer kontroll låter Knowledge Bases dig styra chunkingstrategin genom en uppsättning förkonfigurerade alternativ. Du kan styra den maximala tokenstorleken och mängden överlappning som ska skapas över bitar för att ge ett sammanhängande sammanhang till inbäddningen. Kunskapsbaser för Amazon Bedrock hanterar processen att synkronisera data från din Amazon enkel lagringstjänst (Amazon S3) hink, delar upp den i mindre bitar, genererar vektorinbäddningar och lagrar inbäddningarna i ett vektorindex. Denna process kommer med intelligent diffning, genomströmning och felhantering.

Vid körning används en inbäddningsmodell för att konvertera användarens fråga till en vektor. Vektorindexet frågas sedan för att hitta dokument som liknar användarens fråga genom att jämföra dokumentvektorer med användarens frågevektor. I det sista steget läggs semantiskt liknande dokument som hämtats från vektorindexet som kontext för den ursprungliga användarfrågan. När ett svar genereras för användaren, efterfrågas de semantiskt likartade dokumenten i textmodellen, tillsammans med källattribution för spårbarhet.

Kunskapsbaser för Amazon Bedrock stöder flera vektordatabaser, inklusive Amazon OpenSearch Serverlös, Amazon-Aurora, Pinecone och Redis Enterprise Cloud. Med API:erna Retrieve och RetrieveAndGenerate kan dina applikationer fråga direkt efter indexet med en enhetlig och standardsyntax utan att behöva lära sig separata API:er för varje annan vektordatabas, vilket minskar behovet av att skriva anpassade indexfrågor mot ditt vektorlager. Retrieve API tar den inkommande frågan, konverterar den till en inbäddningsvektor och frågar backend-arkivet med hjälp av de algoritmer som konfigurerats på vektordatabasnivån; RetrieveAndGenerate API använder en användarkonfigurerad LLM som tillhandahålls av Amazon Bedrock och genererar det slutliga svaret på naturligt språk. Det inbyggda spårbarhetsstödet informerar den begärande applikationen om de källor som används för att svara på en fråga. För företagsimplementeringar stöder Knowledge Bases AWS nyckelhanteringstjänst (AWS KMS) kryptering, AWS CloudTrail integration med mera.

I följande avsnitt visar vi hur man bygger ett RAG-arbetsflöde med hjälp av kunskapsbaser för Amazon Bedrock, med stöd av vektormotorn OpenSearch Serverless, för att analysera en ostrukturerad datauppsättning för kliniska prövningar för ett användningsfall för läkemedelsupptäckt. Dessa data är informationsrika men kan vara mycket heterogena. Korrekt hantering av specialiserad terminologi och begrepp i olika format är avgörande för att upptäcka insikter och säkerställa analytisk integritet. Med Knowledge Bases for Amazon Bedrock kan du få tillgång till detaljerad information genom enkla, naturliga frågor.

Bygg en kunskapsbas för Amazon Bedrock

I det här avsnittet demonstrerar vi processen att skapa en kunskapsbas för Amazon Bedrock via konsolen. Slutför följande steg:

  1. På Amazon Bedrock-konsolen, under orkestrering välj i navigeringsfönstret Kunskapsbas.
  2. Välja Skapa kunskapsbas.

  1. I Kunskapsbasdetaljer sektion, ange ett namn och en valfri beskrivning.
  2. I IAM-behörigheter avsnitt, välj Skapa och använd en ny tjänstroll.
  3. För Roll för tjänstens namn, ange ett namn för din roll, som måste börja med AmazonBedrockExecutionRoleForKnowledgeBase_.
  4. Välja Nästa.

  1. I Datakälla sektion, ange ett namn för din datakälla och S3-URI där datasetet finns. Knowledge Bases stöder följande filformat:
    • Oformaterad text (.txt)
    • Markdown (.md)
    • HyperText Markup Language (.html)
    • Microsoft Word-dokument (.doc/.docx)
    • Kommaseparerade värden (.csv)
    • Microsoft Excel-kalkylblad (.xls/.xlsx)
    • Portable Document Format (.pdf)
  1. Enligt Ytterligare inställningar¸ välj din föredragna chunking-strategi (för det här inlägget väljer vi Fast storlek chunking) och ange bitstorlek och överlagring i procent. Alternativt kan du använda standardinställningarna.
  2. Välja Nästa.

  1. I Inbäddningsmodell sektionen, välj Titan Embeddings-modellen från Amazon Bedrock.
  2. I Vektor databas avsnitt, välj Skapa snabbt en ny vektorbutik, som hanterar processen för att skapa en vektorbutik.
  3. Välja Nästa.

  1. Granska inställningarna och välj Skapa kunskapsbas.

  1. Vänta tills kunskapsbasen har skapats och bekräfta att dess status är Klar.
  2. I Datakälla sektionen, eller på bannern högst upp på sidan eller popup-fönstret i testfönstret, välj Synkronisera för att utlösa processen att ladda data från S3-skopan, dela upp den i bitar av den storlek du angav, generera vektorinbäddningar med den valda textinbäddningsmodellen och lagra dem i vektorarkivet som hanteras av Knowledge Bases för Amazon Bedrock.

Synkroniseringsfunktionen stöder inmatning, uppdatering och radering av dokument från vektorindex baserat på ändringar av dokument i Amazon S3. Du kan också använda StartIngestionJob API för att trigga synkroniseringen via AWS SDK.

När synkroniseringen är klar visar synkroniseringshistoriken status Avslutad.

Fråga kunskapsbasen

I det här avsnittet visar vi hur du får tillgång till detaljerad information i kunskapsbasen genom enkla och naturliga frågor. Vi använder en ostrukturerad syntetisk datauppsättning som består av PDF-filer, vars sidnummer sträcker sig från 10–100 sidor, som simulerar en plan för klinisk prövning av ett föreslaget nytt läkemedel inklusive statistiska analysmetoder och samtyckesformulär för deltagare. Vi använder kunskapsbaserna för Amazon Bedrock retrieve_and_generate och retrieve API:er med Amazon Bedrock LangChain integration.

Innan du kan skriva skript som använder Amazon Bedrock API måste du installera lämplig version av AWS SDK i din miljö. För Python-skript kommer detta att vara AWS SDK för Python (Boto3):

pip install langchain
pip install boto3

Aktivera dessutom åtkomst till Amazon Titan Embeddings-modellen och Anthropic Claude v2 eller v1. För mer information, se Modellåtkomst.

Generera frågor med Amazon Bedrock

Vi kan använda Anthropic Claude 2.1 för Amazon Bedrock för att föreslå en lista med frågor att ställa om datauppsättningen för kliniska prövningar:

import boto3
from langchain.llms.bedrock import Bedrock

bedrock_client = boto3.client("bedrock-runtime")

# Start with the query
prompt = "For medical research trial consent forms to sign, what are the top 5 questions can be asked?"

claude_llm = Bedrock(
    model_id="anthropic.claude-v2:1",
    model_kwargs={"temperature": 0, "top_k": 10, "max_tokens_to_sample": 3000},
    client=bedrock_client,
)

# Provide the prompt to the LLM to generate an answer to the query without any additional context provided
response = claude_llm(prompt)
questions = [
    item.split(".")[1].strip() for item in response.strip().split("nn")[1:-1]
]
questions
>>> answer:
'What is the purpose of the study? Make sure you understand the goals of the research and what the study procedures will entail',
'What are the risks and potential benefits? The form should explain all foreseeable risks, side effects, or discomforts you might experience from participating',
'What will participation involve? Get details on what tests, medications, lifestyle changes, or procedures you will go through, how much time it will take, and how long the study will last',
'Are there any costs or payments? Ask if you will be responsible for any costs related to the study or get paid for participating',
'How will my privacy be protected? The form should explain how your personal health information will be kept confidential before, during, and after the trial'

Använd Amazon Bedrock RetrieveAndGenerate API

För en helt hanterad RAG-upplevelse kan du använda de inhemska kunskapsbaserna för Amazon Bedrock RetrieveAndGenerate API för att få svaren direkt:

bedrock_agent_client = boto3.client("bedrock-agent-runtime")

kb_id = "<YOUR_KNOWLEDGE_BASE_ID>"

def retrieveAndGenerate(
    input: str,
    kbId: str,
    region: str = "us-east-1",
    sessionId: str = None,
    model_id: str = "anthropic.claude-v2:1",
):
    model_arn = f"arn:aws:bedrock:{region}::foundation-model/{model_id}"

    if sessionId:
        return bedrock_agent_client.retrieve_and_generate(
            input={"text": input},
            retrieveAndGenerateConfiguration={
                "type": "KNOWLEDGE_BASE",
                "knowledgeBaseConfiguration": {
                    "knowledgeBaseId": kbId,
                    "modelArn": model_arn,
                },
            },
            sessionId=sessionId,
        )

    else:
        return bedrock_agent_client.retrieve_and_generate(
            input={"text": input},
            retrieveAndGenerateConfiguration={
                "type": "KNOWLEDGE_BASE",
                "knowledgeBaseConfiguration": {
                    "knowledgeBaseId": kbId,
                    "modelArn": model_arn,
                },
            },
        )

response = retrieveAndGenerate(
    "What are the potential risks and benefits of participating?", kb_id
)

generated_text = response["output"]["text"]
>>> "The potential risks include side effects from the study medication lithium such as nausea, loose stools, thirst, urination changes, shakiness, headaches, sweating, fatigue, decreased concentration, and skin rash. There is also a risk of lithium interaction with other medications. For women, there is a risk of birth defects if lithium is taken during pregnancy. There are no guaranteed benefits, but possible benefits include new information that could help the participant from the interviews and tests conducted during the study."

Den citerade informationskällan kan erhållas via följande kod (med en del av utdata redigerad för korthets skull):

response["citations"]

>>> [
    {
        "generatedResponsePart": {
            "textResponsePart": {
                "text": " The potential risks include side effects from the study...",
                "span": {"start": 0, "end": 361},
            }
        },
        "retrievedReferences": [
            {
                "content": {
                    "text": "590 ICF#2 Page 7 of 19 The primary risks and discomforts of participation…"
                },
                "location": {"type": "S3", "s3Location": {"uri": "s3://XXXX/XXXX.pdf"}},
            },
            {
                "content": {
                    "text": "N/A CSP 590 ICF#2 Page 10 of 19 Risks associated with suddenly stopping study medications..."
                },
                "location": {"type": "S3", "s3Location": {"uri": "s3://XXXX/XXXX.pdf"}},
            },
        ],
    },
    {
        "generatedResponsePart": {
            "textResponsePart": {
                "text": " There are no guaranteed benefits, but possible benefits include...",
                "span": {"start": 363, "end": 531},
            }
        },
        "retrievedReferences": [
            {
                "content": {
                    "text": "research, not usual clinical care. After these are done we ask..."
                },
                "location": {"type": "S3", "s3Location": {"uri": "s3://XXXX/XXXX.pdf"}},
            }
        ],
    },
]

Genom att skicka sessions-ID för RetrieveAndGenerate API kan du bevara konversationskontexten och ställa följdfrågor. Till exempel, utan sammanhanget, om du ber om mer detaljer från det föregående svaret, kanske det inte kan svara korrekt:

retrieveAndGenerate("elaborate more on the first side effect", kb_id, sessionId=None)["output"]["text"]
>>> "The search results do not provide additional details about the mild nausea side effect that would allow me to elaborate further on it."

Men genom att skicka sessions-ID:t kan RAG-pipelinen identifiera motsvarande sammanhang och returnera relevanta svar:

retrieveAndGenerate("elaborate more on the first side effect", kb_id, sessionId=response["sessionId"])["output"]["text"]
>>> "The search results provide details that nausea from taking lithium is usually mild and goes away after days or weeks for most people. Specifically, up to 75% of people may experience mild nausea when first starting lithium, but this goes away in 90-99% of people who continue taking it."

Följande tabell visar de hämtade svaren på alla motsvarande frågor.

Fråga Svar
Vad är syftet med studien? Se till att du förstår forskningens mål och vad studieprocedurerna kommer att innebära. Syftet med studien är att testa om litium är effektivt för att förhindra upprepat självmordsvåld hos patienter med depression eller bipolär sjukdom.
Vilka är riskerna och potentiella fördelar? Formuläret ska förklara alla förutsebara risker, biverkningar eller obehag du kan uppleva av att delta. De möjliga riskerna eller besvären inkluderar: intervjufrågorna som orsakar obehag, biverkningar från litiummedicinen såsom illamående, lös avföring, törst, urineringsförändringar, skakighet, huvudvärk, svettning, trötthet, minskad koncentration, hudutslag, sköldkörtelförändringar, förvärrad akne /psoriasis, litiumtoxicitet och risker om medicineringen plötsligt stoppas. De potentiella fördelarna är att testerna kan leda till ny information för att hjälpa deltagaren, och litium kan hjälpa till att förhindra upprepat självmordsvåld för personer med depression eller bipolär sjukdom.
Vad kommer deltagandet innebära? Få information om vilka tester, mediciner, livsstilsförändringar eller procedurer du kommer att gå igenom, hur mycket tid det kommer att ta och hur länge studien kommer att pågå. Deltagande kommer att innebära att fylla i en intervju och frågeformulär som täcker tänkande, beteenden, behandling av mental hälsa, mediciner, alkohol- och droganvändning, hem och socialt stöd och förståelse av forskningsstudien. Detta tar cirka två timmar och kan göras i flera sessioner, personligen och per telefon. Om man är berättigad till hela studien blir det cirka 20 studiebesök under ett år. Detta kommer att involvera att ta studiemedicin, att kontrollera vitala tecken, fylla i frågeformulär, granska biverkningar och fortsätta normal medicinsk och mental hälsovård.
Finns det några kostnader eller betalningar? Fråga om du kommer att stå för eventuella kostnader relaterade till studien eller få betalt för att delta. Ja, det finns kostnader och betalningar som diskuteras i sökresultaten. Du kommer inte att debiteras för några behandlingar eller ingrepp som ingår i studien. Du kommer dock fortfarande att behöva betala eventuella vanliga VA egenavgifter för vård och mediciner som inte är relaterade till studien. Du kommer inte att få betalt för deltagande, men studien kommer att ersätta utgifter relaterade till deltagande som transport, parkering, etc. Ersättningsbelopp och process tillhandahålls.
Hur kommer min integritet att skyddas? Formuläret ska förklara hur din personliga hälsoinformation kommer att hållas konfidentiell före, under och efter rättegången. Din integritet kommer att skyddas genom att genomföra intervjuer privat, föra skrivna anteckningar i låsta filer och på kontor, lagra elektronisk information i krypterade och lösenordsskyddade filer och erhålla ett konfidentialitetsintyg från Department of Health and Human Services för att förhindra att information som identifierar dig avslöjas . Information som identifierar dig kan komma att delas med läkare som ansvarar för din vård eller för granskningar och utvärderingar av statliga myndigheter, men samtal och uppsatser om studien kommer inte att identifiera dig.

Fråga med Amazon Bedrock Retrieve API

För att anpassa ditt RAG-arbetsflöde kan du använda Retrieve API för att hämta relevanta bitar baserat på din fråga och skicka den till valfri LLM som tillhandahålls av Amazon Bedrock. För att använda Retrieve API, definiera det enligt följande:

def retrieve(query: str, kbId: str, numberOfResults: int = 5):
    return bedrock_agent_client.retrieve(
        retrievalQuery={"text": query},
        knowledgeBaseId=kbId,
        retrievalConfiguration={
            "vectorSearchConfiguration": {"numberOfResults": numberOfResults}
        },
    )

Hämta motsvarande sammanhang (med en del av utgången redigerad för korthetens skull):

query = "What is the purpose of the medical research study?"
response = retrieve(query, kb_id, 3)
retrievalResults = response["retrievalResults"]
>>> [
    {
        "content": {"text": "You will not be charged for any procedures that..."},
        "location": {"type": "S3", "s3Location": {"uri": "s3://XXXXX/XXXX.pdf"}},
        "score": 0.6552521,
    },
    {
        "content": {"text": "and possible benefits of the study. You have been..."},
        "location": {"type": "S3", "s3Location": {"uri": "s3://XXXX/XXXX.pdf"}},
        "score": 0.6581577,
    },
    ...,
]

Extrahera sammanhanget för promptmallen:

def get_contexts(retrievalResults):
    contexts = []
    for retrievedResult in retrievalResults:
        contexts.append(retrievedResult["content"]["text"])
    return " ".join(contexts)

contexts = get_contexts(retrievalResults)

Importera Python-modulerna och ställ in mallen för att svara på frågan i sammanhanget och generera sedan det slutliga svaret:

from langchain.prompts import PromptTemplate

PROMPT_TEMPLATE = """
Human: You are an AI system working on medical trial research, and provides answers to questions 
by using fact based and statistical information when possible.
Use the following pieces of information to provide a concise answer to the question enclosed in <question> tags.
If you don't know the answer, just say that you don't know, don't try to make up an answer.

<context>
{context_str}
</context>

<question>
{query_str}
</question>

The response should be specific and use statistics or numbers when possible.

Assistant:"""

claude_prompt = PromptTemplate(
    template=PROMPT_TEMPLATE, input_variables=["context_str", "query_str"]
)

prompt = claude_prompt.format(context_str=contexts, query_str=query)
response = claude_llm(prompt)
>>> "Based on the context provided, the purpose of this medical research study is to evaluate the efficacy of lithium compared to a placebo in preventing suicide over a 1 year period. Specifically, participants will be randomly assigned to receive either lithium or a placebo pill for 1 year, with their doctors and the participants themselves not knowing which treatment they receive (double-blind). Blood lithium levels will be monitored and doses adjusted over the first 6-8 visits, then participants will be followed monthly for 1 year to assess outcomes."

Fråga med Amazon Bedrock LangChain-integration

För att skapa en heltäckande anpassad Q&A-applikation tillhandahåller Knowledge Bases for Amazon Bedrock integration med LangChain. För att ställa in LangChain retriever, ange kunskapsbas-ID och ange antalet resultat som ska returneras från frågan:

from langchain.retrievers.bedrock import AmazonKnowledgeBasesRetriever

retriever = AmazonKnowledgeBasesRetriever(
    knowledge_base_id=kb_id,
    retrieval_config={"vectorSearchConfiguration": {"numberOfResults": 4}},
)

Ställ nu in LangChain RetrievalQA och generera svar från kunskapsbasen:

from langchain.chains import RetrievalQA

qa = RetrievalQA.from_chain_type(
    llm=claude_llm,
    chain_type="stuff",
    retriever=retriever,
    return_source_documents=True,
    chain_type_kwargs={"prompt": claude_prompt},
)

[qa(q)["result"] for q in questions]

Detta kommer att generera motsvarande svar som liknar de som anges i den tidigare tabellen.

Städa upp

Se till att ta bort följande resurser för att undvika extra kostnader:

Slutsats

Amazon Bedrock tillhandahåller en bred uppsättning djupt integrerade tjänster för att driva RAG-applikationer i alla skalor, vilket gör det enkelt att komma igång med att analysera din företagsdata. Kunskapsbaser för Amazon Bedrock integreras med Amazon Bedrocks grundmodeller för att bygga skalbara dokumentinbäddningspipelines och dokumenthämtningstjänster för att driva ett brett utbud av interna och kundinriktade applikationer. Vi ser fram emot framtiden och din feedback kommer att spela en viktig roll för att vägleda utvecklingen av denna produkt. För att lära dig mer om funktionerna hos Amazon Bedrock och kunskapsbaser, se Kunskapsbas för Amazon Bedrock.


Om författarna

Mark Roy är en huvudarkitekt för maskininlärning för AWS, som hjälper kunder att designa och bygga AI/ML-lösningar. Marks arbete täcker ett brett spektrum av ML-användningsfall, med ett primärt intresse för datorseende, djupinlärning och skalning av ML över hela företaget. Han har hjälpt företag inom många branscher, inklusive försäkring, finansiella tjänster, media och underhållning, hälsovård, allmännyttiga företag och tillverkning. Mark innehar sex AWS-certifieringar, inklusive ML Specialty Certification. Innan han började på AWS var Mark arkitekt, utvecklare och teknikledare i över 25 år, inklusive 19 år inom finansiella tjänster.

Mani Khanuja är en teknisk ledare – Generativa AI-specialister, författare till boken – Applied Machine Learning and High Performance Computing on AWS, och medlem i styrelsen för Women in Manufacturing Education Foundation Board. Hon leder maskininlärningsprojekt (ML) inom olika domäner som datorseende, naturlig språkbehandling och generativ AI. Hon hjälper kunder att bygga, träna och implementera stora maskininlärningsmodeller i stor skala. Hon talar i interna och externa konferenser som re:Invent, Women in Manufacturing West, YouTube webinars och GHC 23. På fritiden gillar hon att gå långa löpturer längs stranden.

Dr Baichuan Sun, som för närvarande tjänstgör som Sr. AI/ML Solution Architect på AWS, fokuserar på generativ AI och tillämpar sina kunskaper inom datavetenskap och maskininlärning för att tillhandahålla praktiska, molnbaserade affärslösningar. Med erfarenhet av managementkonsultation och AI-lösningsarkitektur tar han sig an en rad komplexa utmaningar, inklusive datorseende med robotar, tidsserieprognoser och prediktivt underhåll, bland annat. Hans arbete är grundat på en gedigen bakgrund av projektledning, programvara FoU och akademiska sysselsättningar. Utanför jobbet tycker Dr. Sun om balansen mellan att resa och umgås med familj och vänner.

Derrick Choo är en Senior Solutions Architect på AWS fokuserad på att påskynda kundernas resa till molnet och transformera deras verksamhet genom att använda molnbaserade lösningar. Hans expertis är inom utveckling av fullstack-applikationer och maskininlärning. Han hjälper kunder att designa och bygga end-to-end-lösningar som täcker frontend-användargränssnitt, IoT-applikationer, API- och dataintegrationer och maskininlärningsmodeller. På fritiden umgås han gärna med sin familj och experimenterar med fotografering och video.

Frank Winkler är senior lösningsarkitekt och generativ AI-specialist på AWS baserad i Singapore, fokuserad på maskininlärning och generativ AI. Han arbetar med globala digitala infödda företag för att utforma skalbara, säkra och kostnadseffektiva produkter och tjänster på AWS. På fritiden tillbringar han tid med sin son och dotter och reser för att njuta av vågorna över ASEAN.

Nihir Chadderwala är Sr. AI/ML Solutions Architect i Global Healthcare and Life Sciences-teamet. Hans expertis är att bygga Big Data och AI-drivna lösningar på kundproblem, särskilt inom biomedicin, biovetenskap och hälsovård. Han är också entusiastisk över skärningspunkten mellan kvantinformationsvetenskap och AI och tycker om att lära sig och bidra till detta utrymme. På fritiden tycker han om att spela tennis, resa och lära sig om kosmologi.

plats_img

Senaste intelligens

plats_img