Analise o feedback do cliente usando a análise de sentimento baseada em aspectos

Conteúdo

Este artigo foi publicado como parte do Data Science Blogathon

tem sido uma plataforma para os clientes darem feedback às empresas com base na sua satisfação. As avaliações postadas pelos clientes são a fonte confiável de conteúdo genuíno do mundo para outros usuários. O feedback do cliente serve como uma ferramenta de validação de terceiros para criar confiança na marca do usuário. Para entender esses comentários dos clientes sobre uma entidade, A análise de sentimentos está se tornando uma ferramenta de aumento para qualquer organização.

A análise de sentimentos envolve o exame de conversas on-line, como tweets., postagens de blog ou comentários sobre serviços ou tópicos específicos e segregar as opiniões dos usuários (positivo, negativo e neutro), permitindo que as empresas identifiquem o sentimento do cliente em relação aos produtos. Ajude as empresas com um pulso profundo sobre como os clientes realmente obtêm “Sentir” sobre sua marca e processam grandes quantidades de dados de maneira eficiente e econômica. Analisando automaticamente o feedback do cliente, Das respostas da pesquisa às conversas de mídia social, As marcas podem ouvir atentamente seus clientes e adaptar produtos e serviços para atender às suas necessidades.

A análise de sentimento pode ser classificada como detalhada, Detecção de emoções, Análise de Sentimento Baseada em Aspectos e Análise de Intenção. A análise detalhada do sentimento lida com a polaridade da interpretação na revisão, enquanto a detecção de emoções envolve a expressão emocional do usuário sobre um produto..

A análise de sentimento baseada em aspectos é uma variedade de análises de sentimento que ajudam na melhoria dos negócios, conhecendo os recursos do seu produto que precisam ser melhorados de acordo com o feedback do cliente para tornar seu produto um best-seller.. O ABSA identifica os aspectos na revisão dada sobre um produto e também descobre se o aspecto mencionado na revisão pertence a que tipo de sentimento..

Neste artigo, realizaremos o ABSA usando o conjunto de dados de laptop e restaurante da SemEval 2014, bem como conjuntos de dados multilíngues, como o conjunto de dados hindi em produtos como laptops, Telefones, Restaurantes e hotéis.

Pré-processamento de dados

Tokenización: Tokenização é a divisão do parágrafo do texto em partes menores, como orações (tokenização de sentença) ou palavras (tokenização de palavras). A principal desvantagem da tokenização de palavras são palavras sem vocabulário (OOV), para evitar OOV e também para extrair informações da tokenização de sentença de texto que é usada nesta análise.

Excluir palavras vazias: Após a tokenização, Palavras vazias são identificadas e removidas dos tweets. palavras vazias são as palavras mais comuns em um idioma que podem não adicionar muita informação à frase ou documento. Essas palavras são filtradas para minimizar o ruído e melhorar a qualidade dos dados de texto para uma melhor classificação. A biblioteca de PNL contém uma coleção de palavras vazias para cada idioma do texto em NLTK. As palavras no texto são comparadas com esta lista de palavras vazias, As palavras correspondentes são removidas para melhorar a qualidade dos dados e também para extrair facilmente palavras de sentimento de tweets.

Remover pontuação e caractere: Após a expansão das contrações, Caracteres especiais e pontuações são removidos usando a função Regex. A principal razão para fazer isso é porque a pontuação ou os caracteres especiais geralmente não têm muita importância ao analisar o texto e eles o usam para extrair recursos ou informações com base na PNL e no ML..

Substituição da negação por antônimos: A substituição de palavras negativas por antônimos diminui a dimensionalidade da contagem de palavras da matriz do documento, Por isso, é benéfico comprimir o vocabulário sem perder o seu significado para economizar memória.

from nltk.corpus import wordnet
class AntonymReplacer(objeto):
 def substituir(auto, palavra, pos=Nenhum):
  antônimos = set()
  para syn em wordnet.synsets(palavra, pos=pos):
    para lema em syn.lemmas():
      para antônimo em lemma.antonyms():
        antônimos.add(antonym.name())
  se len(Antônimos) == 1:
    return antonyms.pop()
  outro:
    return None
 def replace_negations(auto, enviei):
  eu, l = 0, len(enviei)
  palavras = []
  enquanto eu < eu:
    palavra = enviado[eu]
    se palavra == 'não' e i+1 < eu:
      formiga = auto.substituir(enviei[i+1])
      se formiga:
        palavras.acrescentar(Formiga)
        i += 2
        continue
    words.append(palavra)
    i += 1
  palavras de retorno

Correção ortográfica: Palavras que têm vários caracteres repetidos e ortografia incorreta que ocorrem devido a erros de digitação humana devem ser excluídas, uma vez que não têm importância em geral. Por exemplo, Palavras como Finalmenteyy, exatamenteyy, etc.são entradas incorretas, porém, deve ser corrigido para uso posterior.

Lematización: Lemmatização é a técnica de pré-processamento de texto mais comum usada para normalização de palavras. Lematizar uma palavra converte a palavra à sua forma básica significativa, observando a análise morfológica de cada palavra.. Lemmatização também é semelhante à lemmatização, pero la primera no tiene en cuenta el contexto de la palabra en la oración y solo elimina el sufijo en las palabras.

nltk.download('wordnet')
from nltk.stem import WordNetLemmatizer
lemmatizer=WordNetLemmatizer()
antreplacer = AntonymReplacer()
def clean_text(texto):
    #Lemmatizando os textos
    # removing aphostrophe words
    text = text.lower() se pd.notnull(texto) else text
    text = re.sub(r"o que é", "o que é ",str(texto)) 
    text = re.sub(r"'s", " ", str(texto)) 
    text = re.sub(r"'ve", " ter ", str(texto)) 
    text = re.sub(r"Não", "Não ", str(texto)) 
    text = re.sub(r'ain't', 'não é', str(texto)) 
    text = re.sub(r'won't', 'não', str(texto)) 
    text = re.sub(r"n't", " não ", str(texto)) 
    text = re.sub(r"Eu sou", "Eu sou ", str(texto)) 
    text = re.sub(r"Está", " estão ", str(texto)) 
    text = re.sub(r"'d", " seria ", str(texto)) 
    text = re.sub(r"Vai", " vai ", str(texto)) 
    text = re.sub(r"«scuse", " desculpa ", str(texto)) 
    text = re.sub('W', '', str(texto)) 
    text = re.sub('s +', '', str(texto)) 
    # Remove punctuations and numbers
    text = re.sub('[^ a-zA-Z]', '', str(texto)) 
    # Single character removal
    text = re.sub(r"s +[a-zA-Z]s +", '', str(texto)) 
    texto=lemmatizer.lemmatize(texto)
    # replacing negation words with antonyms
    text=antreplacer.replace(texto)
    # Removing multiple spaces
    text = re.sub(r's+', '', str(texto)) 
    texto = text.strip('')
    texto de retorno

Modelos de clasificador

Análisis de sentimiento de modelos clasificadores

Embedding é o método de representar palavras na frase como vetores. A técnica de incorporação que usaremos será a incorporação GloVe, Construindo matrizes de co-ocorrência de palavras. As frases em inglês são treinadas com incrustações GloVe pré-treinadas e as incrustações para sentenças em hindi são treinadas sob medida com dados de corpus Hindi de 13M.

def get_word2vec_embedding_matrix(modelo):
    embedding_matrix = np.zeros((tamanho_do_ vocabulário,300))
    por palavra, i em tokenizer.word_index.items():
        Experimente:
            embedding_vector = modelo[palavra]
        exceto KeyError:
            embedding_vector = None
        if embedding_vector is not None:
            embedding_matrix[eu]=embedding_vector
    return embedding_matrix

Após a frase, as palavras tornam-se vetores com a incorporação do GloVe, Os modelos bidirecionais LSTM e CNN são aplicados à camada de incrustação para treinar e prever termos de aspecto e termos de sentimento, respectivamente. o 1000 Os termos de aspecto mais comumente usados são identificados no conjunto de dados e o modelo Bi-LSTM é treinado e classificado entre essas classes de aspecto.. Os termos de aspecto previstos são rotulados como BIO. O sentimento do termo encontrado é previsto usando o modelo da CNN para classificar a revisão como positiva, negativo e neutro.

embed_dim = 128
lstm_out = 196
modelo = Sequencial()
model.add(Embedding(10000, embed_dim,input_length = 28))
model.add(Bidirecional(LSTM(lstm_out,return_sequences = True)))
model.add(LSTM(lstm_out, abandono = 0,2, recurrent_dropout=0,2))
model.add(Atenção())
model.add(Achatar())
model.add(Cair fora(0.3))
model.add(Denso(1000, ativação = 'softmax'))
model.compile(perda ="categorical_crossentropy", otimizador ="Adão", metrics =['precisão'])
model.summary()
81934captura1-7861367
history_object = model.fit(trainX, trainY, épocas=5.batch_size=8)
62642captura2-5484574

Resumo

Neste artigo, aplicamos várias técnicas de pré-processamento a revisões de texto e as palavras são convertidas em representações vetoriais usando a incorporação do GloVe. A camada incorporada é adicionada com a camada LSTM bidirecional para encontrar os termos de aspecto na frase e a atenção de Bahdanau é aplicada para encontrar a associação entre as palavras de destino e de contexto. Encontre a polaridade do sentimento para cada termo de aspecto encontrado no modelo acima e preveja usando o modelo CNN para classificar o termo de aspecto como positivo, negativo o neutral. Os termos de aspecto previstos a partir da frase são marcados com a marcação BIO, a saber, Princípio, intermediário ou fora do termo de aspecto.

O código completo para este mini-projeto está disponível aqui.

Notas finais

Eu espero que você tenha gostado de ler este artigo.

Aprendizagem feliz!!

A mídia mostrada neste artigo não é propriedade da DataPeaker e é usada a critério do autor.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.