Detecção de linguagem usando processamento de linguagem natural

Conteúdo

Introdução

Todo entusiasta do aprendizado de máquina tem um sonho de construir / trabalhar em um projeto legal, não é assim? Mera compreensão da teoria não é suficiente, é necessário trabalhar em projetos, tente implementá-los e aprender com eles. O que mais, trabalhar em domínios específicos como PNL oferece amplas oportunidades e declarações de problemas para explorar. Através deste artigo, Eu quero apresentar a vocês um projeto incrível, o modelo de detecção de linguagem usando processamento de linguagem natural. Isso o levará por um exemplo do mundo real de ML (app para dizer). Então, não vamos esperar mais.

Sobre o conjunto de dados

Estamos usando o Conjunto de dados de detecção de idioma, contendo detalhes de texto para 17 idiomas diferentes.

As línguas são:

* inglês

* Português

* francês

* grego

* holandês

* Espanhol

* japonês

* russo

* dinamarquês

* Italiano

* turco

* sueco

* Arábica

* Malaiala

* hindi

* tâmil

* Telugu

Usando o texto, temos que criar um modelo que será capaz de prever o idioma dado. Esta é uma solução para muitas aplicações de inteligência artificial e linguistas computacionais.. Este tipo de sistema de previsão é amplamente utilizado em dispositivos eletrônicos, como celulares, laptops, etc. para tradução automática e também em robôs. Também ajuda a rastrear e identificar documentos multilíngues. O domínio da PNL continua sendo uma área ativa para pesquisadores.

Implementação

Importando bibliotecas e conjuntos de dados

Então vamos começar. Em primeiro lugar, importaremos todas as bibliotecas necessárias.

import pandas as pd
import numpy as np
import re
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
warnings.simplefilter("ignorar")

Agora vamos importar o conjunto de dados de deteção de idioma

data = pd.read_csv("Language Detection.csv")
data.head(10)
41302screenshot20608-7263445

Como disse anteriormente, este conjunto de dados contém detalhes de texto para 17 idiomas diferentes. Então vamos contar o número de valores para cada idioma.

dados["Idioma"].valor_contas()

Produção :

Inglês       1385
Francês        1014
Espanhol        819
Português     739
Italiano        698
Russo        692
Sueco       676
Malaiala      594
Holandês          546
Árabe         536
Turco        474
alemão         470
tâmil          469
dinamarquês         428
Canarim        369
grego          365
hindi           63
Nome: Idioma, tipo d: int64

Separação de características independentes e dependentes

Agora podemos separar as variáveis ​​dependentes e independentes, aqui os dados de texto são a variável independente e o nome do idioma é a variável dependente.

X = dados["Texto"]
y = dados["Idioma"]

Codificação de rótulo

Nossa variável de saída, o nome das línguas, é uma variável categórica. Para treinar o modelo, deveríamos ter que convertê-lo para um formato de número, então estamos fazendo a codificação de rótulo nessa variável de saída. Para este processo, estamos a importar LabelEncoder do sklearn.

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
y = le.fit_transform(e)

Pré-processamento de texto

Este é um conjunto de dados criado usando scraping da Wikipedia, porque contém muitos símbolos indesejados, números que irão afetar a qualidade do nosso modelo. Então deveríamos realizar técnicas de pré-processamento de texto.

# creating a list for appending the preprocessed text
data_list = []
# iterating through all the text
for text in X:
       # removing the symbols and numbers
        text = re.sub(r'[[e-mail protegido]#$(),n"%^*?:;~`0-9]', ' ', texto)
        text = re.sub(r'[[]]', ' ', texto)
        # converting the text to lower case
        text = text.lower()
        # appending to data_list
        data_list.append(texto)

Saco de palavras

Como todos sabemos, não apenas a função de saída, mas também a função de entrada devem ser de forma numérica. Então, estamos a converter texto em forma numérica criando um modelo de Bolsa de palavras usando CountVectorizer.

de sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer()
X = cv.fit_transform(data_list).arranjar()
Forma X # (10337, 39419)

Divisão de treino e teste

Pré-processamos a nossa variável de entrada e saída. El siguiente paso es crear el conjunto de Treinamento, para entrenar el modelo y el conjunto de prueba, para avaliar el conjunto de prueba. Para este processo, estamos usando una división de prueba de tren.

de sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, e, test_size = 0.20)

Entrenamiento y predicción de modelos

Y ya casi llegamos, la parte de creación del modelo. Estamos utilizando el algoritmo naive_bayes para a criação do nosso modelo. Posteriormente estamos a treinar o modelo usando o conjunto de treino.

from sklearn.naive_bayes import MultinomialNB
model = MultinomialNB()
model.fit(x_train, y_train)

Por isso, hemos entrenado nuestro modelo con el conjunto de entrenamento. Ahora vamos a predecir la salida del conjunto de prueba.

y_pred = model.predict(x_test)

Avaliação de modelo

Ahora podemos avaliar nuestro modelo

de sklearn.metrics import precision_score, confusão_matriz, classification_report
ac = accuracy_score(y_test, y_pred)
cm = confusion_matrix(y_test, y_pred)

imprimir("Accuracy is :",ac)
# Accuracy is : 0.9772727272727273

La precisión del modelo es 0,97, o que é muito bom e o nosso modelo está a funcionar bem. Agora vamos traçar a matriz de confusão usando o mapa de calor do seaborn.

plt.figure(figsize =(15,10))
sns.heatmap(cm, annot = True)
plt.show()

O gráfico ficará assim:

99913download209-2719639

Ao analisar cada idioma, quase todas as previsões estão corretas. E se !! já quase chegaste !!

Prever com mais dados

Agora vamos testar a previsão do modelo usando texto em diferentes idiomas.

def prever(texto):
     x = cv.transform([texto]).arranjar() # convertendo texto para modelo de saco de palavras (Vetor)
     lang = model.predict(x) # predicting the language
     lang = le.inverse_transform(lang) # finding the language corresponding the the predicted value
     print("O idioma está em",lang[0]) # imprimindo o idioma
80286screenshot20607-5601938

Como você pode ver, as previsões feitas pelo modelo são muito precisas. Podes realizar o teste usando outros idiomas diferentes.

Código completo

import pandas as pd
import numpy as np
import re
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
warnings.simplefilter("ignorar")
# Loading the dataset
data = pd.read_csv("Language Detection.csv")
# value count for each language
data["Idioma"].valor_contas()
# separating the independent and dependant features
X = data["Texto"]
y = dados["Idioma"]
# converting categorical variables to numerical
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
y = le.fit_transform(e)
# creating a list for appending the preprocessed text
data_list = []
# iterating through all the text
for text in X:
    # removing the symbols and numbers
    text = re.sub(r'[[e-mail protegido]#$(),n"%^*?:;~`0-9]', ' ', texto)
    text = re.sub(r'[[]]', ' ', texto)
    # converting the text to lower case
    text = text.lower()
    # appending to data_list
    data_list.append(texto)
# creating bag of words using countvectorizer
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer()
X = cv.fit_transform(data_list).arranjar()
#train test splitting
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, e, test_size = 0.20)
#model creation and prediction
from sklearn.naive_bayes import MultinomialNB
model = MultinomialNB()
model.fit(x_train, y_train)
# prediction 
y_pred = model.predict(x_test)
# model evaluation
from sklearn.metrics import accuracy_score, confusion_matrix
ac = accuracy_score(y_test, y_pred)
cm = confusion_matrix(y_test, y_pred)
# visualising the confusion matrix
plt.figure(figsize =(15,10))
sns.heatmap(cm, annot = True)
plt.show()
# function for predicting language
def predict(texto):
    x = cv.transform([texto]).arranjar()
    lang = model.predict(x)
    lang = le.inverse_transform(lang)
    imprimir("O idioma está em",lang[0])
# English
prediction("DataPeaker fornece um portal de conhecimento comunitário para profissionais de Análise e Ciência de Dados")
# French
prediction("DataPeaker fornece um portail de conhecimentos baseado na comunidade para os profissionais de l'analyse et de la science des données")
# Arabic
prediction("توفر DataPeaker بوابة معرفية قائمة على المجتمع لمحترفي التحليلات] وعلوم البيانات")
# Spanish
prediction("DataPeaker proporciona un portal de conocimiento basado en la comunidad para profesionales de Analytics y Data Science.")
# Malayalam
prediction("അനലിറ്റിക്സ്, ഡാറ്റാ സയൻസ് പ്രൊഫഷണലുകൾക്കായി കമ്മ്യൂണിറ്റി അധിഷ്ഠിത വിജ്ഞാന പോർട്ടൽ അനലിറ്റിക്സ് വിദ്യ നൽകുന്നു")
# Russian
prediction("DataPeaker - este é um portal de conhecimento baseado na comunidade para profissionais na área de analytics e dados.")

conclusão

Esse foi um projeto interessante, verdade? Espero que tenha tido uma intuição sobre como se resolvem estes projetos. Isso definitivamente teria dado a você um diagrama de programas básicos de PNL. Você precisa analisar os dados e pré-processá-los de acordo. Um modelo de saco de palavras se torna uma forma de representar seus dados de texto. Extração de texto e vetorização são etapas importantes para fazer boas previsões em PNL. Naive Bayes sempre prova ser um modelo melhor em tais problemas de classificação de texto, para obtermos resultados mais precisos.

Você também pode encontrar o projeto completo do início ao fim para o modelo de detecção de idioma acima em meu Github

Obrigado por mostrar interesse no projeto., Espero que você continue com projetos mais incríveis e se familiarize com as declarações de problemas da vida real. Sinta-se à vontade para se conectar comigo no LinkedIn.

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ê.

Datapeaker