Karakterlerden Kelimelere: Japonca BPE Tokenizer

Yayın: 5 Temmuz 2025

Karakterlerden Kelimelere: Japonca BPE Tokenizer

Ne Öğreneceksiniz

  • Byte Pair Encoding (BPE)'nin ne olduğu ve modern NLP'de neden kritik olduğu
  • BPE'nin anlamı korurken kelime hazine boyutunu nasıl azalttığı
  • Japonca metin için eksiksiz bir BPE tokenizer geliştirmek
  • Algoritmanın çalışmasını gösteren interaktif örnekler

Byte Pair Encoding Nedir?

Byte Pair Encoding (BPE), GPT ve BERT gibi modern dil modellerini destekleyen bir alt-kelime tokenizasyon algoritmasıdır. Başlangıçta veri sıkıştırma için tasarlanmış olan BPE, artık NLP için vazgeçilmez bir tekniktir.

Algoritma basittir: bireysel karakterlerden başlayıp en sık kullanılan bitişik çiftleri iteratif olarak birleştirin ve hedef kelime hazine boyutuna ulaşana kadar devam edin. Bu, karakter seviyesi ayrıntı ile kelime seviyesi semantik arasında denge sağlar.

Neden BPE'ye İhtiyacımız Var?

Geleneksel tokenizasyon yaklaşımlarının önemli sınırları vardır:

Kelime Seviyesi Sorunları

  • • Devasa kelime hazine boyutları (100K+ kelime)
  • • Kelime hazinesinde olmayan kelimeleri işleyememe
  • • Morfolojik olarak zengin dillerle mücadele
  • • Nadir kelimelerin kötü işlenmesi

BPE Avantajları

  • • Yönetilebilir kelime hazinesi (5K-50K token)
  • • Kelime hazinesinde olmayan kelime yok
  • • Alt-kelime desenlerini yakalar
  • • Dil-agnostik yaklaşım

Özellikle Japonca için BPE, yaygın kanji kombinasyonlarını, edatları ve gramer kalıplarını açık dilbilimsel bilgi gerektirmeden otomatik olarak öğrenebildiği için özellikle değerlidir.

İnteraktif BPE Demosu

BPE'nin Japonca metinle adım adım nasıl çalıştığını görelim:

Orijinal Metin: 最近TVでも人気者のお笑い

Adım 0 / 5

T V

Uygulama: Japonca Veri Yükleme

Japonca haber makaleleri içeren Livedoor News Corpus'unu kullandım - tokenizer eğitimi için mükemmel:

# Japonca haber külliyatını indirme ve okuma
import tarfile
import urllib.request
import os

filename = "ldcc-20140209.tar.gz"
if not os.path.exists(filename):
    print("İndiriliyor...")
    urllib.request.urlretrieve("https://www.rondhuit.com/download/ldcc-20140209.tar.gz", filename)

text = ""
articles = []
article_count_limit = 1000

with tarfile.open(filename, "r") as tar:
    for member in tar.getmembers():
        if member.isfile() and member.name.endswith(".txt"):
            file_content = tar.extractfile(member).read().decode("utf-8")
            lines = file_content.split("\n")
            if len(lines) >= 4:  # URL, tarih, başlığı atla
                content = "\n".join(lines[3:]).strip()
                if content:
                    articles.append(content)
                    text += content + "\n\n"

print(f"Toplam metin uzunluğu: {len(text):,}")
print(f"Makale sayısı: {len(articles):,}")
print(f"İlk kelime hazine boyutu: {len(set(text)):,}")

Veri Seti İstatistikleri

  • 659,423 toplam karakter
  • 1,000 haber makalesi
  • 2,913 benzersiz karakter (ilk kelime hazinesi)

Temel BPE Algoritması

BPE algoritması iki ana fonksiyondan oluşur: sık çiftleri bulma ve birleştirme:

def get_pairs(tokens):
    """Bitişik karakter çiftlerini ve frekanslarını bul"""
    pairs = defaultdict(int)
    for i in range(len(tokens) - 1):
        pairs[(tokens[i], tokens[i + 1])] += 1
    return pairs

def merge_tokens(tokens, pair):
    """En sık kullanılan çifti tek token'a birleştir"""
    new_tokens = []
    i = 0
    while i < len(tokens):
        if (i < len(tokens) - 1 and 
            tokens[i] == pair[0] and tokens[i + 1] == pair[1]):
            new_tokens.append(pair[0] + pair[1])  # Çifti birleştir
            i += 2
        else:
            new_tokens.append(tokens[i])
            i += 1
    return new_tokens

Tokenizer Eğitimi

Bireysel karakterlerden başlayıp en sık çiftleri iteratif olarak birleştiriyoruz:

# Karakter seviyesi token'larla başlat
tokens = list(text)  # Ayrı karakterlere böl
vocab = set(tokens)
target_vocab_size = 5000

while len(vocab) < target_vocab_size:
    # En sık kullanılan bitişik çifti bul
    pairs = get_pairs(tokens)
    if not pairs:
        break
    
    best_pair = max(pairs, key=pairs.get)
    
    # Bu çiftin tüm örneklerini birleştir
    tokens = merge_tokens(tokens, best_pair)
    vocab.add("".join(best_pair))
    
    if merge_count % 100 == 0:
        print(f"Birleştirme {merge_count}: kelime hazine {len(vocab)}, token {len(tokens)}")
Birleştirme # Birleştirilen Çift Yeni Token Frekans
1 最 + 近 最近 847
2 T + V TV 523
3 で + も でも 412
4 人 + 気 人気 389
5 者 + の 者の 301

Yeni Metin Tokenizasyonu

Eğitim sonrasında, BPE kelime hazinesini yeni metni tokenize etmek için uygulayabiliriz:

def tokenize_with_bpe(text):
    """Öğrenilen BPE birleştirmelerini yeni metne uygula"""
    tokens = list(text)  # Karakterlerden başla
    changed = True
    
    while changed:
        changed = False
        new_tokens = []
        i = 0
        while i < len(tokens):
            # Bitişik çiftin kelime hazinesinde olup olmadığını kontrol et
            if (i < len(tokens) - 1 and 
                tokens[i] + tokens[i + 1] in vocab):
                new_tokens.append(tokens[i] + tokens[i + 1])
                i += 2
                changed = True
            else:
                new_tokens.append(tokens[i])
                i += 1
        tokens = new_tokens
    return tokens

Sonuçlar ve Performans

Sonuçlar BPE'nin Japonca metin için etkinliğini gösteriyor:

# Eğitim Sonuçları:
Toplam metin uzunluğu: 659,423
Makale sayısı: 1,000
İlk kelime hazine boyutu: 2,913
BPE sonrası kelime hazine boyutu: 5,000

# Sıkıştırma Sonuçları:
Orijinal karakter sayısı: 659,423
BPE token'ları: 379,352
Sıkıştırma: %42.5

Girdi

659,423

karakter

Çıktı

379,352

BPE token

Sıkıştırma

%42.5

azalma

Tokenizasyon Örneği

Eğitilmiş BPE modelimizle bir Japonca cümlenin nasıl tokenize edildiğine dair örnek:

Orijinal: 最近TVでも人気者のお笑いコンビ「しずる」のメンバーで...

BPE Token'ları:

最近TVでも人気者の笑いコンビしずるメンバーリアル ...

BPE'nin herhangi bir dilbilimsel ön işleme olmadan "最近" (yakın zamanda), "人気" (popüler) ve "者の" (kişinin) gibi anlamlı alt-kelime birimlerini otomatik olarak öğrendiğine dikkat edin!

Japonca İçin Neden Önemli

Japonca tokenizasyon için benzersiz zorluklar sunar:

  • Kelimeler arasında boşluk yok: BPE kelime sınırlarını otomatik öğrenir
  • Birden fazla yazı sistemi: Hiragana, katakana ve kanji'yi sorunsuz işler
  • Bileşik kelimeler: Sık kanji kombinasyonlarını tek token olarak öğrenir
  • Edatlar ve gramer: "の", "で", "も" gibi gramer kalıplarını yakalar

Kendiniz Deneyin

Eksiksiz uygulama GitHub'da interaktif Jupyter notebook olarak mevcut. Şunları yapabilirsiniz:

  • Japonca külliyat üzerinde BPE eğitimi çalıştırın
  • Farklı kelime hazine boyutlarıyla deney yapın
  • Kendi Japonca metninizde tokenizasyonu test edin
  • Sıkıştırma istatistiklerini analiz edin

Kodu Alın

GitHub'da eksiksiz uygulamaya göz atın:

GitHub'da Görüntüle →

Sonuç

BPE, karakter seviyesi sağlamlık ile kelime seviyesi semantik arasında mükemmel denge sağlar. Basit başlayıp veri-odaklı birleştirme yoluyla karmaşıklık inşa ederek hem kompakt hem de anlamlı kelime hazineleri oluşturur.

Özellikle Japonca metin için BPE'nin dil kalıplarını otomatik olarak keşfetme yeteneği, onu modern NLP uygulamaları için ideal bir seçim yapar. Anlamsal anlamı korurken elde ettiğimiz %42.5 sıkıştırma, etkinliğini göstermektedir.

Dil modelleri, makine çeviri sistemleri veya metin analiz araçları geliştiriyorsanız, BPE'yi anlamak ve uygulamak herhangi bir dille, özellikle Japonca gibi morfolojik olarak zengin dillerle çalışırken vazgeçilmezdir.

Bu blog İngilizce'den LLM ile çevrilmiştir. Herhangi bir belirsizlik durumunda İletişim sayfasından bana ulaşabilirsiniz.

Yorum bırak

Yorumlar

Şuan yorum yok.

Diğer bloglara bak

Q-Learning: İnteraktif Pekiştirmeli Öğrenmenin Temeli

2025/07/07

Q-Learning: İnteraktif Pekiştirmeli Öğrenmenin Temeli

Q-LearningPekiştirmeli ÖğrenmeKeşif vs KullanımMakine ÖğrenmesiAIİnteraktifGrid WorldDeğer Fonksiyonu
Optimizasyon Algoritmaları: SGD, Momentum ve Adam

2025/07/06

Optimizasyon Algoritmaları: SGD, Momentum ve Adam

OptimizasyonSGDAdamMomentumMakine ÖğrenmesiDerin ÖğrenmeSinir AğlarıAlgoritmalar
Svelte ve JavaScript ile Basit ve Dinamik Bir Tooltip Yaratma Yöntemi

2024/06/19

Svelte ve JavaScript ile Basit ve Dinamik Bir Tooltip Yaratma Yöntemi

JavaScriptSvelteKolayBasitDinamikTooltipFront-end
JavaScript ile Tokyo'nun İnteraktif Haritasını Oluşturun

2024/06/17

JavaScript ile Tokyo'nun İnteraktif Haritasını Oluşturun

SvelteSVGJavaScriptTailwindInteraktif HaritaTokyoJaponya23 WardsTokyo Metropolitan Bölgesi
Matplotlib'de Japonca Karakter Sorununu Çözme Yöntemi

2024/06/14

Matplotlib'de Japonca Karakter Sorununu Çözme Yöntemi

MatplotlibGrafikÇizimPythonJaponca KarakterlerSorunBug
Kitap İncelemesi | Ötekiyle Konuşmak by Malcolm Gladwell

2024/06/13

Kitap İncelemesi | Ötekiyle Konuşmak by Malcolm Gladwell

Kitap İncelemesiÖtekiyle KonuşmakTalking to StrangersMalcolm Gladwell
Japonca'da En Sık Kullanılan 3.000 Kanji

2024/06/07

Japonca'da En Sık Kullanılan 3.000 Kanji

3000Kullanma YayginligiKanji KullanimiKanjiJaponcaKanji ListesiKanji YayginligiJLPTJaponca CalismaOgrenmeYaygin Japonca Kelimeler
VSCode'da Regex Kullanarak Replace Yapma Yöntemi

2024/06/07

VSCode'da Regex Kullanarak Replace Yapma Yöntemi

VSCodeRegexAramaDeğiştirmeKoşullu DeğiştirmeFindReplaceConditional Replace
Svelte'de Readable Store Kullanmayın

2024/06/06

Svelte'de Readable Store Kullanmayın

SvelteReadableWritableState ManagementStoreHızBellekDosya Boyutu
Dosyaları Gzip ve Pako ile Sıkıştırarak Web Sitesinin Yükleme Hızını Artırın

2024/06/05

Dosyaları Gzip ve Pako ile Sıkıştırarak Web Sitesinin Yükleme Hızını Artırın

GzipSıkıştırmaPakoWeb SitesiYükleme HızıSvelteKit
Web Sayfasında Farenin Uzerinde Oldugu Kelimeyi JavaScript ile Bulun

2024/05/31

Web Sayfasında Farenin Uzerinde Oldugu Kelimeyi JavaScript ile Bulun

JavascriptFarePointerHoverWeb Geliştirme
Svelte ve SVG ile Interaktif Harita Oluşturun

2024/05/29

Svelte ve SVG ile Interaktif Harita Oluşturun

SvelteSVGInteraktif HaritaFront-end
Kitap İncelemesi | Geleneklere Uymayanlar Dünyayı Nasıl İleri Taşıyor? by Adam Grant & Sheryl Sandberg

2024/05/28

Kitap İncelemesi | Geleneklere Uymayanlar Dünyayı Nasıl İleri Taşıyor? by Adam Grant & Sheryl Sandberg

Kitap İncelemesiGeleneklere Uymayanlar Dünyayı Nasıl İleri Taşıyor?Originals: How Non-Conformists Move the WorldAdam Grant & Sheryl Sandberg
Javascript Kullanarak Sudoku Nasıl Çözülür?

2024/05/27

Javascript Kullanarak Sudoku Nasıl Çözülür?

Sudoku ÇözümAlgoritmaJavaScriptKodlama
Web Siteme Gelen Trafiği Bir Ayda Nasıl 10 Kat Artırdım?

2024/05/26

Web Siteme Gelen Trafiği Bir Ayda Nasıl 10 Kat Artırdım?

Website Trafik ArtırmaClick (Tıklama)Impression (Gösterim)Google Search Console
Hayat Bisiklet Sürmek Gibidir

2024/05/24

Hayat Bisiklet Sürmek Gibidir

BisikletHayatFilozofiBaşarı
JavaScript'te Backtracking Algoritması ile Tamamlanmış Sudoku Oluşturun

2024/05/19

JavaScript'te Backtracking Algoritması ile Tamamlanmış Sudoku Oluşturun

SudokuBacktracking AlgoritmasıTamamlanmış SudokuJavaScript
Tailwind Neden Harikadır ve Web Geliştirmeyi Nasıl Kolay Hale Getirir?

2024/05/16

Tailwind Neden Harikadır ve Web Geliştirmeyi Nasıl Kolay Hale Getirir?

TailwindHarikaFront-endWeb Geliştirme
Python ve Git Hooks ile Otomatik Olarak Site Haritası Oluşturma

2024/05/15

Python ve Git Hooks ile Otomatik Olarak Site Haritası Oluşturma

Git HooksPythonSite HaritasıSvelteKit
Kitap İncelemesi | Çok Yönlü - Başarı İçin Neden Çok Şeyle İlgilenmeliyiz? by David Epstein

2024/05/14

Kitap İncelemesi | Çok Yönlü - Başarı İçin Neden Çok Şeyle İlgilenmeliyiz? by David Epstein

Kitap İncelemesiRange(Çok Yönlü)David EpsteinBaşarı İçin Neden Çok Şeyle İlgilenmeliyiz?
Svelte ve SvelteKit nedir?

2024/05/13

Svelte ve SvelteKit nedir?

SvelteSvelteKitFront-endVite
SvelteKit ile Internationalization (Çoklu Dil Desteği)

2024/05/12

SvelteKit ile Internationalization (Çoklu Dil Desteği)

InternationalizationÇoklu Dil DestegiSvelteKitI18N
Svelte'de Caching ile Deploy Süresini Azaltın

2024/05/11

Svelte'de Caching ile Deploy Süresini Azaltın

SvelteEnhanced ImageCachingDeploy Suresi
Svelte ve Intersection Oberver ile Lazy-Load

2024/05/10

Svelte ve Intersection Oberver ile Lazy-Load

Lazy LoadingWebsite Hiz OptimizasyonuSvelteIntersection Observer
Genetik Algoritma İle Hisse Senedi Portföyü Optimizasyonu

2024/05/10

Genetik Algoritma İle Hisse Senedi Portföyü Optimizasyonu

Hisse SenediPortföy OptimizasyonuGenetik AlgoritmaPython
ShapeFile Formatini SVG Formatina Degistirme Yontemi

2024/05/09

ShapeFile Formatini SVG Formatina Degistirme Yontemi

ShapeFileSVGPythonGeoJSON
Svelte'de Reaktivite: Variables, Binding, ve Key Fonksiyonu

2024/05/08

Svelte'de Reaktivite: Variables, Binding, ve Key Fonksiyonu

SvelteSayfa GuncellemeBindingKey Fonksiyonu
Kitap İncelemesi | Savaş Sanatı - Sun Tzu

2024/05/07

Kitap İncelemesi | Savaş Sanatı - Sun Tzu

Kitap İncelemesiThe Art of War (Savaş Sanatı)Sun TzuThomas Cleary
Specialistlik Bitti. Yaşasın Generalistlik!

2024/05/06

Specialistlik Bitti. Yaşasın Generalistlik!

GenelUzmanParadigma DegisimiYazilim Muhendisligi
2018 Milletvekili Seçimlerinde Yaşa Göre Parti Eğilimi

2024/05/03

2018 Milletvekili Seçimlerinde Yaşa Göre Parti Eğilimi

PythonSecmen Profil Analizi2018 Milletvekili SecimleriSecmen Yas Analizi
Python Selenium Ile Secmen Veritabani Olusturma

2024/05/01

Python Selenium Ile Secmen Veritabani Olusturma

PythonSeleniumVeri KazimaMilletvekili Secimleri
Svelte ve Tailwind Ile Infinite Scroll Yapma Yontemi

2024/04/30

Svelte ve Tailwind Ile Infinite Scroll Yapma Yontemi

SvelteTailwindInfinite ScrollFront-end
1 Yıl İçerisinde Japonca Konuşabilmek

2024/04/29

1 Yıl İçerisinde Japonca Konuşabilmek

JaponcaDil yeterliligiJLPTKisa zamanda dil ogrenme
Svelte ve Tailwind ile Kullanıma Hazır Web Sitesi Şablonu

2024/04/25

Svelte ve Tailwind ile Kullanıma Hazır Web Sitesi Şablonu

Website SablonuFront-endSvelteTailwind
Tembel Muhendisler Kotu Urunler Yapar

2024/01/29

Tembel Muhendisler Kotu Urunler Yapar

Tembel MuhendisKotu UrunStarbucksSBI
Mukemmellik Uzerine

2024/01/28

Mukemmellik Uzerine

MukemmellikHayatin anlamiTatmin Edici HayatAmac
MacBook'ta PDF'i PNG'ye Cevirme Yontemi

2024/01/28

MacBook'ta PDF'i PNG'ye Cevirme Yontemi

PDFPNGMacBookAutomator
2023'u Kapatiyoruz: Bu Yil Okunan 24 Kitap

2023/12/31

2023'u Kapatiyoruz: Bu Yil Okunan 24 Kitap

KitapOkuma2023Geriye Bakma
Python PIL Kullarak Foto Kolaji Yapma Yontemi

2023/12/30

Python PIL Kullarak Foto Kolaji Yapma Yontemi

PythonPILGörüntü işlemeKolaj
Site Ziyaretcilerinin Alet ve Tarayicilarini Tespit Etme Yontemi

2024/01/09

Site Ziyaretcilerinin Alet ve Tarayicilarini Tespit Etme Yontemi

JavascriptAlet TespitiBrowser TespitiWebsite Analizi
ChatGPT Cevap Anatomisi

2024/01/19

ChatGPT Cevap Anatomisi

ChatGPTBuyuk Dil ModeliMakina OgrenimiYapay Zeka