找出文本的相似程度 - One Class Classifier (NLP)

Find how similar a text is - One Class Classifier (NLP)

我有一个包含近 5 亿条推文的大数据集。我正在做一些关于公司如何参与激进主义的研究,到目前为止,我已经标记了推文,可以根据推文中某些主题标签的存在将这些推文归为激进主义类别。

现在,让我们假设公司在推特上发布了一个激进主义主题,但没有在推文中插入任何标签。我的代码不会对其进行分类,我的想法是 运行 一个只有一个 class.

的 SVM classifier

这导致了以下问题:

在此先感谢您的帮助!

您描述了 class 个名为 "Positive Unlabelled Learning" 的 PUL 问题的设置。这个名字来自于你有两种类型的数据:积极的("activism" 标签)和未标签的(可能 "activism",也许不是)。您使用 SVM 的想法很常见,随机森林也是如此。然而,与所有 ML 问题一样,神经网络正变得越来越普遍。

pywsl 是一个 "weak supervision" 库,其中包含一些 PUL 实现(PUL 是一种弱监督)。这是在一些合成数据上使用它的示例

import numpy as np

from sklearn.model_selection import GridSearchCV, StratifiedKFold
from sklearn.utils.estimator_checks import check_estimator

from pywsl.pul import pumil_mr
from pywsl.utils.syndata import gen_twonorm_pumil
from pywsl.utils.comcalc import bin_clf_err


def main():
    prior = .5
    x, y, x_t, y_t = gen_twonorm_pumil(n_p=30, n_u=200, 
                                       prior_u=prior, n_t=100)
    param_grid = {'prior': [prior], 
                  'lam': np.logspace(-3, 1, 5), 
                  'basis': ['minimax']}
    lambda_list = np.logspace(-3, 1, 5)
    clf = GridSearchCV(estimator=pumil_mr.PUMIL_SL(), 
                       param_grid=param_grid,
                       cv=5, n_jobs=-1)
    clf.fit(x, y)
    y_h = clf.predict(x_t)
    err = 100*bin_clf_err(y_h, y_t, prior)
    print("MR: {}%".format(err))


if __name__ == "__main__":
    main()

此外,请参阅这个可能重复的问题,Binary semi-supervised classification with positive only and unlabeled data set

Sam H 对按原样使用您的数据集有一个很好的回答,但我强烈建议您对数据进行注释,以便您有几百个负面示例,这应该不会花费一个小时。取决于您对 "activism" 的定义有多广泛,使用标准方法应该足以创建一个好的分类器。