Manejo de palabras desconocidas en tareas de modelado de lenguaje usando LSTM

11

Para una tarea de procesamiento de lenguaje natural (PNL), a menudo se usan vectores word2vec como incrustación de las palabras. Sin embargo, puede haber muchas palabras desconocidas que no son capturadas por los vectores word2vec simplemente porque estas palabras no se ven con la suficiente frecuencia en los datos de entrenamiento (muchas implementaciones usan un recuento mínimo antes de agregar una palabra al vocabulario). Este puede ser especialmente el caso con el texto de, por ejemplo, Twitter, donde las palabras a menudo están mal escritas.

¿Cómo deben manejarse esas palabras desconocidas cuando se modela una tarea de PNL como la predicción de sentimientos utilizando una red a largo plazo (LSTM)? Veo dos opciones:

  1. Agregar un token de 'palabra desconocida' al diccionario word2vec.
  2. Eliminar estas palabras desconocidas de modo que el LSTM ni siquiera sepa que la palabra estaba en la oración.

¿Cuál es la forma preferida de manejar estas palabras?

pir
fuente
2
He respondido una pregunta similar anteriormente; Si bien la pregunta no era específica para los LSTM, parece que la mayor parte de lo que escribí allí sería igual de aplicable: stats.stackexchange.com/questions/163005/…
fnl

Respuestas:

11

La opción 1 (agregar un token de palabra desconocida) es cómo la mayoría de las personas resuelve este problema.

La opción 2 (eliminar las palabras desconocidas) es una mala idea porque transforma la oración de una manera que no es coherente con la forma en que se entrenó el LSTM.

Otra opción que se ha desarrollado recientemente es crear una palabra incrustada sobre la marcha para cada palabra utilizando una red neuronal convolucional o un LSTM separado que procesa los caracteres de cada palabra uno por uno. Con esta técnica, su modelo nunca encontrará una palabra para la que no pueda crear una incrustación.

Aaron
fuente
Hola Aaron, ¿Puedes darme un par de consejos (documentos o códigos) que usen tu tercera opción?
Profecías
arxiv.org/abs/1508.02096 Aquí hay uno
Aaron
código: github.com/wlin12/JNN
chentc
1
Uno más reciente (EMNLP 2017) arxiv.org/abs/1707.06961 con el código github.com/yuvalpinter/Mimick
jayelm
-1

El mapeo de palabras raras simplemente significa que eliminamos esas palabras y las reemplazamos con el token en los datos de entrenamiento. Por lo tanto, nuestro modelo no conoce palabras raras. Es una forma cruda de suavizado porque el modelo supone que el token nunca ocurrirá realmente en datos reales o, mejor aún, ignora estos n-gramos por completo.

Constantina
fuente
44
Por favor agregue sustancialmente a esta respuesta. Por ejemplo, respalde la afirmación de que "agregar un token de palabra desconocida es la mejor opción".
Jim