2015-05-18 7 views
17

Wyszkoliłem model word2vec przy użyciu korpusu dokumentów z Gensim. Gdy model trenuje, piszę następujący fragment kodu, aby uzyskać wektor funkcji surowca słowa "zobacz".Jak sprawdzić, czy istnieje klucz w wyszkolonym modelu word2vec czy nie

myModel["view"] 

Jednak dostaję KeyError za słowa, które prawdopodobnie dlatego, że to nie istnieje jako klucza na liście kluczy zaindeksowane przez word2vec. Jak mogę sprawdzić, czy klucz wychodzi z indeksu przed próbą uzyskania surowego wektora funkcji?

Odpowiedz

1

Odpowiadając na moje własne pytanie tutaj.

Word2Vec udostępnia metodę o nazwie zawierającą ("widok"), która zwraca wartość True lub False na podstawie tego, czy odpowiednie słowo zostało zindeksowane, czy nie.

+3

W celu późniejszego wykorzystania nie działa to niezależnie. 'Obiekt 'Word2Vec' nie ma atrybutu" zawiera "' – CentAu

21

Word2Vec zapewnia również człon "vocab", do którego można uzyskać bezpośredni dostęp.

Korzystanie z pythonistic podejście:

if word in w2v_model.vocab: 
    # Do something 

EDIT Od gensim zwolnić 2.0 API dla Word2Vec zmieniło. Aby uzyskać dostęp do słownictwa należy teraz użyć tego:

if word in w2v_model.wv.vocab: 
    # Do something 
+0

@MohitJain A w jaki sposób to nie dostawca odpowiedzi na swoje pytanie? Myślę, że moja odpowiedź ma sens, biorąc pod uwagę, że jest to kod, którego używam do rozwiązania tego problemu. –

+0

Jedna wkładka bez objaśnień jest bardziej odpowiednia dla komentarzy. Możesz zebrać więcej upvotes, jeśli możesz dodać krótkie wyjaśnienie dla czytelników takich jak ja. –

+0

Dzięki za wyjaśnienie, zauważono! –

0

Hej wiem jestem późno ten post, ale tutaj jest kawałek kodu, który może obsługiwać ten problem również. Ja go używać w moim kodu i działa jak czar :)

size = 300 #word vector size 
    word = 'food' #word token 

    try: 
     wordVector = model[word].reshape((1, size)) 
    except KeyError: 
     print "not found! ", word 

UWAGA: Używam Pythona Gensim Biblioteka dla modeli word2vec

3

konwersji modelu do wektorów z

word_vectors = model.wv 

następnie możemy wykorzystać

if 'word' in word_vectors.vocab 
0

ja generalnie użyć filtru:

for doc in labeled_corpus: 
    words = filter(lambda x: x in model.vocab, doc.words) 

Jest to jeden prosty sposób na uzyskanie obok rzucony wyjątek KeyError na niewidzialnych słów.