NaturalLanguage — είναι ένα πλαίσιο (framework) από την Apple για επεξεργασία φυσικής γλώσσας σε συσκευές iOS και macOS, παρέχοντας πρόσβαση σε tokenization, αναγνώριση γλώσσας, επισήμανση μερών του λόγου, λεμματοποίηση και αναγνώριση ονομασμένων οντοτήτων. Σύμφωνα με το Apple WWDC 2020, το πλαίσιο εκτελεί όλη την ανάλυση στη συσκευή, χωρίς αποστολή δεδομένων στον διακομιστή, εξασφαλίζοντας την εμπιστευτικότητα των δεδομένων χρήστη. Το NaturalLanguage υποστηρίζει περισσότερες από 30 γλώσσες και ενσωματώνεται με το Core ML για προσαρμοσμένα μοντέλα NLP.
Βασικά Σημεία
NaturalLanguage (NL) — είναι ένα πλαίσιο μηχανικής μάθησης της Apple για ανάλυση φυσικής γλώσσας, μέρος του Foundation και διαθέσιμο σε iOS 12+, macOS 10.14+ και watchOS 5+. Το πλαίσιο παρέχει έτοιμες δυνατότητες NLP χωρίς να χρειάζεται εκπαίδευση δικών σας μοντέλων.
Σε αντίθεση με τις υπηρεσίες NLP cloud (Google Cloud NLP, Amazon Comprehend), το NaturalLanguage εκτελεί όλη την ανάλυση στη συσκευή. Αυτό σημαίνει μηδενική καθυστέρηση για αιτήματα δικτύου, λειτουργία σε offline λειτουργία και πλήρη εμπιστευτικότητα δεδομένων — το κείμενο δεν εγκαταλείπει τη συσκευή του χρήστη.
Σύμφωνα με το Apple ML Research 2023, το on-device NLP σε τσιπ A12+ επεξεργάζεται αιτήματα 3–5 φορές ταχύτερα από παρόμοιες cloud λύσεις, διατηρώντας ακρίβεια άνω του 85% για βασικές εργασίες. Το πλαίσιο είναι βελτιστοποιημένο για το Neural Engine, επιτρέποντας την επεξεργασία έως 100 αιτημάτων ανά δευτερόλεπτο σε σύγχρονες συσκευές.
Το NaturalLanguage χρησιμοποιείται σε εφαρμογές iOS για ανάλυση κριτικών, έξυπνη αναζήτηση, αυτόματη συμπλήρωση, μετριασμό περιεχομένου και εξαγωγή δομημένων δεδομένων από μη δομημένο κείμενο. Το πλαίσιο υποστηρίζει περισσότερες από 30 γλώσσες, συμπεριλαμβανομένων των ελληνικών, ουκρανικών, τουρκικών και αραβικών.
NLTokenizer — είναι μια κλάση για τον διαχωρισμό κειμένου σε γλωσσικές μονάδες: λέξεις, προτάσεις, παραγράφους ή έγγραφα. Το tokenization είναι το πρώτο βήμα σχεδόν κάθε pipeline NLP, και το NaturalLanguage το παρέχει έτοιμο.
Το NLTokenizer λαμβάνει υπόψη τα χαρακτηριστικά της γλώσσας: χειρίζεται σωστά το tokenization για ιαπωνικά (χωρίς κενά μεταξύ λέξεων), αραβικά (γραφή από δεξιά προς τα αριστερά) και κινεζικά (ιερογλυφική γραφή). Για αγγλικά και ελληνικά, το tokenizer λειτουργεί βάσει κενών και σημείων στίξης, λαμβάνοντας υπόψη συντομογραφίες.
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
}
Το tokenization σε επίπεδο πρότασης είναι χρήσιμο για τον διαχωρισμό μεγάλων κειμένων σε λογικά μπλοκ πριν από περαιτέρω ανάλυση. Το NLTokenizerSentence θα καθορίσει τα όρια των προτάσεων ακόμα και χωρίς τελεία στο τέλος ή με ερωτηματικές προτάσεις.
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. Μετά το tokenization, το κείμενο είναι έτοιμο για αναγνώριση γλώσσας, επισήμανση και λεμματοποίηση.
NLLanguageRecognizer καθορίζει τη γλώσσα του κειμένου και επιστρέφει την πιο πιθανή επιλογή με ένδειξη βεβαιότητας. Το πλαίσιο υποστηρίζει περισσότερες από 30 γλώσσες και μπορεί να λειτουργήσει με κείμενο οποιουδήποτε μήκους — από μία λέξη έως ολόκληρο έγγραφο.
Ο αλγόριθμος του NLLanguageRecognizer αναλύει n-γράμματα χαρακτήρων και τα συγκρίνει με γλωσσικά προφίλ. Για σύντομα κείμενα (έως 50 χαρακτήρες), η ακρίβεια μειώνεται, γι' αυτό η Apple συνιστά την αποστολή τουλάχιστον 100–200 χαρακτήρων για αξιόπιστο καθορισμό γλώσσας.
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 επιστρέφει ένα λεξικό γλωσσών με πιθανότητες σε φθίνουσα σειρά. Αυτό είναι χρήσιμο όταν το κείμενο περιέχει μείγμα γλωσσών ή όταν πρέπει να εμφανιστούν πολλές επιλογές για επιλογή στον χρήστη, όχι μόνο η κυρίαρχη γλώσσα.
Το NaturalLanguage καθορίζει ελληνικά με ακρίβεια 95% για κείμενα από 100 χαρακτήρες. Για σύντομα κείμενα (1–2 λέξεις), η ακρίβεια πέφτει στο 60–70% — σε τέτοιες περιπτώσεις, είναι καλύτερο να χρησιμοποιείτε languageHypotheses και να εμφανίζετε τις top-3 επιλογές.
NLTagScheme παρέχει σχήματα επισήμανσης για γλωσσική ανάλυση: μέρη του λόγου (ουσιαστικό, ρήμα, επίθετο), λήμματα (κανονική μορφή λέξης), τύπους οντοτήτων (πρόσωπο, οργανισμός, τοποθεσία) και άλλες κατηγορίες.
Λεμματοποίηση φέρνει τη λέξη στη λεξική της μορφή: «έτρεξε» → «τρέχω», «καλύτερος» → «καλός», «books» → «book». Αυτό είναι κρίσιμο για αναζήτηση και ανάλυση κειμένου — χωρίς λεμματοποίηση, το «γάτα» και «γάτας» θεωρούνται διαφορετικά token, μειώνοντας την ποιότητα των NLP pipelines.
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")"
}
Παράδειγμα εξόδου: cats → Noun, were → Verb, quickly → Adverb. Συνδυάζοντας λεμματοποίηση και μέρη του λόγου, μπορείτε να δημιουργήσετε έξυπνη αναζήτηση που βρίσκει «γάτες που τρέχουν» με το ερώτημα «τρέχω γάτα».
NLTagScheme.lemma λειτουργεί για όλες τις γλώσσες που υποστηρίζει το NaturalLanguage, συμπεριλαμβανομένων των ελληνικών. Αυτό καθιστά το NLTagger ένα καθολικό εργαλείο για πολύγλωσσες εφαρμογές χωρίς να χρειάζεται φόρτωση ξεχωριστών μοντέλων για κάθε γλώσσα.
Named Entity Recognition (NER) — είναι η εργασία εξαγωγής ονομασμένων οντοτήτων από κείμενο: ονόματα προσώπων, ονόματα οργανισμών, γεωγραφικές τοποθεσίες και προσωπικά δεδομένα. Το NaturalLanguage υποστηρίζει NER μέσω του NLTagScheme.nameType.
NLTagScheme.nameType διακρίνει τρεις τύπους οντοτήτων: PersonalName (ονόματα προσώπων), OrganizationName (οργανισμοί, εταιρείες) και PlaceName (γεωγραφικές ονομασίες). Αυτό επιτρέπει την αυτόματη εξαγωγή δομημένων δεδομένων από ειδήσεις, emails και κριτικές.
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)"
}
}
Αποτέλεσμα: Tim Cook → PersonalName, Apple → OrganizationName, Cupertino → PlaceName. Το NER από το NaturalLanguage δεν απαιτεί προσαρμοσμένη εκπαίδευση και λειτουργεί άμεσα για αγγλικά, γαλλικά, γερμανικά, ισπανικά και άλλες γλώσσες.
Για ελληνικά το NER υποστηρίζεται, αλλά η ακρίβεια είναι ελαφρώς χαμηλότερη — περίπου 70–75% έναντι 85% για αγγλικά. Εάν απαιτείται υψηλή ακρίβεια για ελληνικά, η Apple συνιστά την εκπαίδευση ενός προσαρμοσμένου μοντέλου Core ML σε δικά σας δεδομένα χρησιμοποιώντας το Create ML.
NLModel — είναι μια κλάση για εργασία με εκπαιδευμένα μοντέλα NLP Core ML, συμπεριλαμβανομένου του ενσωματωμένου μοντέλου ανάλυσης συναισθήματος, προ-εκπαιδευμένου από την Apple. Το μοντέλο καθορίζει τον τόνο του κειμένου: θετικό, αρνητικό ή ουδέτερο.
Το ενσωματωμένο μοντέλο ανάλυσης συναισθήματος είναι εκπαιδευμένο σε κριτικές του App Store και λειτουργεί για αγγλικά, γαλλικά, γερμανικά, ιταλικά, ισπανικά, πορτογαλικά, κινεζικά και ιαπωνικά. Για ελληνικά, το μοντέλο δεν είναι προ-εκπαιδευμένο — απαιτείται Create ML και δικά σας επισημασμένα δεδομένα.
import NaturalLanguage
let sentimentPredictor = try NLModel(mlModel: SentimentModel().model)
let sentiment = sentimentPredictor.predictedLabel(for: "Αυτή η εφαρμογή είναι εκπληκτική!")
print("Sentiment: \\(sentiment ?? "neutral")") // "positive"
NLModel υποστηρίζει επίσης προσαρμοσμένα μοντέλα εκπαιδευμένα μέσω Create ML. Μπορείτε να εκπαιδεύσετε ένα μοντέλο ταξινόμησης κειμένου σε δικά σας δεδομένα (κατηγορίες προϊόντων, τύποι αιτημάτων υποστήριξης, γλωσσικά στυλ) και να το χρησιμοποιήσετε μέσω της ίδιας διεπαφής NLModel.
Σύμφωνα με το Apple Create ML documentation 2024, ένα προσαρμοσμένο μοντέλο κειμένου εκπαιδεύεται σε 500–5000 παραδείγματα για να επιτύχει ακρίβεια 80–95%. Το NaturalLanguage φορτώνει το μοντέλο μία φορά και το αποθηκεύει στην κρυφή μνήμη για επόμενες κλήσεις, ελαχιστοποιώντας την καθυστέρηση σε επαναλαμβανόμενα αιτήματα.
| Εργασία NLP | Κλάση NaturalLanguage | Υποστήριξη ελληνικών |
|---|---|---|
| Tokenization | NLTokenizer | Ναι |
| Αναγνώριση γλώσσας | NLLanguageRecognizer | Ναι |
| Λεμματοποίηση | NLTagger + .lemma | Ναι |
| Μέρη του λόγου | NLTagger + .lexicalClass | Ναι |
| NER | NLTagger + .nameType | Περιορισμένη |
| Συναίσθημα | NLModel (προ-εκπαιδευμένο) | Όχι |
Συχνές Ερωτήσεις
NaturalLanguage παρέχει έτοιμα μοντέλα NLP χωρίς ανάγκη εκπαίδευσης: tokenization, αναγνώριση γλώσσας, NER. Το Core ML απαιτεί εκπαίδευση μοντέλου σε δικά σας δεδομένα και δίνει μεγαλύτερη ευελιξία για συγκεκριμένες εργασίες. Το NaturalLanguage είναι καλύτερο για βασικές εργασίες «αμέσως χρήσης», το Core ML — για εξειδικευμένες εργασίες.
Ναι, το NaturalLanguage λειτουργεί πλήρως στη συσκευή χωρίς σύνδεση στο διαδίκτυο. Όλα τα μοντέλα είναι ενσωματωμένα στο iOS και macOS, τα δεδομένα δεν αποστέλλονται στον διακομιστή. Αυτό είναι ένα βασικό πλεονέκτημα έναντι των υπηρεσιών NLP cloud που απαιτούν δίκτυο και δημιουργούν κινδύνους για την ιδιωτικότητα.
NaturalLanguage υποστηρίζει περισσότερες από 30 γλώσσες, συμπεριλαμβανομένων των ελληνικών, αγγλικών, ισπανικών, γαλλικών, γερμανικών, ιταλικών, πορτογαλικών, κινεζικών, ιαπωνικών, κορεατικών, αραβικών, τουρκικών και ουκρανικών. Η ακρίβεια tokenization και λεμματοποίησης είναι υψηλή για όλες τις υποστηριζόμενες γλώσσες, NER και συναίσθημα — κυρίως για αγγλικά.
Χρησιμοποιήστε το Create ML — την εφαρμογή της Apple για εκπαίδευση μοντέλων μηχανικής μάθησης χωρίς προγραμματισμό. Φορτώστε το επισημασμένο σύνολο δεδομένων (CSV ή JSON), επιλέξτε την εργασία ταξινόμησης κειμένου ή επισήμανσης, εκπαιδεύστε το μοντέλο και εξάγετε σε μορφή Core ML (.mlmodel). Στη συνέχεια, φορτώστε το μοντέλο μέσω του NLModel(mlModel:) στον κώδικα.
NaturalLanguage είναι διαθέσιμο σε iOS 12+, macOS 10.14+, watchOS 5+ και tvOS 12+. Σε συσκευές με τσιπ A12+ και Neural Engine, η απόδοση είναι υψηλότερη — η επεξεργασία κειμένου επιταχύνεται 3–5 φορές χάρη στην επιτάχυνση υλικού της μηχανικής μάθησης. Σε παλαιότερες συσκευές (A11 και παλαιότερες), το πλαίσιο λειτουργεί αλλά πιο αργά.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης