W tej sekcji omawiamy kilka sposobów uzyskiwania wektorów dystrybucyjnych oraz sposoby przekształcania statycznych wektorów dystrybucyjnych w kontekstowe wektory dystrybucyjne.
Techniki redukcji liczby wymiarów
Istnieje wiele technik matematycznych na przedstawienie ważnych struktur przestrzeni wielowymiarowej w przestrzeni o mniejszej liczbie wymiarów. Teoretycznie do utworzenia wektora dystrybucyjnego na potrzeby systemu uczenia maszynowego można użyć dowolnej z nich.
Na przykład do tworzenia wektorów dystrybucyjnych słowa wykorzystano analizę głównych składowych (PCA). Dla danego zbioru instancji, np. wektorów worka słów, analiza PCA próbuje znaleźć wysoko skorelowane wymiary, które można zredukować do 1 wymiaru.
Trenowanie wektora dystrybucyjnego jako części sieci neuronowej
Wektor dystrybucyjny możesz utworzyć podczas trenowania sieci neuronowej pod kątem zadania docelowego. Takie podejście pozwala uzyskać wektor dystrybucyjny świetnie dostosowany do konkretnego systemu, jednak może to wymagać więcej czasu niż osobne trenowanie wektora dystrybucyjnego.
Ogólnie mówiąc, w sieci neuronowej możesz utworzyć ukrytą warstwę wymiaru d, która jest wyznaczona jako warstwa wektora dystrybucyjnego, gdzie d oznacza zarówno liczbę węzłów w ukrytej warstwie, jak i liczbę wymiarów w przestrzeni wektora dystrybucyjnego. Tę warstwę wektora dystrybucyjnego można połączyć z innymi cechami i ukrytymi warstwami. Tak jak w przypadku każdej głębokiej sieci neuronowej, parametry zostaną zoptymalizowane podczas trenowania, co pozwoli zminimalizować straty w węzłach w warstwie wyjściowej sieci.
Wróćmy do przykładu z rekomendowaniem potraw. Aplikacja ma przewidywać, jakie nowe potrawy będą smakować użytkownikowi, na podstawie jego dotychczasowych ulubionych posiłków. Najpierw możemy skompilować dodatkowe dane na temat 5 najbardziej ulubionych potraw danego użytkownika. Następnie możemy wymodelować to zadanie jako nadzorowany problem treningowy. 4 z tych 5 ulubionych potraw ustawiamy jako dane cech, a potem losowo odkładamy na bok 5 potrawę, jako pozytywną etykietę, którą nasz model stara się przewidzieć. Predykcje modelu optymalizujemy za pomocą straty softmax.
Podczas trenowania model sieci neuronowej uczy się optymalnych wag dla węzłów w 1. warstwie ukrytej, która służy jako warstwa wektora dystrybucyjnego. Na przykład jeśli model zawiera 3 węzły w 1. warstwie ukrytej, może określić, że 3 najbardziej trafne wymiary elementów potraw to kanapkowość, deserowość i płynność. Na rysunku 12 pokazano wartość wejściową dla „hot doga” w kodowaniu 1 z n przekształconą w wektor trójwymiarowy.
![Rysunek 12. Sieć neuronowa dla kodowania 1 z n hot doga. Pierwsza jest warstwa wejściowa z 5 węzłami, z których każdy ma adnotację zawierającą ikonę potrawy, którą reprezentuje (barszczu, hot doga, sałatki, … i szawarmy). Węzły te mają odpowiednio wartości [0, 1, 0, ..., 0] i reprezentują kodowanie 1 z n „hot doga”. Warstwa wejściowa jest połączona z 3-węzłową warstwą wektora dystrybucyjnego, której węzły mają wartości odpowiednio 2,98, –0,75 i 0. Warstwa wektora dystrybucyjnego jest połączona z 5-węzłową warstwą ukrytą, która z kolei jest połączona z 5-węzłową warstwą wyjściową.](https://developers.google.cn/static/machine-learning/crash-course/embeddings/images/one_hot_hot_dog_embedding.png?hl=pl)
hot dog
podane do głębokiej sieci neuronowej jako dane wejściowe. Warstwa wektora dystrybucyjnego tłumaczy kodowanie 1 z n na trójwymiarowy wektor dystrybucyjny [2.98, -0.75, 0]
.
W trakcie trenowania wagi warstwy wektora dystrybucyjnego zostaną zoptymalizowane, tak aby wektory dystrybucyjne w podobnych przykładach były bliżej siebie. Jak już wspomnieliśmy, wymiary, które wybiera rzeczywisty model dla swoich wektorów dystrybucyjnych, prawie na pewno nie będą tak intuicyjne i zrozumiałe jak w tym przykładzie.
Kontekstowe wektory dystrybucyjne
Jednym z ograniczeń statycznych wektorów dystrybucyjnych word2vec
jest to, że słowa mogą mieć różne znaczenia w różnych kontekstach. Słowo „Tak”, gdy występuje osobno, może mieć inne znaczenie niż w wyrażeniu „Tak sobie”. „Koło” może oznaczać np. „okrągły przedmiot”, „grupę ludzi”, „obok, przy” lub „ruch po okręgu”. „Post” może oznaczać np. „okres powstrzymywania się od jedzenia” lub „wpis na blogu”. Takie przykłady można mnożyć.
Jednak w przypadku statycznych wektorów dystrybucyjnych każde słowo jest reprezentowane przez pojedynczy punkt w przestrzeni wektorowej, nawet wtedy, gdy może mieć wiele znaczeń.
W ostatnim ćwiczeniu pokazaliśmy ograniczenia statycznych wektorów dystrybucyjnych dla słowa orange (ang. pomarańczowy, pomarańcza), które może oznaczać kolor lub gatunek owocu. Gdy mamy tylko 1 wektor dystrybucyjny, po wytrenowaniu na zbiorze danych word2vec
słowo orange zawsze będzie bliższe innym kolorom niż słowu juice (ang. sok).
Kontekstowe wektory dystrybucyjne wynaleziono, aby uniknąć problemów związanych z tym ograniczeniem. Kontekstowe wektory dystrybucyjne umożliwiają reprezentowanie pojedynczego słowa przez wiele wektorów dystrybucyjnych, które są nośnikami informacji o otoczeniu słów, a nie tylko o samym słowie. Słowo orange miałoby różne wektory dystrybucyjne w każdym zawierającym je niepowtarzalnym zdaniu w zbiorze danych.
Niektóre metody tworzenia kontekstowych wektorów dystrybucyjnych, takie jak ELMo, biorą statyczny wektor dystrybucyjny jako przykład, np. wektor word2vec
dla słowa w zdaniu, i przekształcają go za pomocą funkcji, która dodaje informacje o słowach wokół niego. W taki sposób powstaje kontekstowy wektor dystrybucyjny.
Aby dowiedzieć się więcej o kontekstowych wektorach dystrybucyjnych, kliknij tutaj
- W przypadku modeli ELMo statyczny wektor dystrybucyjny jest agregowany z wektorami dystrybucyjnymi pochodzącymi z innych warstw, które kodują przypadki odczytania zdania od przodu do tyłu i od tyłu do przodu.
- Modele BERT maskują część zdania, którego model używa jako danych wejściowych.
- Modele transformujące używają warstwy samouwagi, aby ważyć trafność innych słów w sekwencji względem każdego słowa osobno. Dodają również odpowiednią kolumnę z macierzy pozycyjnych wektorów dystrybucyjnych (zob. kodowanie pozycyjne) do każdego wcześniej wytrenowanego wektora dystrybucyjnego tokena, element po elemencie. W rezultacie powstaje wejściowy wektor dystrybucyjny, który jest podawany do pozostałej części modelu, aby został użyty do wnioskowania. Ten wejściowy wektor dystrybucyjny, unikalny dla każdej odrębnej sekwencji tekstowej, jest kontekstowym wektorem dystrybucyjnym.
Powyżej omówiliśmy modele językowe. Kontekstowe wektory dystrybucyjne są przydatne w innych zadaniach generatywnych, takich jak generowanie obrazów. Wektor dystrybucyjny wartości RGB piksela na zdjęciu konia dostarcza modelowi więcej informacji, gdy jest połączony z macierzą pozycyjną reprezentującą każdy piksel i pewnymi danymi kodowania sąsiednich pikseli. W ten sposób powstają kontekstowe wektory dystrybucyjne. Pierwotne statyczne wektory dystrybucyjne samych wartości RGB zawierają mniej informacji.