[JAVA] Suite - Publication d'une API Web qui peut utiliser des morceaux de phrase comme l'analyse morphologique

introduction

C'est une API Web qui permet d'utiliser SentencePiece publiée l'autre jour comme une analyse morphologique, mais j'ai reçu divers conseils de M. Kudo, le créateur de SentencePiece. Dernier message avait des implémentations inappropriées, alors je l'ai corrigé. Vous pouvez l'utiliser gratuitement depuis ici.

API

Exemple de code

Article associé

Ce que j'ai fait

Seule la différence avec l'heure précédente sera décrite.

Premièrement, il existe plusieurs modes de calcul du modèle dans Phrase Piece. Cette fois, j'ai essayé Unigram et BPE.

Mode Unigramme

J'ai reçu les commentaires suivants de M. Kudo.

Avec unigramme, multipliez la vraisemblance logarithmique de la table de vocabulaire par -1 pour en faire un coût entier, et si vous désactivez le traitement de texte inconnu, il en sera de même en principe.

Alors j'ai fait exactement cela. Pour vous dire exactement ce que j'ai fait, j'ai multiplié la probabilité logarithmique de la table de vocabulaire par -100 pour l'arrondir à un coût entier et l'ai ajoutée au dictionnaire kuromoji / mecab. Pour les mots inconnus, j'ai décidé d'exécuter kuromoji en mode étendu. Le coût des mots des mots inconnus était beaucoup plus élevé que le tableau de vocabulaire SentencePiece, il est donc essentiellement analysé morphologiquement dans le tableau de vocabulaire SentencePiece (probablement). Je l'ai exécuté en mode étendu pour séparer les caractères lorsque des mots inconnus apparaissent.

Mode BPE

J'ai également reçu un commentaire de M. Kudo.

Le fractionnement en BPE n'est pas trop difficile si vous avez une implémentation naïve. Essayez de concaténer les deux caractères et s'ils sont dans le dictionnaire, remplacez les deux caractères par de nouveaux symboles. S'il y a plusieurs emplacements à remplacer, remplacez-les par ordre de priorité (celui enregistré en premier a la priorité). https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E5%AF%BE%E7%AC%A6%E5%8F%B7%E5%8C%96 Concaténez deux caractères consécutifs et recherchez le dictionnaire. S'il est trouvé, les deux caractères sont connectés et celui qui est connecté est considéré comme un caractère. Répétez jusqu'à ce que vous ne puissiez plus consulter le dictionnaire. L'implémentation naïve scanne deux caractères consécutifs à chaque fois, donc c'est O (n ^ 2), mais avec le tas c'est O (n log n).

Je ne savais pas comment utiliser le tas, alors je l'ai fait honnêtement. "Le tableau de vocabulaire est considéré comme une règle, et les règles sont appliquées dans l'ordre du haut." Par exemple, supposons que la règle soit définie comme suit:

Ai
haut
Ah

Si l'entrée est "aiueo", alors la sortie sera "aiueo". Il peut s'agir d'une surestimation, mais dans le cas d'une autre règle illustrée ci-dessous,

Ai
Ah
haut

La sortie sera "Aieo".

Alors, comment le résultat a-t-il changé?

C'était presque la même chose.

Dans l'exemple précédent, le résultat était le même qu'il s'agisse d'Unigram ou de BPE. J'ai comparé les tableaux de vocabulaire d'Unigram et de BPE, mais ils sont assez proches. Unigram a souvent beaucoup de données détaillées, il y a donc une différence avec BPE.

Cependant, je pense que j'ai pu l'implémenter avec précision (je pense), et je pense que vous pouvez l'utiliser en toute confiance.

en conclusion

En passant, le mode Unigram économise plus de mémoire que le mode BPE, j'ai donc mis le texte complet de Wikipédia en apprentissage. En conséquence, j'ai continué à calculer pendant 12 jours. .. .. La facture d'électricité est ... C'est pourquoi vous pouvez utiliser gratuitement les résultats des calculs pendant 12 jours dans Apitore, veuillez donc les utiliser.

Recommended Posts

Suite - Publication d'une API Web qui peut utiliser des morceaux de phrase comme l'analyse morphologique
Sortie d'une API qui peut utiliser Phrase Piece comme l'analyse morphologique
Utiliser l'analyse morphologique japonaise "kuromoji"