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
Metin
GİRİŞ
→
Temizleme
lowercase/regex
lowercase/regex
CLEAN
→
Tokenization
kelime/cümle
kelime/cümle
TOKEN
→
Stopword
Removal
Removal
FILTER
→
Stem/
Lemma
Lemma
NORMALIZE
→
TF-IDF
BoW
BoW
VECTORIZE
→
ML
Model
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Ş | MODEL | METRİK |
|---|---|---|---|---|
| Sınıflandırma | Metin | Etiket | BERT | F1, Accuracy |
| NER | Metin | Span+Tip | BERT-CRF | Span F1 |
| Çeviri | Kaynak dil | Hedef dil | NLLB, mT5 | BLEU, chrF |
| Özetleme | Uzun metin | Kısa özet | BART, T5 | ROUGE-L |
| Soru Cevap | Metin+Soru | Cevap | BERT-QA | EM, F1 |
| Metin Üretme | Prompt | Devam | GPT/LLaMA | Perplexity |
# 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.