17

Próbuję dowiedzieć się, czy możliwe jest "przyrostowe szkolenie" na danych przy użyciu MLlib w Apache Spark.Szkolenie przyrostowe modelu ALS

Moja platforma to przewidywanie IO, i jest to w zasadzie opakowanie dla Spark (MLlib), HBase, ElasticSearch i kilku innych Restful parts.

W mojej aplikacji dane "zdarzenia" są wstawiane w czasie rzeczywistym, ale aby uzyskać zaktualizowane wyniki prognoz, muszę "pio train" i "pio wdrożyć". Zajmuje to trochę czasu, a serwer przechodzi w tryb offline podczas ponownego wdrażania.

Próbuję dowiedzieć się, czy mogę wykonać przyrostowe szkolenie podczas fazy "przewidywania", ale nie mogę znaleźć odpowiedzi.

+0

Czy wsparcie PIO Spark na żywo i rozszerzanie istniejących wyników predykcji z StreamRDD'S? – javadba

+3

Właśnie sprawdziłem, wprowadzono szkolenia online/przyrostowe dla [regresji liniowej] (http://spark.apache.org/docs/latest/mllib-linear-methods.html#streaming-linear-regression) i [streamed klastrowanie] (http://spark.apache.org/docs/latest/mllib-clustering.html#streaming-clustering). Niestety nie ma jeszcze strumieniowego filtrowania grupowego (ALS) ani innych metod klasyfikacji/regresji strumieniowej. – mucaho

+0

[Streaming k-means] (http://spark.apache.org/docs/latest/mllib-clustering.html#streaming-k-means) –

Odpowiedz

0

aktualizowania modelu near-line (piszę niedaleko, bo w oczy, prawda aktualizacja online jest niemożliwe) za pomocą wielokrotność w technice, na przykład: Online-Updating Regularized Kernel Matrix Factorization Models for Large-Scale Recommender Systems.

Ou Możesz zajrzeć na kodzie:

  • MyMediaLite
  • Oryx - ramy budować z Lambda Architektury paradygmatu. I powinien mieć aktualizacje ze składaniem nowych użytkowników/przedmiotów.

Jest to część mojej odpowiedzi na podobne pytanie: question, w której oba problemy: szkolenie w pobliżu Internetu oraz obsługa nowych użytkowników/produktów były mieszane.

2

Wyobrażam sobie, że używasz modelu ALS iskrownika MLlib, który wykonuje faktoryzację macierzy. Wynikiem tego modelu są dwie macierze: macierz funkcji użytkownika i macierz elementów-elementów.

Zakładając, że otrzymamy strumień danych z ocenami lub transakcjami dla przypadku niejawnego, prawdziwą (100%) aktualizacją online tego modelu będzie aktualizacja obu macierzy dla każdej nowej informacji o ratingu przychodzącej przez wyzwolenie pełny powrót modelu ALS do wszystkich danych ponownie + nowa ocena. W tym scenariuszu jeden jest ograniczony przez fakt, że uruchomienie całego modelu ALS jest kosztowne pod względem obliczeniowym, a przychodzący strumień danych może być częsty, więc zbyt często wyzwalałby pełne przekwalifikowanie.

Tak więc, wiedząc, że możemy szukać alternatyw, pojedyncza ocena nie powinna znacząco zmieniać matryc oraz mamy podejścia optymalizacyjne, które są przyrostowe, na przykład SGD. Interesujący jest (wciąż w fazie eksperymentalnej) biblioteka napisana w przypadku jednoznacznego Ocen który dokłada przyrostowych aktualizacji dla każdej partii w DStream:

https://github.com/brkyvz/streaming-matrix-factorization

Pomysł wykorzystania przyrostowego podejścia takie jak SGD następujący pomysł o ile poruszamy się w kierunku nachylenia (problem minimalizacji), gwarantujemy, że zbliża się do minimum funkcji błędu. Więc nawet jeśli zaktualizujemy pojedynczą nową ocenę, tylko do macierzy funkcji użytkownika dla tego konkretnego użytkownika, a tylko macierz cech elementu dla tego konkretnego przedmiotu, a aktualizacja jest w kierunku gradientu, gwarantujemy, że poruszamy się do minimum, oczywiście jako przybliżenie, ale wciąż do minimum.

Innym problemem jest sama iskra, a system rozproszony, najlepiej aktualizacje powinny być wykonywane sekwencyjnie, dla każdego nowego przychodzącego ratingu, ale iskra traktuje strumień przychodzący jako partię, która jest dystrybuowana jako RDD, więc operacje wykonane w celu aktualizacji zostaną wykonane dla całej partii bez gwarancji na sekwencyjność.

Bardziej szczegółowe informacje na przykład, jeśli korzystasz z narzędzia Prediction.IO, możesz przeprowadzić szkolenie offline, które korzysta z wbudowanych funkcji regularnego pociągu i wdrażania, ale jeśli chcesz mieć aktualizacje online, będziesz musiał uzyskać dostęp do obu macierze dla każdej partii strumienia i uruchamiać aktualizacje za pomocą SGD, a następnie poprosić o wdrożenie nowego modelu, ta funkcja oczywiście nie jest w prognozowaniu.IO trzeba byłoby zbudować go na własną rękę.

Ciekawe uwagi do aktualizacji SGD:

http://stanford.edu/~rezab/classes/cme323/S15/notes/lec14.pdf

+0

To jest bardzo wiarygodna odpowiedź! +1 – eliasah

Powiązane problemy