【学而不思则罔,思而不学则殆】
9.28
确定要解决的问题是一个什么类型,在算法中有没有一个专业的任务名定义它,确定了问题类型就明确了问题解决方向。
有时候我们要解决的问题可能有多种解决问题的角度,此时可能就会对应多个任务类型。
举例:
实体抽取是知识图谱中的一个任务,可以将其视为序列标注任务,也可以将其视为一个阅读理解任务。
有时候待解决的问题可以作为一个复杂的任务,也可以拆分为多个子任务
举例:
实体抽取即可以作为一个完整的任务,也可以拆分为实体边界识别和实体类别分类两个子任务;知识抽取可以作为一个实体-关系联合抽取任务,也可以拆分为实体抽取和关系抽取两个任务。
可以将自己的问题在网上进行搜索,以确定问题定义,最好是找到与场景无关的,更基础的问题定义。
举例:
要做一个文本的情感分类任务,按情感分类任务去查资料可以,但是更建议按文本分类任务去查资料更好,能够获取到更多的模型解决方案。
确定了问题定义,就去收集它的强baseline模型。多看看网上的资源,比如按“文本分类 baseline”进行查找,在知乎,CSDN,github上都能找到一些资料,多看几篇后,差不多就会有一个初步的认知,至少能获取到一些经典热门的baseline,若想获取到更新更强的baseline模型,则需要查看论文或paperwithcode进行查找。
以文本分类任务为例,通过查资料,会发现fasttext和bert被谈及很多,都可以作为baseline,当有多个模型可供选择时,怎么选?
一种是按照先简后繁的原则,优先选择轻量级的,能快速跑起来看到效果的;一种是按照选新不选旧的原则,即不要选择过时的baseline,选择比较新的。
先用简单模型跑通baseline是非常明智的决定,一方面确定基准,另一方面建立信心。而不是一来就考虑用最牛最复杂的模型,这会花费更多成本。
无论是简单的模型还是复杂的模型,都需要优化,且约简单的模型对调参的技巧要求越高,再优化时同样采用先简后繁原则进行模型优化,优先对模型进行调参以提高模型性能,这是一种低成本优化。
当调参后性能无法提升时,则考虑从数据量和模型复杂度连个方面进行高成本优化。
在模型优化过程中,先用小数据集进行验证,然后不断扩充数据(可以的话),在达到一定数据量后发现性能瓶颈时,再考虑更换模型。
数据决定了算法的上限,当给定的样本数据数量都比较多时,简单如fasttext,也能获得和bert类模型差不多的效果。
除了数据,对模型也可以进行适当的修改以更匹配自己的业务场景,比如修改损失函数,修改模型对结构等,当然,这个对技能要求比较高,需要非常了解用的模型和任务特点。
除此外,还可以考虑换模型,比如将bert-base换成roberta,Albert,ERNIE等改进的模型。
如何选择合适的算法模型?
确定问题类型,找到强baseline模型,从简到易优化模型,先增数据,后改模型。