単語ベクトルと密なドキュメントの埋め込みを調べる必要があります。今すぐscikitを渡しています。行列X
を学びます。ここで、各行は、データセット内のドキュメントの数値表現です。あなたはtf-idfでこの表現を得ていますが、これは単語の類似性を捕捉していないことに気付きました。また、あなたはボキャブラリーの言葉で問題を抱えています。
可能な改善点は、類似の意味を持つ単語がこの300次元空間に近いような方法で、次元300と言う密なベクトルで各単語を表現することです。幸いにも、これらのベクタを最初から構築する必要はありません(gensim word2vecとspacyを参照してください)。もう一つの良いことは、Wikipediaのような非常に大きなコーパスに事前に訓練された単語埋め込みを使用することによって、あなたのコーパスから推測できなかったアルゴリズムに関する世界の言語情報をたくさん組み込んでいることです(sprintやrun同義語です)。
単語の意味的数値表現が得られたら、各文書のベクトル表現を取得する必要があります。最も簡単な方法は、文中の各単語の単語ベクトルを平均化することです。
例の擬似コードは、作業を開始します場合でも、単語をベクトルが類似しているか
>>> doc2 = nlp('I had a great sprint')
>>> doc2.vector
array([ 0.02453461, -0.00261007, 0.01455955, -0.01595449, -0.01795897,
-0.02184369, -0.01654281, 0.01735667, 0.00054854, ...
>>> doc2.similarity(doc1)
0.8820845113100807
注意(コサイン類似度の意味での):
>>> import spacy
>>> nlp = spacy.load('en')
>>> doc1 = nlp('I had a good run')
>>> doc1.vector
array([ 6.17495403e-02, 2.07064897e-02, -1.56451517e-03,
1.02607915e-02, -1.30429687e-02, 1.60102192e-02, ...
は今別のドキュメントを試すことができます異なっています。ベクトルは類似しているので、scikit-learnクラシファイアは同じカテゴリにそれらを割り当てることを学びます。 tf-idf表現では、これは当てはまりません。
これは、あなたがこれらのベクターを使用する方法であるscikit学習:
X = [nlp(text).vector for text in corpus]
clf.fit(X, y)
があなたの代わりにコンテキストをキャッチしようとする単語の袋を使用しようとしましたか? – MMF