nlp natural language processing natural other englision naive bayes ngram markov

İstatistiksel NLP’de Ortak Mimari Fikir

Naive Bayes Sınıflandırıcıları

Naive Bayes Sınıflandırıcıları

P(A|B)=[P(B|A)·P(A)]/P(B)P(A | B) = [P(B | A) · P(A)] / P(B)

İlgili Makale: https://bayes.wustl.edu/Manual/an.essay.pdf

Naive Bayes Neden “Naive” Olarak Adlandırılır?

P(f1,f2,,fn|c)iP(fi|c)P(f₁, f₂, …, fₙ | c) ≈ ∏ᵢ P(fᵢ | c)

Metin Sınıflandırma Kararı

c^=argmax(cC)P(c)·iP(wi|c)ĉ = argmax₍c∈C₎ P(c) · ∏ᵢ P(wᵢ | c)
c^=argmax(cC)[logP(c)+ΣilogP(wi|c)]ĉ = argmax₍c∈C₎ [log P(c) + Σᵢ log P(wᵢ | c)]

Sıfır Olasılık Problemi ve Laplace Düzeltmesi

P(w|c)=[count(w,c)+α]/[Σvcount(v,c)+α|V|]P(w | c) = [count(w,c) + α] / [Σᵥ count(v,c) + α|V|]

Kullanım Alanları, Güçlü Yönler ve Sınırlılıklar

BoyutDeğerlendirme
Kullanım alanlarıSpam filtreleme, duygu analizi, konu sınıflandırma, belge yönlendirme, basit niyet tespiti.
Güçlü yönüHızlı eğitilir; az veriyle çalışabilir; yüksek boyutlu seyrek metinlerde güçlü bir taban modelidir.
YorumlanabilirlikSınıf önselleri ve sözcük olasılıkları incelenebilir; kararın hangi sözcüklerden etkilendiği görülebilir.
Temel sınırlılıkSözcük sırası ve özellik bağımlılıkları çoğunlukla göz ardı edilir; ironi, olumsuzluk kapsamı ve uzun bağlamı anlamakta zorlanır.
Uygulama riskiDengesiz sınıflar, veri sızıntısı, nadir sözcükler ve alan değişimi performansı yanıltabilir.

Gizli Markov Modeli (HMM)

Markov Zincirlerinden Gizli Durumlara

HMM’nin Temel Bileşenleri

aij=P(qt=j|qt1=i)aᵢⱼ = P(qₜ = j | qₜ₋₁ = i)

Gözlem/yayılım olasılığı;

bj(ot)=P(ot|qt=j)bⱼ(oₜ) = P(oₜ | qₜ = j)

HMM’nin İki Temel Varsayımı

    P(qt|q1,,qt1)P(qt|qt1)P(qₜ | q₁, …, qₜ₋₁) ≈ P(qₜ | qₜ₋₁)
    P(ot|q1qt,o1ot1)P(ot|qt)P(oₜ | q₁…qₜ, o₁…oₜ₋₁) ≈ P(oₜ | qₜ)

    HMM’nin Üç Temel Problemi

    Viterbi Algoritması ile En Olası Durum Dizisi

    vt(j)=maxi[vt1(i)·aij·bj(ot)]vₜ(j) = maxᵢ [vₜ₋₁(i) · aᵢⱼ · bⱼ(oₜ)]

    Teknik Mantıkta Örneklendirme

    from math import log
     
    states = ["ISIM", "FIIL"]
    start = {"ISIM": 0.60, "FIIL": 0.40}
    transition = {
        "ISIM": {"ISIM": 0.30, "FIIL": 0.70},
        "FIIL": {"ISIM": 0.60, "FIIL": 0.40},
    }
    emission = {
        "ISIM": {"veri": 0.50, "öğrenir": 0.10, "model": 0.40},
        "FIIL": {"veri": 0.10, "öğrenir": 0.80, "model": 0.10},
    }
     
    def viterbi(observations):
        scores = [{}]
        paths = {}
        for state in states:
            scores[0][state] = log(start[state]) + log(emission[state][observations[0]])
            paths[state] = [state]
     
        for t in range(1, len(observations)):
            scores.append({})
            new_paths = {}
            for current in states:
                candidates = []
                for previous in states:
                    score = (scores[t-1][previous]
                             + log(transition[previous][current])
                             + log(emission[current][observations[t]]))
                    candidates.append((score, previous))
                best_score, best_previous = max(candidates)
                scores[t][current] = best_score
                new_paths[current] = paths[best_previous] + [current]
            paths = new_paths
     
        last_state = max(scores[-1], key=scores[-1].get)
        return paths[last_state], scores[-1][last_state]
     
    print(viterbi(["veri", "öğrenir", "model"]))

    NLP’de Kullanım Alanları ve Sınırlılıklar

    N-Gram Modelleri

    İlgili Makale: A Mathematical Theory of Communication

    N-Gram Penceresi Nasıl Oluşur?

    Zincir Kuralından Markov Yaklaşımına

    P(w1wn)=k=1nP(wk|w1wk1)P(w₁…wₙ) = ∏ₖ₌₁ⁿ P(wₖ | w₁…wₖ₋₁)
    P(wk|w1wk1)P(wk|wkn+1wk1)P(wₖ | w₁…wₖ₋₁) ≈ P(wₖ | wₖ₋ₙ₊₁…wₖ₋₁)
    P(w1wn)k=1nP(wk|wk1)P(w₁…wₙ) ≈ ∏ₖ₌₁ⁿ P(wₖ | wₖ₋₁)

    Olasılıkların Derlemden Tahmini

    P(wk|wk1)=C(wk1,wk)/C(wk1)P(wₖ | wₖ₋₁) = C(wₖ₋₁, wₖ) / C(wₖ₋₁)

    Veri Seyrekliği, Bilinmeyen N-Gram ve Yumuşatma

    Pinterp(wi|wi2,wi1)=λ3P3+λ2P2+λ1P1P_interp(wᵢ|wᵢ₋₂,wᵢ₋₁) = λ₃P₃ + λ₂P₂ + λ₁P₁
    λ1+λ2+λ3=1λ₁ + λ₂ + λ₃ = 1

    Perplexity ile Dil Modelini Değerlendirmek

    PP(W)=[i=1N1/P(wi|geçmiş)]1NPP(W) = [∏ᵢ₌₁ᴺ 1 / P(wᵢ | geçmiş)]¹⁄ᴺ

    Teknik Mantıkta Örneklendirme

    from collections import Counter, defaultdict
     
    corpus = [
        "doğal dil işleme metni analiz eder",
        "doğal dil işleme dili modeller",
        "doğal dil modelleri metni üretir",
    ]
     
    bigram_counts = defaultdict(Counter)
    context_counts = Counter()
     
    for sentence in corpus:
        tokens = ["<s>"] + sentence.lower().split() + ["</s>"]
        for left, right in zip(tokens, tokens[1:]):
            bigram_counts[left][right] += 1
            context_counts[left] += 1
     
    def next_words(context):
        results = []
        for word, count in bigram_counts[context].most_common():
            probability = count / context_counts[context]
            results.append((word, probability))
        return results
     
    print(next_words("dil"))

    N-Gram Modellerinin Güçlü ve Zayıf Yönleri

    Üç Yaklaşımın Karşılaştırılması

    , ,

    İlgili Yazılar