Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Swift
Code

Erste Schritte mit der Verarbeitung natürlicher Sprache in iOS 11

by
Difficulty:AdvancedLength:LongLanguages:

German (Deutsch) translation by Władysław Łucyszyn (you can also view the original English article)

Maschinelles Lernen war im vergangenen Jahr zweifellos eines der heißesten Themen. Unternehmen aller Art versuchten, ihre Produkte intelligenter zu gestalten, um die Benutzererfahrung zu verbessern und ihre Angebote zu differenzieren.

Jetzt ist Apple in den Wettlauf um maschinelles Lernen für Entwickler eingetreten. Mit Core ML können Entwickler ihren Apps auf einfache Weise tiefgreifendes maschinelles Lernen hinzufügen.

Wenn Sie sich nur Ihr iOS-Gerät ansehen, werden Sie feststellen, dass maschinelles Lernen in fast jeder System-App enthalten ist - das offensichtlichste ist Siri. Wenn Sie beispielsweise Textnachrichten senden, verwendet Apple die NLP (Natural Language Processing), um entweder Ihr nächstes Wort vorherzusagen oder während der Eingabe eines Wortes auf intelligente Weise eine Korrektur vorzuschlagen. Erwarten Sie, dass maschinelles Lernen und NLP weiterhin allgegenwärtig und in unserem Einsatz von Technologie von der Suche bis zum Kundenservice weiter verankert sind.

Ziele dieses Tutorials

Dieses Tutorial führt Sie in eine Teilmenge des maschinellen Lernens ein: Natural Language Processing (NLP). Wir werden behandeln, was NLP ist und warum es sich lohnt, es zu implementieren, bevor wir uns die verschiedenen Ebenen oder Schemata ansehen, aus denen NLP besteht. Diese beinhalten:

  • Sprachidentifikation
  • Tokenisierung
  • Teil der Sprachidentifikation
  • Erkennung benannter Entitäten

Nachdem wir die Theorie des NLP durchgearbeitet haben, werden wir unser Wissen in die Praxis umsetzen, indem wir einen einfachen Twitter-Client erstellen, der Tweets analysiert. Klonen Sie das GitHub-Repo des Tutorials und werfen Sie einen Blick darauf.

Vorausgesetztes Wissen

In diesem Tutorial wird davon ausgegangen, dass Sie ein erfahrener iOS-Entwickler sind. Obwohl wir mit maschinellem Lernen arbeiten, benötigen Sie keinen Hintergrund zu diesem Theme. Während andere Komponenten von Core ML einige Python-Kenntnisse erfordern, werden wir mit NLP nicht mit Python-bezogenen Aspekten arbeiten.

Einführung in maschinelles Lernen und NLP

Das Ziel des maschinellen Lernens besteht darin, dass ein Computer Aufgaben erledigt, ohne explizit dafür programmiert zu sein - die Fähigkeit, autonom zu denken oder zu interpretieren. Ein hochkarätiger zeitgenössischer Anwendungsfall ist das autonome Fahren: Autos können ihre Umgebung visuell interpretieren und ohne fremde Hilfe fahren.

Neben der visuellen Erkennung hat das maschinelle Lernen auch die Spracherkennung, die intelligente Websuche und vieles mehr eingeführt. Da Google, Microsoft, Facebook und IBM an der Spitze der Verbreitung des maschinellen Lernens und seiner Bereitstellung für normale Entwickler stehen, hat Apple auch beschlossen, in diese Richtung zu gehen und die Integration des maschinellen Lernens in Anwendungen von Drittanbietern zu vereinfachen.

Core ML ist neu in Apples SDK-Familie, die als Teil von iOS 11 eingeführt wurde, damit Entwickler eine Vielzahl von Modi für maschinelles Lernen und Deep-Learning-Layer-Typen implementieren können.

Core ML technology stack source Apple

Natural Language Processing (NLP) befindet sich logischerweise innerhalb des Core ML-Frameworks neben zwei weiteren leistungsstarken Bibliotheken, Vision und GameplayKit. Vision bietet Entwicklern die Möglichkeit, maschinelles Lernen in Computer Vision zu implementieren, um beispielsweise Gesichter, Orientierungspunkte oder andere Objekte zu erkennen, während GameplayKit Spielentwicklern Werkzeugs zum Erstellen von Spielen und bestimmten Gameplay-Funktionen bietet.

In diesem Tutorial konzentrieren wir uns auf die Verarbeitung natürlicher Sprache.

Verarbeitung natürlicher Sprache (NLP)

Die Verarbeitung natürlicher Sprache ist die Wissenschaft, Text analysieren und verstehen zu können, Sätze und Wörter aufzuschlüsseln, um Aufgaben wie Stimmungsanalyse, Beziehungsextraktion, Stemming, Text- oder Satzzusammenfassung usw. zu erfüllen. Um es einfach auszudrücken: NLP ist die Fähigkeit von Computern, die menschliche Sprache in ihrer natürlich gesprochenen oder geschriebenen Form zu verstehen.

Diagram showing how Natural Language Processing works

Die Fähigkeit, Wörter und Sätze kontextuell zu extrahieren und zu kapseln, ermöglicht eine verbesserte Integration zwischen Benutzern und Geräten oder sogar zwischen zwei Geräten durch aussagekräftige Inhaltsblöcke. Wir werden jede dieser Komponenten in Kürze im Detail untersuchen. Zunächst ist es jedoch wichtig zu verstehen, warum Sie NLP implementieren möchten.

Warum die Verarbeitung natürlicher Sprache implementieren?

Da Unternehmen weiterhin auf die Speicherung und Verarbeitung von Big Data angewiesen sind, ermöglicht NLP die Interpretation von freiem und unstrukturiertem Text und macht ihn analysierbar. Mit vielen Informationen, die in unstrukturierten Textdateien gespeichert sind - beispielsweise in medizinischen Unterlagen - kann NLP Datenmengen durchsuchen und Daten zu Kontext, Absicht und sogar Stimmung bereitstellen.

NLP ist nicht nur in der Lage, gesprochenen und geschriebenen Text zu analysieren, sondern hat sich auch zum Motor für Bots entwickelt - von Slots in Slack, mit denen Sie fast ein vollständiges menschliches Gespräch führen können, bis hin zu Werkzeugs für den Kundenservice. Wenn Sie auf die Support-Website von Apple gehen und mit dem Kundendienst sprechen möchten, wird Ihnen ein Web-Bot angezeigt, der versucht, Sie anhand der von Ihnen gestellten Frage in die richtige Richtung zu lenken. Kunden fühlen sich in Echtzeit verstanden, ohne mit einem Menschen sprechen zu müssen.

Mit Blick auf E-Mail-Spam und Spam-Filter hat NLP es möglich gemacht, Text besser zu verstehen und E-Mails mit größerer Sicherheit über ihre Absichten besser zu klassifizieren.

Die Zusammenfassung ist eine wichtige NLP-Technik zur Bereitstellung von Stimmungsanalysen, die Unternehmen für Daten aus ihren Social-Media-Konten verwenden möchten, um die Wahrnehmung der Produkte des Unternehmens zu verfolgen.

Machine Learning and NLP at work source Apple

Die Fotos-App unter iOS 11 ist ein weiteres gutes Beispiel. Bei der Suche nach Fotos funktioniert maschinelles Lernen auf mehreren Ebenen. Neben der Verwendung von maschinellem Lernen und Sehen, um das Gesicht und den Typ des Fotos (dh Strand, Ort) zu erkennen, werden Suchbegriffe über NLP gefiltert. Wenn Sie nach dem Begriff 'Strände' suchen, werden auch nach Fotos gesucht, die die Beschreibung 'Strand'. Dies wird als Lemmatisierung bezeichnet. Im Folgenden erfahren Sie mehr darüber, wie leistungsfähig maschinelles Lernen ist und wie einfach Apple es Ihnen macht, Ihre Apps intelligenter zu gestalten.

Wenn Ihre App beispielsweise eine Suchzeichenfolge besser versteht, kann sie intelligenter mit Benutzern interagieren und die Absicht hinter dem Suchbegriff verstehen, anstatt das Wort im wörtlichen Sinne zu verstehen. Durch die Nutzung der NLP-Bibliothek von Apple können Entwickler einen konsistenten Textverarbeitungsansatz und eine einheitliche Benutzererfahrung im gesamten Apple-Ökosystem unterstützen, von iOS bis macOS, tvOS und watchOS.

Beim maschinellen Lernen auf dem Gerät profitieren Benutzer davon, dass sie die CPU und GPU des Geräts nutzen, um bei Berechnungen Leistungseffizienz zu erzielen, anstatt auf externe APIs für maschinelles Lernen zuzugreifen. Dadurch bleiben Benutzerdaten auf dem Gerät und die Latenz aufgrund von Netzwerkzugriffen wird verringert. Mit maschinellem Lernen, das eine genauere Kenntnis der Benutzer erfordert, um Vorschläge und Vorhersagen abzuleiten, die Verarbeitung auf dem physischen Gerät zu beschränken und die differenzierte Privatsphäre für alle netzwerkbezogenen Aktivitäten zu nutzen, können Sie eine intelligente, aber nicht invasive Erfahrung für bereitstellen Ihre Benutzer.

Als Nächstes werfen wir einen Blick auf die Zusammensetzung der Apple Natural Language Processing Engine.

Einführung in NSLinguisticTagger

Die Grundklasse NSLinguisticTagger spielt eine zentrale Rolle bei der Analyse und Kennzeichnung von Text und Sprache, der Segmentierung von Inhalten in Absätze, Sätze und Wörter und besteht aus folgenden Schemata:

NSLinguisticTagger components source Apple

Wenn Sie NSLinguisticTagger initialisieren, übergeben Sie das NSLinguisticTagScheme, das Sie analysieren möchten. Beispielsweise:

let tagger = NSLinguisticTagger (tagSchemes: [.language, .tokenType,...], options: 0)

Anschließend richten Sie die verschiedenen Argumente und Eigenschaften ein, einschließlich der Übergabe des Eingabetextes, bevor Sie das Instanzobjekt NSLinguisticTagger auflisten und Entitäten und Token extrahieren. Lassen Sie uns tiefer eintauchen und sehen, wie Sie jedes der Schemata Schritt für Schritt implementieren, beginnend mit dem Sprachidentifikationsschema.

Sprachidentifikation

Der erste Tag-Schema-Typ, die Sprachidentifikation, versucht, die BCP-47-Sprache zu identifizieren, die entweder auf Dokument-, Absatz- oder Satzebene am bekanntesten ist. Sie können diese Sprache abrufen, indem Sie auf die Eigenschaft dominantLanguage des Instanzobjekts NSLinguisticTagger zugreifen:

Ziemlich einfach. Als nächstes betrachten wir die Klassifizierung von Text mithilfe der Tokenisierungsmethode.

Tokenisierung

Bei der Tokenisierung werden Abschnitte einer Zeichenfolge von Eingabezeichen abgegrenzt und möglicherweise klassifiziert. Die resultierenden Token werden dann an eine andere Form der Verarbeitung weitergeleitet. (Quelle: Wikipedia)

Bei einem Textblock würde die Tokenisierung diesen Text logisch zerlegen und in Absätze, Sätze und Wörter klassifizieren. Wir beginnen mit der Festlegung des entsprechenden Schemas (.tokenType) für den Tagger. Im Gegensatz zum vorherigen Schema erwarten wir mehrere Ergebnisse und müssen die zurückgegebenen Tags auflisten, wie im folgenden Beispiel dargestellt:

Jetzt haben wir eine Liste von Wörtern. Aber wäre es nicht interessant, die Ursprünge dieser Worte zu erfahren? Wenn ein Benutzer beispielsweise nach einem Begriff wie "Spaziergänge" oder "Gehen" sucht, ist es sehr nützlich, das Ursprungswort "Gehen" zu erhalten und alle diese Permutationen von "Gehen" zusammen zu klassifizieren. Dies nennt man Lemmatisierung, und wir werden das als nächstes behandeln.

Lemmatisierung

Durch die Lemmatisierung werden die gebogenen Formen eines zu analysierenden Wortes als einzelnes Element zusammengefasst, sodass Sie auf die beabsichtigte Bedeutung schließen können. Im Wesentlichen müssen Sie sich nur daran erinnern, dass die Wörterbuchform des Wortes abgeleitet wird.

Die Kenntnis der Wörterbuchform des Wortes ist sehr leistungsfähig und ermöglicht es Ihren Benutzern, mit größerer 'Unschärfe' zu suchen. Im vorherigen Beispiel betrachten wir einen Benutzer, der nach dem Begriff 'Gehen' sucht. Ohne Lemmatisierung könnten Sie nur wörtliche Erwähnungen dieses Wortes zurückgeben. Wenn Sie jedoch andere Formen desselben Wortes berücksichtigen könnten, könnten Sie auch Ergebnisse erzielen, in denen 'Gehen' erwähnt wird.

Ähnlich wie im vorherigen Beispiel würden wir zur Durchführung der Lemmatisierung das Schema in der Tagger-Initialisierung auf .lemma setzen, bevor wir die Tags auflisten:

Als nächstes betrachten wir einen Teil der Sprachkennzeichnung, mit der wir einen Textblock als Substantive, Verben, Adjektive oder andere Teile klassifizieren können.

Teil der Sprache (PoS)

Ein Teil der Sprachkennzeichnung zielt darauf ab, den Teil der Sprache jedem bestimmten Wort zuzuordnen, basierend auf der Definition und dem Kontext des Wortes (seiner Beziehung zu benachbarten und verwandten Wörtern). Als Teil von NLP können wir uns durch einen Teil der Sprachkennzeichnung auf die Substantive und Verben konzentrieren, was uns helfen kann, auf die Absicht und Bedeutung von Text zu schließen.

Das Implementieren eines Teils des Sprach-Tagging umfasst das Festlegen der Tagger-Eigenschaft für die Verwendung von .lexicalClass und das Auflisten auf dieselbe Weise, wie in den vorherigen Beispielen gezeigt. Sie erhalten eine Zerlegung Ihres Satzes in Wörter mit einem assoziativen Tag für jeden Satz, wobei das Wort als zu einem Substantiv, einer Präposition, einem Verb, einem Adjektiv oder einem Bestimmer gehörend klassifiziert wird. Weitere Informationen zu diesen Bedeutungen finden Sie in der Dokumentation von Apple zu den Lexikalischen Typen.

Ein weiterer Prozess innerhalb des NLP-Stacks von Apple ist die Named Entity Recognition, bei der Textblöcke zerlegt und bestimmte Entitätstypen extrahiert werden, an denen wir interessiert sind, z. B. Namen, Standorte, Organisationen und Personen. Schauen wir uns das als nächstes an.

Erkennung benannter Entitäten

Die Erkennung benannter Entitäten ist eine der leistungsstärksten NLP-Klassifizierungskennzeichnungskomponenten, mit der Sie benannte reale Entitäten oder Objekte aus Ihrem Satz (d. h. Orte, Personen, Namen) klassifizieren können. Als iPhone-Benutzer hätten Sie dies bereits in Aktion gesehen, als Sie Ihren Freunden eine SMS geschrieben haben, und Sie hätten bestimmte hervorgehobene Schlüsselwörter wie Telefonnummern, Namen oder Daten beobachtet.

Sie können die Erkennung benannter Entitäten auf ähnliche Weise wie in unseren anderen Beispielen implementieren, indem Sie das Tag-Schema auf .nameType setzen und den Tagger um einen bestimmten Bereich durchlaufen.

Als Nächstes setzen Sie das Gelernte mit einer einfachen App in die Tat um, die einen vorgegebenen Satz von Tweets verwendet, während Sie jeden Tweet durch die NLP-Pipeline führen.

Implementierung der Verarbeitung natürlicher Sprache

Zum Abschluss sehen wir uns eine einfache Twitter-Client-App an, die fünf Tweets in einer Tabellenansicht abruft und für jeden eine NLP-Verarbeitung anwendet.

Im folgenden Screenshot haben wir die Erkennung benannter Entitäten von NLP verwendet, um die Schlüsselwörter für Entitäten (Organisationen, Standorte usw.) rot hervorzuheben.

Phone screenshot with key words highlighted in red

Klonen Sie das TwitterNLPExample-Projekt aus dem GitHub-Repo-Tutorial und sehen Sie sich den Code kurz an. Die Klasse, die uns am meisten interessiert, ist TweetsViewController.swift. Werfen wir einen Blick auf die Methode tableView(_ tableView: cellForRowAt).

Für jede Zelle (Tweet) rufen wir vier Methoden auf, die wir in Kürze definieren werden:

  • detectLanguage()
  • getTokenization()
  • getNamedEntityRecognition()
  • getLemmatization()

Für jede dieser Methoden rufen wir die enumerate-Methode auf und übergeben das Schema und die Textbezeichnung, um den Text zu extrahieren, wie wir es tun, um die Sprache zu identifizieren:

Schließlich ist die enumerate-Funktion der Ort, an dem die gesamte NLP-Aktion tatsächlich ausgeführt wird. Dabei werden die Eigenschaften und Argumente basierend auf der Art der beabsichtigten NLP-Verarbeitung berücksichtigt und die Ergebnisse in Arrays gespeichert, die wir später verwenden können. In diesem Beispiel drucken wir die Ergebnisse einfach zu Beobachtungszwecken auf die Konsole.

Für das Erkennungsschema .nameType Named Entity verwenden wir die von uns extrahierten Entity-Schlüsselwörter und markieren die Wörter, die diesen Entitäten entsprechen. Sie können sogar noch einen Schritt weiter gehen und diese Keyword-Links erstellen - möglicherweise, um nach Tweets zu suchen, die diesen Keywords entsprechen.

Erstellen Sie die App, führen Sie sie aus und sehen Sie sich die Ausgabe an. Achten Sie dabei besonders auf die von uns extrahierten Lemmas und Entitäten.

Abschluss

Von der Nutzung der Verarbeitung natürlicher Sprache durch Google in seinen Suchmaschinen bis hin zu den Messenger-Bots Siri und Facebook von Apple besteht kein Zweifel daran, dass dieses Feld exponentiell wächst. NLP und maschinelles Lernen sind jedoch nicht mehr die ausschließliche Domäne großer Unternehmen. Durch die Einführung des Core ML-Frameworks Anfang dieses Jahres hat Apple es alltäglichen Entwicklern ohne Hintergrundwissen erleichtert, ihre Apps mit Intelligenz zu versehen.

In diesem Tutorial haben Sie gesehen, wie Sie mit wenigen Codezeilen Core ML verwenden können, um aus unstrukturierten Sätzen und Absätzen auf Kontext und Absicht zu schließen und die dominierende Sprache zu erkennen. Wir werden weitere Verbesserungen in zukünftigen Iterationen des SDK sehen, aber NLP verspricht bereits, ein leistungsstarkes Werkzeug zu sein, das im App Store weit verbreitet sein wird.

Während Sie hier sind, lesen Sie einige unserer anderen Beiträge zur Entwicklung von iOS-Apps und zum maschinellen Lernen!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.