私は機械学習技術を適用するために3-gramモデルを作成しようとしています。可能なすべての3-gramでベクトル化するトライグラム - Python
は基本的に私は次のようにしようとしている:
import nltk
from sklearn.feature_extraction.text import CountVectorizer
import itertools
my_array = ['worda', 'wordb']
vector = CountVectorizer(analyzer=nltk.trigrams,ngram_range=(3,3))
vector.fit_transform(my_array)
私の語彙:
{('o', 'r', 'd'): 0,
('r', 'd', 'a'): 1,
('r', 'd', 'b'): 2,
('w', 'o', 'r'): 3}
私の言葉はどれも、スペースや特殊文字を持っていません。 だから私はこの実行すると:
tr_test = vector.transform(['word1'])
print(tr_test)
print(tr_test.shape)
を、私はこのリターンを得る:
(0, 0) 1
(0, 1) 1
(0, 3) 1
(1, 4) #this is the shape
私はこれが正しいと思う...少なくとも理にかなって... しかし、私は各単語を表現したいと思いますすべての3グラムの可能性を含む行列を使用します。したがって、各作業は(1x17576)の行列で表されます。 私のボキャブラリは自分のデータに基づいて構築されているので、今は1x4の行列を使っています(この例の場合)。
17576(263) - (... AAA、AAB、AACなど)のアルファベットで、すべての3つの文字の組み合わせを表します
私は次のように、すべての3グラムの可能性を持つ配列への私の語彙を設定しようとしましたこの:
#This creates an array with all 3 letters combination
#['aaa', 'aab', 'aac', ...]
keywords = [''.join(i) for i in itertools.product(ascii_lowercase, repeat = 3)]
vector = CountVectorizer(analyzer=nltk.trigrams,ngram_range=(3,3), vocabulary=keywords)
これは機能しませんでした...誰かがこれを行う方法を理解することができますか?
ありがとうございました!