Problem: przetwarzamy tekst, mamy bardzo dużo unikalnych słów. Tablica embeddingów tych słów będzie bardzo duża - zastanawiamy się w jaki sposób zmniejszyć jej wymiarowość, aby nie przechowywać mniejszą ilość danych.
Pomysł wzięty z Generative Sequential Recommendation with GPTRec, Figure 1. Pomysł opiera się na tym, że zapisujemy każde słowo nie jako unikalny embedding, ale jako ciąg kilku embeddingów. Liczba embeddingów jest teraz znacznie mniejsza, a każde słowo zapisywane jest jako ciąg kilka z nich.
W jakis sposób jest to zrealizowane? Zakłądamy, że mamy jakąś macierz interakcji user-słowo (albo user-item), np. binarną. Robimy rozkład SVD tej macierzy dostając embeddingi itemów/słów. Takie embeddingi normalizujemy i dyskretyzujemy, dostając ustaloną liczbę bucketów w każdej kolumnie wynikowej tablicy embeddingów. No więc każda kolumna to jest jeden pod-item, którym będzie reprezentowane nasze słowo. Słowo będzie składać się z tylu pod-słów ile jest kolumn w wynikowej macierzy SVD.