問題タブ [text2vec]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
4652 参照

r - R での非常に高速な単語 ngram ベクトル化

編集: 新しいパッケージ text2vec は優れており、この問題 (および他の多くの問題) を非常にうまく解決します。

CRAN の text2vec github の text2vec ngram トークン化を示すビネット

R には、文字ベクトルとしてインポートしたかなり大きなテキスト データセットがあります。

次のように、この文字データを bag-of-words 表現に変換できます。

したがって、R は約 3 秒で 1,000,000 百万の短い文をバッグオブワード表現にベクトル化できます (悪くない!):

このスパース マトリックスをglmnetまたはirlbaに投入して、テキスト データの非常に優れた定量分析を行うことができます。万歳!

ここで、この分析を、bag-of-words 行列ではなく、bag-of-ngrams 行列に拡張したいと思います。これまでのところ、これを行うために私が見つけた最速の方法は次のとおりです (CRAN で見つけることができるすべての ngram 関数は、このデータセットで詰まっているため、 SO から少し助けてもらいました):

これには約 150 秒かかります (純粋な r 関数としては悪くありません) が、より高速に処理してより大きなデータセットに拡張したいと考えています。

テキストのn-gramベクトル化のためにRに本当に高速な関数はありますか? 理想的には、文字ベクトルを入力として受け取り、ドキュメント x ngrams のスパース行列を出力として返すRcpp関数を探していますが、Rcpp 関数を自分で作成するためのガイダンスもあれば幸いです。

それが主なボトルネックであるため、関数のより高速なバージョンでfind_ngramsも役立ちます。R のトークン化は驚くほど高速です。

編集 1 別のサンプル データセットを次に示します。

この場合、bag-of-words 行列を作成する関数には約 30 秒かかり、bag-of-ngrams 行列を作成する関数には約 500 秒かかります。繰り返しになりますが、R の既存の n グラム ベクトライザーは、このデータセットを使用していないようです (ただし、間違っていることが証明されることを望みます!)

2 つのタイミングとタウを編集します。

0 投票する
1 に答える
1046 参照

r - R の text2vec パッケージで、関数 "create_vocab_corpus" が見つかりませんでした

http://dsnotes.com/articles/text2vectext2vecからパッケージを理解しようとして いましたが、次のステップで:

これで、DTM を構築できます。繰り返しになりますが、コーパス構築に関連するすべての関数にはストリーミング API があるため、イテレータを作成して create_vocab_corpus 関数に提供する必要があります。

このコードはエラーをスローします:

エラー: 関数 "create_vocab_corpus" が見つかりませんでした

0 投票する
1 に答える
1132 参照

r - キャレット問題による Text2Vec 分類

いくつかのコンテキスト: R でのテキスト分類と大きな疎行列の操作

私は、text2vecパッケージとcaret. 計画はtext2vec、ドキュメント用語マトリックスの構築、ボキャブラリの削除、およびあらゆる種類の前処理に使用することです。その後、さまざまなモデルを試しcaretますが、トレーニング時にキャレットが次のようなエラーをスローするため、結果を得ることができません。 :

これは、すべての折り畳みと繰り返しで発生します。キャレットがいくつかの計算を行う必要があるため、生成されるドキュメント用語マトリックスをベクトルに変換するときに問題があると思いtext2vecますが、正直なところよくわかりません。それがこの質問の主な理由です。

いくつかのスキップされた部分を含む、使用されたコードは次のようになります。caret返されるドキュメント用語マトリックスの直接の結果をフィードすることに注意してくださいtext2vec。これが問題ないかどうかは完全にはわかりません。

私が言ったように、train() 関数を起動すると問題が発生します。dtm_train オブジェクトのクラスは次のとおりです。

そして、構造は次のようになります。

私は何を間違っていますか?ドキュメントでキャレットができることを意味しているのに、なぜキャレットはこの種のデータを操作できないのですか?

0 投票する
1 に答える
1216 参照

r - Rのtext2vec-新しいデータを変換しますか?

text2vec パッケージの DTM (文書用語マトリックス) の作成に関するドキュメントがあります。たとえば、次の例では、マトリックスの作成後に TFIDF 重み付けが適用されます。

トレーニング データセットに基づいて DTM を作成し、そのデータセットをモデルへの入力として使用するのが一般的です。次に、新しいデータ (テスト セット) に遭遇すると、新しいデータに同じ DTM を作成する必要があります (つまり、トレーニング セットで使用されたすべての同じ用語を意味します)。とにかく、この方法で新しいデータセットを変換するパッケージがありますか (scikit には、このタイプのインスタンスのための変換メソッドがあります)。

0 投票する
1 に答える
2792 参照

r - text2vec R パッケージでの単語埋め込みの準備

text2vec パッケージの vignette に基づいて、単語の埋め込みを作成する例が提供されています。wiki データがトークン化され、パッケージで提供されるグローブ関数を使用して単語の埋め込みを作成するために使用される用語共起行列 (TCM) が作成されます。パッケージで提供される映画レビュー データの単語埋め込みを構築したいと考えています。私の質問は:

  1. すべての映画レビューを 1 つの長い文字列にまとめてからトークン化する必要がありますか?

これにより、2 つのレビュー間の境界トークンが同時に発生し、意味がありません。

単語埋め込みの開発に関心のあるデータは、次のように取得できます。

0 投票する
1 に答える
437 参照

r - Rでtext2vecを使用して重み付けされていないbag-of-wordsベースのTCMを計算しますか?

text2vecのパッケージを使用して、コーパスから用語と用語の共起行列 (または TCM) を計算しようとしていますR(優れた並列バックエンドがあるため)。私はこのチュートリアルに従いましたが、いくつかのおもちゃの例を調べているときに、create_tcm関数が用語と用語の共起値に対して何らかのスケーリングまたは重み付けを行っていることに気付きました。内部でスキップグラムを使用していることは知っていますが、ドキュメントにはそれらをどのようにスケーリングするかについては言及されていません-明らかに、より遠い用語/ユニグラムはより低く重み付けされています。

次に例を示します。

質問: この動作を無効にして、スキップ グラム ウィンドウ内のすべてのターム/ユニグラムが同等に扱われるようにする方法はありますか? つまり、用語が別の用語のコンテキスト ウィンドウ内でコーパス内に 2 回出現する場合、TCM マトリックスでは「2」と表示されます。

おまけの質問: デフォルトのスケーリングはどのように機能しますか? 最後の例にさらに「a」を追加すると、bc 値は直線的に減少するように見えますが、ba 値は実際には増加しますが、より多くの出現または「a」が「b」から離れて表示されます。

0 投票する
1 に答える
358 参照

matrix - text2vecで2つのGloVeモデルを整列させる方法は?

2 つの異なるコーパスに基づいて( in を使用text2vecして) 2 つの別個の GloVe ベクトル空間モデルをトレーニングしたとします。Rこれにはさまざまな理由が考えられます。たとえば、2 つのベース コーパスが 2 つの異なる時期に由来する場合や、2 つの非常に異なるジャンルに由来する場合があります。これら 2 つのコーパス間で単語の使用法/意味を比較することに興味があります。2 つのコーパスとその語彙を単純に連結した場合、それは機能しません (用法が異なる単語ペアのベクトル空間内の位置は、「中間」のどこかにあるだけです)。

私の最初のアイデアは、1 つのモデルだけをトレーニングすることでしたが、テキストを準備するときに、各単語に接尾辞 (_x、_y) を追加し (x と y は、コーパス x/y での単語 A の使用法を表します)、保持します。最終的に連結されたトレーニング コーパスの語彙が A、A_x、A_y、B、B_x、B_y ... などで構成されるように、サフィックスのない各コーパスの個別のコピー。

A と B の「平均的な」使用法は、空間の一種の「座標」として機能し、同じ空間で A_x と A_y の間の距離を測定できると考えました。しかし、A_x と A_y が同じコンテキストで発生することは決してないため (周囲のものを含むすべての単語の接尾辞のため)、これはおそらくスペースを歪め、機能しないことに気付きました。また、行列の整列に関連する直交プロクラステス問題と呼ばれるものがあることも知っていますが、私の場合はそれを実装する方法がわかりません。

R2 つの GloVe モデル (できれば で動作するように) を共通のベクトル空間に適合させるための合理的な方法は何でしょうか?text2vec私の最終的な目標が正書法的には同一であるが 2 つの単語ペアで発生する単語ペアのコサイン類似度を測定することである場合コーパスが違う?

0 投票する
1 に答える
1575 参照

r - text2vec のステミング関数

R で text2vec を使用していますが、text2vec パッケージの itoken 関数で機能するステミング関数を書くのが困難です。text2vec のドキュメントでは、このステミング関数が提案されています。

ただし、この機能は動作しません。これは私が実行したコードです(以前のstackoverflowの回答から借用):

これは、生成されるエラーです。

{ のエラー: 引数 "words" がありません。デフォルトはありません

wordStem には文字ベクトルが必要ですが、word_tokenizer は文字ベクトルのリストを生成することが問題だと思います。

SnowballC::wordStem(language = "en") のエラー: 引数 "words" がありません。デフォルトはありません

この問題を解決するために、次のステミング関数を作成しました。

ただし、この関数は create_vocabulary 関数では機能しません。

エラーはありませんが、ドキュメント カウントを見ると、ドキュメントの数がデータの 1000 とは異なるため、ドキュメント ターム マトリックスを作成したり、LDA を実行したりすることはできません。

[1] 10

このコード:

次のエラーが発生します。

10 x 3809 クラス "dgCMatrix" のスパース行列 validObject(x) のエラー: 無効なクラス "dgCMatrix" オブジェクト: 長さ (Dimnames[1]) は 10 である Dim[1] とは異なります

私の質問は次のとおりです: 私が書いた関数に何か問題がありますか? また、なぜ私が書いた関数が create_vocabulary でこのエラーを生成するのでしょうか? 関数の出力形式に問題があると思われますが、word_tokenizer 関数の出力形式と同じように見え、itoken と create_vocabulary で問題なく動作します。

0 投票する
2 に答える
248 参照

r - text2vec: 関数 create_vocabulary を使用した後、語彙を反復処理します

text2vec パッケージを使用して、語彙を作成しました。

語彙はこんな感じ

列 terms_counts の範囲を確認するにはどうすればよいですか? 次のステップである剪定の際に役立つので、これが必要です

以下のコードは再現可能です