This guide is written in Turkish.

Türkçe doğal dil işleme (NLP): neden zor, hangi araçlar var?

ALTAIGüncelleme: 6 dk okuma

Türkçe doğal dil işleme (NLP), bilgisayarların Türkçe metni sözcüklere ayırması, çözümlemesi, düzeltmesi ve anlamına göre araması için kullanılan yöntem ve araçların bütünüdür. Türkçe sondan eklemeli bir dil olduğu için tek bir kök yüzlerce farklı biçimde görünebilir; bu yüzden İngilizce için tasarlanmış araçlar Türkçede sık hata yapar. Temel görevler tokenizasyon, morfolojik analiz, yazım ve dilbilgisi düzeltme, kişisel veri maskeleme, yapay zekâ metni tespiti ve aramadır; Zemberek, Zeyrek ve ALTAI’nin açık kaynak kütüphanesi Akana bu işler için kullanılan araçlardandır.

Türkçe NLP ne işe yarar?

Kurumlarda Türkçe NLP çoğu zaman görünmeyen bir katmandır. Belge arama uygulamasının indeksini kurar, müşteri mesajlarını sınıflandırır, bir metni dil modeline göndermeden önce kişisel verileri maskeler, yazışmalardaki yazım hatalarını düzeltir.

Büyük dil modelleri (LLM) Türkçeyi artık iyi anlıyor. Yine de milyonlarca belgeyi indekslemek, her isteği maskelemek ya da yazım kurallarını tutarlı uygulamak gibi işler, CPU’da hızlı çalışan ve her seferinde aynı sonucu veren araçlarla yapılır. LLM bu hattın bir parçasıdır, tamamı değil.

Türkçeyi NLP için zor yapan ne?

Sondan eklemeli yapı. Türkçede anlam, köke eklenen eklerle kurulur. “okullarımızdakilerden” tek sözcükte yedi parçadır: okul + lar + ımız + da + ki + ler + den. “çalıştırılamayacakmış” bir fiil kökü ve beş ekten oluşur: çalış + tır + ıl + ama + yacak + mış. Sözlükte “okul” arayan bir araç, kökü bulmadan bu sözcüğü eşleştiremez.

Ses değişimleri. Ekler ünlü uyumuna göre biçim değiştirir (-lar/-ler, -da/-de/-ta/-te); kökler de ek alınca değişebilir. “kitabıma” sözcüğünde kök “kitab” olarak görünür; doğru analiz onu sözlükteki “kitap” biçimine döndürür.

Türkçe karakterler. Türkçede ç, ğ, ı, ö, ş ve ü harfleri vardır; en çok sorun çıkaran, noktalı ve noktasız i’dir. Dile duyarsız bir küçük harfe çevirme işlemi “IŞIK” sözcüğünü “ışık” yerine “işik” yapar. Gündelik yazışmalarda Türkçe karakterler hiç kullanılmayabilir (“cok guzel”) ya da sözcükler kısaltılır (“yapcam”).

Kesme işareti ve birleşik sözcükler. Özel adlara gelen ekler kesmeyle ayrılır (İstanbul’da); tokenizer bunu doğru tanımalıdır. Birleşik sözcüklerin bitişik ya da ayrı yazımı, “de/da” ve “ki” bağlaçları ve “mi” soru eki en sık yapılan yazım hatalarındandır.

Alt sözcük parçalama. Çok dilli modellerin tokenizer’ları (sözcük ayırıcıları) Türkçe sözcükleri çoğu zaman birkaç parçaya böler. Aynı içerik daha çok token tutar ve modelin bağlam penceresi daha hızlı dolar.

Temel görevler

GörevNe yaparÖrnek
TokenizasyonMetni sözcük ve cümlelere ayırır; kısaltma, tarih ve adresleri bölmez“Dr. Ayşe 3 Mart’ta geldi.” tek cümledir
Morfolojik analizSözcüğün kökünü ve eklerini bulurkitabıma → kitap + ım + a
Yazım denetimiYanlış yazımı ve eksik Türkçe karakteri düzeltircok guzel → çok güzel
Dilbilgisi düzeltmeBağlaç, ek ve kesme işareti hatalarını bulurBende geldim → Ben de geldim
Kişisel veri maskelemeKimlik numarası, IBAN, telefon, API anahtarı gibi alanları yer tutucuyla değiştirirTR… → [IBAN]
Yapay zekâ metni tespitiLLM’le yazılmış metnin izlerini arartekrarlanan “-mektedir” yapısı
AramaSözcüklere (BM25) ve anlama (anlamsal arama) göre ilgili metni bulur“faturamı nasıl öderim” → ödeme yöntemleri bölümü

Hangi açık kaynak araçlar var?

  • Zemberek (Zemberek-NLP): Java ile yazılmıştır; morfolojik analiz, tokenizasyon, metin normalleştirme ve yazım denetimi gibi modüller içerir. Türkçe NLP’de uzun süredir kullanılan bir kütüphanedir.
  • Zeyrek: Zemberek’in morfolojik analizcisinin Python’a kısmi uyarlamasıdır; Python projelerinde kök ve ek analizi için kullanılır.
  • Türkçe ve çok dilli modeller: BERTurk gibi Türkçe Transformer modelleri sınıflandırma ve varlık tanıma için ince ayarla kullanılır. Anlamsal arama için bkz. Türkçe embedding modelleri.
  • Akana: ALTAI’nin geliştirdiği Türkçe NLP kütüphanesi. Rust ile yazılmıştır, Python’dan, komut satırından ve Rust’tan kullanılır, donanım SIMD hızlandırması kullanır. MIT / Apache-2.0 lisanslıdır.

Akana’nın sekiz aracı ve projenin kendi testlerindeki (README) değerler:

AraçNe yaparÖlçüm
TokenizerKesme işaretli özel adları, kısaltmaları, adresleri, tarihleri ve para birimlerini doğru ayıran kurala dayalı sözcük ve cümle ayırıcıSaniyede yaklaşık 950.000 token
Morfolojik analiz93.167 köklük sözlükle kök ve ek analizi, birleşik sözcük ayrıştırma, analizden sözcük üretmeZeyrek’ten yaklaşık 56 kat hızlı
Dilbilgisi denetimi ve düzeltmeGECTurk’ün 25 kategorisinin tamamında (de/da, ki, mi, kesme işareti, birleşik yazım) açıklamalı düzeltmeTek CPU çekirdeğinde saniyede 1.471 cümle
Yazım denetimiSIMD hızlandırmalı yazım denetimi, Türkçe karakter düzeltme, gündelik yazımı düzeltme (yapcam → yapacağım)—
Kişisel veri ve gizli anahtar maskelemeKimlik numarası, IBAN ve telefondan API anahtarlarına ve şifrelere kadar kişisel veri ve sır sayılan 50’den fazla kategori; doğrulama algoritmaları ve kayıpsız geri yüklemeSaniyede yaklaşık 3.570 belge
Yapay zekâ metni tespitiNoktalama tuhaflıkları, tekrarlanan -mektedir yapısı, tekdüze ritim, bürokratik bağlaçlar, çeviri kokan ifadeler—
Türkçe humanizer (insansılaştırıcı)Bu bulguları beş üslupta somut yeniden yazım önerilerine çevirir—
Anlamsal ve hibrit arama2,5 MB’lık yerleşik Türkçe embedding modeli; ALTAI’nin kendi geliştirdiği yöntemle 1-bit vektörler morfolojik BM25 ile birleşirSaniyede 20.000 cümle; Türkçe RAG testlerinde yalnız CPU ile %96,7–100 Recall@10

İlk örnek (Akana 0.6.0):

pip install akana==0.6.0

python - <<'PY'
import akana

print(akana.tokenize_words("Kitabıma yeni notlar ekledim."))
print(akana.Morphology().analyze("kitabıma"))
PY

Ne zaman özel bir Türkçe araç gerekir?

Gerekir:

  • Arama indeksi kuruyorsanız. Kök bulmadan yapılan sözcük araması “kitap” ile “kitabıma”yı eşleştiremez.
  • Hacim büyükse. Milyonlarca belgeyi tek tek LLM’e göndererek işlemek yavaş ve pahalıdır.
  • Metin bir modele ya da kurum dışına gidecekse. Kişisel veriler önce maskelenmelidir.
  • Sonuç her seferinde aynı olmalıysa. Kurala dayalı yazım ve dilbilgisi denetiminin her düzeltmesi izlenebilir ve açıklanabilir.

Gerekmeyebilir:

  • Az sayıda metinde özetleme, çeviri ya da serbest yazım için iyi bir LLM çoğu zaman yeterlidir.
  • Embedding modelleri alt sözcük parçalarıyla çalıştığı için ayrıca morfolojik genişletme istemeyebilir. ALTAI’nin Türkçe embedding deneyinde, gerçek metin üzerinde uçtan uca eğitilen 19,36 MB’lık model STSb-TR testinde %91,36 aldı; morfolojik genişletmeyle kurulan 182 MB’lık model %86,83’te kaldı.

Adım adım: Türkçe metin işleme hattı

  1. Metni çıkarın. PDF ve DOCX dosyalarını yapısını koruyarak metne çevirin; llm-food bu dosyaları Markdown’a dönüştürür.
  2. Normalleştirin. Unicode biçimini sabitleyin, büyük-küçük harf dönüşümünü Türkçe kurallarla yapın, eksik Türkçe karakterleri düzeltin.
  3. Maskeleyin. Kişisel verileri ve gizli anahtarları, metin bir modele ya da dış servise gitmeden önce yer tutucuyla değiştirin.
  4. Ayırın ve parçalayın. Metni cümlelere ayırın, arama için anlamlı parçalara bölün.
  5. İndeksleyin. Kök ve ek analiziyle sözcük indeksi (BM25), embedding ile vektör indeksi kurun; ikisini hibrit aramada birleştirin.
  6. Ölçün. Kullanıcılarınızın sorularıyla doğru parçanın ilk sonuçlarda gelip gelmediğini (Recall@10) ölçün.

Dikkat edilmesi gerekenler

  • Yayımlanan hız ve doğruluk değerleri, ölçüldükleri veriye ve donanıma bağlıdır. Akana’nın değerleri de projenin kendi testleridir; kararı kendi metinlerinizle verin.
  • Yapay zekâ metni tespiti bir işarettir, kanıt değildir. Bir kişi hakkında karar vermek için tek başına kullanmayın.
  • Maskeleme teknik bir önlemdir; bir veri işlemenin KVKK’ya uygun olup olmadığını tek başına belirlemez. Bu metin hukuki danışmanlık değildir; kendi durumunuz için bir hukukçuya danışın.
  • Kütüphane sürümünü sabitleyin. Tokenizer ya da sözlük değişirse indeksi yeniden kurmanız gerekebilir.

ALTAI’de nasıl yapıyoruz

Akana’yı Türkçe belge arama uygulamalarında kullanıyoruz: kurumunuzun metinlerini işliyor, arama için parçaları hazırlıyor ve sonuçları kendi örneklerinizle test ediyoruz. Doküman Asistanı projelerinde seçtiğiniz PDF ve DOCX belgelerini indeksliyor, Türkçe sorular ve kurum terimleriyle test ediyor, her yanıtla birlikte dayandığı belge bölümünü gösteriyoruz. Model isteklerinde hassas bilgilerin maskelenmesini ya da isteğin yerel modelde tutulmasını Yada yönetir. Kurulum adımları Akana sayfasında; kendi metinleriniz için bize yazın.

Sık sorulan sorular

Türkçe NLP için hangi kütüphaneyi kullanmalıyım?

İşe ve kullandığınız programlama diline göre değişir. Java projelerinde Zemberek, Python’da morfolojik analiz için Zeyrek yaygın seçeneklerdir. Tokenizasyondan maskelemeye ve hibrit aramaya kadar birden fazla işi tek kütüphaneyle yapmak istiyorsanız Akana’yı deneyebilirsiniz; hangisini seçerseniz seçin, kendi metinlerinizle küçük bir test yapın.

Büyük dil modelleri varken Türkçe NLP araçlarına hâlâ gerek var mı?

Evet, ama farklı işler için. LLM’ler anlamada ve metin üretmede güçlüdür; arama indeksi, büyük hacimli ön işleme, maskeleme ve kurala dayalı denetim ise hızlı ve tutarlı araçlarla yapılır. Çoğu kurumsal sistemde ikisi aynı hatta birlikte çalışır.

Noktalı ve noktasız i sorunu nasıl çözülür?

Büyük-küçük harf dönüşümünü Türkçe yerel ayarıyla (tr-TR) yapın; dile duyarsız dönüşüm “I” harfini “ı” yerine “i” yapar. Arama tarafında sorguyu ve belgeyi aynı kurallarla normalleştirin. Türkçe karakter kullanılmadan yazılmış metinlerde karakter düzeltme (“cok” → “çok”) eşleşmeyi artırır.

Akana ücretsiz mi, ticari projede kullanılabilir mi?

Akana açık kaynaktır ve MIT / Apache-2.0 lisanslıdır. Her iki lisans da ticari kullanıma izin verir; yine de lisans koşullarını kendi projeniz için kontrol edin. Kurulum pip install akana==0.6.0 komutuyla yapılır.

Yapay zekâyla yazılmış Türkçe metin kesin olarak tespit edilebilir mi?

Hayır. Tespit araçları noktalama tuhaflıkları, tekrarlanan kalıplar ve tekdüze ritim gibi işaretlere bakar; insanlar da böyle yazabilir, düzenlenmiş model çıktısı da bu işaretleri taşımayabilir. Sonucu bir inceleme önerisi olarak kullanın.