6

W NLP zawsze jest tak, że rozmiar funkcji jest bardzo duży. Na przykład dla jednego projektu pod ręką wymiar funkcji wynosi prawie 20 tysięcy (p = 20 000), a każda funkcja jest liczbą całkowitą 0-1, aby pokazać, czy określone słowo lub dwumek jest przedstawione w dokumencie (jeden artykuł jest punktem danych $ x \ in R^{p} $).W przetwarzaniu języka naturalnego (NLP), jak skutecznie zmniejszyć wymiary?

Wiem, że redundancja między funkcjami jest ogromna, więc konieczne jest zmniejszenie wymiarów. Mam trzy pytania:

1) Mam 10 tysięcy punktów danych (n = 10 000), a każdy punkt danych ma 10 tysięcy funkcji (p = 10 000). Jaki jest skuteczny sposób przeprowadzenia redukcji wymiarów? Macierz $ X \ in R^{n \ times p} $ jest tak duża, że ​​zarówno PCA (lub SVD, okrojona SVD jest w porządku, ale nie sądzę, że SVD jest dobrym sposobem na zmniejszenie wymiaru dla funkcji binarnych) i Torba słów (lub K-średnich) jest trudne do przeprowadzenia bezpośrednio na X $ (Oczywiście, jest skąpe). Nie mam serwera, po prostu używam mojego komputera :-(.

2) Jak ocenić podobieństwo lub odległość między dwoma punktami danych? Myślę, że odległość euklidesowa może nie działać dobrze dla funkcji binarnych. Co powiesz na normę L0? Czego używasz?

3) Jeśli chcę użyć maszyny SVM (lub innych metod jądra) do przeprowadzenia klasyfikacji, którego jądra powinienem użyć?

Wielkie dzięki!

+3

wygląda dobre pytanie dla tej społeczności http://stats.stackexchange.com/ – Leo

Odpowiedz

2

1) Nie potrzebujesz redukcji wymiarów. Jeśli naprawdę chcesz, możesz użyć sklasyfikowanego liniowego klasyfikatora L1, aby zredukować do najbardziej przydatnych funkcji.

2) Często stosowane jest podobieństwo cosinusowe lub podobieństwo kosinusowe przeskalowanych wektorów TFIDF.

3) Linearne maszyny SVM działają najlepiej przy tak wielu funkcjach.

Jest dobry tutorial jak zrobić klasyfikacji jak to w python tutaj: http://scikit-learn.org/dev/tutorial/text_analytics/working_with_text_data.html

Powiązane problemy