2017-09-10 14 views
1

Gensimのフレーズを使用して文中のバイグラムを次のように取得しようとしています。それは「ニューヨーク」として「新しい」、「ニューヨーク」をキャッチしていてもGensimを使用してフレーズを抽出する際のエラー

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) 

for sent in sentence_stream: 
    tokens_ = bigram_phraser[sent] 
    print(tokens_) 

、それは彼らができたexample shown in Gensim Websiteで、

しかし、「機械学習」として学習、「機械」をキャッチしていません「機械」という言葉を「機械学習」として「学習」する。

それはおそらくあなたのthresholdを下回っている

答えて

1

gensim Phrasesによって使用される技術は、純粋共起の統計に基づいている単語は、式もmin_countによって影響を受けるとthreshold値と比較において、単独に対して、一緒に現れる頻度。

トレーニングセットに「new」と「york」が2回並んでいるのに対して、「machine」や「learning」などの他の単語は、一度お互いにしか発生しませんが、new_yorkはバイグラム、および他のペアリングは行いません。さらに、min_countthresholdの組み合わせで、「machine_learning」をバイグラムに昇格させても、でもと他のすべてのbigram-that-appear-onceがペアになります。これはおそらくあなたが望むものではありません。

実際には、これらの統計的手法から適切な結果を得るには、さまざまな現実的なデータが必要です。 (玩具サイズの例は、表面的に玩具サイズの理由で表面的に成功したり失敗したりする可能性があります。)

それでも、人が妥当であると考える組み合わせを見逃しがちです。どうして?私たちの心は、言葉のまとまりが単一の概念を表す時を決定するためのより洗練された方法(文法と現実の知識を含む)を持っているからです。

もっと良いデータであっても、無意味なnグラムのために準備してください。あなたの目標に全体的に改善しているかどうかをモデルで調整するか、自分の感性に合ったシングルポイントやアドホックなチェックではなく、モデルを調整してください。

(参照gensimドキュメンテーションコメントについては、私はあなたがそこに記載されているだけで2つの文にPhrasesをしようとした場合、それは希望フレーズのいずれか見つけることができませんことをかなり確信している - ではない「New_Yorkの」または「machine_learning」を。具体的な例として、楕円...はトレーニングセットが大きいことを意味し、結果は余分なテキストが重要であることを示しています。同様の例を追加して、 'machine_learning'を統計的に外側にあるペアリングのように見せて、あなたのコードは 'machine_learning'を宣伝することができます)。

+1

これは本当に素晴らしい答えです。 –

0

上記の例では、私はバイグラムとして「機械学習」を取得する方法を教えてください?

もっとデータを使用してください。

+0

ありがとうございました。しかし、私は閾値を1,2,3などに変更しました。しかし、それは動作しませんでした:( –

+2

もっとデータを使用して... –

関連する問題