web-dev-qa-db-ja.com

文または文書をベクターに変換するにはどうすればよいですか?

単語をベクトルに変換するためのモデル(Word2vecモデルなど)があります。おそらく個々の単語について学習したベクトルを使用して、文/文書をベクトルに変換する同様のモデルが存在しますか?

49
Sahil

1)グラム方式をスキップ: ここに論文 およびそれを使用するツール google Word2vec

2) LSTM-RNN を使用して、文の意味表現を形成します。

3) 文章と文書 の表現。この論文では段落ベクトルを紹介します。基本的には、文、段落、文書などのテキストの可変長部分から固定長の機能表現を学習する教師なしアルゴリズムです。

4) paper は文/段落のベクトルを形成しませんが、それを行うのに十分簡単です。個々のWordベクトルをプラグインするだけで( GloveWordベクトル が最高のパフォーマンスを発揮することがわかります)、文/段落全体のベクトル表現を形成できます。

5) [〜#〜] cnn [〜#〜] to summarize ドキュメントを使用します。

43
Azrael

すべてに依存します:

  • 使用しているベクトルモデル
  • モデルの目的は何ですか
  • wordベクトルをドキュメントベクトルに結合する創造性

Word2Vecを使用してモデルを生成した場合、次のいずれかを試すことができます。

または、一部の人々が行うこと、つまりドキュメント内のすべてのコンテンツワードを合計し、コンテンツワードで除算することができます。 https://github.com/alvations/oque/blob/master/o.py#L1 (注:17-18行目はノイズを減らすためのハックです):

def sent_vectorizer(sent, model):
    sent_vec = np.zeros(400)
    numw = 0
    for w in sent:
        try:
            sent_vec = np.add(sent_vec, model[w])
            numw+=1
        except:
            pass
    return sent_vec / np.sqrt(sent_vec.dot(sent_vec))
17
alvas

すぐに入手できるソリューションですが、特定のことをしようとしている場合は、精度の点でおそらく打つのは難しいでしょう:

RNNを構築し(LSTMまたはGRUメモリセル、 ここでの比較 )、達成しようとしている実際のタスクのエラー関数を最適化します。文章をフィードし、必要な出力を生成するようにトレーニングします。センテンスを入力した後のネットワークのアクティベーションは、センテンスの表現です(ただし、ネットワークの出力のみを気にする場合があります)。

文は、ワンホットエンコードされた文字のシーケンス、ワンホットエンコードされた単語のシーケンス、またはワードベクトルのシーケンスとして表現できます(例 GloVe または Word2vec =)。 Wordベクトルを使用する場合、Wordベクトルへの逆伝播を続けて重みを更新できるため、実行中のタスク専用に調整されたカスタムWordベクトルも取得できます。

15
larspars

この質問に答える方法はたくさんあります。答えはフレーズや文章の解釈に依存します。

各Wordのベクトル表現を提供するWord2vecなどのこれらの分布モデルは、他の単語との関係で、ウィンドウベースのコンテキストでWordが通常どのように使用されるかを示すだけです。このコンテキストと単語の関係の解釈に基づいて、文のすべての単語の平均ベクトルを文のベクトル表現として取得できます。たとえば、この文では:

ベジタリアンは野菜を食べます。

V_s

正規化されたベクトルをベクトル表現として使用できます。

V(sentence)

問題は文章の構成的性質にあります。上記のように平均的なWordベクトルを取得すると、これらの2つの文は同じベクトル表現になります。

野菜はベジタリアンを食べます。

コーパス処理を介してツリー構造を学習するために、分布様式で多くの研究があります。例: 組成ベクトル文法を使用した解析 。この video もこの方法を説明しています。

繰り返しますが、解釈を強調したいと思います。これらの文ベクトルは、おそらくアプリケーションで独自の意味を持ちます。たとえば、 スタンフォードのこのプロジェクト のセンチメント分析では、彼らが求めている意味は文のポジティブ/ネガティブな感情です。文の完全なベクトル表現を見つけたとしても、真実の条件を判断できない場合、これらは文の実際の意味ではないという哲学的な議論があります(David Lewis "General Semantics" 1970)。それが、コンピュータービジョンに焦点を当てた作品のラインがある理由です( このペーパー または このペーパー )。私のポイントは、アプリケーションとベクトルの解釈に完全に依存できるということです。

13
Mehdi

実装を歓迎してください。他の多くの解決策を試した後、映画のプロットを分析用に変換する際に同様の問題に直面しました。仕事を簡単にする実装に固執しました。コードスニペットは以下に添付されています。

次のリンクから「spaCy」をインストールします。

import spacy
nlp = spacy.load('en')
doc = nlp(YOUR_DOC_HERE)
vec = doc.vector

お役に立てれば。

1
Sai Harsha