找出文本的相似程度 - One Class Classifier (NLP)
Find how similar a text is - One Class Classifier (NLP)
我有一个包含近 5 亿条推文的大数据集。我正在做一些关于公司如何参与激进主义的研究,到目前为止,我已经标记了推文,可以根据推文中某些主题标签的存在将这些推文归为激进主义类别。
现在,让我们假设公司在推特上发布了一个激进主义主题,但没有在推文中插入任何标签。我的代码不会对其进行分类,我的想法是 运行 一个只有一个 class.
的 SVM classifier
这导致了以下问题:
- 这个解决方案在数据科学上是否可行?
- 是否存在任何其他-class class生成器?
- (最重要的是)是否有任何其他方法可以确定推文是否与包含激进主义主题标签的推文相似?
在此先感谢您的帮助!
您描述了 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" 的定义有多广泛,使用标准方法应该足以创建一个好的分类器。
我有一个包含近 5 亿条推文的大数据集。我正在做一些关于公司如何参与激进主义的研究,到目前为止,我已经标记了推文,可以根据推文中某些主题标签的存在将这些推文归为激进主义类别。
现在,让我们假设公司在推特上发布了一个激进主义主题,但没有在推文中插入任何标签。我的代码不会对其进行分类,我的想法是 运行 一个只有一个 class.
的 SVM classifier这导致了以下问题:
- 这个解决方案在数据科学上是否可行?
- 是否存在任何其他-class class生成器?
- (最重要的是)是否有任何其他方法可以确定推文是否与包含激进主义主题标签的推文相似?
在此先感谢您的帮助!
您描述了 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" 的定义有多广泛,使用标准方法应该足以创建一个好的分类器。