Klasyfikacja dokumentów za pomocą splotowej sieci neuronowej


11

Próbuję używać CNN (splotowa sieć neuronowa) do klasyfikowania dokumentów. CNN dla krótkiego tekstu / zdań był badany w wielu artykułach. Wydaje się jednak, że żaden dokument nie używał CNN do długiego tekstu lub dokumentu.
Mój problem polega na tym, że dokument zawiera zbyt wiele funkcji. W moim zestawie danych każdy dokument zawiera ponad 1000 tokenów / słów. Aby podać każdy przykład do CNN, przekształcam każdy dokument w matrycę za pomocą word2vec lub rękawicy, co daje dużą matrycę. Dla każdej matrycy wysokość to długość dokumentu, a szerokość to rozmiar wektora osadzania słowa. Mój zestaw danych zawiera ponad 9000 przykładów i trenowanie sieci zajmuje dużo czasu (cały tydzień), co utrudnia dostrojenie parametrów.
Inną metodą wyodrębniania funkcji jest użycie jednego gorącego wektora dla każdego słowa, ale spowoduje to utworzenie bardzo rzadkich macierzy. I oczywiście ta metoda wymaga nawet więcej czasu na szkolenie niż poprzednia metoda.
Czy istnieje lepsza metoda wyodrębniania funkcji bez tworzenia dużych matryc wejściowych?
Jak powinniśmy obsługiwać dokumenty o zmiennej długości? Obecnie dodaję specjalne ciągi, aby dokument miał tę samą długość, ale nie sądzę, że to dobre rozwiązanie.


2
Czy użycie wektoryzatora TfIdf wydaje się odpowiednie? Może w połączeniu z word2vec pozostawić tylko górne x słów dla każdego dokumentu?
Diego

Nie wiem czym jest Tfldf. Sprawdzę, czy to działa. Dziękuję
lenhhoxung


Po prostu to sprawdzam i myślę, że to mi nie pomaga. Zasadniczo ta klasa pomocnicza tworzy matrycę dla zestawu dokumentów. Każdy wektor wiersza (liczba binarna lub liczba słów) w macierzy odpowiada dokumentowi, ale w przypadku CNN potrzebujemy macierzy dla każdego dokumentu.
lenhhoxung

Chodziło o to, aby zostawić tylko x nietrywialne słowa na dokument uszeregowane według ich TfIdf. Następnie użyj oryginalnego kodowania, aby zbudować matryce dokumentów. Nie jestem pewien, czy pojawił się pomysł na dwa kroki.
Diego

Odpowiedzi:


8

Można skrócić długość danych wejściowych, reprezentując dokumenty jako serię wektorów zdań zamiast dłuższej serii wektorów słów. Doc2vec jest na to jednym ze sposobów (każde zdanie byłoby „dokumentem”).

Jeśli nie chcesz używać Doc2vec, jednym ze sposobów tworzenia wektorów zdań byłoby uśrednienie wektorów słów dla każdego zdania, dając pojedynczy wektor o tej samej szerokości dla każdego zdania. To może nie być tak precyzyjne, jak niektóre metody dostępne w Doc2Vec, ale z powodzeniem zastosowałem je do modelowania tematów.

Tak czy inaczej, kiedy już masz wektory zdań, ustaw je w kolejności dla każdego dokumentu, tak jak już robisz dla wektorów słów, i następnie przejrzyj swój model. Ponieważ długość sekwencji dla każdego dokumentu jest krótsza, model powinien trenować szybciej niż w przypadku wektorów słów.

Nawiasem mówiąc, ta metoda może działać po zwiększeniu lub zmniejszeniu, aby spełnić Twoje wymagania dotyczące dokładności i prędkości. (np. jeśli Twój CNN nadal zbyt wolno trenuje z wektorami zdań, możesz zamiast tego utworzyć wektory akapitów).

Jednym ze sposobów obsługi dokumentów o różnej długości jest wypełnianie. Sekwencje dokumentów powinny mieć taką samą długość jak najdłuższy dokument. Jeśli więc twój najdłuższy dokument ma 400 zdań, wszystkie sekwencje dokumentów będą miały długość 400 wektorów. Dokumenty krótsze niż maksymalna długość byłyby wypełnione wektorami wypełnionymi zerami.


Ciekawy pomysł. Spróbuję :)
lenhhoxung 21.09.16

Mogę zadać pytanie? Jak radzić sobie z dokumentami o znacząco różnej długości (5 zdań / dokument, 500 zdań / dokument), nawet jeśli reprezentuję je w wektorach zdań? Padding tutaj wydaje się dziwny ...
stackunderflow

1
Podczas przetwarzania mowy niektóre osoby porządkują sekwencje na podstawie ich długości, aby sekwencja o podobnej długości była w tej samej partii. Może to działać w przypadku sekwencji tekstowej.
suthee

4

Możesz użyć osadzania regionu. Zamiast konwertować poszczególne „tokeny” na wektory, można zastosować strategię konwersji regionów tekstu na wektory. Podejście to zastosowano tutaj: https://arxiv.org/abs/1504.01255

Jeśli nie jesteś ograniczony do CNN, możesz użyć hierarchicznych modeli uwagi, takich jak ten: https://www.cs.cmu.edu/~diyiy/docs/naacl16.pdf, w których masz tego rodzaju potok: word vectors (combined into) sentence vectors (combined into) final document vector

Zauważ, że dzięki tej metodzie nadal będziesz musiał przekonwertować wszystkie wektory słów na osadzenia, ale nie wszystkie naraz.

Do obsługi dokumentów o różnych długościach do tej pory jedynym rozwiązaniem było wypełnianie / cięcie.

Wreszcie, aby zwiększyć szybkość, możesz spróbować zmniejszyć wymiar tekstu, włączając tylko ważne sekcje (być może tylko początek dokumentu jest wystarczający, aby mieć dobrą dokładność klasyfikacji)


1
Dziękujemy za link referencyjny. Osadzanie regionu jest interesujące. Jeśli chodzi o dokument o zmiennej wielkości, jak wspomniano w tym artykule arxiv.org/abs/1412.1058 (ten sam autor), możemy używać wielu jednostek pulowania zamiast wypełniania / cięcia.
lenhhoxung
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.