Skip to content
View icydingo29's full-sized avatar

Block or report icydingo29

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
icydingo29/README.md

icydingo29

AI Engineer · retrieval systems, LLM pipelines, applied ML

MSc Information Retrieval & Knowledge Discovery — Sofia University "St. Kliment Ohridski", FMI

LinkedIn Hugging Face


I put language models on top of structured data — and then measure whether they actually work. Most of what I build ships with a benchmark, an ablation, and a written account of where it fails.

  • 🏦  AI Engineer intern
  • 🔍  Focus: RAG & knowledge graphs, information retrieval, evaluation of LLM systems
  • 🛠  Also ship: FastAPI services, Dockerised deployments, PyTorch training pipelines
  • 📍  Sofia, Bulgaria — open to AI/ML engineering roles

Tech

Languages   Python C++ SPARQL

ML & AI   PyTorch NumPy Ollama Groq

Backend & Data   FastAPI PostgreSQL Docker Streamlit GraphDB / RDF


Selected Work

An LLM document-processing service that actually runs as a service.

PDF invoices in, structured expense reports out. Vision-model OCR with a pdfplumber fallback, an LLM enrichment stage that categorises line items and corrects OCR noise, Pydantic-validated persistence to PostgreSQL, and a generated PDF report. Exposed both as a REST API and a web UI; the whole stack comes up with one docker compose command.

FastAPI · PostgreSQL · SQLAlchemy · Pydantic v2 · Groq · Docker Compose · Streamlit


Can a small local LLM query an ontology reliably? Measured, not guessed.

Natural language question translated to SPARQL and executed against GraphDB

A local Qwen2.5-Coder model translates plain-language questions into SPARQL against an OWL2-RL geographic ontology in GraphDB. The interesting part is the evaluation harness: 22 questions across 7 reasoning categories, 10 runs each, scored against hand-written reference queries executed live against the triplestore — no hardcoded expected values.

Result: 82% exact-match at 3B, 93% at 7B, with every failure mode traced to a root cause (dropped FILTERs, abandoned MINUS, entity-name abbreviation, reasoner limitations under the open-world assumption).

📄 Full methodology & benchmark report

Ollama · GraphDB · OWL2-RL · SPARQL · owlready2 · Python


A controlled architecture comparison, written up as a paper.

Four models — 2 architectures × 2 tokenisation schemes — trained on ~38K MIDI files with parameter counts matched within ±10% and an artist-stratified split so no artist appears in both train and test. Includes a custom 532-token event tokeniser alongside a REMI+ wrapper.

Finding: raw perplexity isn't comparable across tokenisers, so evaluation uses bits per second of musical time. Measuring loss per position bucket shows the Transformer's advantage over the LSTM grows ~8.5× across the 512-token context window — long-range dependency access, quantified.

📄 Paper (PDF) · 🤗 Trained checkpoints

PyTorch · MidiTok · flash attention · Kaggle / Lightning AI


Find the song from lyrics you misheard.

Lyrics are converted to IPA phonemes and indexed as bigrams, then queries pass through a four-stage retrieval pipeline — inverted-index lookup → Jaccard filtering → TF-IDF reranking → weighted Levenshtein distance using a phoneme substitution-cost matrix — with query-length-adaptive thresholds and optional one-hop query expansion. Benchmarked against SoundEx and Metaphone baselines on Accuracy@1, Recall@K and MRR.

Built with @Bifrost19 as MSc coursework in Information Retrieval.

Python · eng_to_ipa · custom TF-IDF · pandas


Do POS and NER priors help graph ranking or matrix decomposition more?

TextRank (PageRank power iteration) and LSA (TF-IDF + SVD), both implemented from scratch in NumPy and both extended with sentence priors derived from POS and NER tags, blended by a tunable α. Evaluated with ROUGE-1/2/L across a grid over α and summary length, on a morphologically rich language with Bulgarian-specific stemming and stopword handling.

NumPy · CoNLL-U Plus · BulStem · ROUGE


Unsupervised clustering turned into rules a human can read.

Fuzzy C-Means with random restarts discovers latent archetypes in sensory beer profiles; adaptive Gaussian membership functions then convert cluster centroids into linguistic IF–THEN rules. Product t-norm activation is computed in log-space to avoid underflow in high dimensions, and the rule-based approximation is validated against the original FCM model (Pearson r > 0.90) rather than assumed faithful.

Fuzzy C-Means · PCA · NumPy · Matplotlib


Fundamentals, implemented for speed rather than for the textbook.

IDA* with Manhattan distance for the N-Puzzle, MinConflicts for N-Queens, a genetic algorithm with order crossover for TSP, minimax with alpha-beta pruning, plus K-Means, Naive Bayes and decision trees — no libraries. Optimised with O(1) conflict frequency arrays, delta-distance mutation updates and cache-friendly memory layout.

Benchmark: 10,000-queens MinConflicts solved in 0.34s; 15-Puzzle solved by IDA* effectively instantly.

C++17 · -O3 · std::mt19937


Education

MSc — Information Retrieval & Knowledge Discovery · Sofia University "St. Kliment Ohridski", FMI Deep learning with PyTorch, recommender systems, knowledge bases & ontologies, NLP, knowledge discovery from data.

BSc — Computer Science · Sofia University "St. Kliment Ohridski", FMI Algorithms & data structures, object-oriented programming, databases, operating systems, computer networks, software engineering, discrete mathematics & probability.


Most repos ship with a written report or paper — the methodology is usually more interesting than the code.

Pinned Loading

  1. nlq-sparql-graphdb-benchmark nlq-sparql-graphdb-benchmark Public

    Local LLM pipeline translating natural language to SPARQL for OWL2-RL reasoning in GraphDB, validated by a structured benchmark.

    Python

  2. smart-receipt-analyzer smart-receipt-analyzer Public

    PDF invoice processor powered by OCR and LLM — extracts structured data, categorizes line items, and generates expense reports. FastAPI · Streamlit · PostgreSQL · Docker Compose.

    Python

  3. phonetic-song-search-engine phonetic-song-search-engine Public

    Forked from Bifrost19/phonetic-song-search-engine

    Phonetic song search engine that matches spoken or misheard lyrics using IPA conversion, multi-stage retrieval, and weighted Levenshtein edit distance.

    Python

  4. prior-weights-impact-lsa-textrank-bg prior-weights-impact-lsa-textrank-bg Public

    A comparative study of Weighted LSA and Weighted TextRank for Bulgarian news summarization. Evaluates the impact of linguistic-driven priors (calculated through POS & NER tags) on graph centrality …

    Python 1