具有文本输出标签的相似文本输入特征的分类

数据挖掘 喀拉斯 nlp 文本分类 gensim doc2vec
2022-02-17 09:48:54

我希望有人可以为我的项目提供指导/意见/建议,我相信 AI 可以提供帮助。

我对人工智能有一个大致的了解,但我缺乏正规的培训。
我从来没有自己从头开始构建过神经网络。

任务

构建一个能够为输入文本数据分配标签的分类模型。
与教科书示例不同的是,输入是自由文本,因此既不是分类的也不是数字的。
更复杂的是,我使用的训练数据中的预测变量通常彼此相似。

数据

  • 输入:由职位描述组成的短文本数据,例如。高级营销经理
    最短的词条由一个词组成,最长的词条可达~20个词。
    输入数据形成一个封闭列表(约 130k 个条目),但可能会出现新的、看不见的文本。
  • 标签:65 个文本标签的封闭列表(和相应的id

策略测试

对于之前的项目,我gensim使用相同的数据使用 Word2Vec 构建了一个词嵌入模型。
所以我使用这个模型来获取输入文本中每个单词的向量表示,然后计算质心以获得它的嵌入。

我使用此嵌入来训练和测试以下内容

  • 普通分类器:DecisionTree, RandomForest, NaiveBayes, KNeighborsClassifier-> 最大准确率 ~ 41%
  • 多标签分类器:OneVsRestClassifier, OneVsOneClassifier, OutputCodeClassifier-> 最大准确率 ~ 43%
  • keras- 在keras中发现的基于文本分类器的多文本特征输入和单个文本标签输出分类-> 最大准确度 ~ 46%
    不太确定这个网络是否适合我的任务,从描述来看,对我来说似乎如此

鉴于精度如此之低,我没有调整这些分类器的超参数。
我认为我应该首先建立一个具有更高基线性能的模型。

新战略

我认为训练输入数据的Doc2Vec嵌入并使用它来训练keras神经网络应该可以提高分类器的性能。
这是我的想法:

  • 创建一个 Doc2Vec(超)参数网格
  • 为每个组合训练一个新的 Doc2Vec 模型
  • 使用简单快速的分类器(例如 Logistic)测试每个新模型
  • 使用最高精度模型训练和测试分类keras神经网络

问题

在开始这个(漫长的)过程之前,我想征求意见:

  • 这种方法合理还是有人可以推荐一种更聪明的方法?
  • 谁能推荐要关注哪些 Doc2Vec 参数以及要设置哪些参数?
  • 我发现的keras神经网络是否适合这项任务,或者我应该修改它吗?如果是这样,怎么做?

非常感谢任何愿意阅读所有这些并提供建议的人。

2个回答

我建议您使用最先进的技术来解决此类问题:基于BERT的方法。鉴于在线提供了大量示例,这种方法有据可查并且非常易于访问。

该方法包括采用来自 BERT 系列的预训练神经网络模型(通常在大型数据集上针对掩码语言模型任务训练的 Transformer 编码器),并根据您的数据对其进行微调。

这将使您能够从以下方面获利:

  • BERT 的子词词汇,这将避免出现词汇外的词,因为它将词分解成更小的片段。
  • 迁移学习的力量,这将减轻您没有大量数据的情况。
  • 最先进的表演。您可以在paperwithcode上查看基于 BERT 的方法在标准文本分类基准测试中经常表现最佳。

Hugginface Transformers是文档记录和维护最完善的 Python 库之一您可以在此处查看有关如何对自定义数据集进行文本分类的一些示例

关于训练系统的计算资源,如果有的话,你可以使用自己的 GPU,也可以在 CPU 上训练(考虑到你的序列长度很短,这可能是可行的),或者你可以使用Google Colab,如果你有不需要太多的训练时间。

这种做法是合理的。短文本输入和多类分类输出是一个具有挑战性的问题。

Genism 的 doc2vec 超参数可能比收集更多数据或减少标签数量更重要。

尝试更高级的模型可能会很有用,例如TransformerSwitch Transformer