Простой поиск Google дает https://www.nltk.org/api/nltk.sentiment.html, который имеет предиктор субъективности. Это в контексте настроений, если вы смотрите на что-то оторванное от этого, вы можете взглянуть на набор данных Pang and Lee 2004. Используя простой векторизованный SVM, я получил точность 90%. Вот фрагмент кода, определяющий класс (из моего GitHub), если вы хотите весь код, я могу предоставить больше.
class ObjectivityDetector():
'''SVM predicts the objectivity/subjectivity of a sentence. Trained on pang/lee 2004 with NER removal. Pre-grid searched and 5 fold validated and has a 90% accuracy and 0.89 F1 macro'''
def __init__(self,train,model_file=None):
self.pipeline = Pipeline(
[
('vect', CountVectorizer()),
('tfidf', TfidfTransformer()),
('clf', CalibratedClassifierCV( #calibrated CV wrapping SGD to get probability outputs
SGDClassifier(
loss='hinge',
penalty='l2',
alpha=1e-4,
max_iter=1000,
learning_rate='optimal',
tol=None,),
cv=5)),
]
)
self.train(train)
def train(self,train):
learner = self.pipeline.fit(train['text'],train['truth'])
self.learner = learner
def predict(self,test):
predicted = self.learner.predict(test)
probs = self.learner.predict_proba(test)
certainty = certainty_(probs)
return predicted,certainty
def score(self,predicted,test):
acc = accuracy_score(test['truth'].to_numpy(),predicted[0])*100
f1 = f1_score(test['truth'].to_numpy(),predicted[0], average='macro')
print("Accuracy: {}\nMacro F1-score: {}".format(acc, f1))
return acc,f1