Próbuję użyć jednej z metod nadzorowanego uczenia scikit-learn, aby sklasyfikować fragmenty tekstu w jedną lub więcej kategorii. Funkcja przewidywania wszystkich algorytmów, które wypróbowałem, zwraca tylko jedno dopasowanie.
Na przykład mam fragment tekstu:
"Theaters in New York compared to those in London"
Wyszkoliłem algorytm, aby wybierał miejsce dla każdego fragmentu tekstu, który go karmię.
W powyższym przykładzie chciałbym, aby powrócił New York
i London
, ale tylko zwraca New York
.
Czy można użyć scikit-learn do zwrócenia wielu wyników? A może nawet zwrócić etykietę z kolejnym największym prawdopodobieństwem?
Dzięki za pomoc.
---Aktualizacja
Próbowałem użyć, OneVsRestClassifier
ale nadal otrzymuję tylko jedną opcję z powrotem na fragment tekstu. Poniżej znajduje się przykładowy kod, którego używam
y_train = ('New York','London')
train_set = ("new york nyc big apple", "london uk great britain")
vocab = {'new york' :0,'nyc':1,'big apple':2,'london' : 3, 'uk': 4, 'great britain' : 5}
count = CountVectorizer(analyzer=WordNGramAnalyzer(min_n=1, max_n=2),vocabulary=vocab)
test_set = ('nice day in nyc','london town','hello welcome to the big apple. enjoy it here and london too')
X_vectorized = count.transform(train_set).todense()
smatrix2 = count.transform(test_set).todense()
base_clf = MultinomialNB(alpha=1)
clf = OneVsRestClassifier(base_clf).fit(X_vectorized, y_train)
Y_pred = clf.predict(smatrix2)
print Y_pred
Wynik: [„Nowy Jork” „Londyn” „Londyn”]