2017-06-09 10 views
2

私は、gensimモデルを使用してデータを処理している間に、そのデータを訓練してdoc2vecファイルを作成しました。私はエラーが発生しています。 は、私は以下のコードを実行しています: -pythonでgensimモデルを使用しているときにエラーが発生しました

モデル= Doc2Vec.load( 'sentiment140.d2v')

if len(sys.argv) < 4: 
    print ("Please input train_pos_count, train_neg_count and classifier!") 
    sys.exit() 

train_pos_count = int(sys.argv[1]) 
train_neg_count = int(sys.argv[2]) 
test_pos_count = 144 
test_neg_count = 144 

print (train_pos_count) 
print (train_neg_count) 

vec_dim = 100 

print ("Build training data set...") 
train_arrays = numpy.zeros((train_pos_count + train_neg_count, vec_dim)) 
train_labels = numpy.zeros(train_pos_count + train_neg_count) 

for i in range(train_pos_count): 
    prefix_train_pos = 'TRAIN_POS_' + str(i) 
    train_arrays[i] = model.docvecs[prefix_train_pos] 
    train_labels[i] = 1 

for i in range(train_neg_count): 
    prefix_train_neg = 'TRAIN_NEG_' + str(i) 
    train_arrays[train_pos_count + i] = model.docvecs[prefix_train_neg] 
    train_labels[train_pos_count + i] = 0 


print ("Build testing data set...") 
test_arrays = numpy.zeros((test_pos_count + test_neg_count, vec_dim)) 
test_labels = numpy.zeros(test_pos_count + test_neg_count) 

for i in range(test_pos_count): 
    prefix_test_pos = 'TEST_POS_' + str(i) 
    test_arrays[i] = model.docvecs[prefix_test_pos] 
    test_labels[i] = 1 

for i in range(test_neg_count): 
    prefix_test_neg = 'TEST_NEG_' + str(i) 
    test_arrays[test_pos_count + i] = model.docvecs[prefix_test_neg] 
    test_labels[test_pos_count + i] = 0 


print ("Begin classification...") 
classifier = None 
if sys.argv[3] == '-lr': 
    print ("Logistic Regressions is used...") 
    classifier = LogisticRegression() 
elif sys.argv[3] == '-svm': 
    print ("Support Vector Machine is used...") 
    classifier = SVC() 
elif sys.argv[3] == '-knn': 
    print ("K-Nearest Neighbors is used...") 
    classifier = KNeighborsClassifier(n_neighbors=10) 
elif sys.argv[3] == '-rf': 
    print ("Random Forest is used...") 
    classifier = RandomForestClassifier() 

classifier.fit(train_arrays, train_labels) 

print ("Accuracy:", classifier.score(test_arrays, test_labels)) 

私はKeyError例外取得しています - 私が知りたい "TEST_POS_72" ERROR

を私が間違ってやっていること。

答えて

0

エラーは文字通り、キー( 'タグ')を持つdoc-vector TEST_POS_72はモデルの一部ではないことを意味します。トレーニング中にそのタグが書かれた書類はありませんでした。

model.docvecs.offset2doctagにモデル内のすべての既知のdoc-tagsのリストが表示されます。 TEST_POS_72が存在しない場合は、model.docvecs['TEST_POS_72']でdoc-vectorにアクセスすることはできません。 (もしそのリストが空であれば、doc-vectorsはプレーンなintキーでアクセスするように訓練されていました - そしてmodel.docvecs[72]はdoc-vectorにアクセスするより適切な方法でしょう)

(Doc2Vecは動作しませんGensimの最適化されたCコンパイルルーチンがインストールの一部ではなく、トレーニングは100倍になることを意味しています。またはそれより遅い)

関連する問題