[PYTHON] 100 traitement du langage knock-93 (en utilisant des pandas): calcul du taux de précision de la tâche d'analogie

Il s'agit de l'enregistrement de la 93e "Calcul du taux de précision de la tâche d'analogie" de Traitement du langage 100 knock 2015. Il est facile de gagner simplement en calculant le taux de réponse correct pour le résultat de frappe précédent. Le résultat du programme auto-conçu est d'environ 25% et le résultat lors de l'utilisation de Gensim est de 58%, ce qui est une grande différence (il y a un doute sur la façon de calculer le taux de réponse correct).

Lien de référence

Lien Remarques
093.Calcul du taux de précision de la tâche d'analogie.ipynb Lien GitHub du programme de réponse
100 coups de traitement du langage amateur:93 Je vous suis toujours redevable de 100 coups de traitement linguistique

environnement

type version Contenu
OS Ubuntu18.04.01 LTS Il fonctionne virtuellement
pyenv 1.2.15 J'utilise pyenv car j'utilise parfois plusieurs environnements Python
Python 3.6.9 python3 sur pyenv.6.J'utilise 9
3.7 ou 3.Il n'y a aucune raison profonde de ne pas utiliser la série 8
Les packages sont gérés à l'aide de venv

Dans l'environnement ci-dessus, j'utilise les packages Python supplémentaires suivants. Installez simplement avec pip ordinaire.

type version
pandas 0.25.3

Tâche

Chapitre 10: Méthode de l'espace vectoriel (II)

Au chapitre 10, nous continuerons à travailler sur l'apprentissage des vecteurs de mots du chapitre précédent.

93. Calcul du taux d'exactitude de la tâche d'analogie

Utilisez les données créées dans> 92 pour trouver le taux de réponse correct pour la tâche d'analogie de chaque modèle.

Répondre

Programme de réponse [093. Calcul du taux de précision de l'analogie task.ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/10.%E3%83%99%E3%82%AF%E3%83 % 88% E3% 83% AB% E7% A9% BA% E9% 96% 93% E6% B3% 95% 20 (II) /093.%E3%82%A2%E3%83%8A%E3%83 % AD% E3% 82% B8% E3% 83% BC% E3% 82% BF% E3% 82% B9% E3% 82% AF% E3% 81% AE% E6% AD% A3% E8% A7% A3 % E7% 8E% 87% E3% 81% AE% E8% A8% 88% E7% AE% 97.ipynb)

import pandas as pd

def calc_accuracy(file):
    df = pd.read_table(file, header=None, usecols=[3, 4, 5], names=['word4', 'result', 'similarity'])
    print(df.info())
    print('Total records:', len(df))
    print('Available records:', (df['similarity'] != -1).sum())
    print('Correct records:', (df['word4'] == df['result']).sum())
    print('Accuracy', (df['word4'] == df['result']).sum() / (df['similarity'] != -1).sum())

calc_accuracy('092.analogy_word2vec_1.txt')

calc_accuracy('092.analogy_word2vec_2.txt')

Répondre au commentaire

Je pense qu'il existe une manière plus intelligente de l'écrire, mais je ne me concentre pas vraiment sur le temps. Le fichier est lu et le taux de précision est calculé. Je ne savais pas quoi faire du dénominateur, mais si je ne trouvais pas un mot dans le corpus, je l'excluais du dénominateur.

df = pd.read_table(file, header=None, usecols=[3, 4, 5], names=['word4', 'result', 'similarity'])
print(df.info())
print('Total records:', len(df))
print('Available records:', (df['similarity'] != -1).sum())
print('Correct records:', (df['word4'] == df['result']).sum())
print('Accuracy', (df['word4'] == df['result']).sum() / (df['similarity'] != -1).sum())

C'est le résultat de mon propre programme.

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 506 entries, 0 to 505
Data columns (total 3 columns):
word4         506 non-null object
result        462 non-null object
similarity    504 non-null float64
dtypes: float64(1), object(2)
memory usage: 12.0+ KB
None
Total records: 506
Available records: 462
Correct records: 114
Accuracy 0.24675324675324675

C'est le résultat lors de l'utilisation de Gensim. Je crains que les «enregistrements disponibles» diminuent. Certes Gensim semble avoir la logique que Word2Vec ne cible pas quand il est peu fréquent ...

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 506 entries, 0 to 505
Data columns (total 3 columns):
word4         506 non-null object
result        400 non-null object
similarity    506 non-null float64
dtypes: float64(1), object(2)
memory usage: 12.0+ KB
None
Total records: 506
Available records: 400
Correct records: 231
Accuracy 0.5775

Recommended Posts

100 traitement du langage knock-93 (en utilisant des pandas): calcul du taux de précision de la tâche d'analogie
100 Language Processing Knock-32 (utilisant des pandas): Prototype de verbe
100 traitement du langage knock-36 (en utilisant des pandas): fréquence d'occurrence des mots
100 traitement du langage knock-31 (en utilisant des pandas): verbe
100 traitement du langage knock-38 (en utilisant des pandas): histogramme
100 traitements linguistiques knock-77 (en utilisant scicit-learn): mesure du taux de réponse
100 Language Processing Knock-33 (en utilisant des pandas): nom sahen
100 traitement du langage knock-91: Préparation des données d'analogie
100 traitement du langage knock-35 (utilisant des pandas): concaténation de nomenclature
100 Language Processing Knock-39 (en utilisant des pandas): la loi de Zipf
100 traitement de langage knock-34 (utilisant des pandas): "B of A"
100 langage de traitement knock-20 (à l'aide de pandas): lecture de données JSON
Traitement de 100 langues knock-98 (en utilisant des pandas): Clustering par méthode Ward
100 traitement du langage knock-75 (en utilisant scicit-learn): poids de l'identité
100 traitement du langage knock-99 (à l'aide de pandas): visualisation par t-SNE
100 traitement du langage knock-95 (en utilisant des pandas): Note avec WordSimilarity-353
100 langage traitement knock-92 (utilisant Gensim): application aux données d'analogie
100 Language Processing Knock: Chapitre 2 Principes de base des commandes UNIX (à l'aide de pandas)
100 Language Processing Knock-83 (en utilisant des pandas): Mesure de la fréquence des mots / contextes
100 Language Processing Knock-30 (en utilisant des pandas): lecture des résultats de l'analyse morphologique
100 Language Processing Knock-84 (en utilisant des pandas): Création d'une matrice de contexte de mots
100 traitement de la langue knock-42: Affichage de la phrase de la personne concernée et de la personne concernée
Traitement linguistique 100 knocks-29: Obtenez l'URL de l'image du drapeau
100 traitement du langage knock-76 (en utilisant scicit-learn): étiquetage
100 traitement du langage knock-59: analyse de la formule S
100 traitement du langage knock-73 (en utilisant scikit-learn): apprentissage
100 traitement du langage knock-74 (en utilisant scicit-learn): prédiction
100 traitement de la langue knock-96 (en utilisant Gensim): Extraction du vecteur lié au nom du pays
100 traitement du langage knock-97 (en utilisant scicit-learn): clustering k-means
Traitement du langage 100 knocks-44: Visualisation des arbres dépendants
100 Language Processing Knock-89: Analogie avec la constitution additive
100 Language Processing Knock-26: suppression du balisage accentué
100 Language Processing Knock-71 (en utilisant Stanford NLP): Stopword
100 traitement du langage knock-90 (en utilisant Gensim): apprendre avec word2vec
100 coups de traitement linguistique (2020): 28
100 langage de traitement knock-79 (en utilisant scikit-learn): dessin de graphe avec rappel de précision
Calculer le taux de partage de mémoire des processus Linux
[Pandas] Principes de base du traitement des données de date à l'aide de dt
Traitement du langage 100 knocks-45: Extraction de modèles de cas verbaux
100 coups de traitement linguistique (2020): 38
100 traitement de la langue frapper 00 ~ 02
100 traitement du langage knock-72 (en utilisant Stanford NLP): Extraction d'identité
Dessinez sur Jupyter en utilisant la fonction de tracé des pandas
Traitement du langage 100 knocks-49: Extraction de chemins de dépendances entre nomenclature
100 traitement de langage knock-94 (en utilisant Gensim): calcul de similarité avec WordSimilarity-353
100 traitements linguistiques knock-37 (utilisant des pandas): Top 10 des mots les plus fréquents
Apprenez facilement 100 traitements linguistiques Knock 2020 avec "Google Colaboratory"
100 traitements linguistiques Knock 2020 [00 ~ 39 réponse]
100 langues de traitement knock 2020 [00-79 réponse]
100 traitements linguistiques Knock 2020 [00 ~ 69 réponse]
100 Language Processing Knock 2020 Chapitre 1
100 coups de traitement du langage amateur: 17
100 traitements linguistiques Knock 2020 [00 ~ 49 réponse]
100 Traitement du langage Knock-52: Stemming
100 Traitement du langage Knock Chapitre 1
100 coups de langue amateur: 07
100 Language Processing Knock 2020 Chapitre 3
100 Language Processing Knock 2020 Chapitre 2
100 coups de traitement du langage amateur: 09
100 coups en traitement du langage amateur: 47
Traitement 100 langues knock-53: Tokenisation