心法利器[70] | 短文本理解的难点和解决方案

心法利器

本栏目主要和大家一起讨论近期自己学习的心得和体会,与大家一起成长。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。

2022年新一版的文章合集已经发布,累计已经60w字了,获取方式看这里:CS的陋室60w字原创算法经验分享-2022版。

往期回顾

  • 心法利器[65] | 一些技术和成长的讨论【答读者问】

  • 心法利器[66] | 算法性能评估指南

  • 心法利器[67] | 算法性能优化指南

  • 心法利器[68] | 数据指导技术优化与提升

  • 心法利器[69] | 聊聊数据敏感性

短文本理解,无论是分类、实体识别还是语义相似度,其实在日常应用中都是挺多的,例如搜索和对话场景下用户输入的内容,基本都是短文本的处理,今天来给大家分享一下短文本视角下的常见问题以及难点吧。

当然了,这里的概念比较笼统,就是短文本理解,在任务上是比较泛的,下面的思路其实可以套用到各种理解类的问题里,就是上面说的分类、序列标注、语义相似度这种问题里。

短文本理解的概念

所谓的理解,其实就是对文本进行理解或者说信息抽取,相信这个大家都好懂,常见的就是分类、实体识别和语义相似度之类的任务,而短文本则是在强调文本的性质,大都是长度较短的,这个长度我给个概念吧,长度绝大部分在15以下吧,不排除有极端的在样本里,但是应该很少见了,也有极端短的,例如3个字以下的,就这类型的样本,我把他叫做短文本吧。

继续,我就要说说短文本的性质了,这里我就一步一步地推,大家可以理解下:

  • 首先,显而易见,就是长度短。

  • 长度短,意味着句子的信息会比较少了,信息少其实并不利于做内容解析,这点无论对模型,还是对人都类似。

  • 信息少,有几个情况:

    • 极端少的,会导致信息模糊甚至无意义,例如“我”这种,表意不明,或者是“苹果”这种,有歧义。

    • 有些会隐藏一些知识,缺乏的话就理解不了,如“戴因斯雷布”(游戏角色)、“氧氟沙星”(一种西药)、“DC调光”(手机配置信息)等,没有一些背景知识,是理解不了的。

这些就是短文本背后所隐含的性质,为了方便大家理解,我尝试把句子拉长,但凡句子信息多一些,很多内容其实我们要做识别就会简单很多,因为句子中很可能隐含一些描述信息,例如“苹果”这个词,句子信息长一些,“苹果的续航怎么样”,一下子就能明白,这个值的是苹果品牌的设备,而不可能是水果的那个苹果,再举个例子,“哈哈哈哈哈”,就是一个很模糊的需求,不看综艺的很难想象这是一部综艺,但是一旦加长成“我想看哈哈哈哈哈”,这个时候我们差不多能猜到他可能是一部什么节目,可以看的,当然,也可以是什么风景之类的,但至少范围缩小了,这点其实和现在比较火的prompt类似,给出关键提示能让问题明朗很多。

而换个角度,其实比长文本还是要好一些的,作为对比,我也讨论一下长文本所存在的问题吧:

  • 句子的长度长。

  • 句子长,势必所承载的信息会更多,而多,可能有这几个情况:

    • 信息存在冗余,甚至有一些误导信息,可能要做信息筛选,这也是为什么前期关键词抽取,后续有attention结构吃香的一大理由。

    • 关系也可能更加复杂,要揣摩和分析的难度也提升。

说到底,其实就是一个信息的问题,之前我其实有写过一篇文章,有关信息的提供的问题,在这里:心法利器[45] | 模型需要的信息提供够了吗。从这篇文章,大家多少能够理解,所谓的“信息”提供给模型的重要性,当且仅当我们有足够的信息提供给模型,模型才更容易预测准,这点上,真的和人是一样的。

短文本问题的解决方案

说到解决方案,开始给答案之前,我先列举一下这个场景下大家容易问出的问题:

  • 纯名词的预测比较不准。

  • 大模型对短文本预测的效果相比小模型提升不大。

其实很多时候,就是因为信息问题,所以导致这些问题会比较凸显:

  • 纯名词都不认识,只能靠上下文猜,短文本又不见得有上下文。

  • 对大小模型而言,都缺一些预测需要的关键信息,所以就被卡着了,这些句子在现有的训练集下就是训不出来。

而这些问题,有时候大家会发现,好像都在增加样本之后,能一定程度优化,而且在一些时候,提升的幅度下降比较慢,其实就是因为,我们在增加样本的过程,给模型学到了很多新的知识,因为样本里藏有让模型学到的关键信息,例如句子里有“氧氟沙星”、“青霉素”、“氯雷他定”之类的信息,模型学到了,知道这些东西都是药品相关,那预测的时候就能预测的出来了,之前的样本里没有,现在增加了,预测能力自然就提升了,很明显,再者,模型大的信息容量大,而且调整起来兼容性高,所以学起新知识来比较快,差距就会逐渐明显了。

聊完了,大家也就明白,短文本的问题本质就是信息少,因此我们需要的就是给模型灌入更多的信息,而灌入信息的方法,我理解,来去就是两个:

  • 通过更多更丰富的样本灌入协助训练,从模型层面增加信息。样本中蕴含信息,无论是further pretrain那种学习方式,还是直接做自身任务的进一步学习,增加样本的学习。(这里好像可以挖坑?)

  • 另一种是,从特征层面加入,加入一些附带信息的特征,例如词典附带的ner信息,例如大家可以看看这篇论文呢:Chinese NER Using Lattice LSTM,这里不展开了了。(这里好像也可以挖坑?)

这些就是从根本上解决问题的方案。前者想展开聊一点,也是大家可能比较常用、简单的方案了,尤其是增加样本这里,这块的方法我把他叫实体增强。

实体增强

所谓的实体增强,就是用实体词典中的词汇,用来替换样本中的实体,举个例子。样本里有一个,“我想看战狼2”,这里“战狼2”显然是电影词典里的一个词,我们可以换成别的,例如“我想看使徒行者”,通过这种方式,能让模型有效学到,“使徒行者”这是一个和“战狼2”类似的东西,这个其实就足够了,模型会自己做泛化和参考,当然了,为了避免模型在遇到“我想看张三”之类比较奇怪的预测,我们可以加一些“我想看阿巴阿巴”、“我想看烫烫烫”之类的对抗样本,避免模型错判。

这是一个比较简单的操作吧,里面还有些深挖的价值,我会再撰文展开的。

小结

本文主要讨论了短文本理解的难点和一些常见的解决思路,希望对大家有好处,这里好像埋了一些坑,看后续有没有机会填上。

心法利器[70] | 短文本理解的难点和解决方案_第1张图片

你可能感兴趣的:(机器学习,人工智能,java,python,深度学习)