Un approccio PNL all'estrazione di recensioni online utilizzando la modellazione di argomenti

Contenuti

introduzione

L'e-commerce ha rivoluzionato il modo di fare acquisti. Quel telefono che hai risparmiato per comprare per mesi? È solo una ricerca e pochi clic di distanza. Gli articoli vengono consegnati in pochi giorni (A volte anche il giorno dopo!).

Per i rivenditori online, non ci sono restrizioni relative alla gestione dell'inventario o alla gestione dello spazio. Possono vendere tutti i prodotti che vogliono. I negozi fisici possono tenere solo un numero limitato di prodotti a causa dello spazio limitato che hanno a disposizione.

Ricordo quando ordinavo libri nella mia libreria locale, e prima ci metteva più di una settimana ad arrivare. Sembra una storia dei tempi antichi ormai!

screenshot_1-9994416

Fonte: http://www.yeebaplay.com.br

Ma lo shopping online ha i suoi avvertimenti. Una delle sfide più grandi è verificare l'autenticità di un prodotto. È buono come pubblicizzato sul sito di e-commerce?? Il prodotto durerà più di un anno?? Le opinioni degli altri clienti sono davvero vere o sono pubblicità ingannevole?? Queste sono domande importanti che i clienti dovrebbero porsi prima di sprecare i loro soldi.

Questo è un ottimo posto per sperimentare e applicare tecniche di elaborazione del linguaggio naturale. (PNL). Questo articolo ti aiuterà a capire l'importanza di sfruttare le recensioni dei prodotti online con l'aiuto di Topic Modeling.

Dai un'occhiata agli articoli seguenti nel caso avessi bisogno di un rapido aggiornamento sulla modellazione del tema:

Sommario

  1. Importanza delle recensioni online
  2. Dichiarazione problema
  3. Perché la modellazione del tema è per questo compito??
  4. Implementazione Python
    • Leggi i dati
    • Pretrattamento dei dati
    • Costruire un modello LDA
    • Visualizzazione dei temi
  5. Altri metodi per sfruttare le recensioni online
  6. Qual è il prossimo?

Importanza delle recensioni online

Qualche giorno fa, Mi sono lanciata nell'e-commerce e ho comprato uno smartphone online. Rientrava nel mio budget e aveva una valutazione decente di 4.5 su 5.

screenshot_2-7452716

Sfortunatamente, si è rivelata una cattiva decisione poiché la batteria di riserva era molto al di sotto della media. Non ho controllato le recensioni del prodotto e ho preso la decisione affrettata di acquistarlo basandomi esclusivamente sulle sue valutazioni. E so di non essere l'unico che ha commesso questo errore!

Le sole valutazioni non danno un quadro completo dei prodotti che vogliamo acquistare, come ho scoperto a mio discapito. Perciò, Che cosa misura de precaución, Consiglio sempre alle persone di leggere le recensioni di un prodotto prima di decidere se acquistarlo o meno.

Ma poi sorge un problema interessante. E se il numero di recensioni fosse centinaia o migliaia?? Non è possibile passare attraverso tutte quelle recensioni, verità? Ed è qui che trionfa l'elaborazione del linguaggio naturale.

Afferma la dichiarazione del problema

Una dichiarazione di problema è il seme da cui germoglia la tua analisi. Perciò, è davvero importante avere una solida dichiarazione del problema, chiaro e ben definito.

problem_statement-2709087

Come possiamo analizzare un gran numero di recensioni online utilizzando l'elaborazione del linguaggio naturale? (PNL)? Definiamo questo problema.

Le recensioni dei prodotti online sono un'ottima fonte di informazioni per i consumatori. Dal punto di vista dei venditori, le recensioni online possono essere utilizzate per valutare il feedback dei consumatori sui prodotti o servizi che vendono. tuttavia, poiché queste recensioni online sono spesso travolgenti in termini di numeri e informazioni, un sistema intelligente, in grado di trovare informazioni chiave (temi) da queste recensioni, sarà di grande aiuto sia per i consumatori che per i venditori. Questo sistema avrà due scopi:

  1. Consenti ai consumatori di estrarre rapidamente gli argomenti chiave coperti dalle recensioni senza doverli esaminare tutti.
  2. Aiuta i venditori / rivenditori per ottenere il feedback dei consumatori sotto forma di argomenti (tratto dalle recensioni dei consumatori)

Per risolvere questo compito, useremo il concetto di Modellazione a Tema (LDA) nei dati di Amazon Automotive Review. Puoi scaricarlo da questo Collegamento. Set di dati simili possono essere trovati per altre categorie di prodotti qui.

Perché dovresti usare la modellazione del tema per questa attività??

Come suggerisce il nome, la modellazione degli argomenti è un processo per identificare automaticamente gli argomenti presenti in un oggetto di testo e derivare modelli nascosti esibiti da un corpus di testo. I modelli di temi sono molto utili per molteplici scopi, Compreso:

  • Raggruppamento di documenti
  • Organizza grandi blocchi di dati testuali
  • Recupero di informazioni di testo non strutturato
  • Selezione delle funzioni

Un buon modello a tema, quando ti alleni in un testo sul mercato azionario, dovrebbe tradursi in argomenti come “offerta”, “negoziazione”, “dividendo”, “scambio”, eccetera. L'immagine seguente illustra come funziona un tipico modello di tema:

topic_model-1945708

Nel nostro caso, invece di documenti di testo, abbiamo migliaia di recensioni di prodotti online per gli articoli elencati nella categoria "Automotive". Il nostro obiettivo qui è estrarre un certo numero di gruppi di parole importanti dalle recensioni.. Questi gruppi di parole sono fondamentalmente gli argomenti che aiuterebbero a determinare ciò di cui i consumatori stanno realmente parlando nelle recensioni..

aspetto_amazon-4693420

Implementazione Python

In questa sezione, attiveremo i nostri taccuini Jupyter (O qualsiasi altro IDE che usi per Python!). Qui lavoreremo sulla dichiarazione del problema definita sopra per estrarre argomenti utili dal nostro set di dati di recensioni online utilizzando il concetto di mappatura di Dirichlet latente. (LDA).

Nota: Come ho detto nell'introduzione, Consiglio vivamente di leggere questo articolo per capire cos'è l'LDA e come funziona.

Carichiamo prima tutte le librerie necessarie:

import nltk
da nltk import FreqDist
nltk.download('stopword') # corri questa volta
importa panda come pd
pd.set_option("display.max_colwidth", 200)
importa numpy come np
importare re
importare spazio

import gensim
da gensim import corpora

# librerie per la visualizzazione
import pyLDAvis
import pyLDAvis.gensim
importa matplotlib.pyplot come plt
import seaborn come sns
%matplotlib in linea

Per importare i dati, prima estrai i dati nella tua directory di lavoro e poi usa il read_json () funzione panda per leggerlo in un frame di dati panda.

df = pd.read_json('Automotive_5.json', righe=Vero)
df.head()

screenshot_3-7155997

Come potete vedere, i dati contengono le seguenti colonne:

  • IDrecensore – ID del revisore
  • come in – numero identificativo del prodotto
  • nomerecensore – nome del revisore
  • utile – rivedere la valutazione dell'utilità, ad esempio, 2/3
  • recensioneText – rivedere il testo
  • generalmente – valutazione del prodotto
  • astratto – riassunto della recensione
  • unixReviewTime – tempo di revisione (unix ora)
  • tempo di revisione – tempo di revisione (senza elaborazione)

Per lo scopo della nostra analisi e di questo articolo, useremo solo la colonna delle recensioni, vale a dire, recensioneText.

Pretrattamento dei dati

La preelaborazione e la pulizia dei dati è un passaggio importante prima di qualsiasi attività di estrazione di testo, in questo passaggio, elimineremo i segni di punteggiatura, le stopword e normalizzeremo il più possibile le revisioni. Dopo ogni fase di pre-elaborazione, è buona norma controllare le parole più frequenti nei dati. Perciò, definamos una función que trazaría un grafico a barre de n palabras más frecuentes en los datos.

# funzione per tracciare i termini più frequenti
def freq_words(X, termini = 30):
  all_words=" ".aderire([testo per testo in x])
  all_words = all_words.split()

  fdist = FreqDist(tutte le parole)
  word_df = pd.DataFrame({'parola':elenco(fdist.keys()), 'contare':elenco(fdist.values())})

  # selezionando in alto 20 parole più frequenti
  d = parole_df.nlargest(colonne="contare", n = termini) 
  plt.figure(figsize=(20,5))
  ax = sns.barplot(dati=d, x= "parola", y = "contare")
  ax.set(ylabel="Contare")
  plt.mostra()

Proviamo questa funzione e scopriamo quali sono le parole più comuni nel nostro set di dati delle recensioni.

freq_words(df['recensione'])

screenshot_4-2672351

Le parole più comuni sono “il”, “e”, “per”, eccetera. Queste parole non sono così importanti per il nostro compito e non raccontano alcuna storia.. Dobbiamo sbarazzarci di questo tipo di parole. Prima di ciò, rimuoviamo punteggi e numeri dai nostri dati di testo.

# rimuovere i caratteri indesiderati, numeri e simboli
df['recensione'] = df['recensione'].str.replace("[^ a-zA-Z #]", " ")

Proviamo ad eliminare le stopword e le parole brevi (<2 lettere) di recensioni.

da nltk.corpus importa parole non significative
stop_words = stopwords.parole('inglese')
# funzione per rimuovere le stopword
def remove_stopwords(rev):
    rev_new = " ".aderire([io per io in rev se non in stop_words])
    rev_new di ritorno

# rimuovi le parole brevi (lunghezza < 3)
df['recensione'] = df['recensione'].applicare(lambda x: ' '.aderire([w per w in x.split() se len(w)>2]))

# rimuovere le stopword dal testo
recensioni = [remove_stopwords(r.split()) per r in df['recensione']]

# rendere l'intero testo minuscolo
recensioni = [r.inferiore() per r nelle recensioni]

Rintracciamo le parole più frequenti e vediamo se sono uscite le parole più significative.

freq_words(recensioni, 35)

screenshot_5-7430983

Possiamo vedere alcuni miglioramenti qui. Termini come “batteria”, “prezzo”, “Prodotto”, “olio”, che sono abbastanza rilevanti per la categoria Automotive. tuttavia, abbiamo ancora termini neutri come "il", 'questo', 'tanto', 'loro’ che non sono così rilevanti.

Per rimuovere ulteriormente il rumore dal testo, possiamo usare la lemmatizzazione dalla libreria spaCy. Riduci ogni parola data alla sua forma base, riducendo così più forme di una parola a una singola parola.

!python -m spacy download it # corsa una volta
nlp = spacy.load('Su', disabilita=['analizzatore', 'fuori uso'])

def lemmatizzazione(testi, tag=['SOSTANTIVO', 'REG.']): # filter noun and adjective
       output = []
       per l'invio di testi:
             doc = nlp(" ".aderire(spedito)) 
             output.append([token.lemma_ per token in doc if token.pos_ in tags])
       Uscita di ritorno

Tokenizziamo le recensioni e poi lemmatizziamo le recensioni tokenizzate.

tokenized_reviews = pd.Series(recensioni).applicare(lambda x: x.split())
Stampa(tokenized_reviews[1])
['queste', 'lungo', "cavi", 'opera', 'bene', 'camion', 'qualità', 'sembra', 'poco', 'squallido', 
'lato', 'per', 'soldi', 'in attesa', 'dollaro', 'affrettato', 'Maglione', "cavi", 'sembrare', 'Come', 
'voluto', 'vedere', 'Cinese', 'bussare', 'negozio', 'Come', 'porto', 'trasporto', 'dollari']
recensioni_2 = lemmatizzazione(tokenized_reviews)
Stampa(recensioni_2[1]) # stampa recensione lemmatizzata
['lungo', 'cavo', 'bene', 'camion', 'qualità', 'poco', 'squallido', 'lato', 'soldi', 'dollaro', 
'Maglione', 'cavo', 'Cinese', 'negozio', 'porto', 'trasporto', 'secchio']

Come potete vedere, non abbiamo solo lemmatizzato le parole, ma abbiamo anche filtrato solo nomi e aggettivi. Rimuoviamo i token dalle recensioni di slogan e tracciamo le parole più comuni.

recensioni_3 = []
per io nel raggio d'azione(len(recensioni_2)):
    recensioni_3.append(' '.aderire(recensioni_2[io]))

df['recensioni'] = recensioni_3

freq_words(df['recensioni'], 35)

screenshot_6-3528467

Sembra che ora i termini più frequenti nei nostri dati siano rilevanti. Ora possiamo andare avanti e iniziare a costruire il nostro modello di tema.

Costruire un modello LDA

Inizieremo creando il dizionario dei termini del nostro corpus, donde a cada término único se le asigna un indice

dizionario = corpora.Dizionario(recensioni_2)

Dopo, convertiremo l'elenco delle revisioni (recensioni_2) in una Matrice di termini del documento utilizzando il dizionario preparato sopra.

doc_term_matrix = [dizionario.doc2bow(rev) per revisione in recensioni_2]
# Creazione dell'oggetto per il modello LDA utilizzando la libreria gensim
LDA = gensim.models.ldamodel.LdaModel

# Costruisci il modello LDA
lda_model = LDA(corpus=doc_term_matrix, id2word=dizionario, num_topics=7, random_state=100,
                chunksize=1000, passa=50)

Il codice sopra richiederà un po' di tempo. Nota che ho specificato il numero di temi come 7 per questo modello utilizzando il num_topics parametro. Puoi specificare un numero qualsiasi di temi utilizzando lo stesso parametro.

Stampiamo gli argomenti che il nostro modello LDA ha imparato.

lda_model.print_topics()
[(0, '0.030*"macchina" + 0.026*"olio" + 0.020*"filtro" + 0.018*"motore" + 0.016*"dispositivo" + 0.013*"codice" 
+ 0.012*"veicolo" + 0.011*"app" + 0.011*"modificare" + 0.008*"bosch"'), 
(1, '0.017*"facile" + 0.014*"installare" + 0.014*"porta" + 0.013*"nastro" + 0.013*"jeep" + 0.011*"davanti" + 
0.011*"stuoia" + 0.010*"lato" + 0.010*"faro" + 0.008*"in forma"'), 
(2, '0.054*"Lama" + 0.045*"tergicristallo" + 0.019*"parabrezza" + 0.014*"piovere" + 0.012*"neve" + 
0.012*"Buona" + 0.011*"anno" + 0.011*"vecchio" + 0.011*"macchina" + 0.009*"tempo"'), 
(3, '0.044*"macchina" + 0.024*"asciugamano" + 0.020*"Prodotto" + 0.018*"pulire" + 0.017*"Buona" + 0.016*"cera" + 
0.014*"acqua" + 0.013*"utilizzo" + 0.011*"tempo" + 0.011*"lavare"'), 
(4, '0.051*"leggero" + 0.039*"batteria" + 0.021*"lampadina" + 0.019*"potenza" + 0.018*"macchina" + 0.014*"luminosa" 
+ 0.013*"unità" + 0.011*"caricabatterie" + 0.010*"Telefono" + 0.010*"carica"'), 
(5, '0.022*"pneumatico" + 0.015*"tubo flessibile" + 0.013*"utilizzo" + 0.012*"Buona" + 0.010*"facile" + 0.010*"pressione" + 
0.009*"piccolo" + 0.009*"trailer" + 0.008*"simpatico" + 0.008*"acqua"'), 
(6, '0.048*"Prodotto" + 0.038*"Buona" + 0.027*"prezzo" + 0.020*"Grande" + 0.020*"pelle" + 
0.019*"qualità" + 0.010*"opera" + 0.010*"recensione" + 0.009*"amazon" + 0.009*"di valore"')]

Il quarto tema Tema 3 ha termini come “asciugamano”, “ripulire”, “cera”, “Acqua”, il che indica che l'argomento è strettamente correlato al lavaggio dell'auto. Simile, Tema 6 sembra avere a che fare con il valore complessivo del prodotto, poiché ha termini come “prezzo”, “qualità” e “valore”.

Visualizzazione dei temi

Per visualizzare i nostri temi in uno spazio bidimensionale utilizzeremo il libreria pyLDAvis. Questa visualizzazione è di natura interattiva e mostra argomenti insieme alle parole più rilevanti..

# Visualizza gli argomenti
pyLDAvis.enable_notebook()
vis = pyLDAvis.gensim.prepare(lda_model, doc_term_matrix, dizionario)
vis

topic_modeling_vis-8886126

Il codice completo è disponibile qui.

Altri metodi per sfruttare le recensioni online

Oltre ai temi di modellazione, ci sono molti altri metodi di PNL utilizzati per analizzare e comprendere le recensioni online. Alcuni di loro sono elencati di seguito:

  1. Riepilogo del testo: Riassumi le recensioni in un paragrafo o in alcuni punti elenco.
  2. Riconoscimento di entità: Estrai le entità dalle recensioni e identifica quali prodotti sono più popolari (o impopolare) tra i consumatori.
  3. Identificare le tendenze emergenti: Secondo il timestamp delle recensioni, possono essere identificati temi o entità nuovi ed emergenti. Ci permetterebbe di scoprire quali prodotti stanno diventando popolari e quali stanno perdendo presa sul mercato..
  4. Analisi del sentimento: Per i rivenditori, comprendere il sentimento delle recensioni può essere utile per migliorare i tuoi prodotti e servizi.

Qual è il prossimo?

Il recupero delle informazioni ci risparmia la fatica di rivedere le recensioni dei prodotti una per una. Ci dà un'idea chiara di ciò che gli altri consumatori stanno parlando del prodotto.

tuttavia, non ci dice se le recensioni sono positive, neutro o negativo. Questo diventa un'estensione del problema del recupero delle informazioni in cui non dobbiamo solo estrarre i problemi, ma determina anche il sentimento. Questo è un compito interessante che tratteremo nel prossimo articolo..

Note finali

La modellazione di argomenti è una delle tecniche di PNL più popolari con varie applicazioni del mondo reale, come riduzione dimensionale, riassunto del testo, motore di raccomandazione, eccetera. Lo scopo di questo articolo era dimostrare l'applicazione dell'LDA nel testo normale generato dalla folla. dati. Ti incoraggio a implementare il codice in altri set di dati e a condividere i tuoi risultati.

Se hai qualche suggerimento, domande o qualsiasi altra cosa tu voglia condividere sulla modellazione del tema, sentiti libero di usare la sezione commenti qui sotto.

Se stai cercando di entrare nel campo dell'elaborazione del linguaggio naturale, allora abbiamo un videocorso progettato per te che copre la preelaborazione del testo, modellazione del tema, riconoscimento di entità denominate, apprendimento profondo para PNL y muchos más temas.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.