


{"id":3871,"date":"2024-12-16T14:31:05","date_gmt":"2024-12-16T14:31:05","guid":{"rendered":"https:\/\/yininit.nl\/?p=3871"},"modified":"2024-12-16T21:17:47","modified_gmt":"2024-12-16T21:17:47","slug":"kba-versie1","status":"publish","type":"post","link":"https:\/\/yininit.nl\/index.php\/2024\/12\/16\/kba-versie1\/","title":{"rendered":"KBA-versie1"},"content":{"rendered":"\n<p><strong>Samenvatting<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><strong>Functionaliteit<\/strong><\/th><th><strong>Locatie in code<\/strong><\/th><th><strong>Waarom belangrijk?<\/strong><\/th><\/tr><\/thead><tbody><tr><td><strong>Embeddingsfunctionaliteit<\/strong><\/td><td>&#8211; <code>SentenceTransformerWrapper<\/code><br>&#8211; <code>FAISS.from_texts<\/code><br>&#8211; <code>retrieve_documents<\/code><\/td><td>Zorgt voor semantische matching tussen vragen en documenten.<\/td><\/tr><tr><td><strong>NLP-functionaliteit<\/strong><\/td><td>&#8211; <code>pipeline(\"text2text-generation\")<\/code><br>&#8211; <code>generate_answer<\/code><\/td><td>Zorgt voor geformuleerde antwoorden in natuurlijke taal, gebaseerd op de context.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">#Deze code combineert document retrieval via een FAISS-vectorstore<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">en antwoordgeneratie via Flan-T5.<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">#Stap 1: Importeer vereiste bibliotheken<\/h1>\n\n\n\n<p>!pip install -U langchain sentence-transformers faiss-cpu langchain-community<\/p>\n\n\n\n<p>from sentence_transformers import SentenceTransformer<br>from langchain.vectorstores import FAISS<br>from langchain.embeddings.base import Embeddings<br>from langchain.docstore.document import Document<br>from transformers import pipeline<br>from google.colab import files<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">#2. Definieer een Wrapper voor SentenceTransformer<\/h1>\n\n\n\n<p>class SentenceTransformerWrapper(Embeddings):<br>def <strong>init<\/strong>(self, model_name=&#8221;sentence-transformers\/all-MiniLM-L6-v2&#8243;):<br>self.model = SentenceTransformer(model_name)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def embed_documents(self, texts):\n    \"\"\"Genereer embeddings voor een lijst met teksten.\"\"\"\n    return self.model.encode(texts, show_progress_bar=True)\n\ndef embed_query(self, query):\n    \"\"\"Genereer een embedding voor een enkele vraag.\"\"\"\n    return self.model.encode(&#91;query], show_progress_bar=False)&#91;0]<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">#Initialiseer het embeddingsmodel via de wrapper<\/h1>\n\n\n\n<p>embeddings_model = SentenceTransformerWrapper()<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">3. Initialiseer Flan-T5 model pipeline<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">#nlp_pipeline = pipeline(&#8220;text2text-generation&#8221;, model=&#8221;google\/flan-t5-base&#8221;)<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">#Gebruik BLOOMZ als krachtiger model<\/h1>\n\n\n\n<p>nlp_pipeline = pipeline(&#8220;text-generation&#8221;, model=&#8221;bigscience\/bloomz-1b7&#8243;)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">#4. Upload documenten<\/h1>\n\n\n\n<p>uploaded = files.upload()<br>documents = []<\/p>\n\n\n\n<p>for file_name, file_content in uploaded.items():<br>content = file_content.decode(&#8216;windows-1252&#8217;) # Decodeer inhoud<br>texts = content.split(&#8216;\\n&#8217;)<br>file_documents = [Document(page_content=text.strip(), metadata={&#8220;source&#8221;: file_name}) for text in texts if text.strip()]<br>documents.extend(file_documents)<\/p>\n\n\n\n<p>print(f&#8221;Aantal documenten: {len(documents)}&#8221;)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">#5. Maak de FAISS-vectorstore<\/h1>\n\n\n\n<p>document_texts = [doc.page_content for doc in documents]<br>vectorstore = FAISS.from_texts(document_texts, embeddings_model)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">#6. Functie voor ophalen van relevante documenten<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">#def retrieve_documents(vraag, k=3):<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">#results = vectorstore.similarity_search(vraag, k=k)<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">#return [result.page_content for result in results]<\/h1>\n\n\n\n<p>def retrieve_documents(vraag, k=3):<br>&#8220;&#8221;&#8221;Haal de top k relevante documenten op uit de vectorstore.&#8221;&#8221;&#8221;<br># Controleer of vectorstore is aangemaakt<br>if &#8216;vectorstore&#8217; not in globals():<br>raise NameError(&#8220;Vectorstore is niet gedefinieerd. Zorg ervoor dat je FAISS-vectorstore hebt aangemaakt.&#8221;)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Zoek naar relevante documenten\nresults = vectorstore.similarity_search(vraag, k=k)\nreturn &#91;doc.page_content for doc in results]<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">#7. Functie voor antwoord genereren met BLOOMZ<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">#NEW<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">#def generate_answer(vraag, context):<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">#prompt = (<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">#f&#8221;Gebruik alleen de relevante informatie uit onderstaande tekst om de vraag te beantwoorden:\\n&#8221;<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">#f&#8221;{context}\\n\\n&#8221;<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">#f&#8221;Vraag: {vraag}\\n&#8221;<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">#f&#8221;Antwoord (alleen waar lunchpauze in voorkomt):&#8221;<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">)<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">print(f&#8221;DEBUG CONTEXTTTTTT:\\n{context}&#8221;)<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">#ORG<\/h1>\n\n\n\n<p>def generate_answer(vraag, context):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>prompt = (\n    f\"Gebruik de onderstaande informatie om de vraag te beantwoorden:\\n\"\n    f\"{context}\\n\\n\"\n    f\"Vraag: {vraag}\\n\"\n    f\"Antwoord (geef alleen het relevante deel van de context):\"\n)\n\n\n#prompt = f\"Gebruik de onderstaande informatie om de vraag te beantwoorden:{context}\\n\\nVraag: {vraag}\\nAntwoord (geef alleen het relevante deel van de context):\"\n\n#prompt = f\"Context: {context}\\n\\nVraag: {vraag}\\nAntwoord:\"\n\nprint(f\"DEBUG Prompt:\\n{prompt}\")  # Debugging\nresult = nlp_pipeline(prompt, max_length=200, truncation=True, num_return_sequences=1)\nprint(f\"DEBUG Result:\\n{result}\")  # Debugging\nprint(f\"DEBUG Result&#91;0] Generated tekst:\\n{result&#91;0]&#91;'generated_text']}\")  # Debugging\nreturn result&#91;0]&#91;'generated_text']<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">#OPTIE 1 Filter de context!! Hoort bij: 8. #Hoofdfunctie: Vraag en antwoord<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">#def filter_context(context, vraag):<\/h1>\n\n\n\n<p># &#8220;&#8221;&#8221;Filter de context op basis van trefwoorden in de vraag.&#8221;&#8221;&#8221;<br># vraag_trefwoorden = [woord.lower() for woord in vraag.split()] # Vraag splitsen in trefwoorden<br># relevante_zinnen = []<br># for zin in context.split(&#8216;\\n&#8217;):<br># # Voeg zinnen toe die een overlap hebben met trefwoorden in de vraag<br># if any(trefwoord in zin.lower() for trefwoord in vraag_trefwoorden):<br># relevante_zinnen.append(zin)<br># return &#8220;\\n&#8221;.join(relevante_zinnen)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">#8. Hoofdfunctie: Vraag en antwoord<\/h1>\n\n\n\n<p>def kba_antwoord(vraag):<br>relevante_documenten = retrieve_documents(vraag)<br>context = &#8220;\\n&#8221;.join(relevante_documenten)<\/p>\n\n\n\n<p># OPTIE 1 Filter de context !!<br>#gefilterde_context = filter_context(context, vraag)<br>#if not gefilterde_context:<br># return &#8220;Geen relevante informatie gevonden om deze vraag te beantwoorden.&#8221;<br>#print(f&#8221;Gefilterde context:\\n{filter_context(context, vraag)}&#8221;)<br>#antwoord = generate_answer(vraag, gefilterde_context)<\/p>\n\n\n\n<p># OPTIE 2 Origineel<br>antwoord = generate_answer(vraag, context)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>print(f\"DEBUG Gevonden documenten:\\n{relevante_documenten}\")\nprint(f\"DEBUG antwoord in kba_antwoord:\\n{antwoord}\")\n\nreturn antwoord<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">#Testvraag<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">#vraag = &#8220;Wat moet ik doen met bedrijfsapparatuur?&#8221;<\/h1>\n\n\n\n<p>vraag = &#8220;Hoe laat is het lunchpauze?&#8221;<br>antwoord = kba_antwoord(vraag)<br>print(f&#8221;EINDE DEBUG antwoord:\\n{antwoord}&#8221;)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">#print(f&#8221;Vraag : {vraag}&#8221;)<\/h1>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Samenvatting Functionaliteit Locatie in code Waarom belangrijk? Embeddingsfunctionaliteit &#8211; SentenceTransformerWrapper&#8211; FAISS.from_texts&#8211; retrieve_documents Zorgt voor semantische matching tussen vragen en documenten. NLP-functionaliteit &#8211; pipeline(&#8220;text2text-generation&#8221;)&#8211; generate_answer Zorgt voor geformuleerde antwoorden in natuurlijke taal, gebaseerd op de context. #Deze code combineert document retrieval via een FAISS-vectorstore en antwoordgeneratie via Flan-T5. #Stap 1: Importeer vereiste bibliotheken !pip install -U [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[],"class_list":["post-3871","post","type-post","status-publish","format-standard","hentry","category-kba"],"_links":{"self":[{"href":"https:\/\/yininit.nl\/index.php\/wp-json\/wp\/v2\/posts\/3871","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yininit.nl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yininit.nl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yininit.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yininit.nl\/index.php\/wp-json\/wp\/v2\/comments?post=3871"}],"version-history":[{"count":3,"href":"https:\/\/yininit.nl\/index.php\/wp-json\/wp\/v2\/posts\/3871\/revisions"}],"predecessor-version":[{"id":3906,"href":"https:\/\/yininit.nl\/index.php\/wp-json\/wp\/v2\/posts\/3871\/revisions\/3906"}],"wp:attachment":[{"href":"https:\/\/yininit.nl\/index.php\/wp-json\/wp\/v2\/media?parent=3871"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yininit.nl\/index.php\/wp-json\/wp\/v2\/categories?post=3871"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yininit.nl\/index.php\/wp-json\/wp\/v2\/tags?post=3871"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}