NLTK in der Produktionsumgebung?

9

Ich habe einige Algorithmen für Clustering, Datenabstraktion usw. in python nltk entwickelt. Nun, das Problem ist, ich bin dabei, es groß zu machen, bevor ich VCs präsentiere. NLTK hat seine eigenen Vorteile wie schnelle Entwicklung etc. Aber das machte für mich Sinn, als ich am Anfang entschied. Jetzt bin ich reif genug und finde einige Einschränkungen, wie mangelnde Skalierbarkeit. Habe etwas über Mahout geforscht, aber das ist auch für Cluster / Kategorisierung und Kollokation. Offenes NLP ist eine Option, aber ich bin nicht sicher, wie lange ich damit gehen kann. Alles gut für High-Scale-nlp?

Bitte beachten Sie - diese Frage bezieht sich nicht auf meine ältere Frage - Wie kann ich die Leistung von NLTK verbessern? Alternativen? . Ich habe NLTK bereits in einer Produktions-Webanwendung gelesen .

    
akshayb 03.04.2013, 13:01
quelle

1 Antwort

3

NLTK ist zwar eine gute Lernplattform, aber nicht dafür gedacht, Millionen von Kunden zuverlässig zu bedienen.

Sie können Ihre Skalierbarkeitsprobleme auf zwei verschiedene Arten angehen:

  • Der erste "Big Data" -Ansatz: Passen Sie Ihre Algorithmen an MapReduce an und führen Sie sie auf MongoDB / Hadoop / Google MapReduce / ... aus. Es gibt verschiedene Speicherorte für solche Lösungen (Amazon, Google, Rackspace, ...) / li>
  • Der zweite, "roll your own" -Ansatz: Arbeiten Sie mit gängigen Hosting-Lösungen oder Ihrem eigenen Rechenzentrum.

Der Ansatz "Big Data"

Das bedeutet, dass Sie Ihre Algorithmen überdenken müssen. Erfordert einen guten mathematischen Hintergrund und ein gutes Verständnis der Algorithmen. Vielleicht würden Sie sogar Algorithmen ersetzen, weil die Ausführungszeit weniger mit der Arbeitsmenge zusammenhängt.

Im Hinblick auf die Umsetzung Ihrer Idee kann dies die schwierigste (und vielleicht sogar unmöglichste) Lösung sein, abhängig von Ihren Fähigkeiten. Für die Bereitstellung und künftige Vorteile ist dies bei weitem die einfachste Lösung.

Der "roll your own" -Ansatz

Sie können verschiedene Dinge mit Skalierbarkeit meinen:

  • größere Trainingssätze
  • mehr Kunden
  • mehr Algorithmen und Anwendungen
  • Das Erweitern Ihrer Trainingssätze kann entweder das Umlernen oder die Anpassung von
  • bedeuten
  • ...

Bei der Skalierbarkeit gibt es unterschiedliche Größenordnungen: Möchten Sie 10-fach, 100-fach, 1000-fach skalieren? ...

Es gibt verschiedene Methoden zur Überwindung von Skalierbarkeitsproblemen:

  • Parallellize: Fügen Sie exakte Kopien eines Servers hinzu und führen Sie einen Lastenausgleich durch
  • Pipelining: Split-Verarbeitung in verschiedenen Schritten, die auf verschiedenen Servern stattfinden können
  • teurere Hardware, schnellere CPU, RAM, Festplatte, Busse, ASICs, ...
  • Clientseitige Verarbeitung
  • Caching von Anfragen
  • Performance Tuning Ihrer Software, implementieren Sie Engpässe in C / C ++
  • Verwenden Sie bessere Algorithmen
  • Intelligentere Trennung dessen, was offline passiert (z. B. mit einem Cron-Job) und was pro Anfrage erledigt wird.
  • ...

Unabhängig von der Art der Skalierbarkeit und unabhängig von der Methode, mit der Sie sie überwinden, führen Sie einen Auslastungstest durch, um zu sehen, was Sie damit umgehen können. Da Sie sich Ihre gesamte Hardware nicht sofort leisten können, gibt es verschiedene Möglichkeiten, einen Belastungstest für eine skalierte Infrastruktur durchzuführen:

  • Prozessoren, Speicher, Festplattenspeicher, ... pro Stunde, gerade genug, um den Belastungstest durchzuführen und auszusteigen. Auf diese Weise müssen Sie keine Ausrüstung kaufen.
  • riskanter: Führen Sie einen Belastungstest mit weniger und billigerer Ausrüstung als in der Produktion durch und extrapolieren Sie die Ergebnisse. Vielleicht haben Sie ein theoretisches Modell, wie Ihre Algorithmen skalieren, aber hüten Sie sich vor Nebenwirkungen. Der Beweis des Puddings ist im Essen.

Annäherung an VCs (soweit es die Skalierbarkeit betrifft)

  • Erstellen Sie einen Prototyp, der Ihre Idee eindeutig erklärt (nicht unbedingt skalierbar)
  • Beweisen Sie sich selbst, dass zu einem beliebigen Zeitpunkt in der Zukunft alles in Ordnung sein wird und zu welchen Kosten (min / erwartet / max einmalige / kontinuierliche Kosten)
  • Beginnen Sie mit einer privaten Beta, so dass die Skalierbarkeit von Anfang an kein Problem darstellt. Keine Deadline, um die Beta zu verlassen. Ein Kostenvoranschlag ist in Ordnung, aber keine Deadline. Machen Sie keine Kompromisse!

Viel Glück!

    
pvoosten 12.05.2013, 20:54
quelle

Tags und Links