Obsługa nieznanych słów w zadaniach modelowania języka za pomocą LSTM

11

W przypadku zadania przetwarzania języka naturalnego (NLP) często wykorzystuje się wektory word2vec jako osadzenie słów. Jednak może istnieć wiele nieznanych słów, które nie są przechwytywane przez wektory word2vec po prostu dlatego, że słowa te nie są wystarczająco często widoczne w danych szkoleniowych (wiele implementacji używa minimalnej liczby przed dodaniem słowa do słownika). Może tak być szczególnie w przypadku tekstu z np. Twittera, gdzie słowa są często błędnie napisane.

Jak należy traktować takie nieznane słowa podczas modelowania zadania NLP, takiego jak przewidywanie nastrojów przy użyciu sieci krótkoterminowej (LSTM)? Widzę dwie opcje:

  1. Dodawanie tokenu „nieznane słowo” do słownika word2vec.
  2. Usunięcie tych nieznanych słów w taki sposób, że LSTM nawet nie wie, że słowo było w zdaniu.

Jaki jest preferowany sposób radzenia sobie z tymi słowami?

pir
źródło
2
Odpowiedziałem wcześniej na podobne pytanie; chociaż pytanie nie było specyficzne dla LSTM, wydaje się, że większość tego, co tam napisałem, byłaby równie odpowiednia: stats.stackexchange.com/questions/163005/...
fnl

Odpowiedzi:

12

Opcja 1 (dodanie nieznanego tokena słów) polega na tym, jak większość ludzi rozwiązuje ten problem.

Opcja 2 (usunięcie nieznanych słów) jest złym pomysłem, ponieważ przekształca zdanie w sposób niezgodny ze szkoleniem LSTM.

Inną niedawno opracowaną opcją jest utworzenie słowa osadzanego w locie dla każdego słowa za pomocą splotowej sieci neuronowej lub osobnej LSTM, która przetwarza znaki każdego słowa pojedynczo. Korzystając z tej techniki, Twój model nigdy nie spotka słowa, dla którego nie może utworzyć osadzenia.

Aaron
źródło
Cześć Aaron, Czy możesz podać mi kilka wskazówek (dokumentów lub kodu), które wykorzystają Twoją trzecią opcję?
Przepowiednie
arxiv.org/abs/1508.02096 Oto jeden
Aaron
kod: github.com/wlin12/JNN
chentc
1
Jeszcze jeden (EMNLP 2017) arxiv.org/abs/1707.06961 z kodem github.com/yuvalpinter/Mimick
jayelm
-1

Odwzorowanie rzadkich słów na po prostu oznacza, że ​​usuwamy te słowa i zastępujemy je tokenem w danych treningowych. Dlatego nasz model nie zna żadnych rzadkich słów. Jest to prymitywna forma wygładzania, ponieważ model zakłada, że ​​token nigdy nie wystąpi w rzeczywistych danych lub lepiej, ale ignoruje te n-gramy całkowicie.

Constantine
źródło
4
Proszę znacznie dodać do tej odpowiedzi. Np. Uzasadnij twierdzenie, że „dodanie nieznanego tokena słowowego jest najlepszą opcją”.
Jim