18
votes

Comment utiliser Bert pour la classification de texte long?

Nous savons que bert a une limite de longueur maximale de jetons = 512, donc si un acticle a une longueur beaucoup plus grande que 512, comme 10000 jetons dans le texte. Comment utiliser bert?


0 commentaires

6 Réponses :


19
votes

Vous avez essentiellement trois options:

  1. Vous coupez les textes les plus longs et n'utilisez que les 512 premiers jetons. L'implémentation originale de BERT (et probablement les autres également) tronque automatiquement les séquences plus longues. Dans la plupart des cas, cette option est suffisante.
  2. Vous pouvez diviser votre texte en plusieurs sous-textes, classer chacun d'eux et regrouper les résultats (choisissez la classe qui a été prédite pour la plupart des sous-textes par exemple). Cette option est évidemment plus chère.
  3. Vous pouvez même envoyer le jeton de sortie pour chaque sous-texte (comme dans l'option 2) à un autre réseau (mais vous ne pourrez pas régler avec précision) comme décrit dans cette discussion .

Je suggérerais d'essayer l'option 1, et seulement si ce n'est pas assez bon pour considérer les autres options.


3 commentaires

Je prévois d'utiliser bert comme encodeur de paragraphe, puis de passer à lstm, est-ce que cela fonctionne?


stackoverflow.com/questions/58703885/...


Dans mon expérience, j'ai également dû analyser de grands paragraphes et ce qui a abouti le mieux était en effet de ne considérer que les 512 derniers jetons, car ils étaient les plus informatifs (généralement conclu le sujet). Mais je pense que cela dépend fortement du domaine et du texte en question. De plus, l'option d'envoi présentée ici ne fonctionnait pas aussi bien pour moi, car je gérais le texte conversationnel et les phrases individuelles en disaient peu sur la classification.



10
votes

Cet article a comparé quelques stratégies différentes: Comment affiner le BERT pour la classification de texte? . Sur l'ensemble de données de critique de film IMDb, ils ont en fait constaté que couper le milieu du texte (plutôt que de tronquer le début ou la fin) fonctionnait le mieux! Il a même surpassé des approches «hiérarchiques» plus complexes consistant à diviser l'article en morceaux, puis à recombiner les résultats.

Comme autre anecdote, j'ai appliqué le BERT à l'ensemble de données Wikipedia Personal Attacks ici , et j'ai trouvé que la simple troncature fonctionnait suffisamment bien pour que je n'étais pas motivé pour essayer d'autres approches :)


1 commentaires

le lien avec le papier semble rompu. Pourriez-vous nous fournir un lien de travail ou le titre / les auteurs de l'article?



6
votes

En plus de segmenter les données et de les transmettre à BERT, je vérifie les nouvelles approches suivantes.

Il y a de nouvelles recherches pour l'analyse de longs documents. Comme vous l'avez demandé pour Bert, un transformateur pré-entraîné similaire 'Longform' a récemment été mis à disposition par ALLEN NLP ( https://arxiv.org/abs/2004.05150 ). Consultez ce lien pour le papier.

La section consacrée aux travaux mentionne également certains travaux antérieurs sur de longues séquences. Google eux aussi. Je suggère au moins de passer par Transformer XL ( https://arxiv.org/abs/1901.02860 ). Pour autant que je sache, c'était l'un des modèles initiaux pour les longues séquences, il serait donc bon de l'utiliser comme base avant de passer à «Longformers».


0 commentaires

0
votes

Il existe une approche utilisée dans l'article Defending Against Neural Fake News ( https://arxiv.org/abs/1905.12616 )

Leur modèle génératif produisait des sorties de 1024 jetons et ils voulaient utiliser BERT pour les générations homme vs machine. Ils ont étendu la longueur de séquence utilisée par BERT simplement en initialisant 512 imbrications supplémentaires et en les entraînant pendant qu'ils affinaient BERT sur leur ensemble de données.


0 commentaires

0
votes

Il existe deux méthodes principales:

  • Concaténation du BERT `` court '' (qui se compose de 512 caractères maximum)
  • Construire un vrai long BERT (CogLTX, Blockwise BERT, Longformer, Big Bird)

J'ai repris quelques articles typiques de BERT pour un texte long dans ce post: https://lethienhoablog.wordpress.com/2020/11/19/paper-dissected-and-recap-4-which-bert-for-long-text/

Vous pouvez y avoir un aperçu de toutes les méthodes.


0 commentaires

0
votes

Vous pouvez tirer parti de la bibliothèque HuggingFace Transformers qui comprend la liste suivante de Transformers qui fonctionnent avec des textes longs (plus de 512 jetons):

  • Reformer : qui combine la capacité de modélisation d'un Transformer avec une architecture qui peut être exécutée efficacement sur de longues séquences.
  • Longformer : avec un mécanisme d'attention qui évolue linéairement avec la longueur de la séquence, ce qui facilite le traitement de documents de milliers de jetons ou plus.

Huit autres modèles de transformateurs efficaces récemment proposés incluent Sparse Transformers (Child et al., 2019), Linformer (Wang et al., 2020), Sinkhorn Transformers (Tay et al., 2020b), Performers (Choromanski et al., 2020b), Synthétiseurs (Tay et al., 2020a), transformateurs linéaires (Katharopoulos et al., 2020) et BigBird (Zaheeret al., 2020).

L' article des auteurs de Google Research et DeepMind tente de faire une comparaison entre ces Transformers sur la base de «métriques agrégées» Long-Range Arena:

Performances, vitesse et empreinte mémoire des transformateurs

Ils suggèrent également que les Longformers ont de meilleures performances que Reformer en ce qui concerne la tâche de classification .


1 commentaires

J'ajouterai que Longformer (je ne sais pas pour les autres) a toujours une limitation de 4096 jetons