2021-04-12

NLP=自然语言处理

和CV相比,nlp最大的特点是特征是离散的,不像cv中是一幅图,nlp是一个个的句子

 

简单说几点nlp的难点

       1、相同意思的句子表达有多种:我爱踢足球;足球是我的爱好;我的爱好之一是足球

       2、相同词在不同语境中意思不同:我喜欢苹果;我喜欢用苹果公司的产品

       3、词的先后顺序直接影响语意:我爱你;你爱我

       4、多加一个字直接影响语意:我爱吃西瓜;我不爱吃西瓜

       5、语句中噪声多,真正影响语意的可能只有几个词:哈哈哈哈哈哈哈哈哈哈我爱吃西瓜,哈哈哈哈

 

 

从应用场景入手,逐步讲解不同的模型

 

  1. 文本分类

顾名思义,就是让机器根本文本内容自动打上相应的标签

样本一:“这个东西好难用啊,我被坑了”---负面评价

样本二:“这家面霜太好用了,强烈推荐”---正面评价

一般情况下需要事先定义好标签的种类,也就是业务上需要的标签有哪几种,这个需要分析业务的数据。有两种方法去实现文本分类;

一:运用常用的关键词,也可以叫正则。可以用“难用|被坑”,如果文本中包含这些关键词,可认为是负面评价;“好用|强烈推荐”,如果文本中包含这几个,可认为是正面评价。缺点:只使用关键词,而没有使用全部句子的信息,准确率低;如样本“很多人觉得这个东西难用,但是我不这样认为”,使用关键词很容易分错。

二:模型:text-cnn、lstm、bert。也就是生成整个句子的语意向量,然后再判断这个向量属于哪个标签。下图是text-cnn

第一步:每个字的向量,假设是一个1*6的向量;

第二步:每个字之间的关联操作;

第三步:1*4的向量就是能表达整个句子语意的向量

第四步:全联接操作判断这个句子属于哪一个标签;如二分类的话,就是一个1*2的向量[0.8,0.2],表示是标签1的概率是0.8,标签2的概率是0.2,这个时候我们就可以认为这个句子属于标签1。

从上图可以知道模型的大致流程了,实际上除了第一步和最后一步,中间步可以当作一个黑盒,仔细看上图textcnn那个黄色的框[video,and,do],发现没有?就是把上下1个词集中做一个处理,这个就是一个窗口,这也是textcnn的特点,这就相当于只使用一个字上下各一个字的信息。

为什么后面又有LSTM了呢?上面提到了cnn只使用字的一个窗口内的信息,但是文本有一个很大的特点,当前字的信息很可能受距离很远的字影响,就像“我不喜欢苹果,因为我觉得他们这家公司不好”,“苹果”的语意和“公司”是相关的,这样可以确定是苹果公司而不是水果苹果。Lstm的操作就是解决信息长距离依赖的问题(https://blog.csdn.net/cuipanguo/article/details/103703763?spm=1001.2014.3001.5502

简单点来说也就是在计算第5个字的语意时,把它之前4个字的语意信息有选择性的加进来(你不需要甚解,知道就行了)

为什么又有bert了呢?bert内的主要结构是注意力机制,通俗点说,我们在看下面这张图时,是不是对狗狗的关注度更高,因为图中的狗狗是重点!同样的,句子中也会有某些词是重点,让机器更加关注这些词,从而更好地降低噪声的影响(之前说过,文本中的噪声很多)

 

 

  1. 情感分析

情感分析实际上也是一个分类任务;情感分析是一种有趣的NLP和数据挖掘任务,用于衡量人们的观点倾向。例如,我们可以对电影评论或由该电影引起的情绪状态进行分析。情感分析有助于检查顾客对商品或服务是否满意。传统的民意调查早已淡出人们的视线。即使是那些想要支持品牌或政治候选人的人也不总是愿意花时间填写问卷。然而,人们愿意在社交网络上分享他们的观点。搜索负面文本和识别主要的投诉可以显著地帮助改变概念、改进产品和广告,并减少不满的程度。反过来,明确的正面评论会提高收视率和需求。

常用分类模型:text-cnn、lstm、bert、robert(比bert更快)

  1. 机器翻译

上面提到了黑盒这个东西,如下图bert模型,把左边中间全部都当作黑盒,输入一句话,输出一个向量,然后根据这个向量做分类判断属于哪一个字(假设字典是10000个字,就相当于有10000个标签),得到第一个字之后,这个字向量再输入模型得到第二个,以此类推

常用分类模型: bert、GPT

 

  1. 问答系统

一问一答,首先要知道问的是什么问题,也就是意图分类,和上面的分类是一个意思,知道了意图,要么有固定答案,这个直接配置就可以;如果要从别的文本中抽取答案,有两种方式:一根据意图种类规则地从不同文本抽取答案;二根据问题文本和存在答案的文本作为模型的输入,最后输入每个字位置的向量,然后判断哪两个字之间的文本是答案,也相当于分类,与之前的区别是现在是根据字向量,之前是根据整个句子的语意向量(这个和实体识别是有点像的)

常用分类模型: bert、robert(比bert更快)

 

 

  1. 自动摘要

简单点来说就是把长文本变成段文本,且短文本能够表达长文本的重要意思。上图的指针网络只是一种实现方式,相当于从长文本中抽取重要的短语组成一句话,但是这些短语都是文本中存在的。还有一种方法类似于机器翻译,生成摘要,而不是完全从长文本中抽取

常用分类模型:指针网络(大部分结构和bert差不多)、 bert、robert(比bert更快)

  1. 聊天机器人

类似于天猫精灵、微软小冰等等,他不像问答系统限定在某些固定意图种类,聊天的话会出现各种各样的意图,不可能定义全部的,所以就需要根据对话,自动生成回复语。实现方式一:训练集就是各种各样的对话数据,类似于机器翻译的模式,可以让模型根据输入生成相应的回复;方式二:沉淀大的对话预料库,根据对方的输入,找到对话预料库中与其语意最相似的句子,把这个句子的回复当作输入的回复

常用分类模型:text-cnn、lstm、bert、robert(比bert更快)

  1. 市场预测

营销人员还使用NLP来搜索有可能或明确打算购物的人。Internet上的行为,维护社交网络上的页面以及对搜索引擎的查询提供了许多有用的非结构化客户数据。Google可以充分利用这些数据来向互联网用户销售合适的广告。每当访问者点击广告时,广告客户就要向Google付费。点击的成本从几美分到超过50美元不等。

  1. 实体挖掘

所谓实体,可以是姓名,公司名称,也可以是水果种类、汽车种类等等,根据业务需求进行定义。人工挖掘的成本是很高的,用关键词挖掘就像上面提到的歧义,还有就是不可能列举所有的关键词。

崔胖是一个大帅哥,毕业于武汉大学,专业是信息与信号处理,爱好足球”。这些里面“崔胖”是姓名实体,“武汉大学”是学校实体,“信息与信号处理”是专业实体,“足球”是运动实体,实现方法类似于上面提过的指针网络,就是判断哪两个字之间的文本属于某一个实体种类,就像分类出来“崔”是姓名实体的开始,“胖”是姓名实体的结尾;“武”是学校实体的开始,“学”是学校实体的结尾。常用模型图如下

常用分类模型: lstm+crf、bert+crf(或者bert+mrc)

  1. 关系抽取

简单点说就是判断文本中两个实体是否存在关系,或者存在什么关系,这个关系种类一半都是事先定义好的,举个例子:崔胖是贾胖的男朋友,他俩经常打架;那么实体“崔胖”和实体“贾胖”之间的关系就是情侣关系。“A是B的爸爸”,实体A和实体B的关系就是“父亲”, 实体B和实体A的关系就是“子女”,所以实体之间的先后顺序和上下文是很影响这个关系的,所以一般操作就是取两个实体的上下文向量,拼接成一个分类向量,再判断这个关系,实体的上下文向量怎么获取呢?我们上面提过可以得到每个字的向量,实体上下文的向量可以用这个实体上下各两个字的向量加权求和当作实体的上下文向量。

常用分类模型: lstm、bert

看了上面那么多,是不是发觉有点问题,为什么这么多任务都可以用bert来解决?那是因为在自然语言理解这个场景下,只要很好的表征了每个字的语意(如篮球和足球在语意上面是距离较近的,而篮球和铁锅在语意上应该是距离较远的),那么就可以根据不同任务去使用这个语意,而bert就是这个作用,它的预训练就是很好地表征了每个字的语意。

实体识别是根据每个字的语意向量判断这个字是一个实体的开始还是结尾,或者不是实体;

文本分类根据整个文本的语意向量(bert中是在输入开头加入CLS这个标示符,这个标示符的向量就可以当作整个句子的语意向量)来做分类;

问答系统输入的是问题+存在答案的文本,然后根据每个字向量判断是否属于答案的开头或者结尾;

聊天机器人就是输入对方的输入,逐字生成回复;

关系抽取就是把实体向量拼接做分类

自动摘要:摘要抽取和上面的问答系统的答案抽取类似,只不过输入只有长文本,没有对方的输入;摘要生成和聊天机器人类似,就是逐字生成摘要

 

另外补充一点:前些年预训练很火,这也是bert很在很多场景下达到最优效果的原因之一,预训练就是有一个不需要标注的语料库,让模型自己训练,举个例子“崔胖是一个大帅哥”,让模型根据“是”的上下文“崔胖”“一个”去预测当前位置是“是”的概率,语料库大的话,每个字的语意都可以很好的表示,所以在使用bert的时候一般都使用bert的预训练模型,然后再根据具体的业务场景进行微调。

 

再补充一点:如果我们很好地表征了每个字的语意信息,那么多可以用的场景就会更多,例如给定100个负面关键词,找到语意相近的新的负面关键词,如“生气”,可以新挖掘出来“愤怒”“恼怒”“气愤”等等新的关键词供业务使用;或者句子中“A打了B,C在一边吃饭”,这是一个斗殴事件,要判断C是不是和斗殴相关;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值