File size: 2,224 Bytes
c6c79f7
 
 
e22d4b7
c6c79f7
 
 
e22d4b7
 
 
c6c79f7
627653b
e22d4b7
c6c79f7
8a31a6b
c6c79f7
 
8a31a6b
c6c79f7
d02f3a9
e22d4b7
 
 
d02f3a9
e22d4b7
 
 
d02f3a9
e22d4b7
d02f3a9
 
 
 
 
 
 
 
 
e22d4b7
d02f3a9
e22d4b7
 
 
d02f3a9
c6c79f7
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import openai
import numpy as np
import pandas as pd
from sentence_transformers import SentenceTransformer, CrossEncoder
import re
import gradio as gr
import json
import ast
from llm import OpenAILLM
from qa import QuestionAnswerer

df = pd.read_csv("carotid_embeddings_sentence_transformers_061123.csv")
df["embeddings"] = df.embeddings.apply(ast.literal_eval)

qa = QuestionAnswerer(df, SentenceTransformer('thenlper/gte-base'), OpenAILLM('gpt-3.5-turbo-1106'), CrossEncoder('cross-encoder/ms-marco-TinyBERT-L-2-v2'))

def gradio_answer(input):
    return qa.answer_question(input, n=5)

desc_string = """
In dieser Demo kannst du einer KI Fragen zum Inhalt der ['S3-Leitlinie Diagnostik, Therapie und Nachsorge der extracraniellen Carotisstenose'](https://register.awmf.org/de/leitlinien/detail/004-028) stellen. Ein paar Beispiel-Fragen findest du unten. 

## Wie funktioniert das?

1. Die Frage wird durch ein neuronalen Netzwerk in eine Vektor-Repräsentation ('Embedding') umgewandelt. 
2. Die Ähnlichkeit des 'Frage-Vektors' wird mit den genauso erzeugten Vektoren von Textpassagen der Leitlinie verglichen. 
3. Ein ‚Large Language Model (LLM)‘ beantwortet nun mit Hilfe der ähnlichsten Textpassagen die gestellte Frage. 

Diese Technik heißt [‚Retrieval-augmented Generation (RAG)'](https://research.ibm.com/blog/retrieval-augmented-generation-RAG). Hierdurch kann verhindert werden, dass LLMs Fakten einfach erfinden.
"""

demo = gr.Interface(
   fn=gradio_answer, 
   inputs=gr.Textbox(lines=1, placeholder="Frage hier...", label="Frage"), 
   outputs=gr.Textbox(lines=4, placeholder="Antwort hier...", label="Antwort"), 
   title="🧠 Q&A S3 Leitlinie Carotisstenose", 
   description=desc_string,
   examples=[
      "Welche Sensitivität hatte die Transcranielle Doppler-Sonographie (TCD) bei der Detektion eines perioperativen Schlaganfalls?",
      "Ist eine ambulante Therapie der Carotisstenose mittels CEA oder CAS möglich und sinnvoll?",
      "Wie viele zerebrale Ischämien in Deutschland werden durch >50%ige Stenosen oder Verschlüsse der extracraniellen A. carotis verursacht?",
      "Welche Symptome können durch Stenosen der A. carotis verursacht werden?"
      ]
)
    
demo.launch()