2017-10-02 18 views
0

MxNetで文字列のセットをN-gramにしたい。おそらく、私はTFIDF Vectorizingのようなものをやっているだろうが、数と機能の限界を持つ単純なN-gramでも問題ないだろう。このための関数が組み込まれていますか?最善のアプローチは何でしょうか?MxNetでnグラムをどのように計算しますか?

現在、私は背中のステップと、なぜたちは伝統的にnグラムでテキストを表すことになりを聞いてみよう、Pythonので

def tfidf(str_list, ngram_width=3): 
    tf = {} 
    for s in str_list: 
     for start, end in zip(range(len(s) - ngram_width), 
           range(ngram_width, len(s))): 
      if s[start:end] not in tf: 
       tf[s[start:end]] = 0 
      tf[s[start:end]] += 1 

    idf = {} 
    for t in tf.keys(): 
     cnt = 0 
     for s in str_list: 
      if t in s: 
       cnt += 1 
      idf[t] = len(str_list)/(cnt + 1.0) 

    return {t:tf[t]*idf[t] for t in tf.keys()} 

答えて

0

それを計算しています。 Nグラムは興味深いコロケーション、すなわち一緒にグループ化された単語を捕捉しようとする。 「白い家」は、「白」と「家」という言葉が含まれていることを知るよりも潜在的に面白いです。

nグラムを使用することの欠点は、希薄さが増し、多くのコロケーションが頻度が低いことです。以前は見たことのない予測時間にコロケーションが発生する可能性があります。

ディープラーニングでは、LSTMなどのRNNを使用して、一連の単語によって言語でエンコードされたコロケーションと興味深い情報をキャプチャできます。

ディープラーニングのテキスト入力を処理する典型的な方法は、テキストのWord2Vecエンコーディング、たとえばLSTM(またはもっと上手くいくためにはBiLSTM)を使用することです。

+0

本当に質問には答えませんが、「なぜ」、MXNetには存在しません。私はちょうど(私の今MXNetでの経験を加えて)、あなたが[Scikit-learn's TFIDFVectorizer](http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer)を使うことができたことに気付くでしょう。 html)を最小限の困難で*あなたが本当にしたい場合* –

関連する問題