Condividi tramite



Luglio 2018

Volume 33 Numero 7

Il presente articolo è stato tradotto automaticamente.

Servizi cognitivi - Miglioramento delle classificazioni con finalità LUIS

Dal Zvi Topol | Luglio 2018

L'Intelligence servizio LUIS (Language Understanding), che fa parte di servizi cognitivi Microsoft, offre una soluzione di machine learning per la comprensione del linguaggio naturale. Esistono molti casi d'uso per LUIS, tra cui chat Bot, interfacce vocali e motori di ricerca cognitiva.

In breve, quando viene specificato un testo input dell'utente, noto anche come un utterance, LUIS restituisce l'intento rilevato dietro utterance, vale a dire, ciò che l'utente intende lo riconosca. Rileva anche le diverse entità, ovvero i riferimenti agli oggetti reali, che vengono visualizzate nel utterance. Inoltre, viene restituito un punteggio di confidenza per ogni obiettivo e l'entità rilevata. Questi sono i numeri nell'intervallo [0, 1], con 1 che indica il massimo confidenza sul rilevamento e 0 è il meno sicuri su di esso.

Articoli di MSDN Magazine precedenti sono trattate le nozioni di base di LUIS in modo dettagliato. In particolare, ti invitiamo a fare riferimento all'articolo, "Abilita dell'interazione di linguaggio naturale con LUIS," da Sahu Ashish (msdn.com/magazine/mt745095) per altre informazioni su come iniziare a usare LUIS.

Questo articolo è incentrato su due strumenti open source, Scattertext e verde LIMONE, che consentono di comprendere il rilevamento e classificazione di Intent con LUIS. (In seguito, si utilizzerà il rilevamento e la classificazione in modo intercambiabile.)

In particolare, verrà illustrato come utilizzare tali strumenti oscurano il processo di classificazione e spiegare il motivo per cui LUIS è incerto sul relativo rilevamento preventivo in alcuni casi, in genere situazioni in cui gli scopi principali rilevati per un determinato utterance hanno simili punteggi di confidenza, ad esempio una divisione 50-50 tra due finalità. È più probabile che l'intento errato in situazioni di questo tipo di output.

LUIS è attualmente supporta alcune funzionalità di risoluzione dei problemi, tra cui apprendimento attivo identificare e ripetere il training di espressioni che è incerto circa, non esistono alcuna visualizzazione a livello di word e gli strumenti di analisi che ulteriormente consentono di risolvere incertezza. Scattertext e verde LIMONE è utile per superare questa limitazione.

Ora diamo uno sguardo un caso semplice di settore della Tecnofinanza che verrà utilizzato come un esempio di esecuzione. Si supponga si lavora per una banca e è stato assegnato il compito di domande di comprensione utenti che rientrano in due categorie:

  • Domande su personali correnti bancari, ad esempio:
    "Che cos'è il saldo di conto di risparmio?"
    "Qual è la transazione più recente nel conto corrente?"
    "Vorrei all'estratto conto di risparmio per essere inviato di nuovo"
    "Ho ricevuto la retribuzione di aprile ancora?"
    "Quando è stato il pagamento in base al ultimo cellulare automaticamente elaborato?"
    "Quali sono tariffe annuale per gli account personali risparmi?"
    "Che cos'è il saldo di conto corrente?"
  • Domande o richieste su altri servizi bancari, tra cui subprime loans automatica e così via, ad esempio:
    "Vorrei ottenere assistenza relativa alla tariffa di calcolo del mutuo"
    "Chi parlare con subprime relative alle?"
    "Qual è la frequenza annua per conto di risparmio annuale?"
    "I termini vengono offerte per subprime?"
    "Chi è responsabile di subprime?"
    "Quali sono tassi annuali per gli account di risparmi?"
    "Come sono alle tariffe di calcolo del mutuo rispetto alle altre banche?"

Il piano consiste nell'usare LUIS per la comprensione del linguaggio naturale delle richieste utente. Un modo per farlo consiste nel creare due finalità e il training di LUIS per grado di rilevarli.

È possibile chiamare PersonalAccountsIntent preventivi di prima categoria e OtherServicesIntent preventivo della seconda categoria. È quindi possibile usare gli esempi di utterance elencati in precedenza per eseguire il training LUIS. Verrà creato un terzo chiamato automaticamente None per utterances generale, che dovrebbe essere molto diversi dai primi due finalità con finalità di "catch-all". È inoltre possibile fornire esempi aggiuntivi per le finalità nessuno.

Dopo il training, è possibile pubblicare il modello nell'ambiente di produzione. È anche possibile visualizzare le espressioni con i punteggi di confidenza per finalità diverse nella UI di LUIS, come illustrato nella figura 1.

Espressioni PersonalAccountsIntent con i punteggi di confidenza
Figura 1 PersonalAccountsIntent espressioni con i punteggi di confidenza

Il dashboard offre alcune statistiche summary base sull'applicazione. Se si esamina il dashboard nel figura 1, si noterà che il punteggio di attendibilità più basso per PersonalAccountsIntent è 0,59 e viene ottenuto per utterance, "quali sono tariffe annuale per gli account personali risparmi?" Il punteggio di confidenza per questo utterance essere classificato come OtherServicesIntent è vera e propria chiusura in 0,44. Ciò significa che LUIS non molto sapere come classificare questa finalità.

In teoria, si desidera gli Intent sia distinguibile uno da altro con un livello elevato di certezza, vale a dire, per avere un solo intent con un punteggio di confidenza elevato, mentre altri scopi hanno punteggi molto bassi. Se viene rivisitata gli elenchi utterance per entrambe le finalità, si noterà che è un altro molto simili utterance esempio ("Qual è la frequenza annua per conto di risparmio annuale?") che viene etichettato in modo diverso come OtherServicesIntent.

Usa queste informazioni, è possibile ottimizzare i campioni utterance per utilizzare parole diverse e distinte.

In questo caso, presentate in sette esempi utterance per ogni scopo. Ma cosa accade se si sono verificati più Intent (al momento della scrittura LUIS può classificare fino a 500 finalità diversa) e molti altri esempi di utterance per ogni scopo?

Un approccio sistematico più chiaramente, è necessaria per soddisfare una richiesta di verifica. Di seguito viene illustrato come Scattertext e verde LIMONE consentono.

Informazioni sulla classificazione preventivo con Scattertext

Scattertext è uno strumento open source scritto in Python da Jason Kessler. È possibile trovare il codice sorgente e un'esercitazione in bit.ly/2G0DLmpe un articolo intitolato "Scattertext: uno strumento basato su Browser per visualizzare differenze Corpora," che illustra in dettaglio, lo strumento in bit.ly/2G05ow6.

Scattertext fu concepita come uno strumento per visualizzare le differenze e analogie tra due raccolte di articoli di testo, nota anche come corpora e dispone di varie funzionalità che possono risultare utili; ad esempio, supporta inoltre emoji.

In questo articolo si intende utilizzare lo strumento per generare una visualizzazione differenze e analogie tra gli esempi utterance per due finalità, PersonalAccountsIntent e OtherServicesIntent.

Per installare Scattertext, che richiede Python versione 3, seguire le istruzioni di installazione nell'esercitazione. Inoltre consigliabile installare Spacy, una libreria di elaborazione del linguaggio naturale open source (spacy.io) e che Pandas (pandas.pydata.org), un'altra libreria open source che consente di lavorare con dati tabulari in memoria.

A questo punto devo inserire gli esempi utterance in Scattertext. A tale scopo, creare una tabella CSV con due colonne, una per le espressioni e l'altro per le finalità. La colonna utterance includerà gli esempi utterance come un'unica stringa, separata dal carattere di nuova riga. (Se si usa Excel, è possibile utilizzare Alt + INVIO per immettere più righe in un'unica cella.) La colonna preventivo includerà le etichette di finalità, in questo caso, PersonalAccountsIntent e OtherServicesIntent. Pertanto, per questo esempio il risultato è una tabella CSV 2x2.

È ora possibile usare Python per eseguire il codice figura 2. Il codice verrà caricare nella tabella CSV in un frame di dati Panda e quindi consegna al Scattertext, specificare alcuni parametri correlati alle categorie (finalità) e il formato di output.

Figura 2 Code per la visualizzazione Scattertext

import scattertext as st
import space
import pandas as pd
examples_data_location = 'example.csv'
two_df = pd.read_csv(examples_data_location, encoding = 'utf8')
nlp = spacy.en.English()
corpus = st.CorpusFromPandas(two_df,
                              category_col='intent',
                              text_col='utterance',
                              nlp=nlp).build()
html = st.produce_scattertext_explorer(corpus,
  category='PersonalAccountsIntent',category_name='PersonalAccountsIntent',
  not_category_name='OtherServicesIntent', width_in_pixels=1000)
open("MSDN-Visualization.html", 'wb').write(html.encode('utf-8'))

Scattertext produrrà una pagina HTML che include una visualizzazione che mostra le prime parole univoche per ogni finalità, nonché quelle condivise da entrambi gli Intent. È inoltre disponibile una casella di ricerca che consente di cercare parole specifiche, che, se trovato, vengono evidenziati nella visualizzazione. In una visualizzazione affollata, può essere molto utile. Figura 3 Mostra l'output Scattertext per questo esempio.

Visualizzazione Scattertext
Figura 3 Scattertext visualizzazione

Works Scattertext il conteggio delle frequenze di word per alcuni esempi di utterance ogni dell'intent e visualizzando le parole in modo che rende più semplice per determinare le differenze e le analogie presenti tra gli scopi. A questo punto, i conteggi includono solo le espressioni sola parola (unigrammi). Tuttavia, se si dispongono di espressioni che includono più parole, ad esempio "pagamento automatico", è possibile svolgere pre-elaborazione per specificare gli elementi da. Ad esempio, è possibile rappresentare "auto pay" come "auto_pay."

La visualizzazione nel figura 3 Mostra due finalità, ovvero OtherServicesIntent sulla X asse e PersonalAccountsIntent sull'asse Y. Le parole che compaiono più da vicino alla parte inferiore destra sono più probabile che venga visualizzato negli esempi utterance per OtherServicesIntent, ad esempio "subprime" e "tariffe", mentre le parole che compaiono in alto a sinistra sono quelli che sono più probabile che venga visualizzato negli esempi utterance per PersonalAccountsIntent, ad esempio "my" e "account". Parole lungo la diagonale sono probabile che venga visualizzato negli esempi utterance per entrambe le finalità, ad esempio, "risparmi" o "cosa".

Learning che vengono usati frequentemente determinate parole negli esempi degli entrambi gli intenti utterance può aiutarti a ottimizzare gli esempi utterance per migliorare la precisione e la probabilità di classificazione.

Un modo per eseguire questa operazione è tramite l'aggiunta di parole più distinte o anche trovare esempi di utterance ogni dell'intent che includono le parole spesso in entrambe in modo da renderle più distinguibili.

Il vantaggio dell'uso Scattertext è che è possibile ottenere valore dallo strumento anche per piccoli set di dati, ad esempio esempio giocattoli solo sette ed esempi utterance per ogni scopo. Chiaramente, altre utterance esempi per finalità che hai, il più complesso diventa per individuare le differenze e analogie tra di essi. Scattertext può aiutarti a comprendere le differenze e analogie in una modalità visiva rapida.

È anche importante notare che è possibile usare Scattertext in modo analogo, quando si dispone di più di due finalità confrontando le coppie di Intent alla volta.

Spiegando preventivo classificazioni usando verde LIMONE

Ora esaminiamo uno strumento open source chiamato LIME o locale può essere interpretato spiegazione indipendente dal modello, che consente di spiegare classificazione preventivo. È possibile trovare il codice sorgente e un'esercitazione in bit.ly/2I4Mp9ze un documento di ricerca in ambito accademico intitolata "perché dovrei mi fido di te?: Che descrive le stime di un classificatore"(bit.ly/2ocHXKv).

Verde LIMONE viene scritta in Python ed è possibile seguire le istruzioni di installazione in questa esercitazione prima di eseguire il codice figura 4.

Figura 4 uso LIME per analizzare espressioni

import requests
import json
from lime.lime_text import LimeTextExplainer
import numpy as np
def call_with_utterance_list(utterance_list) :
  scores=np.array([call_with_utterance(utterance) for utterance in
    utterance_list])
  return scores
def call_with_utterance(utterance) :
  if utterance is None :
    return np.array([0, 1])
  app_url ='your_url_here&q='
  r = requests.get(app_url+utterance)
  json_payload = json.loads(r.text)
  intents = json_payload['intents']
  personal_accounts_intent_score =
    [intent['score'] for intent in intents if intent['intent'] ==
    'PersonalAccountsIntent']
  other_services_intent_score = [intent['score'] for intent in intents if
    intent['intent'] == 'OtherServicesIntent']
  none_intent_score = [intent['score'] for intent in intents if
    intent['intent'] == 'None']
  if len(personal_accounts_intent_score) == 0 :
      return np.array([0, 1])
  normalized_score_denom = personal_accounts_intent_score[0]+
    other_services_intent_score[0]+none_intent_score[0]
  score = personal_accounts_intent_score[0]/normalized_score_denom
  complement = 1 - score
  return (np.array([score, complement]))
if __name__== "__main__":
  explainer = LimeTextExplainer(class_names=['PersonalAcctIntent', 'Others'])
  utterance_to_explain = 'What are annual rates for my savings accounts'
  exp = explainer.explain_instance(utterance_to_explain,
    call_with_utterance_list, num_samples=500)
  exp.save_to_file('lime_output.html')

Verde LIMONE consente di spiegare i classificatori per le diverse applicazioni, tra cui immagini e testo. Devo usare la versione di testo di LIME, che invia l'output di word a livello di informazioni dettagliate sulle varie parole nel utterance. Anche se si usa LUIS come la funzione di classificazione di scelta, un'ampia gamma di classificatori possa essere inserita nel LIME; in pratica vengono trattati come black box.

La versione di testo di LIME funziona approssimativamente come indicato di seguito: Viene creato in modo casuale più modifiche o gli esempi dell'input utterance rimuovendo qualsiasi numero di parole e quindi chiama LUIS su ognuno di essi. Il numero di campioni è controllato dal num_samples parametro, che in figura 4 è impostato su 500. Per l'emissione di esempio, utterances modificato può includere le variazioni, ad esempio "sono annuali per gli account" e "quali annuale di velocità per il risparmio".

Verde LIMONE Usa i punteggi di confidenza restituiti dal servizio LUIS per adattare un modello lineare che stima quindi gli effetti di singole parole sui punteggi di confidenza classificazione. Questa stima consenta di identificarli come il punteggio di confidenza è possibile che cambino se si intende rimuovere parole dal utterance ed eseguire la funzione di classificazione nuovamente (come illustrato più avanti).

Il requisito principale solo per la funzione di classificazione è per restituire i punteggi di confidenza per le etichette di classificazione. I punteggi di confidenza per le categorie di diversi vengono considerati come una distribuzione di probabilità e pertanto devono essere nell'intervallo di [0,1] e somma su 1. LUIS restituisce i punteggi di confidenza nell'intervallo per le finalità definita e gli altri preventivo None, ma quelli non è garantiti la somma di 1. Pertanto, quando si usa LIME, sarà normalizzare i punteggi di LUIS per sommare i valori su 1. (Ciò viene eseguito in call_with_utterance la funzione.)

Il codice riportato nella figura 4 utilizza LIME per produrre una spiegazione sulla stima per il utterance, "quali sono tariffe annuale per gli account personali risparmi?" Genera quindi una visualizzazione HTML, che viene presentata nella figura 5.

Verde LIMONE Output per il "quali sono tariffe annuale per gli account personali risparmi?" Utterance
Figura 5 LIME di Output per il "quali sono tariffe annuale per gli account personali risparmi?" Utterance

Nelle figura 5 è possibile visualizzare le probabilità stimate per utterance, qui in particolare PersonalAccountsIntent anziché altri due finalità, OtherServicesIntent e None. Si noti che le probabilità siano molto simile a ma non è uguale a quello utilizzato per l'output di punteggi di confidenza di LUIS a causa di normalizzazione. È anche possibile visualizzare le parole più significative per classificare l'intento come PersonalAccountsIntent (quelli sono parole all'inizio le barre blu e sono anche evidenziati in blu nel testo utterance). Lo spessore della barra indica gli effetti sul punteggio di confidenza classificazione deve essere rimosse la parola dal utterance. Quindi, ad esempio, "my" è la parola con l'effetto di più significativo per il rilevamento di finalità del utterance in questo caso. Se si dovesse per rimuoverlo dal utterance, il punteggio di confidenza dovrebbe ridurre 0,30, da 0.56 a 0,26. Si tratta di una stima generata da verde LIMONE. In effetti, quando la rimozione della parola e inserire il utterance "quali sono tassi annuali per gli account di risparmi?" nel servizio LUIS, il risultato è che il punteggio di confidenza per PersonalAccountsIntent è 0,26 e lo scopo ora viene classificato come OtherServicesIntent, con una fiducia assegnare un punteggio sulle 0,577 (vedere figura 6).

Figura 6 risultati per il "quali sono tariffe annuale per gli account personali risparmi?" Query

{
  "query": "what are annual rates for savings accounts",
  "topScoringIntent": {
    "intent": "OtherServicesIntent",
    "score": 0.577525139
  },
  "intents": [
    {
      "intent": "OtherServicesIntent",
      "score": 0.577525139
    },
    {
      "intent": "PersonalAccountsIntent",
      "score": 0.267547846
    },
    {
      "intent": "None",
      "score": 0.00754897855
    }
  ],
  "entities": []
}

Altre parole significative sono "account" e "risparmi", che, insieme a "my", che forniscono informazioni simili a quelle fornite dai Scattertext.

Due parole importanti con pesi negativi significativi sono "annuale" e "tassi di cambio." Ciò significa che rimuoverle dal utterance aumenterebbe i punteggi di confidenza per utterance essere classificato come PersonalAccountsIntent. Scattertext ha dimostrato che "tariffe" sono più comune negli esempi utterance per OtherServicesIntent, in modo che questo non è una grossa novità.

Tuttavia, c'è qualcosa di nuovo che emerge da verde LIMONE, ovvero la parola "annuale" è significativa per LUIS per determinare che lo scopo in questo caso non appartiene al PersonalAccountsIntent e rimuoverlo è previsto un aumento del punteggio di confidenza per PersonalAccountsIntent da 0.27. In effetti, quando si rimuove annuali prima di inserirla il utterance, viene visualizzato un punteggio di confidenza superiore per le finalità PersonalAccountsIntent, vale a dire 0.71 (vedere figura 7).

Figura 7 risultati per il "quali sono le tariffe per gli account personali risparmi?" Query

{
  "query": "what are rates for my savings accounts",
  "topScoringIntent": {
    "intent": "PersonalAccountsIntent",
    "score": 0.71332705
  },
  "intents": [
    {
      "intent": "PersonalAccountsIntent",
      "score": 0.71332705
    },
    {
      "intent": "OtherServicesIntent",
      "score": 0.18973498
    },
    {
      "intent": "None",
      "score": 0.007595492
    }
  ],
  "entities": []
}

In questo modo, LIMONE consente di identificare le parole significative che determinano i punteggi di confidenza classificazione. Può pertanto offrire informazioni dettagliate che consentono di ottimizzare i propri esempi utterance per migliorare la precisione della classificazione intent.

Conclusioni

Vi ho mostrato che quando si sviluppa un'applicazione basata su NLU, stima preventivo per alcune espressioni può risultare piuttosto complessa e può essere consentito per una migliore comprensione di come ottimizzare esempi utterance per migliorare la precisione della classificazione.

L'attività di informazioni sulle differenze a livello di word e le analogie presenti tra espressioni consentono di ottenere informazioni concrete nel processo di ottimizzazione.

Che ho presentato due strumenti open source, Scattertext e verde LIMONE, che offrono indicazioni di word a livello tramite l'identificazione di parole significative che influiscono sulla stima intent. Scattertext Visualizza le differenze e analogie di frequenze di parole in esempi utterance mentre LIME identifica parole significative che interessano i punteggi di confidenza classificazione intent.

Mi auguro che questi strumenti ti consentiranno compilazione meglio NLU prodotti basati su Usa LUIS.


Zvi Topolha lavorato come un data scientist in vari settori industriali verticali, tra cui marketing analitica, media e intrattenimento e Internet delle cose industriale. Egli ha recapitato e causare più machine learning e analitica progetti, tra cui il linguaggio naturale e interfacce vocali, ricerca cognitiva, analisi video, sistemi di raccomandazione e sistemi di supporto decisionale di marketing. È possibile contattarlo all'indirizzo zvitop@gmail.com.

Grazie al seguente esperto tecnico Microsoft che ha esaminato in questo articolo: Ashish Sahu


Discutere di questo articolo nel forum di MSDN Magazine