2021-04-12

2023-10-27

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是不是和斗殴相关;

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2021-04-12 的相关文章

  • 比较文本文档含义的最佳方法?

    我正在尝试找到使用人工智能和机器学习方法来比较两个文本文档的最佳方法 我使用了 TF IDF Cosine 相似度和其他相似度度量 但这会在单词 或 n gram 级别上比较文档 我正在寻找一种方法来比较meaning的文件 最好的方法是什
  • 词干函数错误:词干需要一个位置参数

    这里的stem函数显示错误 指出stem需要循环中的一个位置参数 如所讨论的 from nltk stem import PorterStemmer as ps text my name is pythonly and looking fo
  • Blenderbot 微调

    我一直在尝试微调 HuggingFace 的对话模型 Blendebot 我已经尝试过官方拥抱脸网站上给出的传统方法 该方法要求我们使用 trainer train 方法来完成此操作 我使用 compile 方法尝试了它 我尝试过使用 Py
  • NLTK 中的 wordnet lemmatizer 不适用于副词 [重复]

    这个问题在这里已经有答案了 from nltk stem import WordNetLemmatizer x WordNetLemmatizer x lemmatize angrily pos r Out 41 angrily 这是 nl
  • AttributeError:类型对象“Word2Vec”没有属性“load_word2vec_format”

    我正在尝试实现 word2vec 模型并收到属性错误 AttributeError 类型对象 Word2Vec 没有属性 load word2vec format 下面是代码 wv Word2Vec load word2vec format
  • 缩短文本并仅保留重要句子

    德国网站 nandoo net 提供了缩短新闻文章的可能性 如果使用滑块更改百分比值 文本会发生变化并且某些句子会被遗漏 您可以在这里看到它的实际效果 http www nandoo net read article 299925 http
  • 旧版本的 spaCy 在尝试安装模型时抛出“KeyError: 'package'”错误

    我在 Ubuntu 14 04 4 LTS x64 上使用 spaCy 1 6 0 和 python3 5 为了安装 spaCy 的英文版本 我尝试运行 这给了我错误消息 ubun ner 3 NeuroNER master src pyt
  • PHP 和 NLP:嵌套括号(解析器输出)到数组?

    想要将带有嵌套括号的文本转换为嵌套数组 以下是 NLP 解析器的输出示例 TOP S NP PRP I VP VBP love NP NP DT a JJ big NN bed PP IN of NP NNS roses 原文 我喜欢一大床
  • 举例解释bpe(字节对编码)?

    有人可以帮忙解释一下背后的基本概念吗BPE模型 除了这张纸 https arxiv org abs 1508 07909 目前还没有那么多解释 到目前为止我所知道的是 它通过将罕见和未知的单词编码为子词单元序列来实现开放词汇表上的 NMT
  • 斯坦福 CoreNLP:使用部分现有注释

    我们正在尝试利用现有的 代币化 句子分割 和命名实体标记 同时我们希望使用斯坦福 CoreNlp 额外为我们提供 词性标注 词形还原 和解析 目前 我们正在尝试以下方式 1 为 pos lemma parse 创建一个注释器 Propert
  • 管道:多个流消费者

    我编写了一个程序来计算语料库中 NGram 的频率 我已经有一个函数 它消耗一串令牌并生成一个订单的 NGram ngram Monad m gt Int gt Conduit t m t trigrams ngram 3 countFre
  • 给定文档,选择相关片段

    当我在这里提出问题时 自动搜索返回的问题的工具提示给出了问题的前一点 但其中相当一部分没有给出任何比理解问题更有用的文本 标题 有谁知道如何制作一个过滤器来删除问题中无用的部分 我的第一个想法是修剪仅包含某个列表中的单词的任何前导句子 例如
  • 从 Penn Treebank 格式的文本中提取子句

    说我有一句话 After he had eaten the cheese Bill went to the grocery 在我的程序中 我得到以下输出 PARSE TREE ROOT S SBAR IN After S NP PRP he
  • 获取 NLTK 索引的所有结果

    我正在使用 NLTK 来查找单词的一致性 但我不知道如何获取所有结果并将它们放入list or set 例如 text concordance word 仅打印前 25 个结果 TL DR text concordance lines 10
  • Java文本输出中的UTF-8编码问题

    我一直致力于测试高棉语 Unicode Wordbreaker 的各种解决方案 高棉语单词之间没有空格 这使得拼写检查和语法检查变得困难 以及从旧高棉语转换为高棉语 Unicode 我得到了一些源代码 现在在线 http www white
  • Keras:嵌入/向量的附加层?

    我有 3 个词嵌入 嵌入 1 w11 w12 w13 w14 嵌入 2 w21 w22 w23 w24 嵌入 3 w31 w32 w33 w34 有没有办法通过添加所有三个向量来获得第四个嵌入 并使用所有向量的可训练权重 例如 嵌入 4 w
  • 对产品列表进行分类的算法? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个代表或多或少相同的产品的列表 例如 在下面的列表中 它们都是希捷硬盘 希捷硬盘 500Go 适用于笔记本电脑的希捷硬盘 120
  • 如何使用Bert进行长文本分类?

    我们知道 BERT 有 token 的最大长度限制 512 因此如果一篇文章的长度远大于 512 例如文本中有 10000 个 token 如何使用 BERT 您基本上有三个选择 您可以剪掉较长的文本并仅使用前 512 个令牌 最初的 BE
  • 如何从Python中的阿拉伯字符串中删除英文文本?

    我有一个带有英文文本和标点符号的阿拉伯字符串 我需要过滤阿拉伯文本 我尝试使用 sting 删除标点符号和英语单词 但是 我失去了阿拉伯语单词之间的空格 我哪里错了 import string exclude set string punc
  • 使用 Huggingface 变压器仅保存最佳权重

    目前 我正在使用 Huggingface transformers 构建一个新的基于 Transformer 的模型 其中注意力层与原始模型不同 我用了run glue py检查我的模型在 GLUE 基准测试上的性能 但是 我发现huggi

随机推荐

  • 科学认识手机充电问题

    目录 导语 关于手机充电 一 纠正几点认知 二 最常见的不良充电习惯 三 正确的充电方式 四 名词解释 导语 关于手机充电 手机电量越来越不耐用 坏的充电习惯会对手机电池产生诸多不良影响 生活中处处皆学问 记录一下 印象深刻 一 纠正几点认
  • pytorch1.7教程实验——分类器训练

    近来想大致总结一下自己知识学习的脉络 发现自己除了大量的工程经验外 对模型算法的研究还是不够深入 而且大多都是关于目标检测方向 锚框或非锚框以及transformer 其他的涉猎不足 认识不够清晰 而且目标检测网络现在要自己单独构建写一个出
  • VMware 安装 win7、win10、MAC 和网络模式VMnet0、VMnet1、VMnet8解释

    VMware 虚拟机安装ghost win7系统方法 http www xitongcheng com jiaocheng xtazjc article 15314 html VMWare 安装Mac OS系统 https blog csd
  • [TRPO] Trust Region Policy Optimization

    论文链接 http proceedings mlr press v37 schulman15 引用 Schulman J Levine S Abbeel P et al Trust region policy optimization C
  • git 保护分支

    问题描述 推送dev分支报错 该分支受保护 git push Enumerating objects 9 done Counting objects 100 9 9 done Delta compression using up to 8
  • 数字技术的优点

    数字技术之所以能够广泛应用 主要因为数字电路与模拟电路相比 有许多优点 抗干扰能力强 数字电路能够在相同的输入条件下精确地产生相同的结果 而模拟电路容易受到温度 电源电压 噪声 辐射和元器件老化等因素的影响 在相同的输入条件下输出结果可能会
  • google翻译的一个错误

    如图 音标标着yi朗读却是ai
  • 需要多表连接查询时该怎么弄(一对多的情况)

    第一步 一对多时应该在 一的类中 添加 多的类 的集合变量 例 通过部门号来查询特定的部门 以及该部门中所有的职工 这时需要在dept类中新增一个集合变量 第二步 开始写具体代码 方法一 通过连接查询 左外连接 一次到位 方法二 分步查询
  • ReactNative ListView + 上拉加载更多 + 下拉刷新

    ListView 上拉加载更多 下拉刷新 一 内容简介 ListView列表在添加了上拉加载更多功能之后再添加下拉刷新 二 代码实现 1 引入原生组件 RefreshControl import ListView View Text Act
  • mysql表的约束

    目录 一 表的约束分类 1 not null 非空 输入的数据内容不能为空 2 unique key 唯一键 输入的数据可以为null或者跳过赋予他的值 但是如果输入数据不能相同 3 primary key 主键 每个表中必须有唯一的主键
  • matlab编写dbscan聚类

    在Matlab中编写DBSCAN聚类的方法有很多种 一种常用的方法是手动编写代码 下面是一个简单的DBSCAN示例 function labels nClusters dbscan data eps MinPts data 数据点 eps
  • Qt 使用QInputDialog弹出输入框获取用户输入数据

    简要说明 在开发Qt程序的过程中 我们可能会需要在程序中弹出输入框 并且获取用户输入的数据 一种比较麻烦的做法就是新建一个对话框类 然后在主界面中调用对话框类 获取返回值 使用QInputDialog对话框类可以通过访问不同的接口函数 弹出
  • php导出数据xlsx

    lists 二维数组 public function xlsx lists 生成文件名 date date Y m d H i s time fileName XXXX date xlsx 头部标题 xlsx header array 序号
  • Java Springboot--swagger配置

    文章转载自 第一步 配置pom xml文件
  • 视线估计(Gaze Estimation)简介概述

    PaperWeekly 原创 作者 俞雨 单位 瑞士洛桑联邦理工学院博士 研究方向 视线估计 头部姿态估计 本文七个篇章总计涵盖 29 篇论文 总结了自深度学习以来 视线估计领域近五年的发展 概述 1 1 问题定义 广义的 Gaze Est
  • [Unity]Lua本地时间、倒计时和正计时。

    惯例 直接上代码 正计时开始时的时间戳 self begin time os time 倒计时时长 01 30 00 self countdown time 5400 是否开始计时 self is update local time tru
  • 一文搞定在Ubuntu安装tldr

    目录 第一步 执行安装命令 第二步 更新tldr数据库 第三步 测试tldr功能 补充 未成功返回的错误类型 在安装之前你得先在Ubuntu上登入你自己的账户 当然你肯定在刚安装好Ubuntu的时候就注册自己的账户并且登录了 第一步 执行安
  • 大页内存(HugePages)在通用程序优化中的应用

    今天给大家介绍一种比较新奇的程序性能优化方法 大页内存 HugePages 简单来说就是通过增大操作系统页的大小来减小页表 从而避免快表缺失 这方面的资料比较贫乏 而且网上绝大多数资料都是介绍它在Oracle数据库中的应用 这会让人产生一种
  • 2021-01-17

    静态路由实验 实验目的 1 全网所有网段全部基于192 168 1 0 24划分所得 2 R1 R4每台设备均有两个环回 3 全网可达 4 尽量减少路由条目 且防止环路 5 R5的环回5 5 5 5 24不能出现在其他的设备路由表中 6 按
  • 2021-04-12

    NLP 自然语言处理 和CV相比 nlp最大的特点是特征是离散的 不像cv中是一幅图 nlp是一个个的句子 简单说几点nlp的难点 1 相同意思的句子表达有多种 我爱踢足球 足球是我的爱好 我的爱好之一是足球 2 相同词在不同语境中意思不同