NLP Classificando Avaliações Positivas e Negativas de Restaurantes (modelo Bag of Words)

Taras Rumezhak Segue 19 de jul · 4 min ler

Olá, cientistas de dados! Hoje vamos construir um modelo de processamento de linguagem natural para prever se a revisão do restaurante é positiva ou negativa.

É uma implementação muito geral para que você possa facilmente usá-lo com seus próprios conjuntos de dados e problemas de negócios. Vamos começar!

Como sempre, o primeiro passo é importar as bibliotecas necessárias:

 import numpy como np 
import matplotlib.pyplot como plt
importar pandas como pd

Existem bibliotecas padrão para projetos de aprendizado de máquina , portanto, não há necessidade de explicá-las. Outras bibliotecas serão explicadas posteriormente.

Trending AI Articles:

1. Dez tendências da Inteligência Artificial (IA) em 2019

2. Estourando as bolhas do jargão – Aprendizado Profundo

3. Como podemos melhorar a qualidade de nossos dados?

4. Aprendizado de Máquina usando Regressão Logística em Python com Código

Agora devemos dar uma olhada no nosso conjunto de dados.

É apresentado no formato de arquivo tsv. É um formato de valores separados por tabulações que é muito semelhante ao formato csv (valores separados por vírgula). Este formato é considerado melhor que o csv para NLP porque as vírgulas são muito provavelmente parte de uma sentença e o arquivo csv irá reconhecê-las como separadores. E as guias não são provavelmente parte da sentença. Então, lembre-se disso e sempre use o formato tsv.

Aqui temos apenas duas colunas: Review e Liked. O gostinho é 1 para comentários positivos e 0 para negativo. Agora devemos importá-lo.

 conjunto de dados = pd.read_csv ("Restaurant_Reviews.tsv", delimiter = " t", quoting = 3) 

Usamos o método pandas read_csv, mas com um delimitador de parâmetros especial, que agora é a aba. Depois disso, devemos limpar nossos dados.

 import re 
importar nltk
nltk.download ('stopwords')
das palavras-chave de importação do nltk.corpus
de nltk.stem.porter import PorterStemmer
corpus = []
para i no intervalo (0, 1000):
review = re.sub ("[^ a-zA-z]", "", conjunto de dados ["Revisar"] [i])
review = review.lower ()
review = review.split ()
ps = PorterStemmer ()
review = [ps.stem (palavra) por palavra em revisão se não for palavra em set (stopwords.words ('english'))]
review = "" .join (revisão)
corpus.append (revisão)

Nós importamos re-biblioteca para expressões regulares e a biblioteca nltk para trabalhar com dados de linguagem. Devemos baixar palavras irrelevantes e importá-lo para ler palavras desnecessárias como: “ele”, “em”, “o” etc. Eles não nos dão nenhuma informação razoável. PorterStemmer obtém a raiz da palavra. Por exemplo, alguém pode escrever, então ele “ama” esse lugar, outra pessoa “amava” esse lugar e assim por diante. Então, PorterStemmer se livra dos finais "ed", "es", "ing" etc. e permanece apenas como amor. Também nos livramos de todas as pontuações, fazemos todas as palavras em minúsculas.

Nós tivemos "Uau … Adorei este lugar." E agora temos "wow love place", que tem apenas informações importantes.

 de sklearn.feature_extraction.text import CountVectorizer 
cv = CountVectorizer (max_features = 1500)
X = cv.fit_transform (corpus) .toarray ()
y = dataset.iloc [:, 1] .valores

Aqui criamos o modelo Bag of Words. Você pode encontrar mais informações sobre como esse modelo funciona na Internet. Agora vamos dividir nossos dados para os conjuntos de teste e treinamento:

 de sklearn.model_selection import train_test_split 
X_train, X_test, y_train, y_test = train_test_split (X, y, test_size = 0,2, random_state = 0)

Depois disso, usaremos o modelo Naive Bayes para fazer previsões.

 de sklearn.naive_bayes import GaussianNB 
classificador = GaussianNB ()
classificador.fit (X_train, y_train)
#Preditindo
y_pred = classifier.predict (X_test)

Então nós construímos o modelo e fizemos previsões, agora podemos verificar a precisão.

 de sklearn.metrics import confusion_matrix 
cm = confusion_matrix (y_test, y_pred)

A precisão é de 73%, o que é normal.

Agora vou mostrar a você como prever seus próprios novos comentários. Eu encontrei alguns na Internet.

 = "Teve jantar com amigas. Menu é perfeito, algo para todos. Serviço foi incrível e Jason foi muito flexível. Estará de volta definitivamente!" 

Você pode escolher o comentário positivo acima ou comentário negativo:

 text = "A qualidade da comida é muito, muito ruim, pedir um pouco de sopa era tão terrível que podia comer mais do que uma colherada. Eles precisam mudar o chef o mais cedo possível." 

Ou o seu próprio comentário e processe-o:

 corpus2 = [] 
review2 = re.sub ("[^ a-zA-z]", '', texto)
review2 = review2.lower ()
review2 = review2.split ()
ps2 = PorterStemmer ()
review2 = [ps2.stem (palavra) por palavra em review2 se não palavra em set (stopwords.words ('english'))]
review2 = "" .join (revisão2)
corpus2.append (review2)
de sklearn.feature_extraction.text import CountVectorizer
cv2 = CountVectorizer (max_features = 1500)
X2 = cv2.fit_transform (corpus + corpus2) .toarray ()
meu = X2 [-1] .reshape (1, -1)
result = classifier.predict (meu)
se resultar == 1:
answerear = "Positivo"
outro:
answerear = "Negativo"

imprimir (answerear)

É o mesmo processo que fizemos antes, mas também precisamos reformular nosso comentário e obter o resultado.

Experimente com seus próprios dados para resolver seu problema. Mantenha contato, obrigado pela leitura, por favor, deixe o aplauso para mim!

Não se esqueça de nos dar o seu ?!