[PYTHON] À propos du calcul des coûts de MeCab

introduction

J'ai appris le calcul des coûts MeCab, alors je l'ai résumé. Veuillez indiquer si quelque chose ne va pas.

Vue d'ensemble de l'analyse morphologique MeCab

MeCab effectue une analyse morphologique à l'aide du dictionnaire enregistré. Si un mot (mot inconnu) qui n'est pas enregistré dans le dictionnaire apparaît, il sera divisé en fonction du coût de chaque mot. Parmi eux, ** celui avec le coût total le plus bas ** est produit en conséquence.

Essayez en fait

Cette fois, nous utiliserons le dictionnaire ipadic-neologd pour vérifier comment le mot fictif "village allemand américain" est analysé morphologiquement.


echo American German Village|mecab -d C:\neologd -N2

Nom américain,Nomenclature propriétaire,zone,Pays,*,*,Amérique,Amérique,Amérique
Substantif allemand,Nomenclature propriétaire,zone,Pays,*,*,Allemagne,Allemagne,Allemagne
Village substantif,suffixe,zone,*,*,*,village,village,village
EOS

Nom américain,Nomenclature propriétaire,zone,Pays,*,*,Amérique,Amérique,Amérique
Village allemand substantif,Nomenclature propriétaire,Général,*,*,*,Village allemand,Village allemand,Village allemand
EOS

Spécifiez le dictionnaire avec -d et listez le nombre de candidats spécifié par l'option NUM. De cette manière, deux types de divisions pour des mots inconnus ont été répertoriés comme candidats. Cette division n'est-elle pas assez convaincante pour nous?

Dictionnaire MeCab

Avant d'entrer dans le calcul des coûts, parlons de la façon d'enregistrer le dictionnaire MeCab. Le dictionnaire est

Type de surface,ID de contexte gauche,ID de contexte correct,Coût,Partie,Partie細分類1,Partie細分類2,Partie細分類3,Type d'utilisation,Type d'utilisation,Prototype,en train de lire,prononciation

Enregistrez-le en tant que fichier csv, puis créez le dictionnaire. En regardant ça, ・ ** ID de contexte gauche ** ・ ** ID de contexte correct ** · ** Coût ** Il contient un mot inconnu. Ce sont les informations utilisées pour l'analyse morphologique de MeCab.

Coût de l'événement

Le ** coût d'occurrence ** est la ** difficulté d'apparaître ** du mot lui-même. Plus la valeur est élevée, moins le mot apparaîtra. Le coût de l'occurrence est la valeur de ** cost ** du dictionnaire enregistré précédemment. Alors, quel a été le coût du «village allemand américain»?


echo American German Village|mecab -F "%m,%c,\n" -d C:\neologd -N2

Amérique, 4698,
Allemagne, 2543,
village, 8707,
EOS

Amérique, 4698,
Village allemand, 611,
EOS

Utilisez% m pour afficher le type de couche de surface et% c pour afficher le coût de l'occurrence. Une question se pose ici. Le coût total devrait évidemment être inférieur pour le second, mais le premier candidat à la sortie est le premier résultat. La raison en est l'existence d'un nouveau coût, ** coût d'articulation **.

Coût de connexion

** Le coût de concaténation ** est la difficulté de concaténer les ID de contexte de deux mots. Plus la valeur est petite, plus elle a de chances d'être continue. L'ID de contexte correspond à ** l'ID de contexte gauche et l'ID de contexte droit ** du dictionnaire. Fondamentalement, cet identifiant semble avoir la même valeur au moment de l'enregistrement. Par exemple, considérez le mot «avant et après». L'ID de contexte «avant» est 1314 et l'ID de contexte «après» est 1313. Le coût de connexion est déterminé par la combinaison de l'ID de contexte gauche et de l'ID de contexte droit. Une liste de combinaisons peut être trouvée dans matrix.def (ou matrix.bin) situé dans MeCab \ dic \ ipadic. En regardant ça,

1314 1313 -316
1313 1314 716

Le coût de connexion étant faible (-316) de l'avant vers l'arrière, il est facile de continuer, et de l'arrière vers l'avant, le coût de connexion est élevé (716) et il est difficile de continuer. Je pense que c'est également assez convaincant. Jetons un coup d'œil à "American German Village".


echo American German Village|mecab  -F"%m,%phl,%phr,%c,%pc,%pn\n" -d C:\neologd -N2

Amérique,1294,1294,4698,3746,3746
Allemagne,1294,1294,2543,-141,-3887
village,1303,1303,8707,881,1022
EOS

Amérique,1294,1294,4698,3746,3746
Village allemand,1288,1288,611,2614,-1132
EOS

La commande MeCab peut être résumée comme suit.

commander La description
%m Type de surface
%phl ID de contexte gauche
%phr ID de contexte correct
%c(Ou%pw) Coût de l'événement
%pc Coût de connexion+Coût d'occurrence de mot(Cumulable depuis le début de la phrase)
%pn Coût de connexion+Coût d'occurrence de mot(Sa morphologie seule, %pw+%pC)

Toutes les commandes peuvent être trouvées sur ici. Étant donné que le résultat est difficile à comprendre, je vais également le tabuler.

Type de surface ID de contexte gauche ID de contexte correct Coût de l'événement Concaténation + occurrence(Accumulation) Enchaînement+Occurrence(Seul)
Amérique 1294 1294 4698 3746 3746
Allemagne 1294 1294 2543 -141 -3887
village 1303 1303 8707 881 1022
Amérique 1294 1294 4698 3746 3746
Village allemand 1288 1288 611 2614 -1132

Veuillez noter que ** BOS et EOS reçoivent également des ID de contexte **. Ainsi, le coût de connexion de la première "Amérique" est de matrix.def

0 1294 -952

Ce sera. Par conséquent, le coût cumulé est de 4698-952 = 3746. Ensuite, regardons "l'Allemagne". Les ID de contexte gauche et droit sont 1294 et le coût de connexion est -6430, ce qui est assez faible. (Il est rare que les noms de pays continuent d'affilée ...) Le coût cumulé était de (3746 + 2543) -6430 = -141 et 2543-6430 = -3887 en lui-même, conformément au calcul. De plus, bien qu'elle ne soit pas sortie, la vérification finale est effectuée car EOS a également un ID de contexte. Le coût de connexion de l'ID de contexte 1303 → 0 est de 5 et le coût cumulé de l'ID de contexte 1288 → 0 est de -919. En comparant les coûts cumulés, 886 et 1695 sont les coûts les plus bas, donc le mystère que j'ai mentionné plus tôt a été résolu.

référence

Comprendre les coûts de MeCab. Calcul des coûts MeCab appris à Nippon Television Tokyo Découvrez les coulisses de l'analyse morphologique japonaise! Comment MeCab analyse morphologiquement

Recommended Posts

À propos du calcul des coûts de MeCab
Calcul de similitude par MinHash
À propos du calcul des coûts de MeCab
À propos de la précision de la méthode de calcul du rapport de circonférence d'Archimède
À propos de tout numpy
À propos de MultiIndex of Pandas
À propos de la variable du chainer
À propos de max_iter de LogisticRegression () de scikit-learn
À propos du chemin japonais de pyminizip
À propos du support japonais de cometchat
À propos de divers encodages de Python 3
À propos de tout numpy (2e)
Calcul de similitude par MinHash
À propos de la fraction approximative du rapport de circonférence
À propos des composants de Luigi
À propos de la sortie HOG de Scikit-Image
À propos des fonctionnalités de Python
À propos de la gestion des données d'Anvil-App-Server
Calcul sans erreur avec le big.Float de Golang
Calcul de la fidélité des clients dans les séries chronologiques
Calcul du vecteur normal par convolution
Apprentissage profond à partir de zéro (calcul des coûts)
Calcul du nombre d'associations de Klamer
Calcul de la classe auto-fabriquée et de la classe existante
À propos de la valeur de retour de l'histogramme.
À propos du type de base de Go
À propos du croisement circulaire d'algorithmes génétiques
[Python] Calcul du coefficient kappa (k)
À propos du comportement de yield_per de SqlAlchemy
À propos de l'erreur d'importation de PyQt5.QtWidgets (Anaconda)
À propos de la taille des points dans matplotlib
À propos du traitement des demi-teintes couleur des images
À propos de la liste de base des bases de Python
Calcul du coefficient de corrélation de rang de Spearman
Projet Euler 9 Conservation des résultats des calculs