Manipulando Palavras Desconhecidas em Tarefas de Modelagem de Linguagem Usando LSTM

11

Para uma tarefa de processamento de linguagem natural (PNL), geralmente se usa vetores word2vec como uma incorporação para as palavras. No entanto, pode haver muitas palavras desconhecidas que não são capturadas pelos vetores word2vec simplesmente porque essas palavras não são vistas com bastante frequência nos dados de treinamento (muitas implementações usam uma contagem mínima antes de adicionar uma palavra ao vocabulário). Este pode ser especialmente o caso de textos do, por exemplo, Twitter, onde as palavras são frequentemente incorretas.

Como essas palavras desconhecidas devem ser tratadas ao modelar uma tarefa de PNL, como previsão de sentimentos, usando uma rede de longo prazo (LSTM)? Eu vejo duas opções:

  1. Adicionando um token de 'palavra desconhecida' ao dicionário word2vec.
  2. Excluindo essas palavras desconhecidas, de modo que o LSTM nem saiba que a palavra estava na frase.

Qual é a maneira preferida de lidar com essas palavras?

pir
fonte
2
Eu já respondi uma pergunta semelhante anteriormente; embora a pergunta não fosse específica para LSTMs, parece que a maior parte do que escrevi seria da mesma maneira que se aplica: stats.stackexchange.com/questions/163005/…
fnl

Respostas:

11

A opção 1 (adicionando um token de palavra desconhecida) é como a maioria das pessoas resolve esse problema.

A opção 2 (excluir as palavras desconhecidas) é uma péssima idéia, pois transforma a sentença de uma maneira que não é consistente com a forma como o LSTM foi treinado.

Outra opção que foi desenvolvida recentemente é criar uma palavra incorporada rapidamente para cada palavra usando uma rede neural convolucional ou um LSTM separado que processa os caracteres de cada palavra, um de cada vez. Usando essa técnica, seu modelo nunca encontrará uma palavra para a qual não possa criar uma incorporação.

Aaron
fonte
Oi Aaron, você pode me dar algumas dicas (documentos ou código) que usam sua terceira opção?
Profecias
arxiv.org/abs/1508.02096 Aqui está um
Aaron
código: github.com/wlin12/JNN
chentc
11
Um mais recente (EMNLP 2017) arxiv.org/abs/1707.06961 com o código github.com/yuvalpinter/Mimick
jayelm
-1

Mapear palavras raras para simplesmente significa que as excluímos e as substituímos pelo token nos dados de treinamento. Assim, nosso modelo não conhece nenhuma palavra rara. É uma forma bruta de suavização, porque o modelo pressupõe que o token nunca ocorrerá realmente em dados reais ou, melhor ainda, ignora completamente esses n-gramas.

constantino
fonte
4
Por favor, adicione substancialmente a esta resposta. Por exemplo, faça backup da alegação de que "adicionar um token de palavra desconhecida é a melhor opção".
Jim