Detección de lenguaje mediante procesamiento de lenguaje natural

Contenidos

Introducción

Todo entusiasta del aprendizaje automático tiene el sueño de construir / trabajar en un proyecto genial, ¿no es así? La mera comprensión de la teoría no es suficiente, es necesario trabajar en proyectos, intentar implementarlos y aprender de ellos. Además, trabajar en dominios específicos como la PNL le brinda amplias oportunidades y planteamientos de problemas para explorar. A través de este artículo, deseo presentarles un proyecto asombroso, el modelo de detección de lenguaje usando procesamiento de lenguaje natural. Esto lo llevará a través de un ejemplo del mundo real de ML (aplicación para decir). Entonces, no esperemos más.

Sobre el conjunto de datos

Estamos usando el Conjunto de datos de detección de idioma, que contiene detalles de texto para 17 idiomas diferentes.

Los idiomas son:

* Inglés

* Portugués

* Francés

* Griego

* Holandés

* Español

* Japonés

* Ruso

* Danés

* Italiano

* Turco

* Sueco

* Arábica

* Malayalam

* Hindi

* Tamil

* Telugu

Usando el texto tenemos que crear un modelo que podrá predecir el idioma dado. Esta es una solución para muchas aplicaciones de inteligencia artificial y lingüistas computacionales. Este tipo de sistemas de predicción se utilizan ampliamente en dispositivos electrónicos como móviles, portátiles, etc. para traducción automática y también en robots. También ayuda a rastrear e identificar documentos multilingües. El dominio de la PNL sigue siendo un área activa de investigadores.

Implementación

Importación de bibliotecas y conjuntos de datos

Entonces empecemos. En primer lugar, importaremos todas las bibliotecas necesarias.

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

Ahora importemos el conjunto de datos de detección de idioma

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

Como les dije anteriormente, este conjunto de datos contiene detalles de texto para 17 idiomas diferentes. Así que contemos el recuento de valores para cada idioma.

data["Language"].value_counts()

Producción :

English       1385
French        1014
Spanish        819
Portugeese     739
Italian        698
Russian        692
Sweedish       676
Malayalam      594
Dutch          546
Arabic         536
Turkish        474
German         470
Tamil          469
Danish         428
Kannada        369
Greek          365
Hindi           63
Name: Language, dtype: int64

Separación de características independientes y dependientes

Ahora podemos separar las variables dependientes e independientes, aquí los datos de texto son la variable independiente y el nombre del idioma es la variable dependiente.

X = data["Text"]
y = data["Language"]

Codificación de etiquetas

Nuestra variable de salida, el nombre de los idiomas, es una variable categórica. Para entrenar el modelo, deberíamos tener que convertirlo en una forma numérica, por lo que estamos realizando la codificación de etiquetas en esa variable de salida. Para este proceso, estamos importando LabelEncoder de sklearn.

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

Preprocesamiento de texto

Este es un conjunto de datos creado usando el raspado de Wikipedia, por lo que contiene muchos símbolos no deseados, números que afectarán la calidad de nuestro modelo. Entonces deberíamos realizar técnicas de preprocesamiento 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'[[email protected]#$(),n"%^*?:;~`0-9]', ' ', text)
        text = re.sub(r'[[]]', ' ', text)
        # converting the text to lower case
        text = text.lower()
        # appending to data_list
        data_list.append(text)

Bolsa de palabras

Como todos sabemos, no solo la función de salida, sino también la función de entrada deben ser de forma numérica. Entonces, estamos convirtiendo texto en forma numérica creando un modelo de Bolsa de palabras usando CountVectorizer.

from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer()
X = cv.fit_transform(data_list).toarray()
X.shape # (10337, 39419)

División de prueba de tren

Preprocesamos nuestra variable de entrada y salida. El siguiente paso es crear el conjunto de entrenamiento, para entrenar el modelo y el conjunto de prueba, para evaluar el conjunto de prueba. Para este proceso, estamos usando una división de prueba de tren.

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, y, 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 la creación de nuestro modelo. Posteriormente estamos entrenando el modelo usando el conjunto de entrenamiento.

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

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

y_pred = model.predict(x_test)

Evaluación del modelo

Ahora podemos evaluar nuestro modelo

from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
ac = accuracy_score(y_test, y_pred)
cm = confusion_matrix(y_test, y_pred)

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

La precisión del modelo es 0,97, lo cual es muy bueno y nuestro modelo está funcionando bien. Ahora tracemos la matriz de confusión usando el mapa de calor de seaborn.

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

El gráfico se verá así:

99913download209-2719639

Al analizar cada idioma, casi todas las predicciones son correctas. Y si !! ya casi has llegado !!

Predecir con más datos

Ahora probemos la predicción del modelo usando texto en diferentes idiomas.

def predict(text):
     x = cv.transform([text]).toarray() # converting text to bag of words model (Vector)
     lang = model.predict(x) # predicting the language
     lang = le.inverse_transform(lang) # finding the language corresponding the the predicted value
     print("The langauge is in",lang[0]) # printing the language
80286screenshot20607-5601938

Como puede ver, las predicciones realizadas por el modelo son muy precisas. Puede realizar la prueba utilizando otros 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("ignore")
# Loading the dataset
data = pd.read_csv("Language Detection.csv")
# value count for each language
data["Language"].value_counts()
# separating the independent and dependant features
X = data["Text"]
y = data["Language"]
# converting categorical variables to numerical
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
y = le.fit_transform(y)
# 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'[[email protected]#$(),n"%^*?:;~`0-9]', ' ', text)
    text = re.sub(r'[[]]', ' ', text)
    # converting the text to lower case
    text = text.lower()
    # appending to data_list
    data_list.append(text)
# creating bag of words using countvectorizer
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer()
X = cv.fit_transform(data_list).toarray()
#train test splitting
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, y, 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(text):
    x = cv.transform([text]).toarray()
    lang = model.predict(x)
    lang = le.inverse_transform(lang)
    print("The langauge is in",lang[0])
# English
prediction("DataPeaker provides a community based knowledge portal for Analytics and Data Science professionals")
# French
prediction("DataPeaker fournit un portail de connaissances basé sur la communauté pour les professionnels 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 - это портал знаний на базе сообщества для профессионалов в области аналитики и данных.")

Conclusión

Ese fue un proyecto interesante, ¿verdad? Espero que haya tenido una intuición sobre cómo se resuelven estos proyectos. Esto definitivamente le habría dado un diagrama de programas básicos de PNL. Debe analizar los datos y preprocesarlos en consecuencia. Un modelo de bolsa de palabras se convierte en una forma de representar sus datos de texto. La extracción de texto y la vectorización son pasos importantes para realizar buenas predicciones en PNL. Naive Bayes siempre demuestra ser un mejor modelo en tales problemas de clasificación de texto, por lo que obtenemos resultados más precisos.

También puede encontrar el proyecto completo de principio a fin para el modelo de detección de idioma anterior en mi Github

Gracias por mostrar interés en el proyecto, espero que continúe con proyectos más sorprendentes y se familiarice con las declaraciones de problemas de la vida real. Siéntete libre de conectarte conmigo en LinkedIn.

Los medios que se muestran en este artículo no son propiedad de DataPeaker y se utilizan a discreción del autor.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.