Détection de la langue à l'aide du traitement du langage naturel

Contenu

introduction

Chaque passionné d'apprentissage automatique a un rêve à construire / travailler sur un projet sympa, ce n'est pas comme ça? La simple compréhension de la théorie ne suffit pas, il faut travailler sur des projets, essayez de les mettre en œuvre et d'apprendre d'eux. En outre, travailler dans des domaines spécifiques comme la PNL vous offre de nombreuses opportunités et des énoncés de problèmes à explorer. A travers cet article, Je veux vous présenter un projet incroyable, le modèle de détection de langue utilisant le traitement du langage naturel. Cela vous mènera à travers un exemple réel de ML (application pour dire). Ensuite, n'attendons plus.

À propos de l'ensemble de données

Nous utilisons le Ensemble de données de détection de langue, contenant des détails textuels pour 17 différentes langues.

Les langues sont:

* Anglais

* Portugais

* français

* grec

* néerlandais

* Espagnol

* Japonais

* russe

* danois

* Italiano

* turc

* suédois

* Arabica

* malayalam

* hindi

* Tamil

* Telugu

En utilisant le texte, nous devons créer un modèle qui sera capable de prédire la langue donnée. C'est une solution pour de nombreuses applications de l'intelligence artificielle et des linguistes informatiques.. Ce type de systèmes de prédiction est largement utilisé dans les appareils électroniques tels que les mobiles, ordinateurs portables, etc. pour la traduction automatique et aussi dans les robots. Il permet également de suivre et d'identifier les documents multilingues. Le domaine de la PNL reste un domaine actif pour les chercheurs.

Mise en œuvre

Importer des bibliothèques et des ensembles de données

Alors commençons. En premier lieu, nous importerons toutes les bibliothèques nécessaires.

importer des pandas au format pd
importer numpy en tant que np
importation re
importer seaborn comme sns
importer matplotlib.pyplot en tant que plt
avertissements d'importation
avertissements.simplefilter("ignorer")

Importons maintenant l'ensemble de données de détection de langue

données = pd.read_csv("Détection de langue.csv")
data.head(10)
41302capture d'écran20608-7263445

Comme je te l'ai dit avant, cet ensemble de données contient des détails textuels pour 17 différentes langues. Comptons donc le nombre de valeurs pour chaque langue.

Les données["Langue"].value_counts()

Production :

Anglais       1385
français        1014
Espanol        819
Portugais     739
italien        698
russe        692
suédois       676
malayalam      594
néerlandais          546
arabe         536
turc        474
Allemand         470
Tamil          469
danois         428
Kannada        369
grec          365
hindi           63
Nom: Langue, dtype: int64

Séparation des caractéristiques indépendantes et dépendantes

Maintenant, nous pouvons séparer les variables dépendantes et indépendantes, aquí los datos de texto son la variable independiente y el nombre del idioma es la variable dependiente.

X = données["Texte"]
y = données["Langue"]

Encodage des étiquettes

Notre variable de sortie, le nom des langues, est une variable catégorielle. Pour entraîner le modèle, nous devrions avoir à le convertir en une forme numérique, nous faisons donc un codage d'étiquette sur cette variable de sortie. Pour ce processus, nous importons LabelEncoder depuis sklearn.

de sklearn.preprocessing importer LabelEncoder
le = LabelEncoder()
y = le.fit_transform(Oui)

Prétraitement de texte

Il s'agit d'un ensemble de données créé à l'aide du grattage Wikipédia, il contient donc de nombreux symboles indésirables, des chiffres qui affecteront la qualité de notre modèle. Ensuite, nous devrions effectuer des techniques de prétraitement de texte.

# créer une liste pour ajouter le texte prétraité
liste_données = []
# itérer dans tout le texte
pour le texte en X:
       # supprimer les symboles et les chiffres
        texte = re.sub(r'[[email protégé]#$(),m"%^*?:;~`0-9]', ' ', texte)
        texte = re.sub(r'[[]]', ' ', texte)
        # convertir le texte en minuscules
        texte = texte.inférieur()
        # ajout à data_list
        liste_données.append(texte)

Sac de mots

Comme nous le savons tous, pas seulement la fonction de sortie, mais aussi la fonction d'entrée doit être numériquement. Ensuite, nous convertissons le texte sous forme numérique en créant un modèle de sac de mots à l'aide de CountVectorizer.

de sklearn.feature_extraction.text importer CountVectorizer
cv = CountVectorizer()
X = cv.fit_transform(liste_données).faire un tableau()
X.forme # (10337, 39419)

Division des essais de train

Nous prétraitons notre variable d'entrée et de sortie. El siguiente paso es crear el conjunto de entraînement, pour entraîner le modèle et l'ensemble de test, pour évaluer l'ensemble de test. Pour ce processus, nous utilisons une division de test de train.

de sklearn.model_selection importer train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, Oui, taille_test = 0.20)

Entraînement et prédiction du modèle

Et nous y sommes presque, la partie création du modèle. Nous utilisons l'algorithme naive_bayes pour la création de notre modèle. Plus tard, nous entraînons le modèle à l'aide de l'ensemble d'apprentissage.

depuis sklearn.naive_bayes importer MultinomialNB
modèle = MultinomialNB()
model.fit(x_train, y_train)

Pour cela, nous avons entraîné notre modèle avec l'ensemble d'entraînement. Maintenant, nous allons prédire la sortie de l'ensemble de test.

y_pred = model.predict(x_test)

Évaluation du modèle

Nous pouvons maintenant évaluer notre modèle

de sklearn.metrics importer precision_score, confusion_matrice, classement_rapport
ac = précision_score(y_test, y_pred)
cm = confusion_matrice(y_test, y_pred)

imprimer("La précision est :",ca)
# La précision est : 0.9772727272727273

La précision du modèle est 0,97, ce qui est très bien et notre modèle fonctionne bien. Ahora tracemos la matriz de confusión usando el carte de chaleur de seaborn.

plt.figure(taille de la figue=(15,10))
sns.heatmap(cm, annot = vrai)
plt.show()

Le graphique ressemblera à ceci:

99913télécharger209-2719639

En analysant chaque langue, presque toutes les prédictions sont correctes. Et si !! tu es presque là !!

Prédire avec plus de données

Testons maintenant la prédiction du modèle en utilisant du texte dans différentes langues.

def prédire(texte):
     x = cv.transformer([texte]).faire un tableau() # conversion de texte en modèle de sac de mots (Vecteur)
     lang = model.predict(X) # prédire la langue
     lang = le.inverse_transform(langue) # trouver la langue correspondant à la valeur prédite
     imprimer("La langue est en",langue[0]) # impression de la langue
80286capture d'écran20607-5601938

Comme tu peux le voir, les prédictions faites par le modèle sont très précises. Vous pouvez passer le test en utilisant d'autres langues différentes.

Code complet

importer des pandas au format pd
importer numpy en tant que np
importation re
importer seaborn comme sns
importer matplotlib.pyplot en tant que plt
avertissements d'importation
avertissements.simplefilter("ignorer")
# Chargement du jeu de données
données = pd.read_csv("Détection de langue.csv")
# nombre de valeurs pour chaque langue
Les données["Langue"].value_counts()
# séparer les caractéristiques indépendantes et dépendantes
X = données["Texte"]
y = données["Langue"]
# conversion de variables catégorielles en variables numériques
de sklearn.preprocessing importer LabelEncoder
le = LabelEncoder()
y = le.fit_transform(Oui)
# créer une liste pour ajouter le texte prétraité
liste_données = []
# itérer dans tout le texte
pour le texte en X:
    # supprimer les symboles et les chiffres
    texte = re.sub(r'[[email protégé]#$(),m"%^*?:;~`0-9]', ' ', texte)
    texte = re.sub(r'[[]]', ' ', texte)
    # convertir le texte en minuscules
    texte = texte.inférieur()
    # ajout à data_list
    liste_données.append(texte)
# créer un sac de mots à l'aide de countvectorizer
de sklearn.feature_extraction.text importer CountVectorizer
cv = CountVectorizer()
X = cv.fit_transform(liste_données).faire un tableau()
#fractionnement de test de train
de sklearn.model_selection importer train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, Oui, taille_test = 0.20)
#création et prédiction de modèles
depuis sklearn.naive_bayes importer MultinomialNB
modèle = MultinomialNB()
model.fit(x_train, y_train)
# prédiction
y_pred = model.predict(x_test)
# évaluation du modèle
de sklearn.metrics importer precision_score, confusion_matrice
ac = précision_score(y_test, y_pred)
cm = confusion_matrice(y_test, y_pred)
# visualiser la matrice de confusion
plt.figure(taille de la figue=(15,10))
sns.heatmap(cm, annot = vrai)
plt.show()
# fonction de prédiction du langage
def prédire(texte):
    x = cv.transformer([texte]).faire un tableau()
    lang = model.predict(X)
    lang = le.inverse_transform(langue)
    imprimer("La langue est en",langue[0])
# Anglais
prédiction("DataPeaker fournit un portail de connaissances communautaire pour les professionnels de l'analytique et de la science des données")
# français
prédiction("DataPeaker fournit un portail de connaissances basé sur la communauté pour les professionnels de l'analyse et de la science des données")
# arabe
prédiction("DataPeaker fournit un portail de connaissances communautaire pour les professionnels de l'analyse et de la science des données")
# Espanol
prédiction("DataPeaker fournit un portail de connaissances communautaire pour les professionnels de l'analyse et de la science des données.")
# malayalam
prédiction("Analytique, Le portail de connaissances communautaire fournit une technologie d'analyse pour les professionnels de la science des données")
# russe
prédiction("DataPeaker - est un portail de connaissances communautaire pour les professionnels de l'analyse et des données.")

conclusion

C'était un projet intéressant., vérité? J'espère que vous avez eu une intuition sur la façon dont ces projets sont résolus. Cela vous aurait certainement donné un schéma des programmes de PNL de base.. Vous devez analyser les données et les prétraiter en conséquence. Un modèle de sac de mots devient un moyen de représenter vos données textuelles. L'extraction de texte et la vectorisation sont des étapes importantes pour faire de bonnes prédictions en PNL. Naive Bayes s'avère toujours être un meilleur modèle dans de tels problèmes de classification de texte, donc nous obtenons des résultats plus précis.

Vous pouvez également trouver le projet complet du début à la fin pour le modèle de détection de langue ci-dessus dans mon Github

Merci de l'intérêt que vous portez au projet., J'espère que vous continuerez avec des projets plus étonnants et que vous vous familiariserez avec des énoncés de problèmes réels. N'hésitez pas à me contacter sur LinkedIn.

Les médias présentés dans cet article ne sont pas la propriété de DataPeaker et sont utilisés à la discrétion de l'auteur.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.

Haut-parleur de données