基于大型字符串字典的Python文本分类

我有一个数据集,相当于一个包含500万个键值对的字典,键和值都是字符串。
每个键都是唯一的,但只有几百种不同的值。

键不是自然语言的词汇,而是技术参考。值是“家族”,用于分组相似的技术参考。这里的“相似”是指“具有相似的正则表达式”、“包含相似的字符”或某种模式。

键值对的示例:

ADSF33344 : G1112AWDX45603 : G1112D99991111222 : X3334E98881188393 : X3334A30-00005-01 : B0007B45-00234-07A : B0007F50-01120-06 : B0007

最终目标是向算法提供一组新的参考(之前从未见过),算法将为每个参考返回一个建议的家族,理想情况下,还会附带一个基于数据集学习结果的置信度百分比。
建议的家族只能来自数据集中已有的家族,不需要“发明”新的家族名称。

我不熟悉机器学习,所以不知道从哪里开始。我看到了一些通过Sklearn或TextBlob的解决方案,我明白我需要的是一个分类算法,但每个教程都倾向于分析大型文本。
不知何故,我找不到如何处理我的问题,尽管它似乎比分析自然语言的新闻文章要“简单”…

你能为我推荐一些来源或教程吗?


回答:

制作一个训练数据集,并训练一个分类器。大多数分类器基于你自己定义的一组特征的值来工作。(特征的类型取决于分类器;在某些情况下它们是数值量,在其他情况下是真/假,还有一些可以取几个离散值。)你提供特征,分类器决定每个特征的重要性,以及如何解释它们的组合。

作为教程,你可以查看NLTK书的第6章。示例任务,将名字分类为男性和女性,在结构上与你的非常接近:基于短字符串(名字)的形式,将它们分类到类别(性别)中。

你将每个零件号转换成一个特征字典。由于你没有向我们展示真实数据,没有人能给你具体的建议,但你绝对应该像书中那样制作通用特征,此外,你还应该将你知道的每一个线索,无论强弱,都转化为特征。如果供应商ID的长度不同,就制作一个长度特征。如果连字符的存在(或数量或位置)是一个线索,就将其转化为特征。如果某些供应商的零件使用了大量的零,也同样处理。然后为其他任何可能有用的东西制作额外的特征,例如“前三个字母”。一旦你有一个工作系统,就可以尝试不同的特征集和不同的分类器引擎和算法,直到获得可接受的性能。

为了在新数据上获得良好的结果,别忘了将你的训练数据分成训练、测试和评估子集。你可以将所有这些与任何分类器一起使用,但NLTK的Naive Bayes分类器训练速度相当快,所以你可以从那里开始。(注意,特征可以是离散值,例如first_letter可以是实际的字母;你不需要坚持使用布尔特征。)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注