Rilevamento della lingua utilizzando l'elaborazione del linguaggio naturale

Contenuti

introduzione

Ogni appassionato di machine learning ha un sogno da costruire / lavorare su un progetto interessante, Non è così? La semplice comprensione della teoria non è sufficiente, è necessario lavorare su progetti, prova ad implementarli e impara da loro. Cosa c'è di più, lavorare in domini specifici come la PNL ti offre ampie opportunità e dichiarazioni di problemi da esplorare. Attraverso questo articolo, Voglio presentarvi un progetto fantastico, il modello di rilevamento della lingua utilizzando l'elaborazione del linguaggio naturale. Questo ti porterà attraverso un esempio del mondo reale di ML (app per dire). Quindi, non aspettiamo più.

Informazioni sul set di dati

Stiamo usando il Set di dati di rilevamento della lingua, contenente i dettagli del testo per 17 lingue differenti.

Le lingue sono:

* inglese

* portoghese

* francese

* greco

* olandese

* Español

* giapponese

* russo

* danese

* Italiano

* Turco

* svedese

* Arabica

* Malayalam

* hindi

* Tamil

* Telugu

Usando il testo dobbiamo creare un modello che sarà in grado di prevedere la lingua data. Questa è una soluzione per molte applicazioni di intelligenza artificiale e linguisti computazionali.. Questo tipo di sistemi di previsione sono ampiamente utilizzati nei dispositivi elettronici come i cellulari, computer portatili, eccetera. per la traduzione automatica e anche nei robot. Aiuta anche a tracciare e identificare documenti multilingue. Il dominio della PNL rimane un'area attiva per i ricercatori.

Implementazione

Importazione di librerie e set di dati

Allora cominciamo. Primo, importeremo tutte le librerie necessarie.

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

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 lingue differenti. Así que contemos el recuento de valores para cada idioma.

dati["Language"].value_counts()

Produzione :

English       1385
French        1014
Spanish        819
Portughese     739
Italian        698
Russo        692
Svedese       676
Malayalam      594
Olandese          546
Arabo         536
Turco        474
Tedesco         470
Tamil          469
Danese         428
Kannada        369
Greco          365
hindi           63
Nome: Language, dtype: int64

Separazione di caratteristiche indipendenti e dipendenti

Ora possiamo separare le variabili dipendenti e indipendenti, aquí los datos de texto son la variabile independiente y el nombre del idioma es la variable dependiente.

X = dati["Testo"]
y = dati["Language"]

Codifica etichetta

La nostra variabile di output, il nome delle lingue, è una variabile categoriale. Per addestrare il modello, dovremmo convertirlo in una forma numerica, quindi stiamo eseguendo la codifica dell'etichetta su quella variabile di output. Para este proceso, estamos importando LabelEncoder de sklearn.

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

Pre-elaborazione del testo

Este es un conjunto de datos creato 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'[[e-mail protetta]#$(),n"%^*?:;~'0-9]', ' ', testo)
        testo = re.sub(r'[[]]', ' ', testo)
        # converting the text to lower case
        text = text.lower()
        # appending to data_list
        data_list.append(testo)

Borsa di parole

Come sappiamo tutti, no solo la función de salida, sino también la función de entrada deben ser de forma numerica. Quindi, estamos convirtiendo texto en forma numerica creando un modelo de Bolsa de palabras usando CountVectorizer.

da sklearn.feature_extraction.text import CountVectorizer
cv = ContaVectorizer()
X = cv.fit_transform(data_list).toarray()
X.forma # (10337, 39419)

División de prueba de tren

Preprocesamos nuestra variable de entrada y salida. Il passo successivo è creare il set di addestramento, per addestrare il modello e il set di test, per valutare il set di test. Para este proceso, stiamo usando una divisione di train e test.

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

Addestramento e previsione dei modelli

E siamo quasi arrivati, la parte di creazione del modello. Stiamo utilizzando l'algoritmo naive_bayes per la creazione del nostro modello. Successivamente stiamo addestrando il modello utilizzando il set di addestramento.

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

Perché, abbiamo addestrato il nostro modello con il set di addestramento. Ora passeremo a prevedere l'uscita del set di test.

y_pred = model.predict(x_test)

Evaluación del modelo

Ora possiamo valutare il nostro modello

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

Stampa("L'accuratezza è :",ac)
# L'accuratezza è : 0.9772727272727273

L'accuratezza del modello è 0,97, lo cual es muy bueno y nuestro modelo está funcionando bien. Ahora tracemos la matriz de confusión usando el mappa di calore de seaborn.

plt.figure(figsize=(15,10))
sns.heatmap(cm, annot = Vero)
plt.mostra()

El gráfico se verá así:

99913download209-2719639

Al analizar cada idioma, casi todas las predicciones son correctas. Y sì !! ya casi has giunto !!

Predecir con más datos

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

def predire(testo):
     x = cv.transform([testo]).toarray() # conversione del testo in modello di bag of words (Vettore)
     lang = modello.predict(X) # predicting the language
     lang = le.inverse_transform(lang) # finding the language corresponding the the predicted value
     print("la lingua è in",lang[0]) # printing the language
80286screenshot20607-5601938

Come potete vedere, las predicciones realizadas por el modelo son muy precisas. Puede realizar la prueba utilizando otros idiomas diferentes.

Codice completo

import pandas as pd
import numpy as np
import re
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
warnings.simplefilter("ignorare")
# 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["Testo"]
y = dati["Language"]
# 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 protetta]#$(),n"%^*?:;~'0-9]', ' ', testo)
    testo = re.sub(r'[[]]', ' ', testo)
    # converting the text to lower case
    text = text.lower()
    # appending to data_list
    data_list.append(testo)
# 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, e, test_size = 0.20)
#model creation and prediction
from sklearn.naive_bayes import MultinomialNB
model = MultinomialNB()
model.fit(x_treno, 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 = Vero)
plt.mostra()
# function for predicting language
def predict(testo):
    x = cv.transform([testo]).toarray()
    lang = modello.predict(X)
    lang = le.inverse_transform(lang)
    Stampa("la lingua è in",lang[0])
# English
prediction("DataPeaker fornisce un portale di conoscenza basato sulla comunità per professionisti dell'Analytics e della Data Science")
# French
prediction("DataPeaker fornisce 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 comunità para profesionales de Analytics y Data Science.")
# Malayalam
prediction("അനലിറ്റിക്സ്, Portale di conoscenza basato sulla comunità che offre analytics educational per professionisti della data science")
# Russian
prediction("DataPeaker - questo è un portale di conoscenza basato sulla comunità per professionisti dell'analisi e dei dati.")

conclusione

È stato un progetto interessante, verità? Spero che tu abbia avuto un'intuizione su come vengono risolti questi progetti. Questo ti avrebbe sicuramente fornito un diagramma dei programmi di base di PNL. È necessario analizzare i dati e preelaborarli di conseguenza. Un modello di borsa di parole diventa un modo per rappresentare i tuoi dati di testo. L'estrazione e la vettorizzazione del testo sono passaggi importanti per fare buone previsioni in PNL. Naive Bayes si dimostra sempre un modello migliore in tali problemi di classificazione del testo, così otteniamo risultati più accurati.

Puoi anche trovare il progetto completo dall'inizio alla fine per il modello di rilevamento della lingua sopra in my Github

Grazie per aver mostrato interesse per il progetto., spero che tu continui con progetti più sorprendenti e conosci le affermazioni dei problemi della vita reale. Sentiti libero di connetterti con me su LinkedIn.

Il supporto mostrato in questo articolo non è di proprietà di DataPeaker e viene utilizzato a discrezione dell'autore.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.

Altoparlante dati