<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Eren Akbulut on Medium]]></title>
        <description><![CDATA[Stories by Eren Akbulut on Medium]]></description>
        <link>https://medium.com/@eren23?source=rss-a015bb215389------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*FF644ixsJyXU1iP2yJlISw.png</url>
            <title>Stories by Eren Akbulut on Medium</title>
            <link>https://medium.com/@eren23?source=rss-a015bb215389------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 19 Jun 2026 14:33:32 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@eren23/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Create ChatGPT CLI Bot to Make Q&A on PDFs Using knowledge-gpt]]></title>
            <link>https://medium.com/geeks-of-data/create-chatgpt-cli-bot-to-make-q-a-on-pdfs-using-knowledge-gpt-b351feaa9921?source=rss-a015bb215389------2</link>
            <guid isPermaLink="false">https://medium.com/p/b351feaa9921</guid>
            <category><![CDATA[openai]]></category>
            <category><![CDATA[naturallanguageprocessing]]></category>
            <category><![CDATA[chatbots]]></category>
            <category><![CDATA[large-language-models]]></category>
            <category><![CDATA[chatgpt]]></category>
            <dc:creator><![CDATA[Eren Akbulut]]></dc:creator>
            <pubDate>Sat, 08 Apr 2023 09:19:39 GMT</pubDate>
            <atom:updated>2023-04-08T09:19:39.910Z</atom:updated>
            <content:encoded><![CDATA[<p><em>Before starting the article, I want to mention our “Geeks of Data” Discord channel. You can join and say hello, and exchange ideas about data science, engineering, or analysis fields.🚀 </em><a href="https://discord.com/invite/e5US6w87"><em>Link</em></a></p><p>In today’s world, information is just a few clicks away. With the vast amount of data available on the internet, it’s no wonder that people turn to search engines to find answers to their questions. But what if we could automate this process and make it more efficient?</p><p>That’s where knowledgegpt comes in. It’s a library designed to gather information from various sources and create prompts that can be used by OpenAI’s GPT-3 model to generate answers. With this library, you can build a chatbot that can answer questions on any topic.</p><p>Today we’ll try to explain to you how to create a CLI bot using knowledgegpt with just a couple of lines, our example covers the case when you either have the target PDF available in your local or when it’s an arxiv paper online waiting to be downloaded.</p><p>We can start with the installation, you can either use the command</p><blockquote>pip install knowledgegpt</blockquote><p>to install from the <a href="https://pypi.org/project/knowledgegpt/">PyPI</a> address or you can visit our Github <a href="https://github.com/geeks-of-data/knowledge-gpt">address</a> to install from the source.</p><p>Once everything is set we can create a Python file and then start importing the necessary libraries and configs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/958/1*pKhBHnrVykZWAX72ZRzp7Q.png" /><figcaption>Imports</figcaption></figure><p>The only thing that doesn’t come from our installment step here is the SECRET_KEY, to access it you can create an account from OpenAI get an API key, and place it under a file called “local_example_config” into a variable called SECRET_KEY.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*F3AOfWVoTJXMoqzNGqx1HQ.png" /><figcaption>Main Function Start</figcaption></figure><p>Then into a function called main() we can add this code, this part here basically reads in the pdf name or the arxiv id, sets up a condition for quitting, takes in the index_path ( is only needed when you want to save your indexes after the initial calculation ), also the load_index variable is used to check if we are loading the index in our extract method ( that we will see in a minute )</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sX3pYdgHzES-D1PDk7rOCA.png" /><figcaption>Download</figcaption></figure><p>The code above is pretty trivial, if the file is given directly, then go use it, if not, download from arxiv and use it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lJ2Eu9zhG2wyoiTaR-o7ww.png" /><figcaption>Last Variables and Loop Start</figcaption></figure><p>Then we set our max context length and finally initialize our class, we want a paragraph-based extraction, an English model, and we want to use the turbo model for our main engine :) (turbo is the one behind chatgpt)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kmCmRJGdYmEzOp2oT-CgOw.png" /><figcaption>Context Restart and Q&amp;A</figcaption></figure><p>If the context we encapsulated at the beginning is not good enough we can reset it by using the key restrat_context in our message, then the message sent along with it is going to be used to create another context.</p><p>Then if it’s our initial load we make 1 type of query if not the other one, the difference here is the in the initial query we’ll certainly have a fresh context so no need to call the context_restarter.</p><p>Finally, we print our answer and the loop goes on until we break it, now let’s take a look at a real use case, below we download a pdf from arxiv, first, we give the file name or the link then the path, if the path is empty, knowledgegpt will calculate and fill if is full already it’ll use directly. Then we specify the max # of tokens to then finally enter our prompt.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uS8PRop0EZlzmlvuoyBm2A.png" /><figcaption>Settings and Query</figcaption></figure><p>Finally, we have our answer ready, we can keep asking if we have questions related to VOS’s internals and how it works, if not we can use the flag restart_context and ask another question to update the context. Below we see our answer.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AHlCSW5PHW-pPaLCbckdmA.png" /><figcaption>Our Answer</figcaption></figure><p>That mostly concludes what we were aiming to cover today, however, if you need the source code please see the <a href="https://drive.google.com/file/d/1yX3dFDNfy-gFoVKOGKnIbdGuiG9d-3KL/view?usp=sharing">link</a> to find the source code.</p><p>Okay, that’s pretty much it. Thank you very much for reading and following along, friends. If you want to access content like this and spend time with curious, intelligent, and hardworking colleagues, we also welcome you to our Discord server. 🚀 <a href="https://discord.com/invite/e5US6w87">Link</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b351feaa9921" width="1" height="1" alt=""><hr><p><a href="https://medium.com/geeks-of-data/create-chatgpt-cli-bot-to-make-q-a-on-pdfs-using-knowledge-gpt-b351feaa9921">Create ChatGPT CLI Bot to Make Q&amp;A on PDFs Using knowledge-gpt</a> was originally published in <a href="https://medium.com/geeks-of-data">Geeks-of-Data</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[knowledge-gpt Kullanarak Sevdiğim Bir Spor Programıyla Alakalı Soru Cevap Yapmak.]]></title>
            <link>https://medium.com/geeks-of-data/knowledge-gpt-kullanarak-sevdi%C4%9Fim-bir-spor-program%C4%B1yla-alakal%C4%B1-soru-cevap-yapmak-fda6274e30f3?source=rss-a015bb215389------2</link>
            <guid isPermaLink="false">https://medium.com/p/fda6274e30f3</guid>
            <category><![CDATA[gpt-3]]></category>
            <category><![CDATA[chatgpt]]></category>
            <category><![CDATA[naturallanguageprocessing]]></category>
            <category><![CDATA[chatbots]]></category>
            <category><![CDATA[nlp]]></category>
            <dc:creator><![CDATA[Eren Akbulut]]></dc:creator>
            <pubDate>Tue, 21 Mar 2023 17:53:09 GMT</pubDate>
            <atom:updated>2023-03-21T17:53:09.208Z</atom:updated>
            <content:encoded><![CDATA[<p><em>Yazıya başlamadan önce “</em><strong><em>Geeks of Data</em></strong><em>” Discord kanalımızdan bahsetmek istiyorum, katılıp selam verebilir, veri bilimi, mühendisliği veya analizi alanlarında fikir alışverişi yapabilirsiniz. </em><a href="https://discord.gg/e5US6w87"><em>Link</em></a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pp4KlmsCrLXJrysQDRW01w.png" /><figcaption>Cover Image</figcaption></figure><p>İngilizce bir yazı olan önceki yazımızda knowledgegpt nedir ve nasıl kullanılır bunu anlatmıştık. <a href="https://medium.com/geeks-of-data/knowledge-gpt-a-library-for-creating-specialized-chatgpt-bots-with-2-lines-of-code-4d1b97f2930d">Buradan</a> ulaşabilirsiniz. Bu yazı knowledgegpt’yi kurduğunuzu ve kullanıma hazır olduğunu varsaymaktadır.</p><p>Yakın zamanda kütüphanemizde toplu halde Youtube oynatma listelerinden bilgi çıkartma ve promptlarda kullanma özelliği eklemiştik. Bu özelliği çok sevdiğim bir spor programı olan Socrates Dergi’de Caner Eler’in sunduğu “Sıkça Sorulan Sorular” programıyla test etmek istedim.</p><p>İlk iş bir extractor oluşturuyoruz, tek ihtiyacımız olan soruları sormak istediğimiz playlist’i belirtmek, indexleri kaydetmek istiyorsak ( bu kadar uzun bir iş için iyi bir fikir, tekrar kullanırken büyük kolaylık ) bir index_path veriyoruz, model dilini de seçip işe koyulabiliriz. Ben biraz zor olacağı için sadece 2. sezonu aldım :D Bu ve diğer örnekleri GitHub <a href="https://github.com/geeks-of-data/knowledge-gpt/tree/master/examples">repomuzda</a> bulabilirsiniz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wt0u6z2TZEvNctOgPMhE7Q.png" /><figcaption>Extractor Olusturma</figcaption></figure><p>Artık istediğimiz soruyu sorup cevap almaya başlayabiliriz, (ufak bir not, mevcut ayarların aksine ben her paragraf 10 cümle kadar olacak şekilde ayarladım yukarıda, isterseniz kütüphanenin ayarlarından buna müdahele edebilirsiniz.) Burada da tek ihtiyacımız soracağımız soruyu vermek, bir max_tokens parametresi belirlemek (bu Promp’ta ne kadar bilgi sokacağımıza karar veriyor, ne kadar yüksekse o kadar para harcatır, üst sınırı 4096 suan için default değer.), ve eğer mevcutta indexlerimiz varsa onu kullanıp isteyip istemediğimizi belirtmek için kullanabiliriz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/993/1*9elDI127p4yV8ZFYAsq7zQ.png" /><figcaption>İlk Soru</figcaption></figure><p>Yukarıda anlatılan şekilde ilk sorumu sordum:</p><blockquote>Kar yağdığında normal halinden daha zevkli olan sporlar hangileridir?</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*j4Oz5iyKgwuVkBfhT6Mv1w.png" /><figcaption>Prompt</figcaption></figure><p>Yukarıdaki gibi bir prompt oluştu ve cevap şu şekilde geldi:</p><blockquote>Kar yağdığında normal halinden daha zevkli olan sporlar Amerikan futbolu ve yağmurlu futbol maçlarıdır.</blockquote><p>İyi görünüyor, başka bir soru soralım:</p><blockquote>Tenisciler ve marka iş birlikleriyle ilgili bilgi verir misin?</blockquote><p>Soru epey geniş kapsamlı, ve biz de içerik hazırlarken çok iyi bir bölme işlemi yapmadık rasgele 10ar 10ar böldük, bakalım cevap nasıl?</p><blockquote>Tenisçiler ve marka işbirlikleriyle ilgili bilgi veriliyor. Özellikle Ivan Landel’in Adidas’la yaptığı işbirliği ve John McEnroe’nun Nike’ın tenise girmesini sağlaması örnek olarak veriliyor. Ayrıca birçok giyim markasının tenis ürünleri tasarlamaktan hoşlandığı ve tasarladıkları giysilerin direkt ekranda görüntülendiği belirtiliyor. Tenisçilerin pahalı saatleri takması ve markalarla özdeşleşmesi de bahsediliyor. Fred Perry, Lacoste ve Stan Smith gibi markaların da tenisçilerle ikonikleştiği ifade ediliyor.</blockquote><p>Yani, baya bilgi var gibi duruyor, çok sevdiğim örneklerden birisine geçelim:</p><blockquote>Tarihin en estetik futbolcusu kimdir? Sebebini açıklar mısın?</blockquote><p>Yanıt güzel ve ilginç:</p><blockquote>Thierry Henry, çünkü Emre\’nin cevabı olarak verilmiştir. Sebebi ise metinde açıklanmıştır: “Thierry Henry diyorum ben. Tam benlik soru aslında. Muhtemelen de ben varım diye alınmış bile olabilir bir set değil mi? Olabilir. Thierry Henry diyorum ben. Tabii ler dediği için çoğul bir soru olduğu için elbette devamını getiririz ama benim için bu sorunun cevabı açık halde Thierry Henry.</blockquote><p>Cevap böyle geliyor, çünkü soruyu soran o bölümlük sunucu Emre Özcan ve büyük bir Henry (Anri :D) hayranı, aralarındaki konuşmaya binaen böyle bir cevap gelmiş.</p><p>Başka bir sürü soru ve cevap yaptım, son olarak yine subjektif sonuçlar içerebilecek şu soruyu paylaşayım:</p><blockquote>Sporda vegan beslenme hakkında bir şeyler söyler misin?</blockquote><p>Cevap çok ortada ve bir yere ulaşmıyor:</p><blockquote>Metinde, vegan beslenmenin son dönemde spor dünyasında daha fazla dahil olmaya başladığı ve bazı sporcuların vegan beslenme tercihinde bulunduğu belirtiliyor. Ancak, sporda vegan beslenmenin caiz olup olmadığı veya gelecekteki beslenme alışkanlıkları hakkında yorum yapılmıyor.</blockquote><p>Bu yukarıdaki gibi pek bir yere ulaşmayan ve hatta hiç cevaplanmayan sorular da oldu, bunun ana muhtemel sebeplerinden birisi uzun cevaplar ve bizim bu cevapları tek seferde içeri alamamız olabilir, onları da GPT-4 API erişimi alınca cevaplarız :D</p><p>Evet arkadaşlar okuyup eşlik ettiğiniz için çok teşekkür ederiz, bu ve bunun gibi içeriklere ulaşmak, meraklı, zeki ve çalışkan meslektaşlarınızla zaman geçirmek isterseniz Discord sunucumuza da bekleriz. 🚀 <a href="https://discord.gg/e5US6w87">Link</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fda6274e30f3" width="1" height="1" alt=""><hr><p><a href="https://medium.com/geeks-of-data/knowledge-gpt-kullanarak-sevdi%C4%9Fim-bir-spor-program%C4%B1yla-alakal%C4%B1-soru-cevap-yapmak-fda6274e30f3">knowledge-gpt Kullanarak Sevdiğim Bir Spor Programıyla Alakalı Soru Cevap Yapmak.</a> was originally published in <a href="https://medium.com/geeks-of-data">Geeks-of-Data</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Using PDF Documents as Knowledge Bases and Making Q&A with GPT]]></title>
            <link>https://medium.com/geeks-of-data/using-pdf-documents-as-knowledge-bases-and-making-q-a-with-gpt-75b2ed01cbe5?source=rss-a015bb215389------2</link>
            <guid isPermaLink="false">https://medium.com/p/75b2ed01cbe5</guid>
            <category><![CDATA[naturallanguageprocessing]]></category>
            <category><![CDATA[openai-chatgpt]]></category>
            <category><![CDATA[openai]]></category>
            <category><![CDATA[embedding]]></category>
            <category><![CDATA[neural-networks]]></category>
            <dc:creator><![CDATA[Eren Akbulut]]></dc:creator>
            <pubDate>Sun, 19 Mar 2023 10:47:36 GMT</pubDate>
            <atom:updated>2023-03-19T10:47:36.245Z</atom:updated>
            <content:encoded><![CDATA[<p><em>Before starting the article, I want to mention our “Geeks of Data” Discord channel. You can join and say hello, and exchange ideas about data science, engineering, or analysis fields.🚀 </em><a href="https://discord.com/invite/e5US6w87"><em>Link</em></a></p><p>Find the code used in this tutorial <a href="https://github.com/geeks-of-data/knowledge-gpt/blob/master/examples/knowledge_for_promps_from_pdf.ipynb">here</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6urnCH3Zp_yCt9NTieEa2A.png" /></figure><p>In various scenarios, it is necessary for GPT-3 to generate informative responses to user inquiries. This can include situations such as a chatbot for customer service that needs to provide solutions to frequently asked questions. Although GPT models have gained extensive knowledge during their training, there is often a need to incorporate and utilize a vast collection of specialized information.</p><p>In this tutorial, we offer a notebook to follow and a comprehensive explanation of how to provide this specialized information to LLMs (Large Language Models ) such as text-davinci-003 from OpenAI.</p><p>(The core of this tutorial is based on the OpenAI cookbook example <a href="https://github.com/openai/openai-cookbook/blob/main/examples/Question_answering_using_embeddings.ipynb">here</a>. We are just changing the information source and offering an alternative way of creating embeddings)</p><p>First, we need to install the dependencies using pip, we don’t provide here the installment part directly since this is somewhat of an advanced tutorial. The modules we need are; numpy, spacy, pandas, sentence_transformers, PyPDF2, and tiktoken.</p><h4>Load NLP Module</h4><p>First, we start by loading the NLP module we need from spacy, later on, this one is used for dividing the context into sentences.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/243/1*0rbWmMjfv822ZTq2Wc3hVQ.png" /></figure><h4>Extract Text</h4><p>We have 2 ways of extracting text from PDFs here, the first one is a sentence-by-sentence approach and the second one is page-by-page.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/390/1*g5bSQ3ilUpiobI27bNIcvA.png" /><figcaption>Sentence by Sentence Extraction</figcaption></figure><p>Above we also use another NLP module called spacy to extract sentences, however explaining this part in detail is not the main concern of this tutorial.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/564/1*bJADuvFZ_sMuaPLIYVe0HA.png" /><figcaption>Page by Page Extraction</figcaption></figure><p>This time we’ll use the page-by-page approach, when the tail is checked we see that the text is extracted and is aligning with our page numbers ( you can use whatever pdf you want, no PDFs will be provided here )</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/375/1*ZYqyyGbT2xqReLFBBpmw_g.png" /><figcaption>Data Tail</figcaption></figure><h4>Embedding Extraction</h4><p>In machine learning, embedding refers to a process of representing data, typically text or images, as numerical vectors in a high-dimensional space. This transformation is used to encode features of the data in a way that a machine learning model can effectively process and analyze.</p><p>For instance, word embeddings are a popular technique for representing words in natural language processing tasks. In this method, words are transformed into a high-dimensional vector, such that similar words are located close to each other in the vector space.</p><p>We first need to import the modules we need.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/180/1*g2z7U63lcshchX_BxnxLRA.png" /><figcaption>Imports</figcaption></figure><p>Then we can proceed to try our first embedding approach, this way we turn each of the pages into embeddings using OpenAI embedding API, one problem with this one is, no matter how good is the OpenAI models, rate-limiting makes it pretty hard to use. We had to put in a 5-second sleep here, and for 96 pages it takes way more than it’s supposed to. Finally, we return a dictionary with embeddings and ids.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/698/1*LxIiTgE78VIdnwUuXlQ_vg.png" /><figcaption>OpenAI Embedding Extraction</figcaption></figure><p>Another way of extracting such features is using open-source language models, here we use an example from hugginface. This approach is faster and free but the problem here is we need to switch to another model if we want to use our system with another language.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/576/1*BZ_RbVoVc3UOixtpyd28aw.png" /><figcaption>HF Embedding Extraction</figcaption></figure><p>After these steps are handled we should have our dictionaries in our hands.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/479/1*PSeHqiGsnKn_R8UKXdS2QA.png" /><figcaption>Embeddings</figcaption></figure><h4>Vector Similarity</h4><p>The next step is to create functions so we can compare incoming queries against the embeddings we already created before so we can use the most relevant parts to create our prompts.</p><p>We use the dot product as our similarity metric here. The dot product is a simple method that calculates the product of the magnitudes of two vectors and the cosine of the angle between them. It ranges from -1 to 1, with 1 indicating the highest similarity, -1 indicating the highest dissimilarity, and 0 indicating no correlation. The dot product is computationally efficient but can be sensitive to the length of the vectors.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/791/1*ZZtHHdSmEAkKPZ6dL5TfIA.png" /><figcaption>Similarity Search</figcaption></figure><p>Above we see how the functions for similarity search are defined and how we use them to perform a similarity search to get the most relevant parts.</p><h4>Prompt Preparation</h4><p>The next thing to do is use it to define some constants and utilize tiktoken. tiktoken is the tokenizer used in OpenAI products therefore we can use it to measure the length of our prompt in terms of tokens.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/350/1*VCvsmluXWoUbXWiXZQxEjA.png" /><figcaption>Tiktoken</figcaption></figure><p>Below we construct a prompt, basically what we do here is fill in the chosen sections part based on their similarity to our query. Our stop condition is when the chosen_sections_len is greater than MAX_SECTION_LEN. Finally, we inject the parts we selected into a predefined prompt and form up our prompts.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/828/1*d6x-YxEhN7YwweQLU5ZXqQ.png" /><figcaption>Construct Prompt</figcaption></figure><p>Below see how to use this function and what a finalized prompt looks like.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/835/1*Fx5HxNOnbp3k1S8Xs3R98Q.png" /><figcaption>Use Prompt Constructor</figcaption></figure><h4>Making Knowledge-Injected Queries</h4><p>Then, we create a function to ask questions to OpenAI DaVinci models using the context we just extracted and formed as a prompt.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/833/1*ioVjG_qO8wgbl5zIlbqfcA.png" /><figcaption>Ask OpenAI</figcaption></figure><p>Finally, we can use this function to ask questions about the information we provided using a PDF file. See the example below, we ask about the ingredients and the preparation process of a golden lentil soup and it explains it the way it was provided in the PDF we gave to it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/835/1*UuvoCftBrTWRtCnyl3oRVA.png" /><figcaption>Final Answer</figcaption></figure><p>Okay, that’s pretty much it. Thank you very much for reading and following along, friends. If you want to access content like this and spend time with curious, intelligent, and hardworking colleagues, we also welcome you to our Discord server. 🚀 <a href="https://discord.com/invite/e5US6w87">Link</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=75b2ed01cbe5" width="1" height="1" alt=""><hr><p><a href="https://medium.com/geeks-of-data/using-pdf-documents-as-knowledge-bases-and-making-q-a-with-gpt-75b2ed01cbe5">Using PDF Documents as Knowledge Bases and Making Q&amp;A with GPT</a> was originally published in <a href="https://medium.com/geeks-of-data">Geeks-of-Data</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[knowledge-gpt — a Library for Creating Specialized ChatGPT Bots with 2 Lines of Code]]></title>
            <link>https://medium.com/geeks-of-data/knowledge-gpt-a-library-for-creating-specialized-chatgpt-bots-with-2-lines-of-code-4d1b97f2930d?source=rss-a015bb215389------2</link>
            <guid isPermaLink="false">https://medium.com/p/4d1b97f2930d</guid>
            <category><![CDATA[chatbots]]></category>
            <category><![CDATA[nlp]]></category>
            <category><![CDATA[chatgpt]]></category>
            <category><![CDATA[gpt-4]]></category>
            <category><![CDATA[gpt-3]]></category>
            <dc:creator><![CDATA[Eren Akbulut]]></dc:creator>
            <pubDate>Sun, 19 Mar 2023 10:46:03 GMT</pubDate>
            <atom:updated>2023-03-19T10:46:03.122Z</atom:updated>
            <content:encoded><![CDATA[<h3>knowledge-gpt — a Library for Creating Specialized ChatGPT Bots with 2 Lines of Code</h3><p><em>Before starting the article, I want to mention our “Geeks of Data” Discord channel. You can join and say hello, and exchange ideas about data science, engineering, or analysis fields.🚀 </em><a href="https://discord.com/invite/e5US6w87"><em>Link</em></a></p><p>The Knowledge-gpt library is a valuable and user-friendly tool that can process diverse information sources and generate meaningful indexes to facilitate accurate and confident query responses about the source documents. It basically allows you to create your specialized GPT bot with a few lines of code.</p><p>This library employs multiple open-source models to support various languages and APIs to access OpenAI services. Currently, it can retrieve information by scraping websites, using YouTube transcripts as an information source, extracting text from raw audio to use as an information source, and querying documents such as pdf, ppt, and doc files.</p><p>Today we’ll walk you through its website scraping example.</p><p>The first thing to do is to install our library PyPI package provided <a href="https://pypi.org/project/knowledgegpt/">here</a>. Installing setups is as easy as running this command:</p><blockquote>pip install knowledgegpt</blockquote><p>Afterward, we need to import our OpenAI key and specify our secret key.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/277/1*1tcvfrPwznAbuupBT-2_UQ.png" /><figcaption>Import Secret Key</figcaption></figure><p>Then we can import the needed class for information extraction from a website. ( Currently doesn’t have wide coverage, mostly tested with Wikipedia. )</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/554/1*gg03s7zzTXkh7Bo_4QMIkQ.png" /><figcaption>Import Lib</figcaption></figure><p>We can then create an instance from our class and start making API calls.</p><p>Above we see how to use our library, we just give a path/URL, select our extractor type, model language, and answering engine using the flag “is_turbo” (when is set to true uses chatgpt engine otherwise uses text-davinci-003). Then we make a call using the extract method, it takes in our query and a max_tokens limit, it first calculates embedding and creates indexes then sends a request to the selected engine.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/739/1*4BmoJD6_XDV3R8NMGM3_qw.png" /><figcaption>API Call</figcaption></figure><p>The output from the cell above is shown below, it has some constant prompting parts inside as well as the Context we passed in. The length of the Context is dictated by the parameter “max_tokens”.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DKj4y6BqHEHRmfEyp-4EFw.png" /><figcaption>Prompt Context</figcaption></figure><p>Afterward, we should be able to run the extract method over and over without calculating indexes again, it’ll just use the precomputed ones and will take only seconds to answer questions.</p><p>When the messages variable is checked ( when using turbo also known as the chatgpt model ) we see our chat history.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*R4w8PYtdcnrkVZa11tPGOA.png" /><figcaption>More Messages</figcaption></figure><p>Alright, everyone, that’s pretty much how one can use knowledgegpt to create specialized bots for their use cases. You can find more examples in our <a href="https://github.com/geeks-of-data/knowledge-gpt">GitHub repository</a> in the examples section.</p><p><em>Thank you very much for reading and following along, friends. If you want to access content like this and spend time with curious, intelligent, and hardworking colleagues, we also welcome you to our Discord server. 🚀 </em><a href="https://discord.com/invite/e5US6w87"><em>Link</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4d1b97f2930d" width="1" height="1" alt=""><hr><p><a href="https://medium.com/geeks-of-data/knowledge-gpt-a-library-for-creating-specialized-chatgpt-bots-with-2-lines-of-code-4d1b97f2930d">knowledge-gpt — a Library for Creating Specialized ChatGPT Bots with 2 Lines of Code</a> was originally published in <a href="https://medium.com/geeks-of-data">Geeks-of-Data</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Solving the famous “House Prices” Competition from Kaggle using SQL Queries on MindsDB]]></title>
            <link>https://medium.com/geeks-of-data/solving-the-famous-house-prices-competition-from-kaggle-using-sql-queries-on-mindsdb-4b4832b6bff0?source=rss-a015bb215389------2</link>
            <guid isPermaLink="false">https://medium.com/p/4b4832b6bff0</guid>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[price-prediction]]></category>
            <category><![CDATA[mindsdb]]></category>
            <category><![CDATA[database]]></category>
            <category><![CDATA[data-science]]></category>
            <dc:creator><![CDATA[Eren Akbulut]]></dc:creator>
            <pubDate>Sat, 11 Mar 2023 06:07:44 GMT</pubDate>
            <atom:updated>2023-03-11T06:07:44.677Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WM2fIyLlqyVurxaNl0J63g.png" /></figure><p><em>Before starting the article, I want to mention our “Geeks of Data” Discord channel. You can join and say hello, and exchange ideas about data science, engineering, or analysis fields.🚀 </em><a href="https://discord.com/invite/e5US6w87"><em>Link</em></a></p><p>In this tutorial, we’ll show how can you have a model ready to use to make predictions on house prices trained on the “House Prices — Advanced Regression Techniques” competition from <a href="https://www.kaggle.com/competitions/house-prices-advanced-regression-techniques/overview">Kaggle</a>.</p><p>Throughout this process, we’ll use MindsDB. MindsDB allows you to leverage your database’s valuable data to make predictions faster by integrating machine learning directly into the database. You can build, train, optimize, and deploy ML models without using additional platforms. Simply query your data to get forecasts/predictions. This tutorial doesn’t cover the installation part but you can use this l<a href="https://docs.mindsdb.com/quickstart">ink</a> to learn how to start using MindsDB.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*kVnX87zUBfiYY7vmiSx-lw.png" /><figcaption>House Prices — Advanced Regression Techniques Banner from <a href="https://www.kaggle.com/competitions/house-prices-advanced-regression-techniques/overview">Kaggle</a></figcaption></figure><p>We are going to use the training data from the competition <a href="https://www.kaggle.com/competitions/house-prices-advanced-regression-techniques/data">page</a>, to summarize the goal of the project, let’s say you ask a home buyer about their ideal home, they likely won’t mention factors like the basement ceiling height or the distance from a railroad. However, this dataset from a playground competition demonstrates that many other factors besides bedroom count or white-picket fences impact price negotiations. The dataset consists of 79 features that describe nearly every aspect of residential homes in Ames, Iowa. The challenge is to predict the final price of each home using this information. These features consist of information like <em>MSSubClass</em> (The building class), <em>LotArea</em>, <em>Street</em>, Alley, etc.</p><p>To begin using our data it’s enough to upload it as a file to our MindsDB instance, if we had our data on another platform we could very well integrate it using MindsDB’s data-adding features.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pHQaUYSEasTignbWZYifSw.png" /><figcaption>3rd Party Import</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/891/1*G4rm-meFBBtgIkOYCIaDjg.png" /><figcaption>File Upload</figcaption></figure><p>Once the file upload is done we can access our data by merely using an SQL query. Since we uploaded it as a file it’s automatically placed under the “files” directory.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/411/1*i4V1y1auXa5iCrHBx9__nQ.png" /><figcaption>How to inspect our data</figcaption></figure><p>Training a model is equally trivial, yes you heard it right “training a model is as trivial as running a basic SELECT query”. :)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/375/1*IZQwDAKGioYecUY1XKpokg.png" /><figcaption>Train the Model</figcaption></figure><p>We use a special query called CREATE MODEL but CREATE PREDICTOR would also work for the same purpose, here what we’re doing is creating a model called “house_price_predictor” under the directory “mindsdb”, then we show the file that we want to train our model on and finally we specify what feature to predict, in our case it’s “SalePrice”.</p><p>We can use several other queries to check what models we have and we can get a detailed overview of the properties they carry.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/185/1*eA5gUWcfT9cGKJgXP6eKaQ.png" /><figcaption>Select Models</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/342/1*XC3Pg2Q4PTb4YkKm-2GmAA.png" /><figcaption>Describe a Model</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*V3JYnT94pdXFy0WXi-nQlg.png" /><figcaption>Description of Our Model</figcaption></figure><p>As can be seen above we have an r2 score of .912 for this model, it also gives a score to each column based on their importance to the final results.</p><p>Finally, to get predictions we can basically query our model and see the result.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/312/1*F2zQRg2LeFldpxIY8SCMCA.png" /><figcaption>Prediction Query</figcaption></figure><p>Above is an example query and isn’t too different than what one would expect, 2 special things to pay attention to here are;</p><p>We can query our model to get a prediction and the reasoning behind it using a syntax like</p><blockquote>SELECT [target], [target_explain]</blockquote><p>Another important aspect is to query our model directly rather than querying the data table we initially introduced.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*clnEqUBqnSXsUlV5y_BagA.png" /><figcaption>Prediction Result</figcaption></figure><p>As can be seen above our prediction looks reasonable and explains how it came to this conclusion.</p><p>Thank you very much for reading and following along, friends. If you want to access content like this and spend time with curious, intelligent, and hardworking colleagues, we also welcome you to our Discord server. 🚀 <a href="https://discord.com/invite/e5US6w87">Link</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4b4832b6bff0" width="1" height="1" alt=""><hr><p><a href="https://medium.com/geeks-of-data/solving-the-famous-house-prices-competition-from-kaggle-using-sql-queries-on-mindsdb-4b4832b6bff0">Solving the famous “House Prices” Competition from Kaggle using SQL Queries on MindsDB</a> was originally published in <a href="https://medium.com/geeks-of-data">Geeks-of-Data</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[MindsDB — Makine Öğrenmesi Problemlerini SQL Sorguları Yazarak Çözmek]]></title>
            <link>https://medium.com/geeks-of-data/mindsdb-makine-%C3%B6%C4%9Frenmesi-problemlerini-sql-sorgular%C4%B1-yazarak-%C3%A7%C3%B6zmek-8eea35be3810?source=rss-a015bb215389------2</link>
            <guid isPermaLink="false">https://medium.com/p/8eea35be3810</guid>
            <category><![CDATA[mindsdb]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[database]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[Eren Akbulut]]></dc:creator>
            <pubDate>Sat, 11 Mar 2023 06:07:32 GMT</pubDate>
            <atom:updated>2023-03-11T06:07:32.631Z</atom:updated>
            <content:encoded><![CDATA[<h3>MindsDB — Makine Öğrenmesi Problemlerini SQL Sorguları Yazarak Çözmek</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WM2fIyLlqyVurxaNl0J63g.png" /><figcaption>MindsDB Logo</figcaption></figure><p><em>Yazıya başlamadan önce “</em><strong><em>Geeks of Data</em></strong><em>” Discord kanalımızdan bahsetmek istiyorum, katılıp selam verebilir, veri bilimi, mühendisliği veya analizi alanlarında fikir alışverişi yapabilirsiniz. </em><a href="https://discord.gg/e5US6w87"><em>Link</em></a></p><p><a href="https://mindsdb.com/"><strong><em>MindsDB</em></strong></a>, çok sayıda veri kaynağına bağlanıp veri temini yapabilen, otomatik bir makine öğrenimi aracıdır ve veritabanınızdaki verileri kullanarak tahminler yapmanıza yardımcı olur. Bu araç, makine öğrenimi modelleri oluşturma, eğitme ve optimize etme süreçlerini veritabanına entegre eder, böylece tahminlerinizi oluşturmak için verileri başka bir platforma aktarmanıza gerek kalmaz.</p><p>Bütün bu sürecin otomatik ilerliyor olması işletmenizin verimliliğini artırırken, aynı zamanda zaman ve maliyet tasarrufu sağlar. Ayrıca, kullanıcı dostu arayüzü sayesinde, alanında uzman olmayan kişiler bile verilerini daha etkili bir şekilde kullanabilir.</p><p><a href="https://mindsdb.com/"><strong><em>MindsDB</em></strong></a>, birçok sektörde farklı kullanım alanlarına sahiptir. Örneğin, finansal tahminler yapmak, tedarik zinciri yönetimi, pazarlama analizi ve daha pek çok konuda kullanılabilir. Bu araç, şirketlerin daha akıllıca kararlar almalarına yardımcı olur ve rekabet avantajı elde etmelerini sağlar.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oFxMKPD_thNI4iN-msrJLg.png" /><figcaption><strong>SQL Databases with AI, pop art, futuristic, HD — ar 4:2 (Mid Journey)</strong></figcaption></figure><p>Yukarıda anlatılan faydaları sağlamak için <strong><em>MindsDB</em></strong>’nin “AI Tables” adında bir ürünü kullanmamız gereklidir. Kısaca özetlemek gerekirse AI Tables bir veritabanında depolanan makine öğrenimi modelleridir ve verilerinize dayalı tahminler yapmanıza yardımcı olurlar. Bu sanal tablolar, zaman serisi, regresyon ve sınıflandırma tahminlerini veritabanı içinde gerçekleştirmenizi sağlar ve basit SQL ifadeleriyle AI Tablolarını sorgulayarak neredeyse anında çıktı elde edebilirsiniz.</p><p><strong><em>MindsDB</em></strong>, AI Tabloları kavramını kullanarak veritabanlarına makine öğrenimini getirir.</p><p>AI Tabloları, bir veritabanında depolanan makine öğrenimi modelleridir ve verilerinize dayalı tahminler yapmanıza yardımcı olurlar. Bu sanal tablolar, zaman serisi, regresyon ve sınıflandırma tahminlerini veritabanı içinde gerçekleştirmenizi sağlar ve basit SQL ifadeleriyle AI Tablolarını sorgulayarak neredeyse anında çıktı elde edebilirsiniz.</p><p>Yani, AI Tabloları sayesinde verilerinize dayalı tahminleri hızlı ve kolay bir şekilde veritabanınızda gerçekleştirebilirsiniz. Bu da işletmenizin verimliliğini artırırken, zaman ve maliyet tasarrufu sağlar. Ayrıca, AI Tabloları kullanımı kolaydır ve herkes tarafından kullanılabilir.</p><p>Kendi hazırladıkları tutorial anlaşılır ve güzel olduğu için burada tekrar anlatmayacağım, kurulumu<a href="https://docs.mindsdb.com/quickstart"> buradan</a> yapıp MindsDB’yi kullanabilirsiniz, ben bu yazıda bedava cloud hesabı üzerinden sundukları MindsDB arayüzünü kullanarak örnek çalışma yapacağım.</p><p>İlk önce üzerine çalışmak için bir veri setine ihtiyacımız var. <a href="https://www.kaggle.com/competitions/titanic/overview">Kaggle</a> üzerinden Titanic veri setini indirip MindsDB’ye yüklemeye başlayabiliriz. MindsDB’ye veri yüklemenin temel 2 yolu var, mevcut sistemler üzerinden doğrudan yüklemek veya doğrudan dosya yüklemek.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pHQaUYSEasTignbWZYifSw.png" /><figcaption>Sistemler Üzerinden Yükleme</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/891/1*G4rm-meFBBtgIkOYCIaDjg.png" /><figcaption>Doğrudan Dosya Yükleme</figcaption></figure><p>Verileri yükledikten sonra aşağıdaki gibi basit bir SQL syntax’li sorguyla veriye göz atmaya başlayabiliriz. Verimiz (dosya yüklediğimiz için) files altında yüklerken verdiğimiz isimde bulunacak. Ben “titanic_train” adını kullanmıştım.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/749/1*NbXM854GSpmZ5q95hyjebg.png" /><figcaption>Veriyi İnceleme Sorgusu</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aNCFlE25td55qLPKak0O4g.png" /><figcaption>Sorgu Sonuçları</figcaption></figure><p>Hemen ardından tek bir sorguyla modelimizi eğitmeye başlayabiliriz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/385/1*gKhm54uF7AXFru4owrrVew.png" /><figcaption>Train Sorgusu</figcaption></figure><p>MindsDB’de model eğitmek için CREATE MODEL yada CREATE PREDICTOR tarzında bir syntax kullanılıyor. Ardından istediğimiz dosya dizinini ve hangi dosyayı hedefleyeceğimizi belirtiyoruz, son olarak neyi tahmin etmek istediğimizi belirterek modeli eğitmeye başlamış oluyoruz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/184/1*8OYFulMmT1vYQ15hApZqWA.png" /><figcaption>Model Secme Sorgusu</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Tj0E8dvwb03pdgRl0nFN3Q.png" /><figcaption>Modellerimiz</figcaption></figure><p>Modellerimi inceleyerek her bir modelin bütün özelliklerini gözlemleyebilir, performansını ölçebiliriz. Bizim modelimiz 0.794 Accuracy sonucu vermiş.</p><p>Gerçek verilerle tahmin yapmak için de özel bir sorgu komutu çalıştırmamız gerekiyor. Aslına bakarsanız normal bir SQL tablosu üzerinde sorgu çalıştırmaktan farkı yokmuş gibi gözükse de burada doğrudan modelimiz üzerinde sorgu çalıştırıyoruz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/295/1*X3aQKxEcqdoUkKPmjK3bZA.png" /><figcaption>Model Soru</figcaption></figure><p>Cinsiyet, kardeş sayısı, ebeveyn sayısı, gemiye binip binmeme durumu, yaş, yolcu sınıfı ve ücret gibi bilgileri verip yaptığımız sorgu sonucunda Survived sınıfı ile ilgili bir tahmine ve bu tahminin açıklamasına erişebiliyoruz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/966/1*1kuZVAUU7M20LGm8GXbUZw.png" /><figcaption>Prediction 1</figcaption></figure><p>Geri kalan bütün veriler aynıyken cinsiyeti değiştirince tahmin 0&#39;dan 1&#39;e yani hayatta kaldı olarak değişiyor.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vdBFAKjAe-VZ8e1OajwHhw.png" /></figure><p>Sonuç olarak <a href="https://mindsdb.com/"><strong><em>MindsDB</em></strong></a><strong><em>’ </em></strong>yi kullanarak basit komutlarla da Kaggle’dan aldığımız veri seti üzerinde kolaylıkla çalışmalar yapabildik.</p><p>Evet arkadaşlar okuyup eşlik ettiğiniz için çok teşekkür ederiz, bu ve bunun gibi içeriklere ulaşmak, meraklı, zeki ve çalışkan meslektaşlarınızla zaman geçirmek isterseniz Discord sunucumuza da bekleriz. 🚀 <a href="https://discord.gg/e5US6w87">Link</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8eea35be3810" width="1" height="1" alt=""><hr><p><a href="https://medium.com/geeks-of-data/mindsdb-makine-%C3%B6%C4%9Frenmesi-problemlerini-sql-sorgular%C4%B1-yazarak-%C3%A7%C3%B6zmek-8eea35be3810">MindsDB — Makine Öğrenmesi Problemlerini SQL Sorguları Yazarak Çözmek</a> was originally published in <a href="https://medium.com/geeks-of-data">Geeks-of-Data</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Promptify-Yapay Zeka Problemlerini Büyük Dil Modelleriyle Konuşarak Çözmek]]></title>
            <link>https://medium.com/geeks-of-data/promptify-yapay-zeka-problemlerini-b%C3%BCy%C3%BCk-dil-modelleriyle-konu%C5%9Farak-%C3%A7%C3%B6zmek-cbe0a3aec92f?source=rss-a015bb215389------2</link>
            <guid isPermaLink="false">https://medium.com/p/cbe0a3aec92f</guid>
            <category><![CDATA[language-model]]></category>
            <category><![CDATA[prompt-engineering]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[classification]]></category>
            <category><![CDATA[naturallanguageprocessing]]></category>
            <dc:creator><![CDATA[Eren Akbulut]]></dc:creator>
            <pubDate>Thu, 09 Mar 2023 12:40:43 GMT</pubDate>
            <atom:updated>2023-03-09T12:40:43.762Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XJTGOWA-ccVjKX6xnSwLmQ.png" /></figure><p><em>Yazıya başlamadan önce “</em><strong><em>Geeks of Data</em></strong><em>” Discord kanalımızdan bahsetmek istiyorum, katılıp selam verebilir, veri bilimi, mühendisliği veya analizi alanlarında fikir alışverişi yapabilirsiniz. </em><a href="https://discord.gg/e5US6w87"><em>Link</em></a></p><p>LLM’ler (Large Language Model) yani büyük dil modelleri transformer mimarisinin “Attention is all you need” isimli makale ile hayatımıza girdi ve bütün dünyayı etkisi altına aldı. Bunun en gözle görülür sebeplerinden birisi insan benzeri dil anlama ve üretme yeteneklerine sahip olması ve/veya bize böyle hissettirmesidir. Arkasında yatan sebep her ne olursa olsun, bu dahiyane yaklaşım önümüzdeki on yıllarda dönüp baktığımız zaman teknolojinin evrimindeki en büyük kırılmalardan birisi olarak anılacak.</p><p>Herkesin gözünün önünde büyüyen bütün büyük teknolojiler gibi LLM’ler de firmaların en iyisini üretme konusunda çok büyük bir yarışa girmesine sebep oldu, özellikle kamuoyunda yarattığı etki ve erişilebilirliği ile OpenAI firmasına ait modeller bu alanda en çok bilinen ürünlerdir. 175 milyar parametreye sahip GPT-3.5 OpenAI’ın çeşitli versiyonlarını programlama bilen herkesin rahatlıkla kullanabileceği şekilde sunduğu modellerden birisi, okuduğunuz yazı da bu modellerle ilgili olacak.</p><p>Bahsedilen LLM’ler ile etkileşimde bulunmanın en temel yolu “prompting” yani bir yazı girdisi verip modelin verilen yazıyı en mantıklı şekilde tamamlamasına izin vermekten ibaret, bu tür modellerin gelişimine başlangıçtan beri tanıklık etmiş kişiler için bu süreç daha kolay ve doğalken ilk kez uğraşan insanlar için yorucu olabilir, ben her iki durumda da <a href="https://learnprompting.org/">https://learnprompting.org/</a> adresinden modern LLM’ler için prompting nasıl yapılır öğrenmek gerektiğine inanıyorum. Yazının kalanında belirtmeden kullanacağımız “chain-of-thought” veya “knowledge base” gibi bazı tekniklerin neden ve nasıl kullanıldığını anlamanızı kolaylaştıracaktır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/708/1*WokGMFFf0XzcdYvqWUAFlQ.png" /><figcaption>Promptify Logo</figcaption></figure><p>Bugün üzerinde durup örneklerini paylaşacağımız LLM kullanım yöntemi, normalde çeşitli yapay zeka modelleri ve daha geniş eğitim verisi kullanarak çözdüğümüz problemleri doğal dil modeline basit örnekler vererek tek seferde çözdürme denemeleri üzerinden ilerleyecek, bunları yaparken de açık kaynak olarak geliştirilen <a href="https://github.com/promptslab/Promptify"><strong><em>Promptify</em></strong></a> kütüphanesinden yararlanacağız.</p><p><strong><em>Promptify</em></strong>, Prompt Mühendisliği, LLM’lerle NLP Problemlerini Çözmek için çeşitli prompting şablonları, örnekler ve büyük modellerin wrapper’larını yapısında bulunduran bir kütüphane ve açık kaynak olarak bu <a href="https://medium.com/r?url=https%3A%2F%2Fgithub.com%2Fpromptslab%2FPromptify">Github</a> adresinde mevcut.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*o04LXu76MFzDnoBmepbd1g.png" /><figcaption><strong>binary classification, futuristic, LLM — ar 4:2 (midjourney)</strong></figcaption></figure><p>İlk örneğimiz, her veri bilimcisinin çokça karşılaşıp çözdüğü tarzda bir binary classification problemi, her ne kadar birçok senaryoda artık çözülmesi oldukça kolay bir problem türü olsa da LLM kullanarak konuşarak istediğimiz tarzda yapısal çözüm üretebilmek başka bir sürü farklı olasılığın kapısını aralıyor.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/471/1*pwv7OfM6Mr6piXTdjD1Zhw.png" /><figcaption>Notebook Giriş</figcaption></figure><p>Bu <a href="https://github.com/promptslab/Promptify">linkten</a> kütüphaneyi kurup repository’yi de kopyaladıktan sonra, classification.ipynb dosyası ile başlayabiliriz, 2. hücrede istenen anahtar OpenAI API erişim anahtarınız, <a href="https://help.openai.com/en/articles/4936850-where-do-i-find-my-secret-api-key">bu şekilde </a>erişebilirsiniz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SNRGTHejYYCVl2LyqjKL6w.png" /><figcaption>Örnek Çiftler</figcaption></figure><p>Örnek verileri incelediğimizde bunların temelde birer hedef cümle ve bu cümlelerle eşleşen birer etiketten ibaret olduğunu görüyoruz. <strong><em>Promptify</em></strong> bu örnekleri düzgün bir komut kombinasyonu ile modele iletmemizi sağlayan altyapıyı bize sağlıyor. Bunu jinja yazı sablonlarıyla sağlıyoruz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/569/1*xwITidPG-Jsy_jK-GIgliQ.png" /><figcaption>Jinja Şablonu</figcaption></figure><p>Yukaridaki prompt şablonu sırasıyla LLM’in amacını tanımlıyor, ardından çıktı için olabilecek etiketleri belirtiyor, çıktının ne formatta olması gerektiğini kesinleştirip örnek-etiket çiftlerini de sunduktan sonra verilen girdiyi yollayıp bütün bunlara göre bir çıktı istediğimizi anlatıyor. Bunu <strong><em>Promptify’ın </em></strong>prompter methodunu kullanarak yapıyoruz, ve sonuç aşağıdaki gibi oluyor.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tylcKsgWKj6DShZlY203-Q.png" /><figcaption>Prompter</figcaption></figure><p>Son olarak fit methodunu kullarak oluşturduğumuz promptu OpenAI’ya gönderip yanıt bekliyoruz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/431/1*6bu5HZybDbM_p2jzVmZqwg.png" /><figcaption>Model fit etme ve sonuclar</figcaption></figure><p>Görüldüğü üzere hedef metnimiz olan “Amazing customer service” için umulduğu üzere positive çıktısı aldık üstelik bunu <strong><em>Promtify</em></strong>’ın diğer yaklaşımlardan ayrıştığı nokta olan yapısal sonuç verme özelliklerini kullarak yapabildik.</p><p>Aynı dosyadaki bir başka örnek aynı problemi daha geniş bir etiket yelpazesi arasından seçim yapmamıza olanak sağlayan bir multiclass classification örneği içeriyor.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/375/1*bMnAJO6DZzNgCRqgxBekMw.png" /><figcaption>Multiclass örneklerin yüklenmesi</figcaption></figure><p>Yine örnek verileri yükleyip sonra etiketlerimizi inceliyoruz. Örnekler dosyasından başka bir bilgiye ihtiyacımız yok bu sefer ön konuşma kısmını çok daha kısa tutacağız.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sZH9SUQ-tbeY1X3KxSXEyg.png" /><figcaption>LLM’e gidecek prompt hazırlanıyor</figcaption></figure><p>Örneklerimizi modelin anlayacağı tarzda bir promta çevirdikten sonra fit methodu ile LLM’e gönderiyoruz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/454/1*STmSVN0U_yxcLlqdqYSq4w.png" /><figcaption>Sonuçlar</figcaption></figure><p>Aynı prompt için bu sefer sonuç “joy” olarak karşımıza çıkıyor, kaldı ki bunun da doğru olduğu ortada ve yine sonuçlar istediğimiz yapısal formatta çıkıyor.</p><p>Buraya kadar okuduğunuz için çok teşekkürler arkadaşlar, bu projeye “<strong><em>Geeks of Data</em></strong>” Discord kanalımızda da ilgilenen arkadaşlarla aktif bir şekilde katkıda bulunuyoruz(proje bize ait olmasa da). İlgilendiyseniz gelip geliştirmeye hep birlikte devam edebilirsiniz. 🚀 <a href="https://discord.gg/e5US6w87">Link</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cbe0a3aec92f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/geeks-of-data/promptify-yapay-zeka-problemlerini-b%C3%BCy%C3%BCk-dil-modelleriyle-konu%C5%9Farak-%C3%A7%C3%B6zmek-cbe0a3aec92f">Promptify-Yapay Zeka Problemlerini Büyük Dil Modelleriyle Konuşarak Çözmek</a> was originally published in <a href="https://medium.com/geeks-of-data">Geeks-of-Data</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building a Grammar Corrector App with React, Python, Flask, Tesseract, and Gramformer]]></title>
            <link>https://javascript.plainenglish.io/building-a-grammar-corrector-app-with-react-python-flask-tesseract-and-gramformer-13883f37b0ea?source=rss-a015bb215389------2</link>
            <guid isPermaLink="false">https://medium.com/p/13883f37b0ea</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[gramformer]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Eren Akbulut]]></dc:creator>
            <pubDate>Thu, 24 Jun 2021 19:35:19 GMT</pubDate>
            <atom:updated>2022-06-28T09:13:16.639Z</atom:updated>
            <content:encoded><![CDATA[<h3>Building a Grammar Corrector App with React, Python, Flask, Tesseract, and Gramformer…</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*GAD8qDBPg1R02pxe" /><figcaption>Photo by <a href="https://unsplash.com/@polarmermaid?utm_source=medium&amp;utm_medium=referral">Anne Nygård</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>June 24th, 2021</p><p>Hello everyone! Today, I’ll try to walk you through an application that would allow you to take an image file, upload it to a React frontend, apply OyCR (Optical Character Recognition) on it, send it to the Flask backend, and then the “gramformer” library will check and correct the grammar then we’ll create a new PDF with the corrected text.</p><p>You can find the source code <a href="https://github.com/eren23/react-python-ocr-gramformer">here</a>, I’ll not explain React and OCR part here again. You can find it in a former post of mine <a href="https://javascript.plainenglish.io/full-stack-sentiment-analysis-application-with-react-flask-and-tesseract-ea2de9200169">here</a>. If you are interested, you can also follow along for React OCR — Sentiment Analysis application in the link I provided.</p><p>To be able to use “gramformer”, you can go the GitHub repo from the link <a href="https://github.com/PrithivirajDamodaran/Gramformer">here</a> and follow the instructions. “Gramformer” is dependent on “pytorch”, you’ll also need to install it in advance. If you don’t already have it, use the <a href="https://pytorch.org/get-started/locally/">link</a> and install it.</p><p>After everything is ready, we can start working on our application.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/666/0*Z3tYAYT_R25zSD4P.png" /></figure><p>We first set our manual seed to the torch then we initiate our “gramformer” class with corrector settings and GPU disabled, you can also enable it if you like but will work just fine without enabling it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/374/0*dr3fI2Nufpt5Dz_O.png" /></figure><p>Then on a different folder, in my case that one was server.py, you should first import dependencies and then we can create our server. In this particular example, our “/graformer” endpoint will accept both “GET” and “POST” requests yet “GET” requests are not particularly important here. In our payload we can if there is an “ocr” field in the request, if so we do grammar correction and add the corrected ones from the corrected list to “to_return” string. Other than Flask, the only dependency we need is “fpdf” and you can get it <a href="https://pypi.org/project/fpdf/">here</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/512/0*GMFNGsXL453G_fg6.png" /></figure><p>Then we create our “pdf” object, add a page into it, add our title. Handling longer strings is a bit trickier, I’ve chosen counting each character and then put a new line into the pdf after a certain amount of characters, to do that I created a list with a member for each line then looped over the list and created the PDF. I also returned the corrected text as well as a 200 status code.</p><p>Results: The input image I used is like this one below.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*6GSPXuEZHqHel2qt.png" /></figure><p>The output we get out of it is this one. The funny part is I realized that my hardcoded PDF title is also shit and could use a “gramformer” correction. :D</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/529/0*KdKdBPuED0NpvuvP.png" /></figure><p>Either way, the result looked pretty decent to me, especially for such a low amount of effort. I hope that it is really useful for you too.</p><p>Until we see each other again, take care of yourselves and keep learning. :)</p><p><em>Originally published at </em><a href="https://blog.akbuluteren.com/blog/grammar-corrector-react-flask-tesseract-"><em>https://blog.akbuluteren.com</em></a><em>.</em></p><p><em>More content at </em><a href="http://plainenglish.io/"><strong><em>plainenglish.io</em></strong></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=13883f37b0ea" width="1" height="1" alt=""><hr><p><a href="https://javascript.plainenglish.io/building-a-grammar-corrector-app-with-react-python-flask-tesseract-and-gramformer-13883f37b0ea">Building a Grammar Corrector App with React, Python, Flask, Tesseract, and Gramformer</a> was originally published in <a href="https://javascript.plainenglish.io">JavaScript in Plain English</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Morse Code Translator Detect Blinks — Python, OpenCV, MediaPipe]]></title>
            <link>https://medium.com/analytics-vidhya/morse-code-translator-with-python-opencv-and-mediapipe-886e3bd973c5?source=rss-a015bb215389------2</link>
            <guid isPermaLink="false">https://medium.com/p/886e3bd973c5</guid>
            <category><![CDATA[python]]></category>
            <category><![CDATA[opencv]]></category>
            <category><![CDATA[mediapipe]]></category>
            <category><![CDATA[computer-vision]]></category>
            <category><![CDATA[machine-learning]]></category>
            <dc:creator><![CDATA[Eren Akbulut]]></dc:creator>
            <pubDate>Tue, 15 Jun 2021 20:41:54 GMT</pubDate>
            <atom:updated>2021-06-21T12:23:43.541Z</atom:updated>
            <content:encoded><![CDATA[<p>June 15th, 2021</p><p>Hello everyone,</p><p>It has been a while since the last time I posted a tutorial, or something in general. Basically life happened and I decided not to share rather than sharing low quality content. Today, I’ll walk you through a computer vision project that takes your live video input and translates your blinks into Morse Alphabet so you can blink short and long to write messages.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wNOCRw3jApGkw9sFmM298g.gif" /></figure><p>The source code for the project is <a href="https://github.com/eren23/mediapipe--morsecode-translator">here</a>, I also used <a href="https://www.youtube.com/watch?v=V9bzew8A1tc&amp;t=141s">this</a> awesome tutorial as a boiler plate to start with, if you want to learn more about Computer Vision applications you can check the channel owner’s channel from the link I posted. So without further ado let’s dive right into it.</p><p>As for the beginning I want to explain MediaPipe library a little bit, “MediaPipe offers open source cross-platform, customizable ML solutions for live and streaming media.”, this definition is from their own <a href="https://mediapipe.dev/">website</a> and explains what you can do with that library shortly and cleanly, they offer several other solutions that can run on different platforms and I’ll explain all of them in a different post in the future. The feature that we’ll use today is called “Face Mesh”, this solution provides us a face landmark map with the most important 468 landmarks that can be seen in a human’s face. Using that map we’ll calculate the ratio between some particular points in the face and with that information we’ll detect if the person on the camera blinked or not.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*0aCYE2juG_EIaeaY.png" /><figcaption>Face Landmarks</figcaption></figure><p>In the picture above you can see the point that I mentioned earlier, with that kind of an access to the landmarks in human face you can make all sorts of detection that are related to facial expressions, another cool library that offers all of them built-in is <a href="https://github.com/TadasBaltrusaitis/OpenFace">OpenFace</a> you can also check out that library.</p><p>To be able to detect if an eye is blinked or not we use “ear” ratio which stands for “eye aspect ratio” to be able to calculate an eye’s “ear” value we need to access 6 landmarks at one’s face. You can see how “ear” is calculated and which landmarks we need from the link <a href="https://hackaday.io/project/27552-blinktotext/log/68360-eye-blink-detection-algorithms">here</a>.</p><p>Now let’s move on the coding part; first we need to do the imports that we need. I also defined a function to play around with frame size. We first define a previous time variable to detect FPS later on, then in order we define drawing object so we can draw between landmarks, we create FaceMesh object and finally we edit our drawing specs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/461/0*zpQYL0oJdaJoeiQy.png" /><figcaption>Imports and Utils</figcaption></figure><p>We then define 2 arrays to keep old ear values, 1 array to keep letters, 1 bool to keep if signal is long, 1 for keeping blinking duration, 1 for keeping non blinked margin, 1 to keep is blinked, 1 string to keep Morse Code string, and the last one is to keep found letter.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/152/0*qCJCsXL3tfVgn5X2.png" /><figcaption>Variables</figcaption></figure><p>Dictionary to keep Morse Alphabet.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/145/0*9xgSuyCbSwAqlt0M.png" /><figcaption>Morse Code Alphabet</figcaption></figure><p>Main loop of our project, read source image, upscale input by 50%, convert from OpenCV’s BGR to RGB because it’s needed in this form from MediaPipe, then we calculate FPS via taking current time and dividing 1 with the difference of current time and previous time.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/393/0*YuhRVZI7U8yIJTGs.png" /><figcaption>Main Loop, FPS Calc, Image Prep</figcaption></figure><p>If there are landmarks for each landmarks first draw the connections between and then calculate ear values.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*nmY28saVmpoYnAml.png" /><figcaption>EAR Value Calculation</figcaption></figure><p>If count is bigger than 10 then make it zero, else increment by 1. If previous ear arrays are longer than 10 change the current element with the new ear value and make long check true.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/386/0*vOm47bSjTkKQQcnR.png" /><figcaption>Old EAR Comparision</figcaption></figure><p>If is long and current ear values to 9 older ear values check is holding, detect blink and increment “blinkedFor” by 1, inside the else if blink was longer than 0.8 secs then count it as a L(Long), else S(Short), otherwise increment the not blinked time by 1, if not blinked duration is longer than 2 seconds ( 2 times as FPS ), if the letter we found in MorseCode add it to letter array if not just clear the array.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/673/0*2K_bzQhPGYeOku32.png" /><figcaption>Main Morse Code Check</figcaption></figure><p>Then finally take the found array, turn into string, and then put to the page, a small surprise though, if text has my GF’s name (Ece) inside than it automatically adds ❤ to the end. :D</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/617/0*tXUrhaQQDFTduEmR.png" /><figcaption>Show the Results</figcaption></figure><p>So that’s it everyone, I hope that the tutorial was easy to understand and interesting. I’ll be keep publishing regularly again without a day restriction this time, I hope to see you in the next ones. :)</p><p><em>Originally published at </em><a href="https://blog.akbuluteren.com/blog/morse-code-translator-using-camera-feed-and-blinks"><em>https://blog.akbuluteren.com</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=886e3bd973c5" width="1" height="1" alt=""><hr><p><a href="https://medium.com/analytics-vidhya/morse-code-translator-with-python-opencv-and-mediapipe-886e3bd973c5">Morse Code Translator Detect Blinks — Python, OpenCV, MediaPipe</a> was originally published in <a href="https://medium.com/analytics-vidhya">Analytics Vidhya</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Game Dev Journey — VI]]></title>
            <link>https://eren23.medium.com/game-dev-journey-vi-22813fdf3a3d?source=rss-a015bb215389------2</link>
            <guid isPermaLink="false">https://medium.com/p/22813fdf3a3d</guid>
            <category><![CDATA[games]]></category>
            <category><![CDATA[game-development]]></category>
            <category><![CDATA[software]]></category>
            <category><![CDATA[phaserjs]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Eren Akbulut]]></dc:creator>
            <pubDate>Wed, 10 Feb 2021 17:07:25 GMT</pubDate>
            <atom:updated>2022-06-28T09:12:21.671Z</atom:updated>
            <content:encoded><![CDATA[<h3>Game Dev Journey — VI</h3><p>Hello everyone, today I’ll briefly talk about the updates about my game dev learning journey and current plans. So let’s get started…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/635/0*k0-q2WoBW0TuO6n7.png" /></figure><h3>The situation of the Previous Learning Path</h3><p>I’m happy to say that nearly everything is finished now about the series I follow. I now know lots of stuff about Phaser and Arcade physics provided from it. I’ll also finish the parts about the Facebook app upload.</p><p>The latest updates I did about the game is as following;</p><ul><li>The general game sounds added.</li><li>The game sounds effects for other events added.</li><li>Combat mechanics refined, like sliding and air sliding.</li><li>Some code refactored.</li></ul><h3>Map Generation</h3><p>For map generation with Phaser, I found an awesome online resource that can truly step up my progress. When that tutorial ends I hope that I’ll now have an extending understanding of the following things;</p><p>I already worked on 2 things at the time. Static and Dynamic Map generation, now I’ll briefly talk about that matter.</p><h4>Static Map Generation</h4><p>Before that one, I always worked on 2d platformers or flappy bird-like projects so working on some other concepts was really great for me. I just followed along with <a href="https://medium.com/@michaelwesthadley/modular-game-worlds-in-phaser-3-tilemaps-1-958fc7e6bbd6">this</a> tutorial. Here are some screenshots from that guide outputs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/398/0*AufCHetbiePNNy6y.png" /></figure><p>Working on such a map improved my insight about the maps overall. But I’m also aware of the limitations of Phaser arcade physics at the moment, for example when working on such a project I’ll always need to create my tiles to fully fill the squares because Phaser always wants them as rectangles otherwise we need to convert them to sprites to change the shape and that’s painful.</p><h4>Dynamic Map Generation</h4><p>Dynamic map generation is quite promising from many aspects. In the example from <a href="https://itnext.io/modular-game-worlds-in-phaser-3-tilemaps-2-dynamic-platformer-3d68e73d494a">this</a> same series, I followed along with dynamic map generation and that mentioned collider generation I mentioned above.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/656/0*7PNgnEzGaoHOW4jd.png" /></figure><h3>Future Targets and Conclusion</h3><p>I’m planning to move on procedural map generation part after that one. I guess it’ll be quite promising from many aspects if I can manage to understand it 100%, even I won’t use it regularly it could be really flexible for most cases with fun projects and stuff :).</p><p>Alright then, that’s it for today. I’m hoping to come here next time with something of my own but I guess until that moment my road map doesn’t suck that much either. Take care, see you next time :).</p><p><em>Originally published at </em><a href="https://blog.akbuluteren.com/blog/game-dev-journey-vi"><em>https://blog.akbuluteren.com</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=22813fdf3a3d" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>