fbpx

Ewaluacja polskich word embeddingów

 In Python, Technicznie

W artykule opisujemy nasze doświadczenia z używaniem “word embedingów” i prezentujemy wyniki eksperymentu mającego na celu wybranie najlepszego zestawu “Polskich wektorów słów”. Przetestowaliśmy aż 110 modeli i wybraliśmy dla was najlepszy!

Czym jest word embedding?

W wielkim skrócie jest to zapis słów w postaci wektorów. W mniejszym skrócie są to słowa umieszczone w przestrzeni wektorowej, przy uwzględnieniu znaczenia wyrazów. Tworzyć embeddingi można za pomocą sieci neuronowych, modeli probabilistycznych, macierzy współzależności itp. Najpopularniejszą formą embeddingów jest Word2Vec, który jest zbiorem dwuwarstwowych modeli sieci neuronowych. Dla lepszego zapoznania się z ideą zamiany tekstu na postać wektorową i lepszego zapozniania się z Word2Vec, Fastext i Gensimem polecam zapoznać się z poniższymi artykułami:

W Przestrzeni wektorowej Król do Mężczyzny powinien
mieć taką samą odległość co Królowa do Kobiety

Założenia naszego eksperymentu

Mieliśmy problem w jednym z projektów i zastanawialiśmy się, który z udostępnionych przez IPI PAN modeli word2vec oraz polskie modele Facebook fastext będą działać najlepiej w kontekście analizy sentymentu książek. Postanowiliśmy to obiektywnie zbadać. W tym celu przetestowaliśmy:

  1. 106 modeli Word2Vec z IPI PAN
  2. 1 model Word2Vec od Kyubyong
  3. 2 modele FastText od Facebook
  4. 1 model FastText od Kyubyong

Ewaluacja word embeddingów odbywała się przy pomocy biblioteki gensim. Zapisane one były w formacie Word2Vec, czyli w postaci dokumentu, w którym w każdej linii mamy para: słowo, wektor. Użyte modele zostały udostępnione przez IPIPAN, Facebook reaserch team oraz na repozytorium Kyubyong. Testowanie word embeddingów odbywało się głównie na podstawie analogii słów oraz dodatkowo na parach słów, przy pomocy współczynników korelacji Pearsona i Spearmana.

Ewaluacja

Procedura i wyniki ewaluacji modeli oraz cały kod rozwiązania znajduje się na naszym Githubie w repozytorium Polish Word Embeddings Review.

Dane testowe

Do testów analogii został użyty plik udostępniony przez Facebook FastText, a do ewaluacji podobieństw słów wykorzystaliśmy polską wersję dokumentu SimLex999 stworzoną przez IPIPAN. Potrzebował on odrobiny modyfikacji, aby podczas ewaluacji gensim mógł odczytać i dobrze zinterpretować plik. Z pliku zostały też całkowicie usunięte columny ‘nr’ oraz ‘relatedness’. Linki do tych plików można znaleźć na dole artykułu.

Ewaluacja poprzez analogie

Ewaluacja poprzez analogie jest najprostszą i w zasadzie jedną z lepszych technik na sprawdzanie poprawności word embeddingów. Ta metoda analizuje dwie pary słów np.: Polska i Warszawa, Ukraina i Wilno, sprawdzając dystans w przestrzeni wektorowej pomiędzy dwoma wyrazami w każdej możliwej parze i liczy różnice dystansu pomiędzy nimi. W perfekcyjnym modelu ta różnica powinna wynosić 0, ale jednak życie nie jest perfekcyjne, więc zawsze mamy jakiś margines. W pliku udostępnionym przez Facebooka jest 1000 linii po dwie pary słów porozmieszczane po kategoriach takich jak np.: stolica_kraj.

Wczytanie wektorów słów i przetestowanie analogii jest bardzo proste. Wykorzystując gensim wystarczy uruchomić poniższy kawałek kodu:

Na początku wczytujemy wektory wykorzystując klasę KeyedVectors, a następnie w kolejnej lini wykorzystujemy wbudowaną metodę evaluate_word_analogies dokonujemy oceny modelu podając ścieżkę do pliku z analogiami w formacie:

W wyniku otrzymamy dokładność przewidywania ostatniej kolumny.

Ewaluacja przez pary słów

Ewaluacja par słów odbywa się na obliczeniu korelacji modelu z ocenami podobieństwa ludzi. Metrykami wyjściowymi są dwa współczynniki: Pearsona i Spearmana oraz procent słów poza słownikiem.

Wczytanie embeddingu i przetestowanie par słów:

Rezultaty

Top 10 z 110 przetestowanych modeli word embeddingów posortowanych wg poprawności analogii

Lp.NameVocab sizeVector sizeTotal analogy accuracyPearsonSpearmanOut of vocab %
1.facebook-fastext-cc-300.txt20000003000,660,3690,39344,004
2.nkjp+wiki-lemmas-restricted-300-skipg-ns.txt14077623000,620,38750,44441,6016
3.nkjp+wiki-lemmas-all-300-skipg-ns.txt15493223000,610,39730,45671,6016
4.nkjp+wiki-lemmas-restricted-300-cbow-ns.txt14077623000,590,41320,45411,6016
5.nkjp-lemmas-restricted-300-skipg-ns.txt11628453000,580,40310,45081,6016
6.wiki-lemmas-restricted-300-skipg-ns.txt4466083000,580,33110,38932,1021
7.wiki-lemmas-all-300-skipg-ns.txt4730003000,560,34560,40252,1021
8.nkjp-lemmas-all-300-skipg-ns.txt12826213000,560,41270,46341,6016
9.wiki-lemmas-restricted-300-cbow-ns.txt4466083000,550,36470,40442,1021
10.wiki-lemmas-restricted-100-skipg-ns.txt4466081000,530,30080,3482,1021

Jak widać powyżej, najlepszym modelem jest ten od Facebook Fasttext, uczony na zbiorze Common Crawl. Wśród topowych modeli można ponadto zauważyć parę zależności:

  • Embeddingi były uczone na zlematyzowanym datascie (nie znalazłem jednak informacji, czy Facebook Fasttext uczono w ten sam sposób),
  • Mają rozmiar wektorów 300,
  • Występuje tu algorytm sieci neuronowej opartej na Skip-Gram,
  • Algorytm uczący oparty jest na Negative-Sampling.

Na podstawie embeddingów nr 5 i 6 oraz 7 i 8 można stwierdzić, że powiększanie słownika nie ma wpływu na polepszenie poprawności analogi, ponieważ te pary modeli były trenowane na takich samych parametrach. Jednak można zauważyć, że powiększenie słownika polepsza metryki korelacji.

Podsumowanie

We wpisie przedstawiliśmy metodę wczytywania polskich wektorów słów oraz przetestowaliśmy różne ich konfiguracje. W kontekście naszej ewaluacji i eksperymentów najlepiej wypadł model Faceboo fastext.
Podobnie sprawdził się on w naszych projektach i dawał najlepsze rezultaty.

Materiały – dane i modele

Użyte word embeddingi

Zbiór testowy

Zdjęcie pobrane z https://www.pexels.com/photo/view-of-a-row-256428/

Recent Posts