Ich mache eine Android-App, die einige Natural Language Processing tut. Die App selbst funktioniert gut, außer die Modelle OpenNLP geben sind groß, so dass die apk zu groß für die Verteilung ist. Was soll ich tun, um die Apk kleiner zu machen? Ich habe darüber nachgedacht, einen Server zu verwenden, um den NLP zu tun, aber ich habe keine Ahnung, wie man es machtIch mache eine NLP App aber Modelle sind zu groß
Antwort
Verschieben der NLP-Funktionalität auf einen Server wird die App für den Offline-Einsatz unbrauchbar machen, die in den Augen vieler ein Nachteil sein könnte Benutzer. Wenn Sie trotzdem diesen Weg zu gehen entscheiden, empfehle ich ein Tutorial namens Converting a Functional API to REST die den Prozess der Einwickeln der API von einer Java-Klasse beschreibt (in Ihrem Fall eine OpenNLP Typ wie POSTagger
) innerhalb einer REST-API.
Eine andere Möglichkeit wäre Ihre eigenen Modelle ausbilden (siehe zum Beispiel die Sentence Detector Training Abschnitt in der OpenNLP Dokumentation). Sie könnten dann die Größe der Trainingssätze so reduzieren, dass die resultierenden Modelle in Ihre apk passen.
Offensichtlich würde ich nicht vorschlagen, um Ihre eigenen Trainingsdaten zusammenzustellen, da dies viel Mühe nehmen würde. Vielleicht finden Sie die Trainingsdaten für die offical OpenNLP models und dann reduzieren Sie einfach die Größe der Trainingssätze. Eine Frage an einen der OpenNLP mailing lists zu stellen könnte ein guter Ausgangspunkt sein, um die offiziellen Trainingsdaten zu finden.
Eine weitere Alternative könnte sein, die offiziellen OpenNLP Modelle zu ändern, indem sie in ein Java-Programm laden und irgendwie Daten zu löschen. Ich empfehle diesen Weg nicht, es sei denn, Sie verstehen die Algorithmen und Datenstrukturen, die den OpenNLP-Tools zugrunde liegen und können daher beurteilen, ob dies überhaupt möglich ist.
Lol das ist nur NLP zu testen. Ich habe nicht vor, daraus Geld zu machen oder ein Geschäft zu gründen. Nur um mein Portfolio zu bauen – John
Ya ... Ich denke, diese Frage wird als zu allgemein gewählt, usw. Die Antwort ist "es ist schwer und es gibt keine Antwort". Vielleicht etwas wie: Finde heraus, welche Bibliotheksfunktionen du aufrufen musst, definiere eine Server-API für diese Funktionen und rufe sie mit einer Art von REST/JSON über HTTP auf. –
Ja, ich habe auch darüber nachgedacht. Danke für Ihre Hilfe – John