查找文本的相似程度 - 一类分类器 (NLP)

Posted

技术标签:

【中文标题】查找文本的相似程度 - 一类分类器 (NLP)【英文标题】:Find how similar a text is - One Class Classifier (NLP) 【发布时间】:2020-04-01 22:08:42 【问题描述】:

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

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

这导致了以下问题:

这种解决方案在数据科学上是否可行? 是否存在任何其他一类分类器? (最重要的是)是否有任何其他方法可以确定推文是否类似于包含激进主义主题标签的推文的启用?

提前感谢您的帮助!

【问题讨论】:

【参考方案1】:

Sam H 对按原样使用您的数据集有一个很好的答案,但我强烈建议您对数据进行注释,这样您就有几百个否定示例,这应该花费不到一个小时。根据您对“激进主义”的定义有多宽泛,使用标准方法制作一个好的分类器应该足够了。

【讨论】:

SamH 同意这一点。我试图按要求回答这个问题,但这是个好建议【参考方案2】:

您已将设置描述为一类称为“积极无标签学习”的问题,PUL。这个名字来源于你有两种类型的数据:正面的(“激进主义”标签)和无标签的(也许是“激进主义”,也许不是)。您使用 SVM 的想法很常见,随机森林也是如此。然而,与所有 ML 问题一样,神经网络正变得越来越普遍。

pywsl 是一个“弱监督”库,其中包括一些 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

【讨论】:

以上是关于查找文本的相似程度 - 一类分类器 (NLP)的主要内容,如果未能解决你的问题,请参考以下文章

NLP之文本分类

NLP-06fastText文本分类算法

用于文本分类的一类 SVM 模型(scikit-learn)

如何针对我的 NLP 朴素贝叶斯分类器测试新词集

NLP工具

NLP文本分类TorchText实战-AG_NEWS 新闻主题分类任务(PyTorch版)