2013-06-07 15 views
6

Próbuję więc klasyfikować teksty za pomocą Weka SVM. Do tej pory moje wektory cech używane do szkolenia SVM składają się ze statystyk TF-IDF dla unigramów i bigramów, które pojawiają się w tekstach szkoleniowych. Ale wyniki, jakie otrzymałem z testowania wyszkolonego modelu SVM, nie były dokładne, więc czy ktoś może przekazać mi opinię na temat mojej procedury? Mam następujące kroki, aby klasyfikować teksty:Przetwarzanie języka naturalnego - cechy dotyczące klasyfikacji tekstu

  1. Construct słownik składający się z wyodrębnionych unigrams i bigrams z tekstów szkoleniowych
  2. policzyć, ile razy pojawia się każdego unigram/BIGRAM w każdym tekście szkolenia, a także w jaki sposób wiele szkoleń tekstach unigram/BIGRAM pojawia się
  3. Użyj danych z kroku 2 do calcuate się tfidf dla każdego unigram/BIGRAM
  4. dla każdego dokumentu, skonstruować wektor cech, który jest długość słownika, i sklep odpowiednią statystykę TF-IDF w każdym elemencie wektora (na przykład pierwszy element w wektorze właściwości dla Dokument można by odpowiadać tfidf dla pierwszego wyrazu w słowniku stosunku do jednego dokumentu)
  5. Dołącz etykietę klasy dla każdego wektora cech odróżnić, który tekst należący do którego autor
  6. Pociąg SVM użyciu tych wektorów cech
  7. wektorów cech tekstów badań są skonstruowane w taki sam sposób jak teksty szkoleniowych i są klasyfikowane przez SVM

Ponadto, może być, że muszę trenować SVM więcej funkcji? Jeśli tak, jakie funkcje są najbardziej skuteczne w tym przypadku? Każda pomoc będzie bardzo ceniona, dzięki.

Odpowiedz

7

Dokumenty w języku naturalnym zwykle zawierają wiele słów, które pojawiają się tylko raz, zwane także Hapax Legomenon. Na przykład 44% różnych słów w Moby-Dick pojawia się tylko raz, a 17% dwukrotnie.

Dlatego uwzględnienie wszystkich słów z korpusu zwykle powoduje nadmierną liczbę funkcji. W celu zmniejszenia rozmiaru tej przestrzeni cech, systemy NLP zazwyczaj zatrudnić jednego lub więcej z następujących cech:

  • Removal zatrzymania Words - klasyfikacji autor, są zazwyczaj krótkie i wspólne słowa takie jak jest , z,,który to kod jest w rzeczywistości.
  • Stemming - popularne stemple (takie jak portier) używają zestawu reguł do normalizowania fleksji słowa. Np., spacer, spacery i spacery są zmapowane do łodygi spacer.
  • Próg Korelacji/Istotności - Oblicz Współczynnik korelacji Pearsona lub wartość p każdej cechy w odniesieniu do etykiety klasy. Następnie ustaw próg i usuń wszystkie funkcje, które uzyskają wartość poniżej tego progu.
  • Próg pokrycia - podobny do powyższego progu, usuń wszystkie funkcje, które nie pojawiają się w co najmniej t dokumentach, gdzie t jest bardzo małe (< 0,05%) w odniesieniu do całego rozmiaru korpusu.
  • Filtrowanie w oparciu o część mowy - na przykład, tylko biorąc pod uwagę czasowniki lub usuwając rzeczowniki.
  • Filtrowanie w zależności od rodzaju systemu - na przykład system NLP do tekstu klinicznego może uwzględniać tylko słowa znalezione w słowniku medycznym.

Do określania, usuwania słów zatrzymania, indeksowania korpusu i obliczania podobieństwa tf_idf lub dokumentu, polecam używanie Lucene. Google "Lucene w 5 minut", aby uzyskać szybkie i łatwe samouczki dotyczące używania lucenu.

2

W tego typu klasyfikacjach ważne jest, aby twój wektor nie był zbyt duży, ponieważ można w nim uzyskać wiele zer i może to mieć zły wpływ na wyniki, ponieważ te wektory są zbyt blisko i trudno je rozdzielić je poprawnie. Polecam również, abyś nie używał każdej bigramy, wybierz niektóre z najwyższą częstotliwością (w tekście), aby zmniejszyć rozmiar wektora i zachować wystarczającą ilość informacji. Niektóre sztuczki, dlaczego jest to zalecane: http://en.wikipedia.org/wiki/Curse_of_dimensionality I ostatnie, ale również ważne jest to, ile masz danych, tym większy twój wektor, tym więcej danych powinieneś mieć.

Powiązane problemy