技术标签: 自然语言处理
自然语言处理(Natural Language Processing,简称NLP)是计算机科学与语言学中关注于计算机与人类语言间转换的领域。人类的语言和计算机的语言存在差距,人类有汉语、英语、法语等多种语言模式,而计算机只懂得0和1,如何让计算机理解人类的语言模式,是NLP领域研究的重点内容。
1950年:计算机科学之父图灵在论文《Computing Machinery And Intelligence》的开篇就提到“机器可以思考吗”这一划时代的问题,从此促成了人类语言与计算机科学的交融。
1957-1970年:自然语言处理开始形成“两大阵营”,基于规则的和基于统计的。基于规则的主要代表为语言学家,他们希望让计算机理解主语,谓语,宾语等语法,从而按照人类的语法规则让计算机理解语言,基于规则的方法最大的问题就是精通语法不一定精通语言。基于统计的方法就是现在的方法,但在此时由于机器的不够强大,发展也比较差。
1994-1999年:基于统计的方法逐渐取得胜利,概率计算开始引入到NLP领域的每个任务中。
2000-2008年:机器学习开始兴起,迅速占领了NLP的主流市场。
2015-至今:人工智能时代到来,深度学习技术开始深刻的改变NLP的未来。
1. 文本预处理:
2. 语义分析:
3. 信息提取:
4. 生成任务:
5. 对话系统:
6. 语音相关的任务:
7. 其他任务:
随着深度学习的发展,NLP领域还出现了更多高级任务和技术,比如基于Transformer架构的预训练模型(如BERT、GPT系列)的应用,这些模型可以进行微调并用于众多下游NLP任务。此外,还有跨模态任务,如图像描述生成(Image Captioning)、视觉问答(Visual Question Answering, VQA)等。
在博客《Prompt-Tuning——深度解读一种新的微调范式》1.2节中的介绍了一种分类方式,本部分为对1.2节内容的扩展
常见的单句分类任务有短文本分类、长文本分类、意图识别、情感分析、关系抽取等。
长/短文本分类:直接对句子进行归类,例如新闻分类、主题分类、场景识别等
新闻分类:将给定的新闻文本自动归类到预定义的一组类别或标签中,如“政治、军事、娱乐八卦”等
主题分类:将一篇或多篇文本(如新闻文章、论坛帖子、学术论文、社交媒体帖子等)按照预定义的主题类别进行自动分类
场景识别:场景识别任务是指从文本数据中自动识别和确定文本所描述的特定场景或情境。例如,"在繁忙的咖啡馆里,顾客们享受着午后阳光,一边品尝香浓的拿铁,一边翻阅手中的书籍。店员在吧台忙碌着制作饮品,背景音乐轻快悠扬。"简单的场景识别任务就是将上述文本分类为“休闲场所-咖啡馆”、“时间段-午后”、“活动-餐饮、阅读”、“氛围-轻松愉快”等场景类型。
意图识别:根据给定的问句判断其意图,常用于检索式问答、多轮对话、知识图谱问答等
检索式问答:检索式问答(Retrieval-based Question Answering, QA)是指从大规模文本库中快速找到并返回能够精确回答用户提出问题的信息。
多轮对话:理解用户意图,完成对用户问题的回答
知识图谱问答:知识图谱问答(Knowledge Graph Question Answering, KGQA)是指利用知识图谱这一特定形式的数据资源来理解和回答用户以自然语言提出的问题。知识图谱是一种结构化的知识表示形式,它以图的形式组织实体(如人、地点、事件等)、属性(如姓名、国籍、出生日期等)及实体间的关系(如工作于、出生于、参与等)。在知识图谱问答任务中,系统的目的是理解用户问题的语义,然后在知识图谱中进行查询、推理和路径搜索,以精准地从结构化知识中提取出答案。
情感分析:对评论类型的文本进行情感取向分类或打分
情感分析任务旨在识别和提取文本中蕴含的情感倾向、情绪色彩或主观意见的技术。情感分析旨在量化文本的情感内容,帮助机器理解文本作者的态度、感受、满意度、偏好等主观信息。
情感分析在市场营销、客户服务、舆情监控、产品反馈分析、社交媒体分析等领域有广泛应用,帮助企业和研究人员理解公众对产品、服务、事件、话题等的看法和情绪反应,为决策制定提供有价值的情报。
关系抽取:关系抽取(Relation Extraction, RE)是指给定两个实体及对应的一个描述类句子,判断这两个实体的关系类型。关系抽取的目标是构建结构化的知识表示,如(实体1,关系,实体2)组成的三元组,以便于知识存储、查询、推理和分析。
考虑以下句子:
“乔布斯是苹果公司的联合创始人兼首席执行官,他与沃兹尼亚克于1976年创立了苹果公司”
在这个例子中,有三个实体,乔布斯、苹果公司、 沃兹尼亚克。关系抽取就需要根据这句话判断实体1“乔布斯”和实体2“苹果公司”的关系,和实体1“乔布斯”和实体2“沃兹尼亚克”的关系。可以得到以下两个三元组:
- 实体对1:(乔布斯,创立,苹果公司)
- 实体对2:(乔布斯,联合创始人,沃兹尼亚克)
常见的匹配类型任务有语义推理、语义蕴含、文本匹配与检索等。给定两个文本,用于判断其是够存在匹配关系。
语义推理/蕴含:判断两个句⼦是否存在推理关系,例如蕴含entailment、矛盾contradiction,中性的neutral三种推理关系
蕴含关系:是逻辑学和自然语言处理中的一个重要概念,用于描述两个语句或命题之间的一种逻辑联系。在逻辑学中,蕴含关系指的是:如果一个语句(称为前提,Premise)为真,则另一个语句(称为结论,Conclusion或假设,Hypothesis)也必定为真。换句话说,如果前提成立,那么结论就不能为假,否则蕴含关系就不成立。这种关系可以用符号表示为:如果前提P蕴含结论Q,则记为 P → Q。当前提为真且结论为假时,蕴含关系不成立,这种情况在逻辑上称为“矛盾”。
例如,前提:“所有鸟都会飞。” 结论:“企鹅不会飞。” 这两句话之间存在矛盾,因此前者并不蕴含后者。
例如,前提:“小明是一位医生。” 结论:“小明拥有医学学位。” 在这个例子中,前提支持了结论,因为通常情况下,成为医生需要具备医学学位,存在蕴含关系。
例如,前提:“所有人都会死。” 结论:“苏格拉底会死。” 这是一个基于一般原则到具体实例的蕴含关系。
著名的语义推理/蕴含任务数据集和评测基准:
- SNLI(Stanford Natural Language Inference Corpus):大规模英语文本蕴含数据集,包含570K对人类标注的英文句子对,分为蕴含、矛盾、中立三种关系。
- MultiNLI(Multi-Genre Natural Language Inference):SNLI的扩展版本,包含更多样化的文本来源和风格,提高了模型的泛化能力评估。
- GLUE(General Language Understanding Evaluation)和 SuperGLUE:综合性NLP任务评估基准,其中包括多个蕴含任务,如MNLI(Multi-Genre Natural Language Inference)、RTE(Recognizing Textual Entailment)等。
文本匹配与检索:输入一个文本,并从数据库中检索与之高相似度匹配的其他句子
区间预测常见的任务形式有抽取式阅读理解、实体抽取、抽取式摘要等。给定一个段落(passage)和问题(query),根据query寻找passage中可靠的子序列作为预测答案(注意:是查找而不是生成)。
抽取式阅读理解:给定query和passage,寻找passage中的一个文本区间作为答案
实体抽取:对一段文本中寻找所有可能的实体
什么是实体?
在自然语言处理(NLP)中,实体(Entity)通常指的是文本中具有特定意义和指代对象的词汇或短语,它们代表了现实世界中的具体事物、概念、事件或抽象概念。
(1)命名实体(Named Entities, NEs):
- 定义:具有特定名称且在特定上下文中具有唯一指代意义的实体。例如,人名、地名、组织机构名、产品名、书名、电影名等。
- 类别:常见的命名实体类型包括人名(Person)、地名(Location)、组织名(Organization)、时间表达(Time)、日期(Date)、货币金额(Money)、百分比(Percentage)、数量(Quantity)等。在特定领域(如生物医学、法律、金融等)还可能包括特定领域的专有名词,如药品名、疾病名、法律条款等。
(2)概念实体:
- 定义:代表某一类事物或抽象概念的词汇或短语,不一定是具有唯一名称的实体。例如,“猫”代表所有猫这一类动物,“爱情”代表一种情感状态或人际关系类型。
- 类别:概念实体可能包括类别名词(如动物、植物、疾病类别等)、抽象概念(如情感、价值观、哲学观念等)、专业术语(如科学概念、经济学术语等)。
(3)事件实体:
- 定义:描述具体事件、动作或状态变化的词汇或短语,如“结婚”、“辞职”、“爆发战争”等。事件实体通常涉及动作的执行者(Agent)、受影响对象(Patient)、时间、地点等要素。
- 类别:事件实体可能按照事件类型(如人生事件、自然灾害、社会事件等)、事件角色(如动作执行者、动作对象、受益者、受害者等)、事件属性(如事件时间、地点、原因、结果等)进行分类。
(4)关系实体:
- 定义:描述实体之间关系的词汇或短语,如“父亲”、“位于”、“属于”等。关系实体连接两个或多个实体,揭示它们之间的逻辑联系或结构关系。
- 类别:关系实体可能包括亲属关系、地理位置关系、所属关系、因果关系、时间顺序关系等。
一般都是命名实体提取,存在各种实体混用的情况,不太影响
抽取式摘要:给定一个长文本段落,寻找一个或多个区间作为该段落的摘要
单分词分类这个名字是我自己翻译的,没有统一的翻译名称,只是我自己觉得这个名字比较合理。其目标是为文本中每一个独立的token(通常指单词、子词、字符或其他预先定义的基本语义单元)分配一个特定的标签或类别。这个任务关注于对文本中个体token级别的属性或特征进行标注,而不是对整个句子或文档进行整体分类。此类涵盖序列标注、完形填空、拼写检测等任务。
序列标注:对给定的文本每个token进行标注,通常有词性标注、槽位填充、句法分析、实体识别等。
词性标注:标记该分词属于什么词性,名词?形容词?动词???
槽位填充:“槽位填充”(Slot Filling)是信息抽取(Information Extraction, IE)领域的一个重要任务。通常指的是对特定类型的实体或信息进行识别并将其填入预定义的结构化模板(或称为槽位结构)中的过程。通过槽位填充,可以从非结构化的文本数据中提取出结构化信息。例如:
a、对话文本: 用户:我想预订明天晚上8点,花悦庭的4人桌。 b、槽位识别: 通过命名实体识别模型识别出“花悦庭”是餐厅名称,对应槽位 restaurant_name。 通过日期时间识别模型识别出“明天晚上8点”是预订时间,对应槽位 reservation_date和reservation_time。 通过数值识别或关键词匹配识别出“4人”是预订人数,对应槽位 party_size。 c、槽位填充: { "restaurant_name": "花悦庭", "reservation_date": "明天", "reservation_time": "晚上8点", "party_size": "4人", }
句法分析:分析单词之间的依存关系,如“I”经常和“am”一起出现。还有构建句法树(这个见得少,等以后接触到了再补充)
实体识别:识别该分词是否为实体 ,人名、地名、组织机构名?
完形填空:预测给定文本中空位处可能的词
“这部电影很风趣幽默,我全程在笑,我觉得这部电影真是太<masked>”
让模型根据上下文信息来预测<masked>位置应该填充的分词,糟糕?棒?赞?,让模型来预测最可能出现的词。
拼写检测:对给定的文本中寻找在语法或语义上的错误拼写,并进行纠正。
文本生成任务常用于生成式摘要、机器翻译、问答,其目标是让计算机根据给定的输入或条件自动生成符合人类语言习惯、有意义且连贯的文本输出。
生成式摘要:在文本摘要中,通过生成方法获得摘要。(跟上面的抽取式摘要是不同的)
机器翻译:给定原始语言的文本,来生成目标语言的翻译句子
问答:给定query,直接生成答案
单向和双向模型
单向自回归语言模型(Unidirectional Autoregressive Language Model)
单向自回归语言模型是一种基于概率统计的模型,它仅沿单一时间方向(通常是向前或向后)处理文本序列。模型在预测当前词时,仅依赖于之前(或之后)的有限数量的词,而不考虑未来(或过去)的上下文信息。典型代表包括传统的n-gram模型和基于深度学习的模型如GPT系列。
- 高效训练与推理:由于模型在预测每个词时只需关注单向的上下文,训练和推理过程相对简单且计算效率较高。
- 清晰的概率解释:自回归模型直接建模了每个词作为条件概率分布的属性,即给定前面的词序列,预测下一个词的概率。这种明确的概率框架有助于理解和解释模型行为。
- 自然的生成过程:在文本生成任务中,自回归模型可以逐词生成文本,每一步都基于先前生成的词,形成自然的生成流程,有利于控制生成文本的连贯性和一致性。
- 适用于流式处理:对于实时或在线应用,如语音识别的解码阶段,自回归模型能够随着新输入的到来即时更新预测,无需等待整个序列完成。
非自回归双向语言模型(Bidirectional Non-Autoregressive Language Model)
非自回归双向语言模型能够在生成或理解文本时同时利用前后文的所有相关信息,而不需要像自回归模型那样按顺序逐个生成词。这类模型通常基于Transformer架构,如BERT和XLNet,它们在训练阶段通过遮蔽(masking)或重构等技巧允许模型看到整个序列的信息,但在预测时一次性输出整个序列或部分序列。
- 全局上下文感知:模型能同时捕捉到文本序列的前向和后向上下文,这对于许多自然语言理解(NLU)任务至关重要,因为这些任务往往需要综合考虑句子的前后关联来做出准确判断。
- 并行化计算:非自回归模型在生成或预测时可以实现高度并行化,极大地缩短了推理时间,特别是在大规模文本生成任务中,相较于自回归模型的逐词生成,速度优势更为明显。
- 增强的表达能力:由于能够同时利用上下文的双向信息,模型在理解复杂语义关系、捕捉句法结构和识别实体间依赖等方面表现出更强的表达能力,有助于提升任务性能。
- 多任务适应性:非自回归双向模型如BERT经过预训练后,可以方便地通过添加少量任务特定层进行微调,适应多种NLU任务,如分类、问答、命名实体识别等,展现出良好的迁移学习能力。
双向模型和单向模型之所以被分别称为“非自回归”和“自回归”,主要源于它们处理文本序列时信息流向的不同以及在生成或预测过程中是否遵循严格的自回归性质。
单向自回归语言模型:
信息流向:单向模型沿着一个固定的方向(通常是向前或向后)处理文本序列。例如,在前向自回归模型中,模型在预测当前词时,只依赖于之前已经出现的词。换句话说,信息从左向右(或从右向左)流动,且每个位置的预测仅与该位置之前的词有关联。
自回归性质:自回归模型的核心特征在于其生成过程严格遵循时间顺序。在预测序列中的第
t
个词时,模型依据的是到t-1
时刻为止的所有已知信息(即之前的所有词)。这种逐词递归预测的方式体现了自回归(Autoregressive, AR)的本质:当前值依赖于过去值。在生成新文本时,模型会先生成第一个词,然后基于已生成的第一个词预测第二个词,依此类推,直至生成完整序列。非自回归双向语言模型:
信息流向:双向模型在处理文本时能够同时利用序列的前向和后向上下文信息。这意味着模型在分析或预测某个位置的词时,既考虑该词前面的所有词,也考虑后面的所有词。这种信息流动模式打破了单向的约束,使得模型具有全局视野,能够理解文本的完整语境。
非自回归性质:非自回归(Non-Autoregressive, NAR)模型在预测或生成时并不严格遵循自回归的过程。在预测整个序列时,模型可以一次性输出所有词的预测结果,无需按照时间顺序逐词递归。这是因为模型在设计上允许其在训练和/或推理阶段访问整个序列的信息,而不是受限于自回归的条件依赖。例如,BERT等模型通过遮蔽(Masked Language Modeling, MLM)训练,使模型学会在给定部分被遮蔽的文本情况下预测被遮蔽的部分,这一过程中模型同时利用了未被遮蔽部分的上下文信息。
总结起来,单向模型因其信息处理的单向性和生成过程中的逐词递归依赖而被称为“自回归”。相反,双向模型由于能够同时利用文本序列的前后信息且在预测时不遵循严格的自左向右(或自右向左)顺序,故被称作“非自回归”。
文章浏览阅读3.4k次,点赞8次,收藏42次。一、什么是内部类?or 内部类的概念内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。即内部类对象引用了实例化该内部对象的外围类对象。public class TestA{ class TestB {}}二、 为什么需要内部类?or 内部类有什么作用?1、 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。2、内部类可以对同一个包中的其他类隐藏起来。3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。三、 内部类的分类成员内部_成员内部类和局部内部类的区别
文章浏览阅读118次。分布式系统要求拆分分布式思想的实质搭配要求分布式系统要求按照某些特定的规则将项目进行拆分。如果将一个项目的所有模板功能都写到一起,当某个模块出现问题时将直接导致整个服务器出现问题。拆分按照业务拆分为不同的服务器,有效的降低系统架构的耦合性在业务拆分的基础上可按照代码层级进行拆分(view、controller、service、pojo)分布式思想的实质分布式思想的实质是为了系统的..._分布式系统运维工具
文章浏览阅读174次。1.数据源准备2.数据处理step1:数据表处理应用函数:①VLOOKUP函数; ② CONCATENATE函数终表:step2:数据透视表统计分析(1) 透视表汇总不同渠道用户数, 金额(2)透视表汇总不同日期购买用户数,金额(3)透视表汇总不同用户购买订单数,金额step3:讲第二步结果可视化, 比如, 柱形图(1)不同渠道用户数, 金额(2)不同日期..._exce l趋势分析数据量
文章浏览阅读3.3k次。堡垒机可以为企业实现服务器、网络设备、数据库、安全设备等的集中管控和安全可靠运行,帮助IT运维人员提高工作效率。通俗来说,就是用来控制哪些人可以登录哪些资产(事先防范和事中控制),以及录像记录登录资产后做了什么事情(事后溯源)。由于堡垒机内部保存着企业所有的设备资产和权限关系,是企业内部信息安全的重要一环。但目前出现的以下问题产生了很大安全隐患:密码设置过于简单,容易被暴力破解;为方便记忆,设置统一的密码,一旦单点被破,极易引发全面危机。在单一的静态密码验证机制下,登录密码是堡垒机安全的唯一_horizon宁盾双因素配置
文章浏览阅读7.7k次,点赞4次,收藏16次。Chrome作为一款挺不错的浏览器,其有着诸多的优良特性,并且支持跨平台。其支持(Windows、Linux、Mac OS X、BSD、Android),在绝大多数情况下,其的安装都很简单,但有时会由于网络原因,无法安装,所以在这里总结下Chrome的安装。Windows下的安装:在线安装:离线安装:Linux下的安装:在线安装:离线安装:..._chrome linux debian离线安装依赖
文章浏览阅读153次。中国发达城市榜单每天都在刷新,但无非是北上广轮流坐庄。北京拥有最顶尖的文化资源,上海是“摩登”的国际化大都市,广州是活力四射的千年商都。GDP和发展潜力是衡量城市的数字指...
文章浏览阅读3.3k次。前言spark在java使用比较少,多是scala的用法,我这里介绍一下我在项目中使用的代码配置详细算法的使用请点击我主页列表查看版本jar版本说明spark3.0.1scala2.12这个版本注意和spark版本对应,只是为了引jar包springboot版本2.3.2.RELEASEmaven<!-- spark --> <dependency> <gro_使用java调用spark注册进去的程序
文章浏览阅读4.8k次。汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用,代码精简高效,大厂出品有量产保证。:139800617636213023darcy169_uds协议栈 源代码
文章浏览阅读4.6k次,点赞20次,收藏148次。AUTOSAR基础篇之OS(下)前言首先,请问大家几个小小的问题,你清楚:你知道多核OS在什么场景下使用吗?多核系统OS又是如何协同启动或者关闭的呢?AUTOSAR OS存在哪些功能安全等方面的要求呢?多核OS之间的启动关闭与单核相比又存在哪些异同呢?。。。。。。今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JCXrdI0k-1636287756923)(https://gite_autosar 定义了 5 种多核支持类型
文章浏览阅读2.2k次,点赞6次,收藏14次。原因:自己写的头文件没有被加入到方案的包含目录中去,无法被检索到,也就无法打开。将自己写的头文件都放入header files。然后在VS界面上,右键方案名,点击属性。将自己头文件夹的目录添加进去。_vs2013打不开自己定义的头文件
文章浏览阅读3.3w次,点赞80次,收藏342次。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。当数据量很大时,count 的数量的指定可能会不起作用,Redis 会自动调整每次的遍历数目。_redis命令
文章浏览阅读449次,点赞3次,收藏3次。URP的设计目标是在保持高性能的同时,提供更多的渲染功能和自定义选项。与普通项目相比,会多出Presets文件夹,里面包含着一些设置,包括本色,声音,法线,贴图等设置。全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,主光源和附加光源在一次Pass中可以一起着色。URP:全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,一次Pass可以计算多个光源。可编程渲染管线:渲染策略是可以供程序员定制的,可以定制的有:光照计算和光源,深度测试,摄像机光照烘焙,后期处理策略等等。_urp渲染管线