Właśnie zaczynam się uczyć, jak sieć neuronowa może działać, aby rozpoznawać wzorce i kategoryzować dane wejściowe, i widziałem, jak sztuczna sieć neuronowa może analizować dane obrazu i kategoryzować obrazy ( demo z convnetjs ) i klucz tam polega na próbkowaniu w dół obrazu, a każdy piksel stymuluje jeden neuron wejściowy do sieci.
Jednak próbuję owinąć głowę, jeśli można to zrobić za pomocą ciągów znaków? Przypadek użycia, który mam, to „silnik rekomendacji” do filmów oglądanych przez użytkownika. Filmy zawierają wiele ciągów znaków (tytuł, fabuła, tagi) i mogę sobie wyobrazić „próbkowanie” tekstu w dół do kilku kluczowych słów opisujących ten film, ale nawet jeśli przeanalizuję pięć pierwszych słów opisujących ten film, myślisz, że potrzebuję neuronów wejściowych dla każdego angielskiego słowa, aby porównać zestaw filmów? Mógłbym ograniczyć neurony wejściowe tylko do słów użytych w zestawie, ale czy mógłbym się urosnąć / uczyć przez dodanie nowych filmów (użytkownik ogląda nowy film, z nowymi słowami)? Większość bibliotek, które widziałem, nie pozwalają na dodawanie nowych neuronów po przeszkoleniu systemu?
Czy istnieje standardowy sposób mapowania danych ciąg / słowo / znak na dane wejściowe w sieci neuronowej? Czy też sieć neuronowa naprawdę nie jest odpowiednim narzędziem do analizowania takich ciągów danych (jakie jest lepsze narzędzie do dopasowywania wzorców w ciągach danych)?
źródło
Zarówno odpowiedzi od @Emre, jak i @Madison mogą mieć dobre zdanie na temat omawianego problemu. Problem polega na reprezentowaniu łańcucha jako wektora cech dla danych wejściowych do NN.
Po pierwsze, problem zależy od rozmiaru ciągu, który chcesz przetworzyć. Długie ciągi zawierające tokeny may (zazwyczaj słowa) są często nazywane dokumentami w tym ustawieniu. Istnieją osobne metody radzenia sobie z poszczególnymi tokenami / słowami.
Istnieje wiele sposobów reprezentowania dokumentów. Wielu z nich przyjmuje założenie „ worka słów” . Najprostsze typy reprezentują dokument jako wektor liczby słów lub częstotliwości terminu (tf). Aby wyeliminować wpływ długości dokumentu, zwykle ludzie wolą normalizować się na podstawie liczby dokumentów, w których pojawia się termin, częstotliwość dokumentów ( tf-idf ).
Innym podejściem jest modelowanie tematyczne, które uczy ukrytej reprezentacji danych w niższych wymiarach. LDA i LSI / LSA to typowe wybory, ale ważne jest, aby pamiętać, że nie jest to nadzorowane. Wyuczona reprezentacja niekoniecznie będzie idealna do nadzorowanego uczenia się z NN. Jeśli chcesz wykonać modelowanie tematów, możesz także wypróbować nadzorowane modele tematów .
Dla pojedynczych słów można użyć word2vec , który wykorzystuje NN do osadzania słów w przestrzeni o dowolnym rozmiarze. Podobieństwo między dwoma wektorami słów w tej wyuczonej przestrzeni ma tendencję do podobieństwa semantycznego.
Nowszym pionierskim podejściem jest wektory akapitowe , które najpierw uczą się modelu słownego podobnego do word2vec, a następnie wykorzystują tę reprezentację do nauki rozproszonej reprezentacji zestawów słów (dokumentów dowolnej wielkości). To pokazało najnowocześniejsze wyniki w wielu aplikacjach.
Korzystając z NN w NLP, ludzie często używają różnych architektur, takich jak rekurencyjne sieci neuronowe (takie jak sieci pamięci krótkoterminowej ). W niektórych przypadkach ludzie korzystali nawet z konwergentnych sieci neuronowych na tekście.
źródło
Nie jest to problem dotyczący sieci neuronowych jako takich, ale reprezentowania danych tekstowych w uczeniu maszynowym. Możesz reprezentować filmy, obsadę i motyw jako zmienne kategoryczne. Fabuła jest bardziej skomplikowana; prawdopodobnie chciałbyś mieć model tematyczny do tego, ale zostawiłbym to, dopóki nie zrozumiesz wszystkiego. Robi dokładnie to tekstowe „próbkowanie w dół”, o którym wspomniałeś.
Zapoznaj się z tym samouczkiem, aby dowiedzieć się, jak kodować zmienne jakościowe dla sieci neuronowych. I powodzenia!
źródło
Wypróbowałem następujące 2 sposoby próbnej implementacji sieci neuronowych z tekstem. Ten ostatni działa dość dobrze, ale z ograniczeniami.
Utwórz słownictwo za pomocą word2vect lub NLTK / niestandardowych tokenów i przypisz indeks do każdego słowa. To ten indeks reprezentuje słowo jako liczbę.
Wyzwania:
Użyj macierzy tożsamości np. Dla słów „n” użyj macierzy „nx n” lub (n-1 x n-1), gdzie każdy wiersz i kolumna reprezentuje słowo. Umieść „1” w komórce przecięcia, a „0” w miejscach spoczynku. ( odniesienie )
Wyzwania:
źródło