Il est devenu courant de peaufiner et d'utiliser BERT dans les tâches de traitement du langage naturel. On pense qu'il y aura un nombre croissant de scènes dans lesquelles nous voulons améliorer autant que possible la précision lors de la réalisation de compétitions telles que Kaggle ou de projets avec des exigences de précision strictes. Par conséquent, nous résumerons les méthodes d'amélioration de la précision. Une tâche de classification est considérée comme une tâche.
Vous pouvez saisir jusqu'à 512 mots dans le BERT appris. Par conséquent, des mesures spéciales sont nécessaires lors de l'utilisation de texte de 512 mots ou plus. Vérifiez-le car les changements dans la méthode de traitement contribuent souvent à améliorer la précision.
À titre d'exemple, pensez à obtenir 6 mots du texte suivant (avec 1 mot comme signe de ponctuation) ʻI / est / cat / et / est /. / il n'y a pas encore de nom /. ''
/ et / est /. / Nom / est /
pas encore / pas /. ''De [Comment affiner BERT pour la classification de texte] how_to_bert. Obtenez des mots du début et de la fin. La figure ci-dessus montre comment utiliser les 3 premiers mots et les 3 derniers mots. C'est une méthode facile à mettre en œuvre, très performante et souvent utilisée dans Kaggle. Le nombre de mots à prendre avant et après est au cas par cas.
chat / et / est /. / Nom / est
/ pas encore /.
I / is / cat / et / ʻis /. / Nom / est / pas encore / pas `/.Obtenez des mots en succession de n'importe où. Vous pouvez vous attendre à un effet comme Augmentation en changeant l'emplacement d'acquisition pour chaque Epoque. Cependant, elle ne semble pas aussi précise que la méthode Head-Tail. Que diriez-vous de le combiner avec TTA (Test Time Augmentation)?
/ Nom / est / pas encore / pas /. Je / est / cat /
de / est /. / Nom / est / Pas encore / Pas /. Je / est / cat / et / est /.
/ nom / est / pas encore / pas /. ''Il s'agit d'une technique souvent utilisée dans l'ensemble de données de questions naturelles de Google, comme A BERT Baseline for the Natural Questions. La figure ci-dessus montre le cas où les mots sont décalés de 3 mots. Sa force est de pouvoir couvrir complètement les données. L'inconvénient est que si les données contiennent un grand nombre de mots, les données d'apprentissage seront trop volumineuses. Il est utilisé lorsqu'il est important d'utiliser tous les mots dans les tâches d'assurance qualité, etc., mais il peut également contribuer à améliorer la précision des tâches de classification.
Pensez à saisir une question et une réponse et un titre tel que:
Titre: À propos du président Trump Question: D'où vient le président Trump? Réponse: New York.
«[CLS] À propos du président Trump [NEW_SEP] D'où vient le président Trump? [SEP] New York. [SEP.] `
De Google QUEST Q & A Labelling 19th solution. S'il y a deux phrases dans BERT, vous pouvez les séparer avec la balise [SEP]
, mais elle ne supporte pas plus de phrases. Par conséquent, en définissant un jeton avec un nom approprié et en l'utilisant comme séparateur, tel que [NEW_SEP]
, vous pouvez exprimer des sauts de phrase. De tels jetons peuvent être ajoutés en utilisant tokenizer.add_special_tokens
. De plus, dans le cas de la version anglaise de BERT, il y a des jetons inutilisés de [non utilisé0] à [non utilisé993]
, donc vous pouvez également l'utiliser.
«[CLS] [CATEGORY_0] Où est le lieu de naissance du président Trump? [SEP] New York. [SEP.] `
Jigsaw Unintended Bias in Toxicity Classification 1ST PLACE SOLUTION etc. Disons que vous résolvez la tâche de déterminer si la phrase ci-dessus est une bonne paire question-réponse. Les journaux de questions et réponses sont souvent catégorisés, vous pouvez donc les ajouter à la quantité de fonctionnalités. Dans ce cas, vous pouvez améliorer la précision en définissant de nouveaux jetons «[CATEGORY_0] à [CATEGORY_n]» (n est le nombre de catégories) et en les incorporant dans le texte comme décrit ci-dessus.
Il est également efficace d'effectuer la catégorisation en tant que sous-tâche en utilisant le vecteur [CATEGORY_0]
comme quantité de caractéristiques.
Le modèle régulier de BERT se compose de 12 couches de sous-modules. Lors du réglage fin de BERT, l'implémentation par défaut est de présenter le vecteur au début [CLS]
de la sortie de la dernière couche. C'est souvent suffisant pour la précision, mais vous pouvez vous attendre à une légère amélioration de la précision en utilisant d'autres quantités de caractéristiques.
De [Comment affiner BERT pour la classification de texte] how_to_bert. Nous visons à améliorer la précision de la tâche de réglage fin en combinant les quatre vecteurs «[CLS]» du bas des 12 couches. Le vecteur est finalement transformé en un vecteur de 768 dimensions (tenseur du premier ordre) en utilisant le pooling moyen, le pooling max, le concat, etc.
Identifier les trolls russes sur Reddit avec Deep Learning et BERT Word Embeddings. Entrer le vecteur de tous les mots dans le CNN, pas seulement le vecteur de [CLS]
, est l'une des méthodes les plus puissantes. Calculez la convolution unidimensionnelle pour jusqu'à 512 longueurs de séquence, comme indiqué. Après avoir calculé la convolution, le pooling max ou le pooling moyen peuvent extraire les entités avec le nombre de dimensions et le nombre de filtres, alors entrez-les dans Dense. Comparé à Attention, CNN peut regrouper les caractéristiques des mots environnants, vous pouvez donc améliorer la précision en les combinant. Il est également efficace de se combiner avec LSTM ainsi qu'avec CNN.
model_params = list(model.named_parameters())
#Correction du poids du BERT
params = [p for n, p in model_params if not "bert" in n]
optimizer = AdamW(params , lr=2e-5)
#Relâchez la fixation du poids de BERT
params = [p for n, p in model_params if "bert" in n]
optimizer.add_param_group({'params': params })
De Google QUEST Q & A Labelling 19th solution. Semblable aux modèles formés basés sur des images, BERT peut améliorer la précision en fixant les poids et en entraînant uniquement les couches dépendant des tâches. Dans la 19e solution, seule la première époque est fixée et toutes les couches sont apprises plus tard. Ci-dessus, nous avons décrit le code qui corrige le poids BERT et commence l'apprentissage, et le code qui peut être utilisé pour libérer la correction du milieu et redémarrer l'apprentissage.
model_params = list(model.named_parameters())
bert_params = [p for n, p in model_params if "bert" in n]
other_params = [p for n, p in model_params if not "bert" in n]
params = [
{'params': bert_params, 'lr': params.lr},
{'params': other_params, 'lr': params.lr * 500}
]
À partir de Google QUEST Q & A Labelling 1st place solution. L'adoption de différents taux d'apprentissage est aussi efficace que le modèle entraîné du système d'image. Dans la première solution, les couches spécifiques aux tâches sont apprises à un taux d'apprentissage 500 fois plus élevé que d'habitude. Le code à ce moment-là est indiqué ci-dessus.
Nous avons introduit des techniques qui peuvent améliorer la précision des tâches de classification BERT. Cependant, je ne pouvais pas montrer à quel point la précision s'améliorerait, alors j'aimerais la comparer avec un ensemble de données approprié. En plus des méthodes énumérées ci-dessus, il existe encore d'autres méthodes pour améliorer la précision, nous allons donc continuer à enquêter.
Recommended Posts