2014-10-26 29 views
15

Jestem zaznajomiony z używaniem funkcji BOW dla klasyfikacji tekstu, w której najpierw znajdujemy rozmiar słownika dla korpusu, który staje się wielkością naszego wektora cech. Dla każdego zdania/dokumentu, i dla wszystkich jego słów składowych, wstawiamy 0/1 w zależności od nieobecności/obecności tego słowa w tym zdaniu/dokumencie.Jak korzystać z reprezentacji wektorowej słów (uzyskanych z Word2Vec itp.) Jako funkcji dla klasyfikatora?

Jednak teraz, gdy próbuję użyć reprezentacji wektorowej każdego słowa, czy tworzenie globalnego słownika jest niezbędne?

+0

co to jest "globalne słownictwo"? – Daniel

+1

Potrzebuję wektora funkcji o stałej długości dla każdego zdania, chociaż liczba słów w każdym zdaniu jest różna. Więc muszę policzyć rozmiar słownictwa całego mojego korpusu i zachować długość wektora cech równą rozmiarowi słownika. To właśnie mam na myśli przez globalne słownictwo. Przepraszam za zamieszanie. Nie byłam wystarczająco jasna słowami. –

Odpowiedz

7

Załóżmy, że wielkość wektorów wynosi N (zwykle pomiędzy 50 lub 500). Naiwnym sposobem uogólniania tradycyjnego generowania BOW jest zastąpienie 0-bitowego (w BOW) przez N zer i zastąpienie 1-bitowego (w BOW) rzeczywistym wektorem (np. Z Word2Vec). Wtedy rozmiar funkcji będzie wynosił N * | V | (W porównaniu do | V | wektorów cech w BOW, gdzie | V | jest wielkością słowników). To proste uogólnienie powinno działać dobrze dla przyzwoitej liczby instancji szkoleniowych.

Aby zmniejszyć wektory cech, ludzie używają różnych technik, takich jak rekurencyjne połączenie wektorów z różnymi operacjami. (Patrz rekurencyjne/cykliczny Neural Network i podobnych sztuczek, na przykład: http://web.engr.illinois.edu/~khashab2/files/2013_RNN.pdf lub http://papers.nips.cc/paper/4204-dynamic-pooling-and-unfolding-recursive-autoencoders-for-paraphrase-detection.pdf)

+0

Nie rozumiem, dlaczego schemat w twoim pierwszym akapicie jest lepszy niż zwykły worek słów. Wszystko, czego klasyfikator może się nauczyć z tej reprezentacji (z funkcjami N * | V |), powinno być w stanie nauczyć się z reprezentacji BOW (z funkcjami | V |). Na przykład rozważ regresję logistyczną; każdy model na tej reprezentacji jest odpowiednikiem odpowiedniego modelu na reprezentacji BOW. Wydaje się to bezcelowe. Czy czegoś brakuje? –

0

Aby uzyskać stałą długość wektora cech dla każdego zdania, chociaż liczba słów w każdym zdaniu jest inny, należy wykonać następujące czynności:

  1. tokenize każde zdanie słowami składowych
  2. dla każdego słowa dostać słowo wektor (jeśli nie jest tam zignorować słowa)
  3. średnie wszystkie wektory słowo dostał
  4. to zawsze daje wektor d-dim (d jest słowo wektor dim)

poniżej jest kod snipet

def getWordVecs(words, w2v_dict): 
    vecs = [] 
    for word in words: 
     word = word.replace('\n', '') 
     try: 
      vecs.append(w2v_model[word].reshape((1,300))) 
     except KeyError: 
      continue 
    vecs = np.concatenate(vecs) 
    vecs = np.array(vecs, dtype='float') 
    final_vec = np.sum(vecs, axis=0) 
return final_vec 

słów jest lista tokenów uzyskanych po tokenizing zdanie.