NaturalLanguage, iOS ve macOS cihazlarında doğal dil işleme için Apple'ın bir framework'üdür ve tokenization, dil tanıma, konuşma bölümü etiketleme, lemmatization ve adlandırılmış varlık tanımaya erişim sağlar. Apple WWDC 2020'ye göre, framework tüm analizi cihaz üzerinde gerçekleştirir, verileri sunucuya göndermeden, kullanıcı verilerinin gizliliğini sağlar. NaturalLanguage 30'dan fazla dili destekler ve özel NLP modelleri için Core ML ile entegre olur.
Önemli Noktalar
NaturalLanguage (NL), doğal dil analizi için Apple'ın bir makine öğrenimi framework'üdür, Foundation'ın bir parçasıdır ve iOS 12+, macOS 10.14+ ve watchOS 5+'te kullanılabilir. Framework, özel modeller eğitme ihtiyacı olmadan kullanıma hazır NLP yetenekleri sağlar.
Bulut NLP hizmetlerinin (Google Cloud NLP, Amazon Comprehend) aksine, NaturalLanguage tüm analizi cihaz üzerinde gerçekleştirir. Bu, sıfır ağ gecikmesi, çevrimdışı çalışma ve tam veri gizliliği anlamına gelir — metin kullanıcının cihazından asla ayrılmaz.
Apple ML Research 2023'e göre, A12+ yongalarında cihaz üzeri NLP, temel görevler için %85'in üzerinde doğruluk sağlarken benzer bulut çözümlerinden 3–5 kat daha hızlı istek işler. Framework, modern cihazlarda saniyede 100 isteğe kadar işleyebilen Neural Engine için optimize edilmiştir.
NaturalLanguage, iOS uygulamalarında inceleme analizi, akıllı arama, otomatik tamamlama, içerik denetleme ve yapılandırılmamış metinden yapılandırılmış veri çıkarma için kullanılır. Framework, Rusça, Ukraynaca, Türkçe ve Arapça dahil 30'dan fazla dili destekler.
NLTokenizer, metni dilsel birimlere (kelimeler, cümleler, paragraflar veya belgeler) ayırmak için bir sınıftır. Tokenization, neredeyse her NLP hattının ilk adımıdır ve NaturalLanguage bunu kullanıma hazır sağlar.
NLTokenizer, dile özgü özellikleri dikkate alır: Japonca (kelimeler arasında boşluk yok), Arapça (sağdan sola yazı) ve Çince (logografik yazı) için tokenization'ı doğru şekilde işler. İngilizce ve Rusça için tokenizer, boşluklar ve noktalama işaretleriyle çalışır ancak kısaltmaları dikkate alır (don't → do + n't).
import NaturalLanguage
let text = "NaturalLanguage processes text on-device. It supports 30+ languages!"
let tokenizer = NLTokenizer(unit: .word)
tokenizer.string = text
tokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { range, _ in
print(text[range])
return true
}
Cümle düzeyinde tokenization, daha ileri analizden önce büyük metinleri mantıksal bloklara ayırmak için kullanışlıdır. NLTokenizer, sonunda nokta olmasa veya soru cümleleri mevcut olsa bile cümle sınırlarını belirleyecektir.
let sentenceTokenizer = NLTokenizer(unit: .sentence)
sentenceTokenizer.string = text
sentenceTokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { range, _ in
print("Sentence: \\(text[range])")
return true
}
NLTokenizer, NaturalLanguage'in diğer tüm yeteneklerinin temelidir. Tokenization'dan sonra metin, dil tanıma, etiketleme ve lemmatization için hazırdır.
NLLanguageRecognizer, metnin dilini belirler ve bir güven skoruyla en olası seçeneği döndürür. Framework, 30'dan fazla dili destekler ve tek bir kelimeden tüm bir belgeye kadar her uzunluktaki metinle çalışabilir.
NLLanguageRecognizer algoritması, karakter n-gramlarını analiz eder ve bunları dil profilleriyle karşılaştırır. Kısa metinler için (50 karaktere kadar), doğruluk azalır, bu nedenle Apple, güvenilir dil tanımlaması için en az 100–200 karakter gönderilmesini önerir.
import NaturalLanguage
let recognizer = NLLanguageRecognizer()
recognizer.processString("Hello, how are you? I am learning NaturalLanguage.")
if let language = recognizer.dominantLanguage {
print("Dominant language: \\(language.rawValue)") // "ru"
}
let hypotheses = recognizer.languageHypotheses(withMaximum: 3)
for (lang, prob) in hypotheses {
print("\\(lang.rawValue): \\(prob)")
}
languageHypotheses yöntemi, azalan sırada olasılıklarla bir dil sözlüğü döndürür. Bu, metin bir dil karışımı içerdiğinde veya kullanıcıya yalnızca baskın dil yerine seçim yapabileceği birden çok seçenek göstermeniz gerektiğinde kullanışlıdır.
NaturalLanguage, 100 karakter veya daha fazla metin için Rusçayı %95 doğrulukla tanımlar. Kısa metinler (1–2 kelime) için doğruluk %60–70'e düşer — bu gibi durumlarda, languageHypotheses kullanmak ve ilk 3 seçeneği göstermek daha iyidir.
NLTagScheme, dilsel analiz için etiketleme şemaları sağlar: konuşma bölümleri (isim, fiil, sıfat), lemler (bir kelimenin temel biçimi), varlık türleri (kişi, kuruluş, yer) ve diğer kategoriler.
Lemmatization, bir kelimeyi sözlük biçimine indirger: koştu → koşmak, daha iyi → iyi, books → book. Bu, arama ve metin analizi için kritik öneme sahiptir — lemmatization olmadan, kedi ve kediler farklı tokenler olarak ele alınır ve bu da NLP hatlarının kalitesini düşürür.
import NaturalLanguage
let tagger = NLTagger(tagSchemes: [.lemma, .lexicalClass])
tagger.string = "The cats were running quickly."
tagger.enumerateTags(in: tagger.string!.startIndex..<tagger.string!.endIndex,
unit: .word,
scheme: .lexicalClass) { tag, range in
print("\\(tagger.string![range]): \\(tag?.rawValue ?? "unknown")"
}
Örnek çıktı: cats → İsim, were → Fiil, quickly → Zarf. Lemmatization ve konuşma bölümlerini birleştirerek, koşan kediler sorgusundan koş kedi bulan akıllı bir arama oluşturabilirsiniz.
NLTagScheme.lemma, Rusça dahil NaturalLanguage tarafından desteklenen tüm dillerde çalışır. Bu, NLTagger'ı her dil için ayrı modeller yükleme gereği olmadan çok dilli uygulamalar için çok yönlü bir araç haline getirir.
Adlandırılmış Varlık Tanıma (NER), metinden adlandırılmış varlıkları (kişi adları, kuruluş adları, coğrafi konumlar ve kişisel veriler) çıkarma görevidir. NaturalLanguage, NLTagScheme.nameType aracılığıyla NER'yi destekler.
NLTagScheme.nameType üç tür varlığı ayırt eder: PersonalName, OrganizationName ve PlaceName. Bu, haberlerden, e-postalardan ve incelemelerden yapılandırılmış verilerin otomatik olarak çıkarılmasını sağlar.
let nerTagger = NLTagger(tagSchemes: [.nameType])
nerTagger.string = "Tim Cook announced Apple's new headquarters in Cupertino."
nerTagger.enumerateTags(in: nerTagger.string!.startIndex..<nerTagger.string!.endIndex,
unit: .word,
scheme: .nameType) { tag, range in
if tag != nil {
print("\\(nerTagger.string![range]): \\(tag!.rawValue)"
}
}
Sonuç: Tim Cook → PersonalName, Apple → OrganizationName, Cupertino → PlaceName. NaturalLanguage NER, özel eğitim gerektirmez ve İngilizce, Fransızca, Almanca, İspanyolca ve diğer diller için hemen çalışır.
Rusça için NER desteklenir ancak doğruluk biraz daha düşüktür — İngilizce için %85'e kıyasla yaklaşık %70–75. Rusça için yüksek doğruluk gerekiyorsa, Apple Create ML kullanarak kendi verilerinizle özel bir Core ML modeli eğitmenizi önerir.
NLModel, Apple tarafından önceden eğitilmiş yerleşik duygu analizi modeli dahil olmak üzere eğitilmiş Core ML NLP modelleriyle çalışmak için bir sınıftır. Model, metnin duygusunu belirler: olumlu, olumsuz veya nötr.
Yerleşik duygu analizi modeli, App Store incelemeleri üzerinde eğitilmiştir ve İngilizce, Fransızca, Almanca, İtalyanca, İspanyolca, Portekizce, Çince ve Japonca için çalışır. Rusça için model önceden eğitilmemiştir — Create ML ve kendi etiketlenmiş verilerinize ihtiyacınız vardır.
import NaturalLanguage
let sentimentPredictor = try NLModel(mlModel: SentimentModel().model)
let sentiment = sentimentPredictor.predictedLabel(for: "This app is amazing!")
print("Sentiment: \\(sentiment ?? "neutral")") // "positive"
NLModel ayrıca Create ML aracılığıyla eğitilmiş özel modelleri de destekler. Kendi verilerinizle (ürün kategorileri, destek bileti türleri, dil stilleri) bir metin sınıflandırma modeli eğitebilir ve aynı NLModel arayüzü üzerinden kullanabilirsiniz.
Apple Create ML belgeleri 2024'e göre, özel bir metin modeli %80–95 doğruluk elde etmek için 500–5000 örnek üzerinde eğitilir. NaturalLanguage, modeli bir kez yükler ve sonraki çağrılar için önbelleğe alarak tekrarlanan isteklerde gecikmeyi en aza indirir.
| NLP Görevi | NaturalLanguage Sınıfı | Rusça Desteği |
|---|---|---|
| Tokenization | NLTokenizer | Evet |
| Dil Tanıma | NLLanguageRecognizer | Evet |
| Lemmatization | NLTagger + .lemma | Evet |
| Konuşma Bölümü | NLTagger + .lexicalClass | Evet |
| NER | NLTagger + .nameType | Sınırlı |
| Duygu | NLModel (önceden eğitilmiş) | Hayır |
Sıkça Sorulan Sorular
NaturalLanguage, eğitim gerektirmeden kullanıma hazır NLP modelleri sağlar: tokenization, dil tanıma, NER. Core ML, kendi verilerinizle bir model eğitmenizi gerektirir ve belirli görevler için daha fazla esneklik sunar. NaturalLanguage temel kullanıma hazır görevler için daha iyidir, Core ML ise yüksek düzeyde uzmanlaşmış görevler içindir.
Evet, NaturalLanguage internet bağlantısı olmadan tamamen cihaz üzerinde çalışır. Tüm modeller iOS ve macOS'e yerleşiktir ve veriler bir sunucuya gönderilmez. Bu, ağ erişimi gerektiren ve gizlilik riskleri oluşturan bulut NLP hizmetlerine göre önemli bir avantajdır.
NaturalLanguage, Rusça, İngilizce, İspanyolca, Fransızca, Almanca, İtalyanca, Portekizce, Çince, Japonca, Korece, Arapça, Türkçe ve Ukraynaca dahil 30'dan fazla dili destekler. Tokenization ve lemmatization doğruluğu desteklenen tüm dillerde yüksektir, NER ve duygu analizi ise esas olarak İngilizce içindir.
Create ML'yi kullanın — programlama olmadan makine öğrenimi modelleri eğitmek için Apple'ın uygulaması. Etiketlenmiş bir veri kümesi (CSV veya JSON) yükleyin, bir metin sınıflandırma veya etiketleme görevi seçin, modeli eğitin ve Core ML formatına (.mlmodel) aktarın. Ardından koddaki NLModel(mlModel:) aracılığıyla modeli yükleyin.
NaturalLanguage, iOS 12+, macOS 10.14+, watchOS 5+ ve tvOS 12+'te kullanılabilir. A12+ yongası ve Neural Engine'li cihazlarda, donanım hızlandırmalı makine öğrenimi sayesinde metin işleme 3–5 kat hızlanır. Eski cihazlarda (A11 ve öncesi), framework çalışır ancak daha yavaştır.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun