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:
- Dodawanie tokenu „nieznane słowo” do słownika word2vec.
- 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?
Odpowiedzi:
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.
źródło
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.
źródło