[PYTHON] Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 3 Étape 11 Mémo "Embeddings de mots"

Contenu

Ceci est un mémo pour moi pendant que je lis Introduction aux applications de traitement du langage naturel en 15 étapes. Cette fois, au chapitre 3, étape 11, notez vos propres points. Personnellement, c'est une technologie qui m'intéresse particulièrement dans le traitement du langage naturel.

Préparation

Aperçu des chapitres

Jusqu'à présent, la méthode d'extraction de caractéristiques était BoW (ou une variante de BoW), qui était exprimée par le nombre de dimensions égal au nombre de vocabulaire. Dans les embeddings de mots, il peut être représenté par un vecteur d'un nombre spécifique de dimensions (** représentation distribuée des mots **). Ce vecteur contient des informations comme s'il représentait la signification d'un mot.

11.1 Que sont les intégrations Word?

Comparaison avec des expressions One-hot telles que BoW

article One-expression chaude Word embeddings
Nombre de dimensions du vecteur ・ Nombre de vocabulaire
・ Cela peut être des dizaines de milliers à des millions
・ Valeur fixe décidée par le concepteur
・ Des centaines
Valeur vectorielle 1 pour certaines dimensions, 0 pour d'autres Toutes les dimensions prennent de vraies valeurs

11.2 Entrez en contact avec les intégrations Word

Analogy task

analogy_sample.Essayez d'exécuter py


$ docker run -it -v $(pwd):/usr/src/app/ 15step:latest python analogy_sample.py
tokyo - japan + france =  ('paris', 0.9174968004226685)

gensim.downloader.load ('<word embeddings model>') contient le vecteur de fonction correspondant au mot. Cependant, selon le modèle, seuls des mots anglais peuvent être utilisés.

Cet exemple traite des mots «tokyo», «japan» et «france», et si vous essayez un pseudo calcul basé sur la signification des mots, On peut voir qu'elle peut être exprimée par «(tokyo --japan) + france = (capital) + france ≒ paris».

Problèmes d'application

Essayons quelques exemples que nous lisons dans d'autres livres.

king - man + woman =  [('king', 0.8859834671020508), ('queen', 0.8609581589698792), ('daughter', 0.7684512138366699), ('prince', 0.7640699148178101), ('throne', 0.7634970545768738), ('princess', 0.7512727975845337), ('elizabeth', 0.7506488561630249), ('father', 0.7314497232437134), ('kingdom', 0.7296158075332642), ('mother', 0.7280011177062988)]

gone - go + see =  [('see', 0.8548812866210938), ('seen', 0.8507398366928101), ('still', 0.8384071588516235), ('indeed', 0.8378400206565857), ('fact', 0.835073709487915), ('probably', 0.8323071002960205), ('perhaps', 0.8315557837486267), ('even', 0.8241520524024963), ('thought', 0.8223952054977417), ('much', 0.8205327987670898)]

Synonymes

Il peut être obtenu par model.wv.similar_by_vector (..) comme traité dans la tâche Analogy.

La nature des intégrations Word

La représentation distribuée obtenue par les incorporations Word a les propriétés suivantes.

Types d'intégration de mots

article Contenu
Word2Vec Obtenir une expression distribuée en se concentrant sur plusieurs mots consécutifs dans une phrase
Glove Obtenez une expression distribuée en utilisant les informations de fréquence de cooccurrence de mot dans l'ensemble des données d'apprentissage
fastText Caractère n-Obtenez la représentation distribuée de gramme et ajoutez-les ensemble pour créer la représentation distribuée des mots

11.3 Utilisation d'un modèle formé et support japonais

Comme mentionné ci-dessus, les incorporations Word peuvent utiliser des modèles déjà entraînés (lors de l'incorporation dans une application, lors de l'utilisation de modèles entraînés, il est préférable d'effectuer un apprentissage par transfert et de l'adapter dans une certaine mesure aux données avant de l'utiliser. alors)

Lorsque vous utilisez le modèle entraîné qui est distribué ultérieurement, faites attention à la licence et aux conditions d'utilisation de ce modèle.

11.4 Intégration de mots dans la tâche d'identification

Utiliser la représentation distribuée comme quantité d'entités

simple_we_classification.py est sous sec130_140_cnn_rnn / classification /. Puisque tokenize.py n'existe pas dans ce répertoire, j'ai utilisé sec40_preprocessing / tokenizer.py.

Ajouts / modifications par rapport au chapitre précédent (étape 09)

def calc_text_feature(text):
    """
Trouvez la fonctionnalité du texte basée sur l'expression distribuée des mots.
Après avoir marqué le texte et trouvé la représentation distribuée de chaque jeton,
Soit la somme de toutes les représentations distribuées la quantité de caractéristiques du texte.
    """
    tokens = tokenize(text)

    word_vectors = np.empty((0, model.wv.vector_size))
    for token in tokens:
        try:
            word_vector = model[token]
            word_vectors = np.vstack((word_vectors, word_vector))
        except KeyError:
            pass

    if word_vectors.shape[0] == 0:
        return np.zeros(model.wv.vector_size)
    return np.sum(word_vectors, axis=0)

Résultat d'exécution


$ docker run -it -v $(pwd):/usr/src/app/ 15step:latest python simple_we_classification.py
0.40425531914893614

Mise en œuvre normale (étape 01): 37,2% Pré-traitement ajouté (étape 02): 43,6% Pré-traitement + changement d'extraction de caractéristiques (étape 04): 58,5% Pré-traitement + changement d'extraction de caractéristiques (étape 11): 40,4%

Les performances sont faibles avec les fonctionnalités au niveau de la phrase obtenues en ajoutant simplement des incorporations de mots.


Pré-traitement + changement d'extraction de caractéristiques + changement de classificateur (étape 06): 61,7% Pré-traitement + changement d'extraction de caractéristiques + changement de classificateur (étape 09): 66,0%

Unification de l'analyseur morphologique et du prétraitement

Il est souhaitable que le modèle d'insertion de mots à utiliser soit ** reproduit en utilisant la même méthode d'écriture et de prétraitement que celle utilisée lors de son apprentissage **.

Recommended Posts

Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 3 Étape 11 Mémo "Embeddings de mots"
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 2 Étape 02 Mémo "Prétraitement"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 2 Étape 07 Mémo «Évaluation»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 4 Etape 14 Mémo "Recherche Hyper Paramètre"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» --Chapitre 2 Étape 04 Mémo «Extraction de fonctionnalités»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 4 Étape 15 Mémo "Collecte de données"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 3 Étape 08 Mémo «Introduction aux réseaux de neurones»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 2 Étape 05 Mémo "Conversion de quantité de fonctionnalités"
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 2 Étape 03 Mémo "Analyse morphologique et écriture écrite"
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 3 Étape 12 Mémo "Réseaux de neurones convolutifs"
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 3 Étape 09 Mémo "Identifier par Neural Network"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» --Chapitre 2 Étape 01 Mémo «Créer un agent de dialogue»
Essayons le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 3 Étape 10 Mémo "Détails et amélioration du réseau neuronal"
[WIP] Pré-traitement des notes dans le traitement du langage naturel
Résumé du début au chapitre 1 de l'introduction aux modèles de conception appris en langage Java
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 6] Introduction à scicit-learn avec 100 coups de traitement du langage
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
[Réunion de changement d'emploi] Essayez de classer les entreprises en traitant le bouche-à-oreille en langage naturel avec word2vec
[Traitement du langage naturel] J'ai essayé de visualiser les remarques de chaque membre de la communauté Slack
[Python] Essayez de classer les boutiques de ramen par traitement du langage naturel
Traitement du langage naturel 3 Continuité des mots
Traitement du langage naturel 2 similitude de mots
Résumé du chapitre 2 de l'introduction aux modèles de conception appris en langage Java
Chapitre 4 Résumé de l'introduction aux modèles de conception appris en langage Java
Résumé du chapitre 3 de l'introduction aux modèles de conception appris en langage Java
[Introduction à RasPi4] Construction de l'environnement, système de traitement du langage naturel mecab, etc. .. .. ♪
Dockerfile avec les bibliothèques nécessaires pour le traitement du langage naturel avec python
100 traitements du langage naturel frappent le chapitre 4 Commentaire
100 Language Processing Knock Chapitre 1 en Python
[Traitement du langage 100 coups 2020] Chapitre 7: Vecteur Word
100 Traitement du langage Knock 2020 Chapitre 7: Vecteur de mots
Essayez Cython dans les plus brefs délais
Se préparer à démarrer le traitement du langage naturel
De l'introduction de l'API GoogleCloudPlatform Natural Language à son utilisation
J'ai essayé de résoudre 100 traitements linguistiques Knock version 2020 [Chapitre 3: Expressions régulières 25-29]