Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

nlp - Doğal Dil İşleme

BERT, Tokenizer, NER ve metin analizi araçları

BERT
Embeddings
5
Tokenizer
NER
Entity
Multilang
Destek

Genel Bakış

nlp modülü, metin işleme, embeddings, named entity recognition ve sentiment analysis için araçlar sağlar.

Tokenization

BPE Tokenizer

kullan ai/nlp;

// Pre-trained tokenizer yükle
değişken tokenizer = Tokenizer::yükle("bert-base-uncased")?;

değişken text = "BERK programlama dili çok güçlü!";
değişken tokens = tokenizer.encode(text);

yazdir("Tokens: {:?}", tokens.ids);
yazdir("Token texts: {:?}", tokens.tokens);

// Decode
değişken decoded = tokenizer.decode(tokens.ids);
yazdir("Decoded: {}", decoded);

Custom Tokenizer

kullan ai/nlp;

// Kendi tokenizer'ınızı eğitin
değişken trainer = TokenizerTrainer::yeni(
    vocab_size: 30000,
    special_tokens: ["[PAD]", "[UNK]", "[CLS]", "[SEP]", "[MASK]"]
);

// Corpus üzerinde eğit
değişken corpus = [
    "BERK dili sistem programlama için idealdir.",
    "Rust'tan ilham alınmış modern bir dildir.",
    // ...
];

değişken tokenizer = trainer.train(corpus)?;
tokenizer.save("tokenizer.json")?;

BERT Embeddings

Sentence Embeddings

kullan ai/nlp;

// BERT model yükle
değişken bert = BERT::yükle(
    model: "bert-base-multilingual-cased",
    device: "cuda"
)?;

değişken sentences = [
    "BERK programlama dili",
    "Rust benzeri syntax",
    "Modern ve güvenli"
];

// Embeddings al
değişken embeddings = bert.encode(sentences)?;
yazdir("Shape: {:?}", embeddings.shape());  // [3, 768]

// Similarity hesapla
değişken sim_01 = cosine_similarity(embeddings[0], embeddings[1]);
yazdir("Benzerlik: {:.4f}", sim_01);

Fine-tuning BERT

kullan ai/nlp;
kullan ai/nn;
kullan ai/optim;

// BERT + Classification head
sınıf SentimentClassifier {
    değişken bert: BERT;
    değişken classifier: Linear;
    
    fonksiyon yeni(num_classes: tamsayı) -> SentimentClassifier yap
        değişken bert = BERT::yükle("bert-base-uncased")?;
        değişken classifier = Linear::yeni(768, num_classes);
        
        dön SentimentClassifier { bert, classifier };
    son
    
    fonksiyon ileri(değişken kendi, input_ids: Tensor) -> Tensor yap
        değişken bert_output = kendi.bert.ileri(input_ids);
        değişken cls_token = bert_output[:, 0, :];  // [CLS] token
        dön kendi.classifier.ileri(cls_token);
    son
}

// Eğitim
değişken model = SentimentClassifier::yeni(num_classes: 3);
değişken optimizer = AdamW::yeni(model.parametreler(), lr: 2e-5);

her epoch içinde aralık(3) için yap
    her batch içinde train_loader için yap
        değişken logits = model.ileri(batch.input_ids);
        değişken loss = cross_entropy(logits, batch.labels);
        
        optimizer.sıfırla();
        loss.geri();
        optimizer.adım();
    son
son

Named Entity Recognition (NER)

Entity Detection

kullan ai/nlp;

// Pre-trained NER model
değişken ner = NER::yükle("bert-base-ner")?;

değişken text = "Ahmet Ankara'da Microsoft'ta çalışıyor.";
değişken entities = ner.predict(text)?;

her entity içinde entities için yap
    yazdir!("{}: {} ({})", 
            entity.text, 
            entity.label, 
            entity.confidence);
son

// Çıktı:
// Ahmet: PERSON (0.98)
// Ankara: LOCATION (0.95)
// Microsoft: ORGANIZATION (0.97)

Custom NER Training

kullan ai/nlp;

// NER model tanımla
değişken model = NER::yeni(
    base_model: "bert-base-cased",
    labels: ["O", "B-PER", "I-PER", "B-LOC", "I-LOC", "B-ORG", "I-ORG"]
);

// Training data
değişken train_data = [
    NERExample {
        text: "John lives in New York",
        labels: ["B-PER", "O", "O", "B-LOC", "I-LOC"]
    },
    // ...
];

// Eğit
değişken trainer = NERTrainer::yeni(model, optimizer);
trainer.train(train_data, epochs: 5)?;

Sentiment Analysis

Duygu Analizi

kullan ai/nlp;

değişken analyzer = SentimentAnalyzer::yükle("tr-sentiment")?;

değişken reviews = [
    "Bu ürün harika, çok beğendim!",
    "Berbat bir deneyim, tavsiye etmem.",
    "Fena değil, idare eder."
];

her review içinde reviews için yap
    değişken sentiment = analyzer.predict(review)?;
    yazdir!("{}: {} (güven: {:.2f})", 
            review, 
            sentiment.label,  // "Pozitif", "Negatif", "Nötr"
            sentiment.score);
son

Text Generation

GPT-style Generation

kullan ai/nlp;

değişken generator = TextGenerator::yükle("gpt2-turkish")?;

değişken prompt = "BERK programlama dili";
değişken generated = generator.generate(
    prompt: prompt,
    max_length: 100,
    temperature: 0.8,
    top_k: 50,
    top_p: 0.95,
    num_return_sequences: 3
)?;

her (i, text) içinde generated.enumerate() için yap
    yazdir!("Varyasyon {}: {}", i+1, text);
son

Beam Search

kullan ai/nlp;

değişken generated = generator.generate(
    prompt: "Derin öğrenme",
    max_length: 50,
    num_beams: 5,        // Beam search
    early_stopping: doğru,
    no_repeat_ngram_size: 3
)?;

yazdir("{}", generated);

Question Answering

Extractive QA

kullan ai/nlp;

değişken qa_model = QA::yükle("bert-large-qa")?;

değişken context = "BERK, Rust'tan ilham alan modern bir sistem programlama dilidir. \
                     Bellek güvenliği ve performans odaklı tasarlanmıştır.";

değişken question = "BERK hangi dilden ilham alır?";

değişken answer = qa_model.predict(
    question: question,
    context: context
)?;

yazdir("Cevap: {}", answer.text);      // "Rust"
yazdir("Güven: {:.2f}", answer.score); // 0.95
yazdir("Span: {:?}", answer.span);     // (6, 10)

Text Classification

Multi-label Classification

kullan ai/nlp;

değişken classifier = TextClassifier::yeni(
    base_model: "bert-base-uncased",
    labels: ["teknoloji", "spor", "politika", "ekonomi"],
    multi_label: doğru
);

değişken text = "Apple yeni iPhone modelini tanıttı. Hisse fiyatları yükseldi.";
değişken predictions = classifier.predict(text)?;

her pred içinde predictions için yap
    eğer pred.score > 0.5 ise yap
        yazdir!("{}: {:.2f}", pred.label, pred.score);
    son
son
// Çıktı:
// teknoloji: 0.92
// ekonomi: 0.78

Language Detection

Dil Tespiti

kullan ai/nlp;

değişken detector = LanguageDetector::yeni();

değişken texts = [
    "Bu bir Türkçe cümledir.",
    "This is an English sentence.",
    "Dies ist ein deutscher Satz.",
    "これは日本語の文です。"
];

her text içinde texts için yap
    değişken lang = detector.detect(text)?;
    yazdir!("{}: {}", lang.code, text);
son

Text Preprocessing

Temizleme ve Normalizasyon

kullan ai/nlp;

değişken processor = TextProcessor::yeni();

// Pipeline oluştur
processor
    .lowercase()
    .remove_punctuation()
    .remove_stopwords(lang: "tr")
    .stem(algorithm: "snowball")
    .remove_urls()
    .remove_emails();

değişken text = "BERK'i https://berk-lang.org adresinden indirebilirsiniz! İletişim: info@berk.com";
değişken cleaned = processor.process(text);

yazdir!("{}", cleaned);
// Çıktı: "berk adres indir iletisim"

Word Embeddings

Word2Vec & FastText

kullan ai/nlp;

// Pre-trained embeddings yükle
değişken w2v = Word2Vec::yükle("fasttext-tr-300d")?;

// Kelime vektörü al
değişken vec = w2v.get_vector("bilgisayar")?;
yazdir!("Vektör boyutu: {}", vec.len());  // 300

// En yakın kelimeler
değişken similar = w2v.most_similar("programlama", top_k: 5)?;
her (word, similarity) içinde similar için yap
    yazdir!("{}: {:.4f}", word, similarity);
son

// Analoji: kral - erkek + kadın = ?
değişken result = w2v.analogy("kral", "erkek", "kadın")?;
yazdir!("Analoji sonucu: {}", result);  // "kraliçe"

Performans Metrikleri

ModelParametrelerInference (ms)Kullanım
BERT-base110M~40Genel amaçlı NLP
BERT-large340M~140Yüksek doğruluk
DistilBERT66M~20Hızlı inference
RoBERTa125M~45SOTA performans
GPT-2 small117M~50Text generation
T5-base220M~80Seq2seq tasks

API Referansı

Tokenizer Sınıfı

  • yükle(model: dizgi) -> Tokenizer - Pre-trained tokenizer
  • encode(text: dizgi) -> Encoding - Text'i tokenize et
  • decode(ids: [tamsayı]) -> dizgi - Token ID'leri decode et
  • encode_batch(texts: [dizgi]) -> [Encoding] - Batch encoding

BERT Sınıfı

  • yükle(model: dizgi, ...) -> BERT - BERT model yükle
  • encode(texts: [dizgi]) -> Tensor - Sentence embeddings
  • ileri(input_ids: Tensor) -> BertOutput - Forward pass

NER Sınıfı

  • yükle(model: dizgi) -> NER - NER model yükle
  • predict(text: dizgi) -> [Entity] - Entity detection
  • predict_batch(texts: [dizgi]) -> [[Entity]]