¿Cómo debo usar las incrustaciones de BERT para la agrupación en clústeres (en lugar de ajustar el modelo BERT para una tarea supervisada)?
En primer lugar, quiero decir que estoy haciendo esta pregunta porque estoy interesado en usar incrustaciones de BERT como características de documentos para agrupar. Estoy usando Transformers de la biblioteca Hugging Face. Estaba pensando en promediar todas las incrustaciones de Word Piece para cada documento para que cada documento tenga un vector único. Luego usaría esos vectores para agrupar. No dude en comentar si cree que esto no es una buena idea, o si me falta algo o no entiendo algo.
El problema que veo con esto es que solo está utilizando los primeros tokens N que se especifican max_length
en la biblioteca Hugging Face. ¿Qué pasa si los primeros N tokens no son la mejor representación para ese documento? ¿No sería mejor elegir N tokens al azar, o mejor aún elegir N tokens al azar 10 veces?
Además, me doy cuenta de que usar el tokenizador de WordPiece es un reemplazo de la lematización, por lo que se supone que el preprocesamiento estándar de NLP es más simple. Sin embargo, dado que ya solo estamos usando los primeros N tokens, y si no nos deshacemos de las palabras vacías, las palabras vacías inútiles estarán en los primeros N tokens. Por lo que he visto, en los ejemplos de Hugging Face, nadie realmente hace más preprocesamiento antes de la tokenización.
[Ver ejemplo a continuación del tokenizado (de Hugging Face), primeros 64 tokens de un documento]
Por lo tanto, estoy haciendo algunas preguntas aquí (siéntase libre de responder solo una o proporcionar referencias a artículos o recursos que pueda leer):
- ¿Por qué se eligen los primeros N tokens, en lugar de al azar? 1a) ¿hay algo por ahí que elija aleatoriamente N tokens quizás varias veces?
- Similar a la pregunta 1, ¿hay alguna mejor manera de elegir tokens? ¿Quizás usar TF-IDF en los tokens para al menos descartar ciertos tokens inútiles?
- ¿La gente generalmente usa más preprocesamiento antes de usar el tokenizador de Word Piece?
- ¿En qué medida afecta la elección del
max_length
rendimiento? - ¿Por qué hay un límite de longitud máxima de 512 en la biblioteca Hugging Face? ¿Por qué no utilizar la longitud del documento más largo?
- ¿Es una buena idea promediar las incrustaciones de WordPiece para obtener una matriz (si desea agrupar)?
- ¿Es una buena idea utilizar incrustaciones de BERT para obtener funciones de documentos que se pueden agrupar para encontrar grupos de documentos similares? ¿O hay alguna otra forma que sea mejor?
original: 'Trump tries to smooth things over with GOP insiders. Hollywood, Florida (CNN) Donald Trump\'s new delegate guru told Republican Party insiders at a posh resort here on Thursday that the billionaire front-runner is recalibrating the part "that he\'s been playing" and is ready
tokenizado:
['[CLS]',
'trump',
'tries',
'to',
'smooth',
'things',
'over',
'with',
'go',
'##p',
'insider',
'##s',
'.',
'hollywood',
',',
'florida',
'(',
'cnn',
')',
'donald',
'trump',
"'",
's',
'new',
'delegate',
'guru',
'told',
'republican',
'party',
'insider',
'##s',
'at',
'a',
'po',
'##sh',
'resort',
'here',
'on',
'thursday',
'that',
'the',
'billionaire',
'front',
'-',
'runner',
'is',
'rec',
'##ali',
'##bra',
'##ting',
'the',
'part',
'"',
'that',
'he',
"'",
's',
'been',
'playing',
'"',
'and',
'is',
'ready',
'[SEP]']
Respuestas
Aquí están las respuestas:
- En el modelado de secuencia, esperamos que una oración tenga una secuencia ordenada, por lo que no podemos tomar palabras al azar (a diferencia de la bolsa de palabras, donde solo nos preocupan las palabras y no realmente el orden). Por ejemplo: En una bolsa de palabras: "comí helado" y "helado comí yo" son lo mismo, mientras que esto no es cierto para los modelos que tratan la oración completa como una secuencia ordenada. Por lo tanto, no puede elegir N palabras al azar en un orden aleatorio.
- La elección de tokens depende del modelo. Siempre puede preprocesar para eliminar palabras vacías y otros contenidos como símbolos, números, etc. si actúa como ruido que la información.
- Me gustaría aclarar que la lematización y la tokenización de piezas de palabras no son lo mismo. Por ejemplo, en la lematización "tocar" y "jugar" se lematizan como "jugar". Pero en el caso de la tokenización de piezas de palabras, es probable que se divida en "play" + "## ing" o "play" + "ed", según el vocabulario. Por lo tanto, se conserva más información.
max_length
debe elegirse de manera óptima de modo que la mayoría de las oraciones se consideren en su totalidad. (es decir, la mayoría de las oraciones deben ser más cortas quemax_length
después de la tokenización). Hay algunos modelos que consideran la longitud completa de la secuencia. Ejemplo: Universal Sentence Encoder (USE), Transformer-XL, etc. Sin embargo, tenga en cuenta que también puede usar un tamaño de lote más alto con un tamaño más pequeñomax_length
, lo que hace que el entrenamiento / ajuste sea más rápido y, en ocasiones, produzca mejores resultados.- El modelo preentrenado se entrena con
MAX_LEN
512. Es una limitación del modelo. - Específicamente para BERT, como afirma el documento, para la clasificación, las incrustaciones de
[CLS]
token son suficientes. Dado que, en su modelo basado en la atención, el[CLS]
token capturaría la composición de la oración completa, por lo tanto suficiente. Sin embargo, también puede promediar las incorporaciones de todos los tokens. He probado ambos, en la mayoría de mis trabajos, el promedio de todos los tokens de piezas de palabras ha dado un rendimiento más alto. Además, algunos trabajos incluso le sugieren que tome un promedio de incrustaciones de las últimas 4 capas. Es simplemente una elección de diseño. - El uso de incrustaciones de oraciones generalmente está bien. Pero, debe verificar con la literatura. Siempre puede haber una mejor técnica. Además, hay modelos específicos para incrustaciones de oraciones (USE es uno de esos modelos), puede consultarlos.
Dado que muchas de sus preguntas ya fueron respondidas, es posible que solo comparta mi experiencia personal con su última pregunta:
7) ¿Es una buena idea utilizar incrustaciones de BERT para obtener funciones de documentos que se pueden agrupar para encontrar grupos de documentos similares? ¿O hay alguna otra forma que sea mejor?
Creo que una buena idea sería comenzar con enfoques más simples. Especialmente cuando se trata de documentos largos que se basan en vectorizadores que tf-idf
pueden conducir a mejores resultados al tiempo que tienen las ventajas de una menor complejidad y, por lo general, más interpretabilidad.
Acabo de terminar un ejercicio de agrupación para documentos más largos y pasé por un proceso de pensamiento y experimentación similar. Finalmente, obtuve los mejores resultados con las tf-idf
funciones. La tubería que utilicé consistió en:
- Procesar datos (eliminación de palabras vacías, lematización, etc.)
- Ajuste el vectorizador tf-idf (alternativamente, puede intentarlo también
doc2vec
). - Ejecute algún tipo de algoritmo de reducción de dimensión (PCA en mi caso).
- Agrupación (K-medias): evalúe la cantidad óptima de agrupaciones.
Si está ansioso por utilizar BERT con documentos largos en su tarea posterior, puede considerar estos dos enfoques principales:
Métodos de truncamiento
- solo cabeza (primeros 512 tokens)
- solo cola (últimos 512 tokens
- cabeza + cola
Dependiendo de su dominio, por ejemplo, si cada documento se concluye con un resumen ejecutivo, solo la cola puede mejorar los resultados.
Métodos jerárquicos
- significa poner en común
- agrupación máxima
Como se indica aquí, los métodos de truncamiento se aplican a la entrada del modelo BERT (los tokens), mientras que los métodos jerárquicos se aplican a las salidas del modelo Bert (la incrustación).