2017-09-09 20 views
1

J'utilise actuellement uni-grammes dans mon modèle word2vec comme suit.Get bigrams et trigrams dans word2vec Gensim

def review_to_sentences(review, tokenizer, remove_stopwords=False): 
    #Returns a list of sentences, where each sentence is a list of words 
    # 
    #NLTK tokenizer to split the paragraph into sentences 
    raw_sentences = tokenizer.tokenize(review.strip()) 

    sentences = [] 
    for raw_sentence in raw_sentences: 
     # If a sentence is empty, skip it 
     if len(raw_sentence) > 0: 
      # Otherwise, call review_to_wordlist to get a list of words 
      sentences.append(review_to_wordlist(raw_sentence, \ 
       remove_stopwords)) 
    # 
    # Return the list of sentences (each sentence is a list of words, 
    # so this returns a list of lists 
    return sentences 

Cependant, alors je vais manquer des bigrams et des trigrams importants dans mon ensemble de données.

E.g., 
"team work" -> I am currently getting it as "team", "work" 
"New York" -> I am currently getting it as "New", "York" 

Par conséquent, je veux capturer les bigrammes importants, etc. trigrammes dans mon ensemble de données et d'entrée dans mon modèle word2vec. Je suis nouveau à WordVec et luttes comment le faire. Aidez-moi, s'il vous plaît.

+0

Fournissez du code et un meilleur exemple. L'exemple que vous montrez ne reflète pas les données que vous avez fournies dans la première ligne – AK47

+0

Fait! Mise à jour de la question S'il vous plaît aidez-moi à résoudre ce problème. –

Répondre

2

Tout d'abord, vous devez utiliser la classe de gensim Phrases afin d'obtenir bigrams, qui fonctionne comme indiqué dans le doc

>>> bigram = Phraser(phrases) 
>>> sent = [u'the', u'mayor', u'of', u'new', u'york', u'was', u'there'] 
>>> print(bigram[sent]) 
[u'the', u'mayor', u'of', u'new_york', u'was', u'there'] 

Pour obtenir trigrammes et ainsi de suite, vous devez utiliser le modèle bigramme que vous avez déjà et appliquez des Phrases à nouveau, et ainsi de suite. Exemple:

trigram_model = Phrases(bigram_sentences) 

Aussi il y a un bon ordinateur portable et vidéo qui explique comment utiliser cette .... the notebook, the video

La partie la plus importante est comment l'utiliser dans des phrases de la vie réelle qui est la suivante:

// to create the bigrams 
bigram_model = Phrases(unigram_sentences) 

// apply the trained model to a sentence 
for unigram_sentence in unigram_sentences:     
      bigram_sentence = u' '.join(bigram_model[unigram_sentence]) 

// get a trigram model out of the bigram 
trigram_model = Phrases(bigram_sentences) 

espoir que cela vous aide, mais la prochaine fois nous donner plus d'informations sur ce que vous utilisez et etc.

P.S: Maintenant que vous l'avez édité, vous ne faites rien pour obtenir des bigrams juste en le séparant, vous devez utiliser Phrases pour obtenir des mots comme New York comme bigrams.

+0

Merci pour votre précieuse réponse. Mais quand j'utilise bigram = Phraser (phrases). il dit un nom non défini Phraser et des phrases. Ai-je besoin de les importer? –

+1

@Volka Oui vous avez besoin de les importer, il est dans les modèles de gensim, je sais que les docs gensim sont confus parfois – nitheism

+0

@nitheism S'il vous plaît laissez-moi savoir si vous connaissez une réponse à cette https://stackoverflow.com/questions/46137572/error-in-extraction-phrases-using-gensim –

-1
from gensim.models import Phrases 

from gensim.models.phrases import Phraser 

documents = 
["the mayor of new york was there", "machine learning can be useful sometimes","new york mayor was present"] 

sentence_stream = [doc.split(" ") for doc in documents] 
print(sentence_stream) 

bigram = Phrases(sentence_stream, min_count=1, threshold=2, delimiter=b' ') 

bigram_phraser = Phraser(bigram) 


print(bigram_phraser) 

for sent in sentence_stream: 
    tokens_ = bigram_phraser[sent] 

    print(tokens_) 
+0

@ user8566323 vous devez importer ci-dessous de gensim.models importation Phrases de gensim.models.phrases importation Phraser – brb