Comment Créer Des Modèles D'IA Spécifiques à Un Domaine

Les implémentations générales d'IA à grande échelle constituent d'excellents éléments de base pour résoudre certains problèmes B2B, et la plupart des organisations les ont déjà ou sont en train de les exploiter. Cependant, le désir d'un retour sur investissement immédiat, la création de prototypes rapides et la fourniture de résultats centrés sur la décision imposent le besoin d'initiatives d'IA spécifiques à un domaine.

Les cas d'utilisation et l'expertise en la matière sont utiles, mais les data scientists et les analystes doivent adapter le cycle de mise en œuvre de l'IA pour résoudre les problèmes qui nécessitent plus de spécificité et de pertinence. Le plus grand obstacle que quiconque rencontrerait lors de la construction de tels modèles d'IA est de trouver des données de qualité et spécifiques à un domaine. Voici quelques bonnes pratiques et techniques d'adaptation de modèles spécifiques à un domaine qui ont fonctionné pour nous à maintes reprises.

Les données sont importantes, mais est-ce le cas ?

Commencez par explorer votre organisation pour découvrir autant d'actifs de données pertinents spécifiques à un domaine que possible. S'il s'agit d'un problème lié directement à votre entreprise et à votre secteur, vous disposez probablement d'actifs de données inexploités que votre mise en œuvre peut exploiter. Dans le cas peu probable où vous vous retrouveriez avec des actifs de données insuffisants, tout espoir n'est pas perdu. Il existe plusieurs stratégies et méthodologies pour aider à créer ou à améliorer des ensembles de données spécifiques, y compris l'apprentissage actif, l'apprentissage par transfert, l'auto-formation pour améliorer la pré-formation et l'augmentation des données. Certains sont détaillés ci-dessous.

Apprentissage actif

L'apprentissage actif est un type d'apprentissage semi-supervisé avec une stratégie de requête pour sélectionner des instances spécifiques à partir desquelles il souhaite apprendre. L'utilisation d'experts du domaine avec un mécanisme humain dans la boucle pour étiqueter ces instances sélectionnées permet d'affiner le processus vers des résultats significatifs dans un délai beaucoup plus rapide. De plus, l'apprentissage actif nécessite de plus petites quantités de données étiquetées, ce qui réduit les coûts d'annotation manuelle tout en atteignant des niveaux de précision plus élevés.

Voici quelques conseils pour vous aider à réaliser un apprentissage actif avec des données limitées :

  • Tout d'abord, divisez votre ensemble de données en données de départ et sans étiquette.
  • Étiquetez la graine et utilisez-la pour former le modèle d'apprenant.
  • Sur la base de la fonction de requête, sélectionnez parmi les données non annotées la ou les instances pour l'annotation humaine (l'étape la plus critique). La stratégie de requête pourrait être basée sur un échantillonnage d'incertitude (par exemple, moindre confiance, échantillonnage de marge ou entropie), requête par comité (par exemple, entropie de vote, divergence moyenne de Kullback-Leibler), etc.
  • Ajoutez des données nouvellement annotées dans l'ensemble de données de départ et reformez le modèle d'apprenant.
  • Répétez les deux étapes précédentes jusqu'à atteindre les critères d'arrêt, par exemple, le nombre d'instances interrogées, le nombre d'itérations ou l'amélioration des performances.

Apprentissage par transfert

Cette méthode exploite les connaissances du domaine source pour acquérir de nouvelles connaissances sur le domaine cible. Le concept existe depuis un certain temps, mais ces dernières années, lorsque les gens parlent d'apprentissage par transfert, ils parlent d'un réseau de neurones, peut-être en raison des cas de mise en œuvre réussis là-bas.

En utilisant ImageNet comme exemple, voici quelques leçons apprises :

  • Utilisez un réseau pré-formé comme extracteur de fonctionnalités. La détermination de la couche à exporter dépend de la similarité ou de la différence entre vos données et le jeu de données d'entraînement de base. La différence déterminera votre stratégie, comme indiqué dans les points suivants.
  • Si le domaine est différent, utilisez uniquement les fonctionnalités de niveau inférieur du réseau de neurones. Les entités peuvent être exportées et servir d'entrée pour votre classifieur.
  • Si le domaine est similaire, supprimez la dernière couche du réseau de neurones et utilisez le réseau complet restant comme extracteur de fonctionnalités. Ou remplacez la dernière couche par une nouvelle couche qui correspond au nombre de classes de jeu de données cible.
  • Essayez de dégeler les dernières couches du réseau de base et effectuez un réglage fin à un faible taux d'apprentissage (par exemple, 1e-5). Plus les domaines cible et source sont proches, plus le nombre de couches à affiner est réduit.

Auto-formation pour améliorer la pré-formation

Cette combinaison offre une méthode potentielle pour tirer le meilleur parti des données étiquetées limitées des tâches en aval. Cela peut également aider à tirer le meilleur parti du grand volume de données non étiquetées facilement disponibles. Voici comment cela fonctionne.

  • Ajustez un modèle préformé (par exemple, RoBERTa-Large) avec les données étiquetées d'une tâche en aval ciblée et utilisez le modèle affiné comme enseignant.
  • Extrayez des données spécifiques à une tâche d'un ensemble de données non étiqueté à l'aide d'incorporations de requêtes et sélectionnez les voisins les plus proches de l'ensemble de données.
  • Utilisez le modèle de l'enseignant pour annoter les données du domaine récupérées à la puce 2 et sélectionnez les k meilleurs échantillons de chaque classe avec le score le plus élevé.
  • Utilisez les pseudo-données générées à l'étape 3 pour affiner un nouveau RoBERTa-Large et fournir le modèle étudiant.

Augmentation des données

L'augmentation des données comprend un ensemble de techniques peu coûteuses et efficaces pour générer de nouveaux points de données à partir de données existantes. La puce 2 de la section précédente sur l'auto-formation traite également de l'augmentation des données, qui est cruciale pour l'ensemble de l'exercice.

D'autres techniques pour les applications NLP incluent la rétrotraduction, le remplacement de synonymes, l'insertion/permutation/suppression aléatoire, etc. réseau contradictoire génératif).

La détermination de la méthodologie à utiliser dépend de votre cas d'utilisation, de la qualité initiale de l'ensemble de données, de la PME en place et de l'investissement disponible.

5 conseils supplémentaires pour aider à affiner l'IA spécifique à un domaine

Vous constaterez qu'il est nécessaire de continuer à affiner votre IA spécifique à un domaine. Voici quelques leçons que nous avons tirées de nos expériences de personnalisation des implémentations pour répondre à des cas d'utilisation spécifiques.

  1. Effectuez une exploration appropriée des données pour vérifier les problèmes de qualité et de quantité des données avant de commencer votre preuve de concept (POC). Comprendre si les données sont conformes aux scénarios d'application réels (par exemple, les tâches en aval, telles que NER, Relation Extraction, QA, etc.), leurs variations et leur distribution, ainsi que leur niveau de précision. Pour les variations et la distribution avec le problème de classification - la structure de la taxonomie, le nombre de classes à chaque niveau, la quantité de données relevant de chaque classe, équilibré ou déséquilibré, etc. - tout cela compte. Ce que vous trouverez aura un impact sur votre approche de traitement des données et votre sélection de méthodologie pour améliorer les performances du modèle spécifique à un domaine.
  2. Choisissez les algorithmes/modèles appropriés en fonction de votre cas d'utilisation et des caractéristiques des données. Tenez également compte de facteurs tels que la vitesse, la précision et le déploiement. L'équilibre de ces facteurs est important, car ils décident si votre développement peut s'arrêter au stade POC ou s'il a le potentiel d'une application et d'une productisation réelles.
    Par exemple, si votre modèle sera éventuellement déployé à la périphérie, les grands modèles - bien qu'ils puissent avoir une précision de prédiction plus élevée - ne doivent pas être choisis. Il n'est pas réaliste que des appareils périphériques exécutent de tels modèles, compte tenu de leur puissance de calcul.
    Commencez chaque développement/adaptation de domaine avec un modèle de référence solide. Envisagez AutoML pour vérifier rapidement l'adéquation des algorithmes aux ensembles de données spécifiques à un domaine, puis optimisez en fonction des observations.
  3. Le prétraitement des données est une partie essentielle de tout projet NLP. Les mesures prises doivent être déterminées au cas par cas en raison des exigences spécifiques au domaine et des méthodes et modèles de caractérisation choisis. Les pipelines génériques peuvent ne pas donner les meilleurs résultats.
    Par exemple, certaines étapes telles que la suppression des mots vides/de la ponctuation et la lemmatisation peuvent ne pas toujours être nécessaires pour les modèles d'apprentissage en profondeur. Ils peuvent entraîner une perte de contexte ; cependant, ils peuvent être utiles si vous utilisez des modèles TF-IDF et d'apprentissage automatique. Modularisez le pipeline afin que certaines étapes courantes puissent être réutilisées lors de la personnalisation pour répondre aux besoins des cas d'utilisation.
  4. Tirez parti des modèles de langage pré-entraînés spécifiques à un domaine open source s'ils sont disponibles. Certains modèles bien connus sont SciBERT, BioBERT, ClinicalBERT, PatentBERT et FinBERT. Ces modèles pré-formés spécifiques à un domaine peuvent aider à obtenir une meilleure représentation et des intégrations contextualisées pour les tâches en aval. Si ces modèles ne sont pas disponibles pour votre domaine, mais que vous disposez de ressources de calcul suffisantes, envisagez de former votre propre modèle pré-formé à l'aide de données non annotées de haute qualité dans le domaine.
  5. Envisagez d'incorporer un vocabulaire et des règles spécifiques au domaine. Pour certains scénarios, ils fournissent des résultats plus efficaces et plus précis et évitent les problèmes d'itération du modèle. La création d'un tel vocabulaire et la définition des règles peuvent nécessiter des efforts considérables et une expertise du domaine, qui doivent être équilibrées.

Sommaire

Canaliser l'IA pour répondre aux besoins et aux défis spécifiques à un domaine nécessite de la discipline tout au long, pas seulement dans l'approche et les ressources. La bonne nouvelle est que les entreprises s'intéressent de plus en plus aux solutions qui répondent à des défis spécifiques et les résolvent, ce qui crée à son tour de meilleures pratiques pour les scientifiques des données et les développeurs d'IA qui cherchent à fournir un retour sur investissement plus rapide pour leurs applications.

Source :  https://www.kdnuggets.com

#AI #artificial-intelligence 

What is GEEK

Buddha Community

Comment Créer Des Modèles D'IA Spécifiques à Un Domaine

Comment Créer Des Modèles D'IA Spécifiques à Un Domaine

Les implémentations générales d'IA à grande échelle constituent d'excellents éléments de base pour résoudre certains problèmes B2B, et la plupart des organisations les ont déjà ou sont en train de les exploiter. Cependant, le désir d'un retour sur investissement immédiat, la création de prototypes rapides et la fourniture de résultats centrés sur la décision imposent le besoin d'initiatives d'IA spécifiques à un domaine.

Les cas d'utilisation et l'expertise en la matière sont utiles, mais les data scientists et les analystes doivent adapter le cycle de mise en œuvre de l'IA pour résoudre les problèmes qui nécessitent plus de spécificité et de pertinence. Le plus grand obstacle que quiconque rencontrerait lors de la construction de tels modèles d'IA est de trouver des données de qualité et spécifiques à un domaine. Voici quelques bonnes pratiques et techniques d'adaptation de modèles spécifiques à un domaine qui ont fonctionné pour nous à maintes reprises.

Les données sont importantes, mais est-ce le cas ?

Commencez par explorer votre organisation pour découvrir autant d'actifs de données pertinents spécifiques à un domaine que possible. S'il s'agit d'un problème lié directement à votre entreprise et à votre secteur, vous disposez probablement d'actifs de données inexploités que votre mise en œuvre peut exploiter. Dans le cas peu probable où vous vous retrouveriez avec des actifs de données insuffisants, tout espoir n'est pas perdu. Il existe plusieurs stratégies et méthodologies pour aider à créer ou à améliorer des ensembles de données spécifiques, y compris l'apprentissage actif, l'apprentissage par transfert, l'auto-formation pour améliorer la pré-formation et l'augmentation des données. Certains sont détaillés ci-dessous.

Apprentissage actif

L'apprentissage actif est un type d'apprentissage semi-supervisé avec une stratégie de requête pour sélectionner des instances spécifiques à partir desquelles il souhaite apprendre. L'utilisation d'experts du domaine avec un mécanisme humain dans la boucle pour étiqueter ces instances sélectionnées permet d'affiner le processus vers des résultats significatifs dans un délai beaucoup plus rapide. De plus, l'apprentissage actif nécessite de plus petites quantités de données étiquetées, ce qui réduit les coûts d'annotation manuelle tout en atteignant des niveaux de précision plus élevés.

Voici quelques conseils pour vous aider à réaliser un apprentissage actif avec des données limitées :

  • Tout d'abord, divisez votre ensemble de données en données de départ et sans étiquette.
  • Étiquetez la graine et utilisez-la pour former le modèle d'apprenant.
  • Sur la base de la fonction de requête, sélectionnez parmi les données non annotées la ou les instances pour l'annotation humaine (l'étape la plus critique). La stratégie de requête pourrait être basée sur un échantillonnage d'incertitude (par exemple, moindre confiance, échantillonnage de marge ou entropie), requête par comité (par exemple, entropie de vote, divergence moyenne de Kullback-Leibler), etc.
  • Ajoutez des données nouvellement annotées dans l'ensemble de données de départ et reformez le modèle d'apprenant.
  • Répétez les deux étapes précédentes jusqu'à atteindre les critères d'arrêt, par exemple, le nombre d'instances interrogées, le nombre d'itérations ou l'amélioration des performances.

Apprentissage par transfert

Cette méthode exploite les connaissances du domaine source pour acquérir de nouvelles connaissances sur le domaine cible. Le concept existe depuis un certain temps, mais ces dernières années, lorsque les gens parlent d'apprentissage par transfert, ils parlent d'un réseau de neurones, peut-être en raison des cas de mise en œuvre réussis là-bas.

En utilisant ImageNet comme exemple, voici quelques leçons apprises :

  • Utilisez un réseau pré-formé comme extracteur de fonctionnalités. La détermination de la couche à exporter dépend de la similarité ou de la différence entre vos données et le jeu de données d'entraînement de base. La différence déterminera votre stratégie, comme indiqué dans les points suivants.
  • Si le domaine est différent, utilisez uniquement les fonctionnalités de niveau inférieur du réseau de neurones. Les entités peuvent être exportées et servir d'entrée pour votre classifieur.
  • Si le domaine est similaire, supprimez la dernière couche du réseau de neurones et utilisez le réseau complet restant comme extracteur de fonctionnalités. Ou remplacez la dernière couche par une nouvelle couche qui correspond au nombre de classes de jeu de données cible.
  • Essayez de dégeler les dernières couches du réseau de base et effectuez un réglage fin à un faible taux d'apprentissage (par exemple, 1e-5). Plus les domaines cible et source sont proches, plus le nombre de couches à affiner est réduit.

Auto-formation pour améliorer la pré-formation

Cette combinaison offre une méthode potentielle pour tirer le meilleur parti des données étiquetées limitées des tâches en aval. Cela peut également aider à tirer le meilleur parti du grand volume de données non étiquetées facilement disponibles. Voici comment cela fonctionne.

  • Ajustez un modèle préformé (par exemple, RoBERTa-Large) avec les données étiquetées d'une tâche en aval ciblée et utilisez le modèle affiné comme enseignant.
  • Extrayez des données spécifiques à une tâche d'un ensemble de données non étiqueté à l'aide d'incorporations de requêtes et sélectionnez les voisins les plus proches de l'ensemble de données.
  • Utilisez le modèle de l'enseignant pour annoter les données du domaine récupérées à la puce 2 et sélectionnez les k meilleurs échantillons de chaque classe avec le score le plus élevé.
  • Utilisez les pseudo-données générées à l'étape 3 pour affiner un nouveau RoBERTa-Large et fournir le modèle étudiant.

Augmentation des données

L'augmentation des données comprend un ensemble de techniques peu coûteuses et efficaces pour générer de nouveaux points de données à partir de données existantes. La puce 2 de la section précédente sur l'auto-formation traite également de l'augmentation des données, qui est cruciale pour l'ensemble de l'exercice.

D'autres techniques pour les applications NLP incluent la rétrotraduction, le remplacement de synonymes, l'insertion/permutation/suppression aléatoire, etc. réseau contradictoire génératif).

La détermination de la méthodologie à utiliser dépend de votre cas d'utilisation, de la qualité initiale de l'ensemble de données, de la PME en place et de l'investissement disponible.

5 conseils supplémentaires pour aider à affiner l'IA spécifique à un domaine

Vous constaterez qu'il est nécessaire de continuer à affiner votre IA spécifique à un domaine. Voici quelques leçons que nous avons tirées de nos expériences de personnalisation des implémentations pour répondre à des cas d'utilisation spécifiques.

  1. Effectuez une exploration appropriée des données pour vérifier les problèmes de qualité et de quantité des données avant de commencer votre preuve de concept (POC). Comprendre si les données sont conformes aux scénarios d'application réels (par exemple, les tâches en aval, telles que NER, Relation Extraction, QA, etc.), leurs variations et leur distribution, ainsi que leur niveau de précision. Pour les variations et la distribution avec le problème de classification - la structure de la taxonomie, le nombre de classes à chaque niveau, la quantité de données relevant de chaque classe, équilibré ou déséquilibré, etc. - tout cela compte. Ce que vous trouverez aura un impact sur votre approche de traitement des données et votre sélection de méthodologie pour améliorer les performances du modèle spécifique à un domaine.
  2. Choisissez les algorithmes/modèles appropriés en fonction de votre cas d'utilisation et des caractéristiques des données. Tenez également compte de facteurs tels que la vitesse, la précision et le déploiement. L'équilibre de ces facteurs est important, car ils décident si votre développement peut s'arrêter au stade POC ou s'il a le potentiel d'une application et d'une productisation réelles.
    Par exemple, si votre modèle sera éventuellement déployé à la périphérie, les grands modèles - bien qu'ils puissent avoir une précision de prédiction plus élevée - ne doivent pas être choisis. Il n'est pas réaliste que des appareils périphériques exécutent de tels modèles, compte tenu de leur puissance de calcul.
    Commencez chaque développement/adaptation de domaine avec un modèle de référence solide. Envisagez AutoML pour vérifier rapidement l'adéquation des algorithmes aux ensembles de données spécifiques à un domaine, puis optimisez en fonction des observations.
  3. Le prétraitement des données est une partie essentielle de tout projet NLP. Les mesures prises doivent être déterminées au cas par cas en raison des exigences spécifiques au domaine et des méthodes et modèles de caractérisation choisis. Les pipelines génériques peuvent ne pas donner les meilleurs résultats.
    Par exemple, certaines étapes telles que la suppression des mots vides/de la ponctuation et la lemmatisation peuvent ne pas toujours être nécessaires pour les modèles d'apprentissage en profondeur. Ils peuvent entraîner une perte de contexte ; cependant, ils peuvent être utiles si vous utilisez des modèles TF-IDF et d'apprentissage automatique. Modularisez le pipeline afin que certaines étapes courantes puissent être réutilisées lors de la personnalisation pour répondre aux besoins des cas d'utilisation.
  4. Tirez parti des modèles de langage pré-entraînés spécifiques à un domaine open source s'ils sont disponibles. Certains modèles bien connus sont SciBERT, BioBERT, ClinicalBERT, PatentBERT et FinBERT. Ces modèles pré-formés spécifiques à un domaine peuvent aider à obtenir une meilleure représentation et des intégrations contextualisées pour les tâches en aval. Si ces modèles ne sont pas disponibles pour votre domaine, mais que vous disposez de ressources de calcul suffisantes, envisagez de former votre propre modèle pré-formé à l'aide de données non annotées de haute qualité dans le domaine.
  5. Envisagez d'incorporer un vocabulaire et des règles spécifiques au domaine. Pour certains scénarios, ils fournissent des résultats plus efficaces et plus précis et évitent les problèmes d'itération du modèle. La création d'un tel vocabulaire et la définition des règles peuvent nécessiter des efforts considérables et une expertise du domaine, qui doivent être équilibrées.

Sommaire

Canaliser l'IA pour répondre aux besoins et aux défis spécifiques à un domaine nécessite de la discipline tout au long, pas seulement dans l'approche et les ressources. La bonne nouvelle est que les entreprises s'intéressent de plus en plus aux solutions qui répondent à des défis spécifiques et les résolvent, ce qui crée à son tour de meilleures pratiques pour les scientifiques des données et les développeurs d'IA qui cherchent à fournir un retour sur investissement plus rapide pour leurs applications.

Source :  https://www.kdnuggets.com

#AI #artificial-intelligence 

Carmen  Grimes

Carmen Grimes

1599326160

Reflecting business logic rules into the domain models using typescript — Part 3

In the previous article, we declare types and create a function to make and validate the type.

But it will take too much time if we want to create these functions and validators for each model we want to use.

In this article, we are going to use io-ts library to automate these boring tasks.

The final project is available here:

mohsensaremi/reflecting-business-logic-rules-into-the-domain-models

Contribute to mohsensaremi/reflecting-business-logic-rules-into-the-domain-models development by creating an account on…

github.com

Installation

yarn add io-ts fp-ts

So what is fp-ts ?

fp-ts is a functional programming utility for typescript and is a peer dependency for io-ts .

We are not going to talk about functional programming in this article.

We only discuss a little about Either monad.

Codec

io-ts represent our type with something called Codec.

A codec has decode and encode functions.

We create and validate our input data with decode function and put back the data in normal shape using encode function.

#domain-modeling #typescript #business-logic #domain-driven-design #domain-model

Carmen  Grimes

Carmen Grimes

1599329880

Reflecting business logic rules into the domain models using typescript — Part 2

In the previous article, we learned how to create self-documented types and models. but they were just types and didn’t have any functionality.

In this article, we are going to write some code that creates and validates those types.

At the end of this article, our types can be used in real-life projects.

The project source code is available here:

mohsensaremi/reflecting-business-logic-rules-into-the-domain-models

Contribute to mohsensaremi/reflecting-business-logic-rules-into-the-domain-models development by creating an account on…

github.com

Bootstrap

First, we need a typescript project. so let’s create it.

yarn init -y
yarn add --dev typescript ts-node
./node_modules/.bin/tsc --init

Then we create our types.

String50

import {CustomTypeError} from "../exception/CustomTypeError";

	export type String50 = {
	    kind: "String50",
	    value: string,
	}

	export const makeString50 = (arg: any): String50 => {
	    if (typeof arg === "string" && arg.length <= 50) {
	        return {
	            kind: "String50",
	            value: arg,
	        };
	    }
	    throw new CustomTypeError("String50", arg);
	}

At the top, there is the type declaration. after that, there is the makeString50function. this function accepts any argument and tries to create String50 .

It checks if the argument type is a string and its length is less than 50.

If the argument doesn’t satisfy the rules and constraint it will throw a CustomTypeError exception.

And here is CustomTypeError

export class CustomTypeError extends Error {
	    constructor(type: string, value: any) {
	        super(`invalid value ${JSON.stringify(value)} provided for type ${type}`);
	    }
	}

It is just a simple class for showing errors.

We use it in try catch blocks to handle our custom type errors.

Let’s continue to define other types.

#domain-driven-design #business-logic #typescript #domain-modeling #domain-model

Carmen  Grimes

Carmen Grimes

1599333540

Reflecting business logic rules into the domain models using typescript — Part 1

Typescript is a great and powerful tool for type checking but it could bother you if you don’t define your type according to business logic rules.

If your models don’t reflect business logic rules, after some time it will create a gap between what business logic says and how your code behaves.

Let’s explain this with an example.

We need to define a model for storing Person data. the rules and constraints are:

  • a person must have a first name with limited length 50
  • a person must have a last name with limited length 50
  • a person must have contact info. contact info could be Email or PostalCode or both.

It seems very reasonable to model the Person model like this.

type Person = {
     firstName: string
     lastName: string
     email?: string
     postalCode?: string
}

BUT there are some problems in this modeling.

  • firstName and lastName are not any string. they could not have any length, they should have a limited length of 50.
  • email is not any string. it should have some specific shape (has @ character and domain name in it)
  • postalCode is not any string. it should contain 10 digits.

how could we put these rules into our model?

#domain-modeling #business-logic #domain-model #domain-driven-design #typescript

Thierry  Perret

Thierry Perret

1657272480

5 Façons D'effectuer Une analyse Des Sentiments En Python

Qu'il s'agisse de Twitter, de Goodreads ou d'Amazon, il n'y a guère d'espace numérique qui ne soit pas saturé d'opinions. Dans le monde d'aujourd'hui, il est crucial pour les organisations d'approfondir ces opinions et d'obtenir des informations sur leurs produits ou services. Cependant, ces données existent en quantités si étonnantes que les évaluer manuellement est une poursuite presque impossible. C'est là qu'intervient une autre aubaine de la science des données  : l' analyse des sentiments . Dans cet article, nous allons explorer ce qu'englobe l'analyse des sentiments et les différentes façons de l'implémenter en Python.

Qu'est-ce que l'analyse des sentiments ?

L'analyse des sentiments est un cas d'utilisation du traitement du langage naturel (TLN) et relève de la catégorie de la classification de texte . Pour le dire simplement, l'analyse des sentiments consiste à classer un texte en différents sentiments, tels que positif ou négatif, heureux, triste ou neutre, etc. Ainsi, le but ultime de l'analyse des sentiments est de déchiffrer l'humeur, l'émotion ou le sentiment sous-jacent d'un texte. Ceci est également connu sous le nom d' Opinion Mining .

Voyons comment une recherche rapide sur Google définit l'analyse des sentiments :

définition de l'analyse des sentiments

Obtenir des informations et prendre des décisions grâce à l'analyse des sentiments

Eh bien, maintenant, je suppose que nous sommes quelque peu habitués à ce qu'est l'analyse des sentiments. Mais quelle est sa signification et comment les organisations en bénéficient-elles ? Essayons d'explorer la même chose avec un exemple. Supposons que vous démarriez une entreprise qui vend des parfums sur une plateforme en ligne. Vous proposez une large gamme de parfums et bientôt les clients commencent à affluer. Après un certain temps, vous décidez de changer la stratégie de prix des parfums - vous envisagez d'augmenter les prix des parfums populaires et en même temps d'offrir des remises sur les parfums impopulaires. . Maintenant, afin de déterminer quels parfums sont populaires, vous commencez à parcourir les avis des clients sur tous les parfums. Mais tu es coincé ! Ils sont tellement nombreux que vous ne pouvez pas tous les parcourir en une seule vie. C'est là que l'analyse des sentiments peut vous sortir de l'impasse.

Vous rassemblez simplement tous les avis en un seul endroit et y appliquez une analyse des sentiments. Ce qui suit est une représentation schématique de l'analyse des sentiments sur les critiques de trois parfums de parfums - Lavande, Rose et Citron. (Veuillez noter que ces avis peuvent avoir des fautes d'orthographe, de grammaire et de ponctuation, comme dans les scénarios du monde réel)

analyse des sentiments

A partir de ces résultats, nous pouvons clairement voir que :

Fragrance-1 (Lavande) a des critiques très positives de la part des clients, ce qui indique que votre entreprise peut augmenter ses prix compte tenu de sa popularité.

Il se trouve que Fragrance-2 (Rose) a une vision neutre parmi le client, ce qui signifie que votre entreprise ne doit pas modifier ses prix .

Fragrance-3 (Citron) a un sentiment global négatif qui lui est associé - votre entreprise devrait donc envisager d'offrir une remise pour équilibrer la balance.

Ce n'était qu'un exemple simple de la façon dont l'analyse des sentiments peut vous aider à mieux comprendre vos produits/services et aider votre organisation à prendre des décisions.

Cas d'utilisation de l'analyse des sentiments

Nous venons de voir comment l'analyse des sentiments peut donner aux organisations des informations qui peuvent les aider à prendre des décisions basées sur les données. Examinons maintenant d'autres cas d'utilisation de l'analyse des sentiments.

  1. Surveillance des médias sociaux pour la gestion de la marque : les marques peuvent utiliser l'analyse des sentiments pour évaluer les perspectives publiques de leur marque. Par exemple, une entreprise peut rassembler tous les Tweets avec la mention ou le tag de l'entreprise et effectuer une analyse des sentiments pour connaître les perspectives publiques de l'entreprise.
  2. Analyse des produits/services : les marques/organisations peuvent effectuer une analyse des sentiments sur les avis des clients pour voir dans quelle mesure un produit ou un service se comporte sur le marché et prendre des décisions futures en conséquence.
  3. Prévision du cours des actions : Prédire si les actions d'une entreprise vont monter ou descendre est crucial pour les investisseurs. On peut déterminer la même chose en effectuant une analyse des sentiments sur les titres des articles contenant le nom de l'entreprise. Si les gros titres concernant une organisation particulière ont un sentiment positif, le cours de ses actions devrait augmenter et vice-versa.

Façons d'effectuer une analyse des sentiments en Python

Python est l'un des outils les plus puissants lorsqu'il s'agit d'effectuer des tâches de science des données - il offre une multitude de façons d'effectuer une  analyse des sentiments . Les plus populaires sont enrôlés ici:

  1. Utilisation du blob de texte
  2. Utiliser Vador
  3. Utilisation de modèles basés sur la vectorisation de sacs de mots
  4. Utilisation de modèles basés sur LSTM
  5. Utilisation de modèles basés sur des transformateurs

Plongeons-les profondément un par un.

Remarque : Aux fins des démonstrations des méthodes 3 et 4 (utilisation de modèles basés sur la vectorisation de sacs de mots et utilisation de modèles basés sur LSTM) , l'analyse des sentiments a été utilisée. Il comprend plus de 5000 extraits de texte étiquetés comme positifs, négatifs ou neutres. Le jeu de données est sous licence Creative Commons.

Utilisation du blob de texte

Text Blob est une bibliothèque Python pour le traitement du langage naturel. L'utilisation de Text Blob pour l'analyse des sentiments est assez simple. Il prend le texte en entrée et peut renvoyer la polarité et la subjectivité en sortie.

La polarité détermine le sentiment du texte. Ses valeurs se situent dans [-1,1] où -1 dénote un sentiment très négatif et 1 dénote un sentiment très positif.

La subjectivité détermine si une entrée de texte est une information factuelle ou une opinion personnelle. Sa valeur est comprise entre [0,1] où une valeur plus proche de 0 dénote une information factuelle et une valeur plus proche de 1 dénote une opinion personnelle.

Mise en place :

pip install textblob

Importer un blob de texte :

from textblob import TextBlob

Implémentation de code pour l'analyse des sentiments à l'aide de Text Blob :

L'écriture de code pour l'analyse des sentiments à l'aide de TextBlob est assez simple. Importez simplement l'objet TextBlob et transmettez le texte à analyser avec les attributs appropriés comme suit :

from textblob import TextBlob
text_1 = "The movie was so awesome."
text_2 = "The food here tastes terrible."#Determining the Polarity 
p_1 = TextBlob(text_1).sentiment.polarity
p_2 = TextBlob(text_2).sentiment.polarity#Determining the Subjectivity
s_1 = TextBlob(text_1).sentiment.subjectivity
s_2 = TextBlob(text_2).sentiment.subjectivityprint("Polarity of Text 1 is", p_1)
print("Polarity of Text 2 is", p_2)
print("Subjectivity of Text 1 is", s_1)
print("Subjectivity of Text 2 is", s_2)

Production:

Polarity of Text 1 is 1.0 
Polarity of Text 2 is -1.0 
Subjectivity of Text 1 is 1.0 
Subjectivity of Text 2 is 1.0

Utiliser VADER

VADER (Valence Aware Dictionary and sEntiment Reasoner) est un analyseur de sentiments basé sur des règles qui a été formé sur le texte des médias sociaux. Tout comme Text Blob, son utilisation en Python est assez simple. Nous verrons son utilisation dans l'implémentation du code avec un exemple dans un moment.

Installation:

pip install vaderSentiment

Importation de la classe SentimentIntensityAnalyzer depuis Vader :

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer

Code pour l'analyse des sentiments à l'aide de Vader :

Tout d'abord, nous devons créer un objet de la classe SentimentIntensityAnalyzer ; alors nous devons passer le texte à la fonction polarity_scores() de l'objet comme suit :

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
sentiment = SentimentIntensityAnalyzer()
text_1 = "The book was a perfect balance between wrtiting style and plot."
text_2 =  "The pizza tastes terrible."
sent_1 = sentiment.polarity_scores(text_1)
sent_2 = sentiment.polarity_scores(text_2)
print("Sentiment of text 1:", sent_1)
print("Sentiment of text 2:", sent_2)

Sortie :

Sentiment of text 1: {'neg': 0.0, 'neu': 0.73, 'pos': 0.27, 'compound': 0.5719} 
Sentiment of text 2: {'neg': 0.508, 'neu': 0.492, 'pos': 0.0, 'compound': -0.4767}

Comme nous pouvons le voir, un objet VaderSentiment renvoie un dictionnaire de scores de sentiment pour le texte à analyser.

Utilisation de modèles basés sur la vectorisation de sacs de mots

Dans les deux approches discutées jusqu'à présent, c'est-à-dire Text Blob et Vader, nous avons simplement utilisé des bibliothèques Python pour effectuer une analyse des sentiments. Nous allons maintenant discuter d'une approche dans laquelle nous formerons notre propre modèle pour la tâche. Les étapes impliquées dans l'analyse des sentiments à l'aide de la méthode de vectorisation du sac de mots sont les suivantes :

  1. Prétraiter le texte des données de formation (le prétraitement du texte implique la normalisation, la tokenisation, la suppression des mots vides et la radicalisation/lemmatisation.)
  2. Créez un sac de mots pour les données textuelles prétraitées à l'aide de l'approche de vectorisation par comptage ou de vectorisation TF-IDF.
  3. Entraînez un modèle de classification approprié sur les données traitées pour la classification des sentiments.

Code pour l'analyse des sentiments à l'aide de l'approche de vectorisation du sac de mots :

Pour créer un modèle d'analyse des sentiments à l'aide de l'approche de vectorisation BOW, nous avons besoin d'un ensemble de données étiqueté. Comme indiqué précédemment, l'ensemble de données utilisé pour cette démonstration a été obtenu auprès de Kaggle. Nous avons simplement utilisé le vectoriseur de comptage de sklearn pour créer le BOW. Ensuite, nous avons formé un classificateur Multinomial Naive Bayes, pour lequel un score de précision de 0,84 a été obtenu.

L'ensemble de données peut être obtenu à partir d' ici .

#Loading the Dataset
import pandas as pd
data = pd.read_csv('Finance_data.csv')
#Pre-Prcoessing and Bag of Word Vectorization using Count Vectorizer
from sklearn.feature_extraction.text import CountVectorizer
from nltk.tokenize import RegexpTokenizer
token = RegexpTokenizer(r'[a-zA-Z0-9]+')
cv = CountVectorizer(stop_words='english',ngram_range = (1,1),tokenizer = token.tokenize)
text_counts = cv.fit_transform(data['sentences'])
#Splitting the data into trainig and testing
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(text_counts, data['feedback'], test_size=0.25, random_state=5)
#Training the model
from sklearn.naive_bayes import MultinomialNB
MNB = MultinomialNB()
MNB.fit(X_train, Y_train)
#Caluclating the accuracy score of the model
from sklearn import metrics
predicted = MNB.predict(X_test)
accuracy_score = metrics.accuracy_score(predicted, Y_test)
print("Accuracuy Score: ",accuracy_score)

Sortie :

Accuracuy Score:  0.9111675126903553

Le classificateur formé peut être utilisé pour prédire le sentiment de n'importe quelle entrée de texte donnée.

Utilisation de modèles basés sur LSTM

Bien que nous ayons pu obtenir un score de précision décent avec la méthode de vectorisation du sac de mots, il se peut qu'elle ne donne pas les mêmes résultats lorsqu'il s'agit d'ensembles de données plus volumineux. Cela donne lieu à la nécessité d'utiliser des modèles basés sur l'apprentissage en profondeur pour la formation du modèle d'analyse des sentiments.

Pour les tâches NLP, nous utilisons généralement des modèles basés sur RNN car ils sont conçus pour traiter des données séquentielles. Ici, nous allons former un modèle LSTM (Long Short Term Memory) en utilisant TensorFlow avec Keras . Les étapes pour effectuer une analyse des sentiments à l'aide de modèles basés sur LSTM sont les suivantes :

  1. Prétraiter le texte des données de formation (le prétraitement du texte implique la normalisation, la tokenisation, la suppression des mots vides et la radicalisation/lemmatisation.)
  2. Importez Tokenizer depuis Keras.preprocessing.text et créez son objet. Ajustez le tokenizer sur l'ensemble du texte de formation (afin que le Tokenizer soit formé sur le vocabulaire des données de formation). Générez des incorporations de texte à l'aide de la méthode texts_to_sequence() du Tokenizer et stockez-les après les avoir remplies à une longueur égale. (Les incorporations sont des représentations numériques/vectorisées du texte. Comme nous ne pouvons pas alimenter directement notre modèle avec les données textuelles, nous devons d'abord les convertir en incorporations)
  3. Après avoir généré les plongements, nous sommes prêts à construire le modèle. Nous construisons le modèle à l'aide de TensorFlow - ajoutez-lui Input, LSTM et des couches denses. Ajoutez des abandons et réglez les hyperparamètres pour obtenir un score de précision décent. Généralement, nous avons tendance à utiliser les fonctions d'activation ReLU ou LeakyReLU dans les couches internes des modèles LSTM car cela évite le problème du gradient de fuite. Au niveau de la couche de sortie, nous utilisons la fonction d'activation Softmax ou Sigmoid.

Code pour l'analyse des sentiments à l'aide d'une approche de modèle basée sur LSTM :

Ici, nous avons utilisé le même jeu de données que celui que nous avons utilisé dans le cas de l'approche BOW. Une précision d'entraînement de 0,90 a été obtenue.

#Importing necessary libraries
import nltk
import pandas as pd
from textblob import Word
from nltk.corpus import stopwords
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import classification_report,confusion_matrix,accuracy_score
from keras.models import Sequential
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.layers import Dense, Embedding, LSTM, SpatialDropout1D
from sklearn.model_selection import train_test_split 
#Loading the dataset
data = pd.read_csv('Finance_data.csv')
#Pre-Processing the text 
def cleaning(df, stop_words):
    df['sentences'] = df['sentences'].apply(lambda x: ' '.join(x.lower() for x in x.split()))
    # Replacing the digits/numbers
    df['sentences'] = df['sentences'].str.replace('d', '')
    # Removing stop words
    df['sentences'] = df['sentences'].apply(lambda x: ' '.join(x for x in x.split() if x not in stop_words))
    # Lemmatization
    df['sentences'] = df['sentences'].apply(lambda x: ' '.join([Word(x).lemmatize() for x in x.split()]))
    return df
stop_words = stopwords.words('english')
data_cleaned = cleaning(data, stop_words)
#Generating Embeddings using tokenizer
tokenizer = Tokenizer(num_words=500, split=' ') 
tokenizer.fit_on_texts(data_cleaned['verified_reviews'].values)
X = tokenizer.texts_to_sequences(data_cleaned['verified_reviews'].values)
X = pad_sequences(X)
#Model Building
model = Sequential()
model.add(Embedding(500, 120, input_length = X.shape[1]))
model.add(SpatialDropout1D(0.4))
model.add(LSTM(704, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(352, activation='LeakyReLU'))
model.add(Dense(3, activation='softmax'))
model.compile(loss = 'categorical_crossentropy', optimizer='adam', metrics = ['accuracy'])
print(model.summary())
#Model Training
model.fit(X_train, y_train, epochs = 20, batch_size=32, verbose =1)
#Model Testing
model.evaluate(X_test,y_test)

Utilisation de modèles basés sur des transformateurs

Les modèles basés sur les transformateurs sont l'une des techniques de traitement du langage naturel les plus avancées. Ils suivent une architecture basée sur l'encodeur-décodeur et utilisent les concepts d'auto-attention pour donner des résultats impressionnants. Bien que l'on puisse toujours construire un modèle de transformateur à partir de zéro, c'est une tâche assez fastidieuse. Ainsi, nous pouvons utiliser des modèles de transformateurs pré-formés disponibles sur Hugging Face . Hugging Face est une communauté d'IA open source qui propose une multitude de modèles pré-formés pour les applications NLP. Ces modèles peuvent être utilisés tels quels ou être affinés pour des tâches spécifiques.

Installation:

pip install transformers

Importation de la classe SentimentIntensityAnalyzer depuis Vader :

import transformers

Code pour l'analyse des sentiments à l'aide de modèles basés sur Transformer :

Pour effectuer une tâche à l'aide de transformateurs, nous devons d'abord importer la fonction de pipeline à partir des transformateurs. Ensuite, un objet de la fonction pipeline est créé et la tâche à effectuer est passée en argument (c'est-à-dire l'analyse des sentiments dans notre cas). Nous pouvons également spécifier le modèle que nous devons utiliser pour effectuer la tâche. Ici, puisque nous n'avons pas mentionné le modèle à utiliser, le mode distillery-base-uncased-finetuned-sst-2-English est utilisé par défaut pour l'analyse des sentiments. Vous pouvez consulter la liste des tâches et des modèles disponibles ici .

from transformers import pipeline
sentiment_pipeline = pipeline("sentiment-analysis")
data = ["It was the best of times.", "t was the worst of times."]
sentiment_pipeline(data)Output:[{'label': 'POSITIVE', 'score': 0.999457061290741},  {'label': 'NEGATIVE', 'score': 0.9987301230430603}]

Conclusion

À cette époque où les utilisateurs peuvent exprimer leurs points de vue sans effort et où les données sont générées en superflu en quelques fractions de secondes seulement - tirer des enseignements de ces données est vital pour que les organisations prennent des décisions efficaces - et l'analyse des sentiments s'avère être la pièce manquante du puzzle !

Nous avons maintenant couvert en détail ce qu'implique exactement l'analyse des sentiments et les différentes méthodes que l'on peut utiliser pour l'exécuter en Python. Mais ce n'étaient que quelques démonstrations rudimentaires - vous devez sûrement aller de l'avant et jouer avec les modèles et les essayer sur vos propres données.

Source : https://www.analyticsvidhya.com/blog/2022/07/sentiment-analysis-using-python/

#python