2016-03-01 10 views
14

コーパスから一般的なフレーズを超越することを計画していましたが、このためにフレーズモデルをgensimで使用しようとしましたが、以下のコードを試しました。gensimを使用してコーパスからフレーズを抽出する方法

私のコード

from gensim.models import Phrases 
documents = ["the mayor of new york was there", "machine learning can be useful sometimes"] 

sentence_stream = [doc.split(" ") for doc in documents] 
bigram = Phrases(sentence_stream) 
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', u'york', u'was', u'there'] 

しかし、それは

[u'the', u'mayor', u'of', u'new_york', u'was', u'there'] 

として来るべきではない。しかし、私はトンをしようとしたとき列車データの印刷ボキャブ、私はbigramを見ることができますが、私は間違っているテストデータで動作しない?私は問題の解決策を持って

print bigram.vocab 

defaultdict(<type 'int'>, {'useful': 1, 'was_there': 1, 'learning_can': 1, 'learning': 1, 'of_new': 1, 'can_be': 1, 'mayor': 1, 'there': 1, 'machine': 1, 'new': 1, 'was': 1, 'useful_sometimes': 1, 'be': 1, 'mayor_of': 1, 'york_was': 1, 'york': 1, 'machine_learning': 1, 'the_mayor': 1, 'new_york': 1, 'of': 1, 'sometimes': 1, 'can': 1, 'be_useful': 1, 'the': 1}) 

答えて

17

、私はフレーズ()モデルに渡されるべきそれの世話をしていない2つのパラメータがありました、それらは

  1. min_countですは、合計収集回数がこれよりも少ないすべての単語とバイグラムを無視します。 それBydefault値は5

  2. 閾値ある(より高い、より少ないフレーズを意味する)のフレーズを形成するための閾値を表しています。 (cnt(a、b) - min_count)* N /(cnt(a)* cnt(b))>閾値の場合、単語aとbのフレーズが受け入れられる。ここで、Nは合計語彙サイズである。 それBydefault値が2つの文と私の上の列データで10.0

で、しきい値は、だったので、私は電車のデータセットを変更し、これら2つのパラメータを追加します。

私の新しいコード

from gensim.models import Phrases 
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] 
bigram = Phrases(sentence_stream, min_count=1, threshold=2) 
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'] 

Gensimは本当にすごい:)

+1

あなたよりも貴重な答えのためです。しかし、この例では、bigramは "machine"、 "learning"を "machine_learning"としてキャッチしません。なぜそれが起こるか知っていますか? –

+1

トレーニングの前に文章に「機械学習」を2回追加した後、それを送信変数に追加すると、「machine_learning」が表示されます。そのペアの周波数が見えない場合は直感的に分かりません。 – ethanenglish

関連する問題