2017-07-01 47 views
5

Jeśli mam ciąg tekstowy do wektoryzacji, jak mam obsługiwać liczby wewnątrz niego? Albo jeśli zasilę sieć neuronową liczbami i słowami, w jaki sposób mogę zachować liczby jako liczby?Jak traktować liczby w ciągach tekstowych podczas wektoryzacji słów?

Mam zamiar zrobić słownik wszystkich moich słów (as suggested here). W takim przypadku wszystkie łańcuchy staną się tablicami liczb. Jak mam obsługiwać znaki, które są liczbami? jak wyprowadzić wektor, który nie miesza indeksu słów ze znakiem liczby?

Czy konwertowanie liczb na ciągi osłabia informacje, które przekazuję sieci?

+0

W wielu aplikacjach słowa, które nie istnieją w słowniku, są konwertowane na ''. W ten sam sposób, w zależności od aplikacji, wygodne może być przekonwertowanie wszystkich liczb na specjalny token, na przykład ''. –

Odpowiedz

2

Podany link sugeruje, że wszystko, co wynika z .split(' ') jest indeksowane - słowa, ale także liczby, prawdopodobnie emotikony, aso. (Nadal zajmę się znakami interpunkcyjnymi). Jeśli nie masz więcej wcześniejszej wiedzy o swoich danych lub problemie, możesz zacząć od tego.

EDIT

Przykład dosłownie za pomocą znaków i ich kod:

corpus = {'my car number 3'} 
dictionary = {} 
i = 1 
for tweet in corpus: 
    for word in tweet.split(" "): 
    if word not in dictionary: dictionary[word] = i 
    i += 1 
print(dictionary) 
# {'my': 1, '3': 4, 'car': 2, 'number': 3} 
+0

Ale wyobraź sobie, że mam słowo "samochód", które dostaje indeks '3' w moim słowniku. Jeśli mam też w tekście numer "3" (w zdaniu "Samochód numer 3"), nie ma sensu karmić sieci wektorem z fałszywymi powtarzającymi się liczbami, takimi jak [12, ** 3 **, 11, ** 3 **], które mogą być interpretowane jako 'Samochód z numerem samochodu'. – Rikard

+0

Nie masz numeru '3', masz * ciąg *' "3" ', który może być indeksowany dowolną liczbą. – user1735003

+0

Ale to usuwa z wejścia _Type_, będąc numerem to sama informacja. – Rikard

1

rozszerzając dyskusję @ user1735003 - Pozwala rozważyć obie strony liczb reprezentujących:

  1. traktując go jako ciąg znaków i uznając go za inne słowo i przypisać do niego identyfikator podczas tworzenia słownika. Lub
  2. Konwersja liczb na rzeczywiste słowa: "1" staje się "jeden", "2" jak "dwa" i tak dalej.

Czy drugi w ogóle zmienia kontekst? Aby to sprawdzić, możemy znaleźć podobieństwo dwóch reprezentacji przy użyciu word2vec. Wyniki będą wysokie, jeśli mają podobny kontekst.

Przykładowo 1 i one ma podobieństwa, 0,17, 2 i two mieć wynik podobieństwa 0.23. Wydaje się sugerować, że kontekst ich użycia jest zupełnie inny.

Traktując numery jak innym słowem, nie zmieniają kontekst ale wykonując żadnej innej transformacji na tych liczb, to nie może zagwarantować ich na lepsze. Lepiej więc pozostawić go nietknięte i potraktować jak inne słowo.

Uwaga: Zarówno word-2-vec i glove szkolono traktując jako ciągi liczb (przypadek 1).

0

Poniższy papieru może być pomocne: http://people.csail.mit.edu/mcollins/6864/slides/bikel.pdf

szczególności, strona 7.

przed wykorzystaniem <unknown> tag starają się zastąpić alfanumeryczny kombinację symboli z nazw pospolitych wzór tagi, takie jak:

FourDigits (good for years) 

Starałem się go wdrożyć i dała wspaniałe rezultaty.