Lo sviluppo agile è utilizzato nell'apprendimento automatico e nell'elaborazione del linguaggio naturale?

2

Da tempo sviluppo applicazioni web da un po 'di tempo ed è prassi comune nel nostro team utilizzare tecniche e principi di sviluppo agili per implementare il software.

Recentemente, mi sono anche occupato di Machine Learning e Natural Language Processing. Ho sentito che la gente usa principalmente Matlab per sviluppare algoritmi ML e NLP. Lo sviluppo agile è presente o l'abilità è completamente ridondante?

In altre parole, quando sviluppi gli algoritmi ML e NLP come lavoro, utilizzi lo sviluppo agile nel processo?

    
posta siamii 29.12.2011 - 01:57
fonte

1 risposta

7

L'apprendimento del Maching e l'elaborazione del linguaggio naturale sono in qualche modo guidati dai dati. Senza una fornitura continua di dati di alta qualità (che devono essere acquisiti nuovamente ogni volta che vengono aggiunti nuovi criteri), lo sviluppo del software potrebbe non raggiungere l'obiettivo prefissato.

Il cliente e il proprietario del prodotto possono dedicare una parte maggiore del loro tempo alla raccolta dei dati di test.

Gli adattamenti dipenderanno da:

  1. L'intervallo di tempo assegnato a "picco" rispetto a "implementazione"
    • picco: ricerca aperta / prototipazione esplorativa (dove i benefici sono possibili ma non certi, e dove le priorità cambiano rapidamente)
    • implementazione
    • (dove i vantaggi e i costi sono in qualche modo più prevedibili, ma ogni unità di lavoro impiegherà molto più tempo per terminare)
  2. Dimensione media di un'unità operativa. Quanto dura un picco? Quanto dura un'implementazione? Diversamente dallo sviluppo tipico dell'applicazione, le implementazioni di algoritmi parziali non sono solitamente eseguibili.
  3. Se "algoritmi in scatola" vale a dire i pacchetti di librerie / algoritmi esistenti sono disponibili.
    • Quando questi sono disponibili, il tempo speso per "implementazione" è ridotto (perché sono già stati scritti) e quindi verrà dedicato più tempo ai "picchi".

Ci saranno due cicli di feedback:

  1. In ogni iterazione, il cliente e il proprietario del prodotto raccolgono / aggiornano i dati periodicamente (e con una migliore qualità / criteri più recenti) in base alle esigenze aziendali e al feedback degli sviluppatori.
  2. In ogni iterazione, gli sviluppatori cercano di migliorare la qualità dell'algoritmo in base ai dati disponibili e l'algoritmo è impacchettato in un sistema utilizzabile e consegnato alla fine di ogni iterazione. Il cliente e il proprietario del prodotto dovrebbero essere autorizzati a prendere il sistema beta altrove, ridistribuirlo, ecc.

Pertanto, vediamo che "data" sostituisce "caratteristiche" come definizione principale di progresso.

A causa della crescente importanza di "ricerca / picco" nello sviluppo ML / NLP, è necessario un approccio più organizzato all'aumento - qualcosa che potresti aver già imparato da qualsiasi gruppo di ricercatori laureati . I picchi devono essere trattati come "mini-compiti", prendendo da ore a giorni. L'implementazione di una suite di algoritmi richiederà più tempo, in alcuni casi settimane. A causa delle differenze nella dimensione delle attività, i picchi e le implementazioni devono essere priorizzati separatamente. Le implementazioni sono costose, qualcosa da evitare se possibile. Questa è una delle ragioni per l'utilizzo di algoritmi in scatola / librerie esistenti.

Il supervisore dovrà costantemente ricordare a tutti di: (1) annotare ogni osservazione, inclusi "pensieri passanti" e ipotesi, e scambiare note spesso (ogni giorno). (2) Dedica più tempo ai picchi (3) usa le librerie esistenti il più possibile (4) non preoccuparti del tempo di esecuzione - questo può essere ottimizzato in seguito.

Se decidi di implementare qualcosa che manca nelle librerie, fallo con una buona qualità.

Attività quotidiane:

  • Riorganizzare i picchi (brevi compiti / ore - giorni) e scambiare note di ricerca.
    • Decifra le priorità in modo aggressivo se il risultato di ieri non sembra promettente.
  • Tutti devono dedicare una frazione di tempo all'implementazione (attività lunghe / settimane), altrimenti nessuno potrebbe lavorarci perché tendono ad essere più noiosi per le attività.

Attività sprint:

  • Demo, presentazione del software beta
  • Nuova raccolta dati
  • Retrospect: criteri di raccolta dati / nuove misure di qualità, soddisfazione dell'algoritmo, equilibrio tra picchi e implementazioni

Informazioni sulla nota sull'ottimizzazione posticipata: il rapporto tra pensiero e codice è molto più alto in ML / NLP che nel software aziendale. Quindi, una volta che hai un'idea di lavoro, riscrivere l'algoritmo per un'applicazione ML / NLP è più facile che riscrivere un software aziendale. Ciò significa che è più facile sbarazzarsi delle inefficienze ereditate dall'architettura (ovvero, nel peggiore dei casi, è sufficiente effettuare una riscrittura).

(Tutti gli editor sono invitati a riorganizzare (riordinare) i miei punti.)

    
risposta data 29.12.2011 - 02:56
fonte