У меня есть файл .csv с каждой строкой, содержащей два столбца: сам текст и вычисленное соотношение тип / токен.
type_token_ratio = Pipeline([
('selector',NumberSelector(key='type_token_ratio')),
('standard',StandardScaler())
])
class NumberSelector(BaseEstimator, TransformerMixin):
def __init__(self,key):
self.key = key
def fit(self, X, y=None):
return self
def transform(self, X):
return X[[self.key]]
type_token_ratio.fit_transform(train_texts)
classifier = Pipeline([
('feats', type_token_ratio),
('cls', LinearSVC())
])
classifier.fit(train_texts,train_labels)
y_pred = classifier.predict(test_texts)
print(f1_score(test_labels,y_pred,average='macro'))
К сожалению, классификатор присваивает тестовым текстам только две метки большинства классов из восьми возможных, что приводит к значению f1, аналогичному основанной на случайности базовой линии. Это происходит с каждой функцией отношения, которую я пробовал, включая среднюю длину слова и среднюю длину предложения. Все такие функции являются поплавками. Что мне нужно сделать, чтобы использовать такие функции?