深度学习打标签演化的Flow推荐模型

inline

基于OpenML框架的flow推荐


各种不同任务的深度学习标签的例子

音乐: Pytorch implementation of “Sample-level Deep Convolutional Neural Networks for Music Auto-tagging Using Raw Waveforms”

词性: 使用CoNLL-2012数据集的一部分和42个可能的标记来实现RNN并比较不同类型的RNN的词性标记任务。

RNN-for-tagging: Pytorch implementation of LSTM, Bi-LSTM and Bi-LSTM-CRF which are in the context of NER.

命名实体识别(NER):sequence tagging for NER for ULMFiT

Sequence Tagger implementation:build model that is used for sequence tagging (POS Tag, NER, etc.).

电影多标签分类器:使用TensorFlow Hub和Estimators构建文本分类模型

新闻话题地点多标签分类:With a given news, our task is to give it one or multiple tags. The dataset is divided into five main categories.

鸢尾花分类:多标签图片分类。标签总量少。


相关技术

ULMFiT-用于文本分类的通用语言模型微调:一种可以在任何自然语言处理任务上实现类似CV的转移学习的方法。

命名实体识别(NER):是信息提取、问答系统、句法分析、机器翻译等应用领域的重要基础工具,在自然语言处理技术走向实用化的过程中占有重要地位。一般来说,命名实体识别的任务就是识别出待处理文本中三大类(实体类、时间类和数字类)、七小类(人名、机构名、地名、时间、日期、货币和百分比)命名实体。

自然语言处理(NLP)

多标签文本分类:用于提取社交网络上的对话是否含有辱骂、威胁、赞扬等信息。


再次重复说明OpenML构造

每个data对应多个task:

inline

每个task对应一个data:

inline

每个task对应多个flow,每个flow对应多个run:

inline

每个run对应data+task+flow


用图片说明OpenML构造

inline


任务说明

为了简化过程,暂时使用以下方法:

  • 由于每个data所对应的多个task中,排名第一的往往比第二的运行次数多很多,所以取第一个为最佳task。
  • 然后在选中的task中选取前n名为flow。

详细说明如下:


数据集分析

  • 数据集的介绍

忽略自带的tag,无用。

数据库介绍使用文本来找出task-type。

inline


数据集分析

  • 数据集的特征

inline


data中选取task的方法

对于不达标的task,忽略,防止训练内容有误。

此处选择 $n = 1$。

inline


task中选取flow方法

按照精度排序(这儿假设performance就是accuracy)选取前n个。

inline


实际应用

由于我们的task是不能互通的,每个task必须针对特定的data生成。所以我们不能推荐task,而是推荐task-type。这个之前已经成功实现且acc>80%。所以此处忽略。

此处仅仅训练data推荐flow:训练集为
(data的properties):(flow)

我只做了一个小的csv数据集,内容为

dataid-properties-flow1-flow2-…-flow5

共50条用来测试。


机器学习算法(暂时pass)

2.3.3 用于多分类的线性模型

将二分类算法推广到多分类算法的一种常见方法是“一对其余”(one-vs.-rest)方
法。

然而,flow数量很多,二分类算法运行效果的双边基数相差太大,用线性二分类难以区分。

2.3.6 决策树

对于维度非常高的稀疏数据(比如文本数据),随机森林的表现往往不是很好。对于这种数据,使用线性模型可能更合适。

即使是非常大的数据集,随机森林的表现通常也很好!不过,随机森林需要更大的内存,训练和预测的速度也比线性模型要慢。


单标签任务(iris数据集示范-改写失败)

参考书籍-其它网页

inline

  • 使用特征值-分类方法,由于之前爬取数据太全面,导致速度慢,爬取数据量少。全部数据仅有50个data和20000个flow。
  • 由于数据量少,而标签(flow)数量是data的很多倍。
  • 且由于单标签,不能用于flow推荐算法。

任务构造(理想)

参考:Guide To Multi-Class Multi-Label Classification With Neural Networks In Python

  1. 将数据集看做需要打标签的目标;
  2. 将flow的id看做标签;
  3. 首先将数据集的特征值归一化;
  4. 然后类似文本分类(文本分类是单词存在标1,否则0),将特征看做文本单词,权重[0,1];与特征的顺序无关(特征没有前后之分);
  5. 挑出所有用到的flow作为标签, 将标签转换为多热编码
    flows = [ flow1, flow2, flow3, … ]
    [ 0 0 0 1 0 0 0 1 0 … ]
  6. 进行数据特征学习分类。

为什么任然不能使用?

由于文本和特征值还是有很大区别。

这个算法可以用来进行data的描述分辨tasktype


常规任务比较分析

inline

  1. 常规多标签任务标签量少:比如对 iris flower 分类,只有十种。若是类似识别任务的种类多,但是不是多标签,是单标签。
  2. 常规多标签任务标签不分先后:比如-红色-衣服-有口袋 这种,不分先后。
  3. 常规多标签任务基于图片分析,或者是长段文字分析。

不足之处的解决或规避方法

由于推荐的目标是达到最高性能,所以忽略了人的信息。暂时不管。

当前挑出所有用到的flow作为标签, 将标签转换为多热编码
flows = [ flow1, flow2, flow3, … ]
[ 0 0 0 1 0 0 0 1 0 … ]
这样不好,丢失了排序信息。所以我们应该使用小数编码,将性能表现为0-1之间的小数,[ 0.988 0.983 0.970 0.838 … ]


接下来怎么办?

希望可以找到与我的openml数据集类似的数据集。

现在测试过:

  • 基于图片的分类
  • 图片的多标签任务
  • 基于文本(一长段文字)的多标签
  • 基于数据特征(iris)的分类

希望找到:

  • 基于数据特征的多标签