Doğal Dil İşleme Yol Haritası · 0 → 100

DOĞAL DİL İŞLEME ROADMAP

Klasik NLP'den LLM mühendisliğine — tokenizasyondan Transformer'a, NLTK'dan HuggingFace'e. Dil + istatistik + matematik + yazılım = modern yapay zeka.

0
AŞAMA
0
AY PLAN
0
PROJE
Zihniyet
🔤
DilMetin anlama ve üretme
📊
İstatistikOlasılık, dağılımlar
MatematikLineer cebir, türev
💻
YazılımPython, API, deploy
🚀
LLM DevriGPT · BERT · RAG · Fine-tune
1
PYTHON
2
MATEMATİK
3
ML TEMELİ
4
KLASİK NLP
5
DEEP NLP
6
TRANSFORMER
7
🤗 HF
8
İLERİ NLP
9
LLM MÜH.
10
DEPLOY
11
PROJELER
12
UZMANLIK
1–2
0–3 AY
Python + Matematik & İstatistik Temeli
OOP · NumPy · Pandas · Lineer Cebir · Olasılık · Gradient
Python OOPNumPyPandasLineer CebirOlasılıkTürevGradient
# NLP için kritik Python becerileri import numpy as np import pandas as pd from collections import Counter # Metin ile çalışma — temel operasyonlar metin = "NLP çok ilginç bir alan" kelimeler = metin.lower().split() frekans = Counter(kelimeler) # Vektör uzayı — embedding temeli v1 = np.array([0.2, 0.8, 0.1]) # "kedi" embedding v2 = np.array([0.3, 0.7, 0.2]) # "köpek" embedding # Cosine similarity — kelime benzerliği cos_sim = np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2)) # Softmax — dil modellerinin çıkış katmanı def softmax(x: np.ndarray) -> np.ndarray: e_x = np.exp(x - np.max(x)) # numerik stabilite için max çıkar return e_x / e_x.sum()
💡 Neden cosine similarity? Kelime vektörlerinin uzunluğu (frekans) önemli değil, yönleri (anlam) önemli. "kedi" ve "köpek" benzer anlam → vektörleri küçük açılı → cos(θ) ≈ 1. NLP'nin temel aritmetiği bu.
Hedef: NumPy ile cosine similarity hesapla. Pandas ile metin verisi analiz et. OOP ile tokenizer yaz.
3
1–3 AY
Makine Öğrenmesi Temeli
Supervised · Classification · Overfitting · Cross-Val · Scikit-learn
Logistic Regression
İlk text classifier. Spam/ham, pozitif/negatif. Basit ama güçlü baseline.
Naive Bayes
Metin sınıflandırmanın klasiği. P(sınıf|kelimeler). E-posta filtreleme.
SVM
Yüksek boyutlu metin verisi için güçlü. TF-IDF + LinearSVC kombinasyonu.
Random Forest
Feature importance ile hangi kelimeler önemli? Yorumlanabilir.
📧 Spam Sınıflandırma
😊 Basit Sentiment Analysis
📰 Haber Kategorizasyonu
4
3–5 AY
Klasik NLP — Metin İşleme ve Feature Extraction
Tokenization · BoW · TF-IDF · Stemming · Lemmatization · NLTK · spaCy
// KLASİK NLP PIPELINE
Ham
Metin
GİRİŞ
Temizleme
lowercase/regex
CLEAN
Tokenization
kelime/cümle
TOKEN
Stopword
Removal
FILTER
Stem/
Lemma
NORMALIZE
TF-IDF
BoW
VECTORIZE
ML
Model
OUTPUT
# spaCy — modern NLP kütüphanesi import spacy nlp = spacy.load("tr_core_news_md") # Türkçe model doc = nlp("Ahmet dün İstanbul'dan geldi ve bana güzel haberler verdi.") for token in doc: print(f"{token.text:15} {token.lemma_:15} {token.pos_:8} {token.dep_}") # Named Entity Recognition for ent in doc.ents: print(f"{ent.text:20} → {ent.label_}") # Ahmet → PERSON, İstanbul → GPE # TF-IDF — en iyi klasik vektörleme from sklearn.feature_extraction.text import TfidfVectorizer vect = TfidfVectorizer(max_features=10000, ngram_range=(1,2), sublinear_tf=True) X = vect.fit_transform(corpus) # sparse matrix top_feats = vect.get_feature_names_out()[:10]
spaCy vs NLTK: NLTK = araştırma/öğrenme. spaCy = üretim. spaCy 10x daha hızlı, Türkçe model mevcut (tr_core_news), pipeline tabanlı, endüstri standardı. Baştan spaCy öğren.
5
4–6 AY
Deep Learning NLP — RNN/LSTM ve Word Embeddings
Word2Vec · GloVe · FastText · RNN · LSTM · GRU · Sequence-to-Sequence
# Word2Vec mantığı — sıfırdan anlama # "Kral - Erkek + Kadın ≈ Kraliçe" from gensim.models import Word2Vec model = Word2Vec( sentences=tokenized_corpus, vector_size=100, # embedding boyutu window=5, # bağlam penceresi min_count=2, # min frekans workers=4, # paralel eğitim sg=1 # Skip-gram (vs CBOW) ) model.wv.most_similar("türkiye", topn=5) model.wv.most_similar(positive=["kral","kadın"], negative=["erkek"]) # LSTM ile sentiment analysis import torch import torch.nn as nn class SentimentLSTM(nn.Module): def __init__(self, vocab_sz, emb_dim, hidden, n_layers): super().__init__() self.embed = nn.Embedding(vocab_sz, emb_dim, padding_idx=0) self.lstm = nn.LSTM(emb_dim, hidden, n_layers, batch_first=True, dropout=0.3, bidirectional=True) self.fc = nn.Linear(hidden * 2, 1) def forward(self, x): e = self.embed(x) out, (h, _) = self.lstm(e) h_cat = torch.cat([h[-2], h[-1]], dim=1) return torch.sigmoid(self.fc(h_cat).squeeze())
Word2Vec (2013)
CBOW vs Skip-gram. Kelime → 300-boyutlu vektör. Anlamsal aritmetik mümkün.
GloVe (2014)
Global co-occurrence istatistiği. Kelime çiftlerinin birlikte görülme frekansı.
FastText (2016)
Subword (karakter n-gram). Türkçe gibi morfolojik diller için mükemmel.
📝 Metin Üretme (LSTM)
🎬 Film Yorumu Analizi
🔄 Seq2Seq Çeviri
6
5–7 AY
Transformer Mimarisi — EN KRİTİK KISIM
Attention · Self-Attention · Multi-Head · Positional Encoding · BERT · GPT · T5
"Attention Is All You Need" (Vaswani et al., 2017) — Bu 8 sayfalık paper modern yapay zekanın dönüm noktasıdır. ChatGPT, BERT, T5, LLaMA, Stable Diffusion — hepsi bu mimari üstünde. Okuyun.
ENCODER (BERT tipi)
Input Embedding + Positional Enc.
Multi-Head Self-Attention
Add & Norm (Residual)
Feed-Forward Network
Add & Norm
× N katman (BERT: 12-24)
→ Kontekst Temsili
DECODER (GPT tipi)
Output Embedding + Positional Enc.
Masked Self-Attention
Add & Norm
Cross-Attention (Encoder-Decoder)
Feed-Forward Network
× N katman (GPT-3: 96)
→ Token Üretimi
# Scaled Dot-Product Attention — Transformer'ın kalbi import torch, math import torch.nn.functional as F def attention(Q, K, V, mask=None, dropout=None): # Q, K, V: (batch, heads, seq_len, d_head) d_k = Q.size(-1) scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(d_k) if mask is not None: scores = scores.masked_fill(mask == 0, float("-inf")) attn = F.softmax(scores, dim=-1) # dikkat ağırlıkları if dropout: attn = dropout(attn) return torch.matmul(attn, V), attn # output + weights # "attention head her şeye eşit dikkat etmez;" # "konuyla ilgili kelimelere daha fazla dikkat eder"
BERT
GOOGLE · 2018
Bidirectional encoder. Anlama odaklı. NER, QA, sınıflandırma için ideal. Masked LM ile eğitildi.
GPT-4
OPENAI · 2023
Decoder-only. Üretim odaklı. Autoregressive. Fine-tuning + RLHF. Sektörde standart.
T5
GOOGLE · 2020
Text-to-Text unified framework. Her NLP görevi metin→metin olarak formüle. Çeviri, özet, QA.
LLaMA 3
META · 2024
Açık kaynak, güçlü. Fine-tuning için ideal. LoRA ile az parametreyle eğit.
Mistral
MISTRAL AI · 2023
Verimli mimari. Sliding window attention. Türkçe dahil çok dil. Açık ağırlıklar.
Gemma
GOOGLE · 2024
Hafif, verimli, açık. Edge deployment için uygun. Türkçe destekli.
7
6–8 AY
🤗 HuggingFace Ekosistemi
transformers · datasets · tokenizers · PEFT · LoRA · Fine-tuning · Model Hub
# HuggingFace — NLP mühendisinin en önemli silahı from transformers import (AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer, DataCollatorWithPadding) from datasets import load_dataset from peft import LoraConfig, get_peft_model, TaskType import evaluate # Türkçe BERT fine-tuning — sentiment analysis model_name = "dbmdz/bert-base-turkish-cased" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSequenceClassification.from_pretrained( model_name, num_labels=3 # pozitif/negatif/nötr ) # LoRA — büyük modeli az parametreyle fine-tune lora_cfg = LoraConfig( task_type=TaskType.SEQ_CLS, r=16, lora_alpha=32, lora_dropout=0.1, target_modules=["query", "value"] # attention matrislerine ) model = get_peft_model(model, lora_cfg) model.print_trainable_parameters() # ~0.5% parametre! training_args = TrainingArguments( output_dir="./turkce-sentiment", num_train_epochs=3, learning_rate=2e-4, per_device_train_batch_size=16, weight_decay=0.01, eval_strategy="epoch", fp16=True, load_best_model_at_end=True, report_to="wandb" ) trainer = Trainer(model=model, args=training_args, train_dataset=train_ds, eval_dataset=val_ds, tokenizer=tokenizer) trainer.train()
🇹🇷 Türkçe Sentiment
❓ Question Answering
📋 NER Sistemi
🔄 Özet Çıkarma
8–9
7–10 AY
İleri NLP + LLM Mühendisliği
NER · MT · Summarization · Prompt Eng · RAG · LangChain · LlamaIndex
NLP GÖREVİGİRİŞÇIKIŞMODELMETRİK
SınıflandırmaMetinEtiketBERTF1, Accuracy
NERMetinSpan+TipBERT-CRFSpan F1
ÇeviriKaynak dilHedef dilNLLB, mT5BLEU, chrF
ÖzetlemeUzun metinKısa özetBART, T5ROUGE-L
Soru CevapMetin+SoruCevapBERT-QAEM, F1
Metin ÜretmePromptDevamGPT/LLaMAPerplexity
# RAG — Retrieval Augmented Generation # "Modeli yeniden eğitmek yerine bilgiyi dışarıdan ver" from langchain.document_loaders import PyPDFLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_openai import OpenAIEmbeddings, ChatOpenAI from langchain_chroma import Chroma from langchain.chains import RetrievalQA # 1. PDF yükle ve parçalara böl docs = PyPDFLoader("belge.pdf").load() chunks = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=64).split_documents(docs) # 2. Embedding → vektör veritabanı db = Chroma.from_documents(chunks, OpenAIEmbeddings()) # 3. RAG zinciri rag = RetrievalQA.from_chain_type( llm=ChatOpenAI(model="gpt-4o-mini"), retriever=db.as_retriever(search_kwargs={"k": 4}), return_source_documents=True ) yanit = rag.invoke("Bu belgede ne anlatılıyor?")
💡 Prompt Engineering — 5 Teknik: 1) Zero-shot (direkt sor) 2) Few-shot (örnekler ver) 3) Chain-of-Thought (adım adım düşün) 4) Role prompting (sen bir uzman kimsin) 5) Structured output (JSON formatında ver). Bu teknikleri bilmek LLM çıktı kalitesini 2-3x artırır.
📄 PDF Chatbot (RAG)
🧠 Knowledge Base AI
🤖 Türkçe LLM Fine-tune
🔍 AI Arama Motoru
10
9–11 AY
Deployment & MLOps
FastAPI · Docker · Streaming · Model Monitoring · Gradio · HF Spaces
# FastAPI + streaming response — modern NLP API from fastapi import FastAPI from fastapi.responses import StreamingResponse from transformers import pipeline, TextIteratorStreamer import threading, torch app = FastAPI(title="NLP API") model = pipeline("text-generation", model="microsoft/phi-2", device=0 if torch.cuda.is_available() else -1) @app.post("/generate") async def generate(prompt: str, max_new_tokens: int = 256): streamer = TextIteratorStreamer(model.tokenizer, skip_special_tokens=True) thread = threading.Thread( target=model, args=([prompt],), kwargs={"max_new_tokens": max_new_tokens, "streamer": streamer} ) thread.start() return StreamingResponse(streamer, media_type="text/plain") @app.post("/sentiment") async def sentiment(text: str): clf = pipeline("sentiment-analysis", model="dbmdz/bert-base-turkish-cased") return clf(text)[0]
Gradio / Streamlit
Hızlı demo UI. HuggingFace Spaces'e ücretsiz deploy. Portfolio için ideal.
vLLM / TGI
Yüksek throughput LLM serving. PagedAttention ile bellek optimizasyonu. Üretim standardı.
LangSmith
LLM uygulama debugging ve monitoring. Prompt trace, latency, cost tracking.

"Anlamadan
ezberleme,
üretmeden
öğrenmiş
sayılmazsın."

Video izlemek ≠ öğrenmek. BERT'i fine-tune et, RAG pipeline kur, API deploy et. Her proje birden fazla cv satırıdır.

↑ Başa Dön HuggingFace →
1
0–3 Ay: Python + ML Temel
NumPy, Pandas, scikit-learn. Spam classifier yap.
2
3–5 Ay: Klasik NLP
spaCy, TF-IDF, LSTM. Türkçe metin analizi.
3
5–7 Ay: Transformer Mimarisi
"Attention is All You Need" oku. Sıfırdan implement et.
4
7–9 Ay: HuggingFace + Fine-tuning
Türkçe BERT fine-tune. LoRA ile verimli eğitim.
5
9–11 Ay: LLM + RAG + Deploy
PDF chatbot, LangChain, FastAPI. Gradio ile demo.
6
11–12 Ay: Projeler + Başvuru
3–5 GitHub projesi. Blog yaz. İş başvurusu.