2016-07-22 13 views
0

Mein Problem ist ein bisschen vage, aber meine Frage ist spezifisch.Junit: Unit Testing für Big Data Verarbeitung natürlicher Sprache

FRAGE

Kann mir jemand zeigen auf gut informierte Dokumentation, wie man Unit-Test große Daten zur Verarbeitung natürlicher Sprache-Systeme?

CONTEXT

Große Datenverarbeitungssysteme sind oft multi-threaded und sind auch von Ausnahmezuständen sehr nachsichtig. Sehr oft werden Ausnahmen eingefangen und nicht geworfen, um "unordentliche" Daten zu ermöglichen.

Bei der Prüfung solcher Systeme sollten die Stringenzgrade jedoch höher sein als unter Produktionsbedingungen. Dieses Maß an Stringenz ermöglicht Entwicklern, sich zumindest darüber im Klaren zu sein, welche Bedingungen Ausnahmen auslösen.

Das Problem ist, dass solche Systeme die Ausnahmen absorbieren, so dass Junit-Tests sie nicht aufnehmen. Ich bin auf der Suche nach einem sparsamen Design für Unit-Tests unter solchen Umständen. Ich will das Rad nicht neu erfinden. Daher suchen Sie nach relevanten Unterlagen.

Antwort

0

Niemand sollte in der Lage sein, Sie auf eine "gut informierte Dokumentation zum Testen von Big-Data-Verarbeitungssystemen für natürliche Sprachen" hinzuweisen, da die gut informierte Meinung ist, dass keine spezielle Dokumentation benötigt wird. Der Grund dafür ist, dass Ihre Komponententests (sogar in großen NLP-Systemen) alle passieren und schnell ausgeführt werden sollten, wenn Ihre Funktionen korrekt sind.

Was ich denke, dass Sie fragen wollten, ist mehr mit Integrationstests zu tun und diese Systeme tatsächlich auf unordentlichen (Test oder Produktion) Datensätzen laufen zu lassen. Die meisten meiner Integrationstests laufen auf festen Datensätzen, und ich erwarte, dass sie die ganze Zeit bestehen, es sei denn, es gibt Netzwerk-/Datenbankfehler oder andere Ereignisse, die außerhalb der Kontrolle meines Systems liegen.

Für Integrationstests bei sich ständig ändernden Datensätzen oder bei laufender Produktion müssen Sie sich die Dokumentation der zugrundeliegenden Architektur/des zugrunde liegenden Frameworks ansehen. Ich benutze eine UIMA-basierte Architektur und setze Dinge wie Fehlerraten-Schwellenwerte explizit fest - siehe unten für ein Beispiel, das aus der UIMA-Dokumentation kopiert wurde. Ich bin mir sicher, dass GATE, Deeplearning4Java oder was auch immer die coolen Kids heutzutage benutzen, ähnliche Funktionen hat, aber soweit ich weiß, ist es Framework-spezifisch.

<casProcessor deployment="integrated" name="Person"> 
    <descriptor> 
    <include href="[descriptor]"/> 
    </descriptor> 
    <deploymentParameters/> 
    <errorHandling> 
    <errorRateThreshold action="terminate" value="100/1000"/> 
    <maxConsecutiveRestarts action="terminate" value="30"/> 
    <timeout max="100000"/> 
    </errorHandling> 
    <checkpoint batch="100" time="1000ms"/> 
</casProcessor>