自然语言处理基础

文章目录

  • 一、基础与应用
    • 简单介绍
    • 基本任务
    • 重要应用
  • 二、词表示与语言模型
    • 词表示
      • 方案一:用一组的相关词来表示当前词
      • 方案二:one-hot representation,将每一个词表示成一个独立的符号
      • 方案三:上下文表示法(contextual representation)
      • 方案四:word embedding
    • 语言模型
      • 基本假设:一个未来的词,只会受到它前面的词的影响
      • N-gram Model
      • Neural Language Model
  • 参考

一、基础与应用

简单介绍

自然语言处理(Natural Language Processing,简称NLP)是计算机科学与人工智能领域的一个重要研究方向,目的是让计算机能够理解、解析、生成和处理人类的自然语言。

自然语言处理有着非常重要的意义,其一,我们认为人类语言是人类智能一个非常重要的体现;其二,NLP 是人工智能能够通过图灵测试的一个非常重要的工具。其中图灵测试(最开始的名字是 imitation game)是判断机器是否智能的一个非常重要的手段。它的基本思想是,如果机器的回答能够让人类无法判断是否是机器回答的,那么可以认为机器具备了智能。
在这里插入图片描述
2011年,IBM 开发的 Watson DeepQA system,参加了一个非常有名的在线问答的电视节目(类似于一站到底),取得了第一名!这是 NLP 一个重要的应用。
在这里插入图片描述

基本任务

  • 词性标注(part of speech tagging):为每个词语标注其词性,如名词、动词、形容词等
    在这里插入图片描述
  • 命名实体的识别(Named entity recognition):识别文本中的实体,如人名、地名、组织名等
    在这里插入图片描述
  • 共指消解(Co-reference):知道某个代词和前面哪个实体是指向的现实世界中的同一个实体在这里插入图片描述
  • Basic dependencies:分析句子中成分互相之间的依存关系。比如,这句话的主语什么,谓语是什么,宾语是什么,它们之间的修饰关系是什么
    在这里插入图片描述
  • 以上四点是 NLP 非常基础的任务,除了这些,还有一些其他与语言相关的任务。比如对于中文,由于词与词没有空格,因此还需要有一个中文的自动分词的任务,即将一句话中词与词之间的空格标注出来。

重要应用

  • 搜索引擎和在线广告:衡量用户的 query 与所有 document 的语义相似度,将用户和所需要的信息进行很好的匹配,即 text matching 的一个应用
  • Knowledge Graph:如给定一个用户的查询,如何去匹配或寻找最相关的实体,以及相关知识;如何从大规模文本中挖掘,构建大的知识图谱;如何获取三元组结构化知识等需要 NLP 技术。
  • Machine Reading:让自然语言处理的技术自动地去阅读文本的内容,然后来挖掘出相关的一些结构化知识
  • 人机对话:智能音箱、智能助手等
  • 机器翻译:将其中一个语言中的一句话翻译成另外一个语言中的一句话
  • 情感分析和意见挖掘:与社会科学交叉,用语言作为一个视角,分析我们人类的心理,帮助做出对人类社会更深刻更深层次的研究工作

二、词表示与语言模型

词表示

词表示是将自然语言表示中最基本的语言单位,即词,转换成机器可以理解的意思。主要用于两点:
一是完成词与词之间的相似度计算
在这里插入图片描述
二是发现词与词之间的语义关系
在这里插入图片描述
那具体怎么进行词表示呢?

方案一:用一组的相关词来表示当前词

比如用一些同义词、反义词来表示 “good”,用一些上位词(具有更广义或更普遍含义的词语,如 “动物” 是 “狗” 的上位词)来表示 “NLP” 等
在这里插入图片描述
这种方案的不足之处在于:

  1. 词之间有一些比较细微的差异没有办法被表示
  2. 当这些词出现一些新的含义的时候,没有办法很好地去进行处理
  3. 存在主观性问题,即它受限于你的词典的标注
  4. 存在数据稀疏的问题,跟所有的词表来相比的话,它总是比较少的
  5. 需要大量的人工去构建和维护词典

方案二:one-hot representation,将每一个词表示成一个独立的符号

这种方案是计算机中最常用的表示,任何一个词都会用一个和词表一样长的向量表示
在这里插入图片描述
这种表示方法的缺点是:任意两个词都是相互正交的。不利于考虑相似性。

方案三:上下文表示法(contextual representation)

一个词的词义实际上跟它经常出现在的那个位置的上下文有密切的关系,因此可以用上下文中的一些词来表示某个词。如下图中可以用 shining、cold、night 等来表示 stars。
在这里插入图片描述
我们依然可以用一个向量来表示一个词,这个向量的长度也是跟词表一样,但是里面的每一维表示的是这个词的上下文到底它出现了多少次,或者是出现的重要性怎么样。如此一来,每一个词都可以用它上下文的出现的频度或者重要性来表示,可以得到关于每一个词的一个稠密的向量,从而在这个空间里面,可以利用这个稠密的向量去计算出两个词之间的相似度。

这种方案的局限性是:当词表变得越来越大时,存储的需求就会变得特别大;而且对于那些出现频度特别少的词,它的向量很稀疏,这就会导致这个词的表示会变得效果没有那么好

方案四:word embedding

提出了一种分布式表示,即要建立起一个低维的一个稠密的向量空间,尝试着将每一个词都学到这个空间里面,用这个空间里面的某一个位置所对应的那个向量来表示这个词。这样一来,我们可以去计算词与词之间的相似度等特点。
在这里插入图片描述

这种低维的向量可以利用大规模的数据自动去学习,其中一个代表性工作是Word2Vec

语言模型

语言模型有两个主要工作:
一是计算联合概率:一个序列的词成为一句话的概率
二是计算条件概率:根据前面的已经说过的这些话,预测它的下一个词的概率
在这里插入图片描述
那怎样去计算这些概率呢?

基本假设:一个未来的词,只会受到它前面的词的影响

这样的话,可以将一个句子的联合概率拆解成一个一个的条件概率的乘积
在这里插入图片描述
基于这个假设,我们如何进行语言模型的构建呢?

N-gram Model

N-gram 模型统计前面出现了 N-1 个词之后,后面出现那个词的频度是怎么样的,其背后遵守上面的基本假设。

以 4-gram 为例,这个模型讨论前面出现了 3 个词,后面出现这个词的概率是多少。讨论 never too late to 后面出现 w j w_j wj 的概率,可以用语料库中,too late to w j w_j wj 出现的次数除以 too late to 出现的次数得到,即:
在这里插入图片描述
存在的问题:

  1. 实际上在 N-gram 广泛应用的时候,用的更多的是bigram、trigram。当 N 越大,则考虑的上下文越长,由于采用的是基于符号的统计,在整个自然语言文本中出现的次数会越少,这会导致统计结果非常地稀疏,同时 N 越大,要存储地量也越大,因此不是一个特别好的方式
  2. N-gram 会假设所有的词之间都是互相独立,因此在做统计的时候上下文其实都是基于符号去统计的,它是没有办法去理解这些词互相之间的相似度,比如对于“The cat is walking in the bedroom” 和 “A dog was running in a room” 这两句话,用 N-gram 是无法判断它们之间是相似的

Neural Language Model

神经语言模型基于神经网络使用词的分布式表示即 word embedding 去建构前文和当前词的预测条件概率。

基本思路:
1、首先将前面几个词都表示成一个低维的向量
2、然后再把这个低维的向量拼在一起,形成一个更高维的上下文的向量
3、然后经过一个非线性的转换
4、最后就可以用这个向量来预测下一个词到底是什么
在这里插入图片描述

所有词的向量,以及整个预测的过程,都是基于神经网络的可调节可学习参数来完成,因此可以利用大规模数据来学习这些向量。

参考

  1. 【清华NLP】刘知远团队大模型公开课全网首发|带你从入门到实战
  2. 大模型技术及交叉应用(L1-NLP & Big Model Basics)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/590323.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mamba3D革新3D点云分析:超越Transformer,提升本地特征提取效率与性能!

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享,与你一起了解前沿深度学习信息! Mamba3D革新3D点云分析:超越Transformer,提升本地特征提取效率与性能! 引言:3D点云分析的重要性与挑战 3D点云…

Python语言零基础入门——文件

目录 一、文件的基本概念 1.文件 2.绝对路径与相对路径 3.打开文件的模式 二、文件的读取 三、文件的追加 四、文件的写入 五、with语句 六、csv文件 1.csv文件的读取 2.csv文件的写入 七、练习题:实现日记本 一、文件的基本概念 1.文件 文件是以计算…

【Android学习】简易计算器的实现

1.项目基础目录 新增dimens.xml 用于控制全部按钮的尺寸。图片资源放在drawable中。 另外 themes.xml中原来的 <style name"Theme.Learn" parent"Theme.MaterialComponents.DayNight.DarkActionBar">变为了&#xff0c;加上后可针对button中增加图片…

最新AI创作系统,ChatGPT商业运营系统网站源码,SparkAi-v6.5.0,Ai绘画/GPTs应用,文档对话

一、文章前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持…

【C语言的完结】:最后的测试题

看到这句话的时候证明&#xff1a; 此刻你我都在努力~ 个人主页&#xff1a; Gu Gu Study ​​ 专栏&#xff1a;语言的起点-----C语言 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹…

Delta lake with Java--数据增删改查

之前写的关于spark sql 操作delta lake表的&#xff0c;总觉得有点混乱&#xff0c;今天用Java以真实的数据来进行一次数据的CRUD操作&#xff0c;所涉及的数据来源于Delta lake up and running配套的 GitGitHub - benniehaelen/delta-lake-up-and-running: Companion reposito…

软件无线电系列——信道编译码

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、信道编译码 1、数字…

开源的贴吧数据查询工具

贴吧数据查询工具 这是一个贴吧数据查询工具&#xff0c;目前仍处于开发阶段。 本地运行 要本地部署这个项目&#xff0c;请 克隆这个仓库并前往项目目录 git clone https://github.com/Dilettante258/tieba-tools.git cd tieba-tools安装依赖 pnpm install运行项目 np…

服务器数据恢复—异常断电导致RAID模块故障的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌ProLiant DL380系列服务器&#xff0c;服务器中有一组由6块SAS硬盘组建的RAID5阵列&#xff0c;WINDOWS SERVER操作系统&#xff0c;作为企业内部文件服务器使用。 服务器故障&#xff1a; 机房供电几次意外中断&#xff0c;服务器出现故…

RMQ从入门到精通

一.概述与安装 //RabbitMQ //1.核心部分-高级部分-集群部分 //2.什么是MQ 消息队列message queue 先入先出原则;消息通信服务 //3.MQ的大三功能 流量消峰 应用解耦 消息中间件 //&#xff08;1&#xff09;人-订单系统(1万次/S)—> 人 - MQ(流量消峰,对访问人员进行排队) -…

Java 【数据结构】常见排序算法实用详解(上) 插入排序/希尔排序/选择排序/堆排序【贤者的庇护】

登神长阶 上古神器-常见排序算法 插入排序/选择排序/堆排序 &#x1f4d4; 一.排序算法 &#x1f4d5;1.排序的概念 排序 &#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&a…

【Python】函数设计

1.联系函数的设计 2.找质数 3.找因子 4.判断水仙花数 5.斐波拉契数列递归调用&#xff0c;并用数组存储已计算过的数&#xff0c;减少重复计算 1、计算利息和本息 编写两个函数分别按单利和复利计算利息,根据本金、年利率、存款年限得到本息和和利息。调用这两个函数计算1…

学习Rust的第22天:mini_grep第2部分

书接上文&#xff0c;在本文中&#xff0c;我们学习了如何通过将 Rust 程序的逻辑移至单独的库箱中并采用测试驱动开发 (TDD) 实践来重构 Rust 程序。通过在实现功能之前编写测试&#xff0c;我们确保了代码的可靠性。我们涵盖了基本的 Rust 概念&#xff0c;例如错误处理、环境…

【linux-汇编-点灯之思路-程序】

目录 1. ARM汇编中的一些注意事项2. IMXULL汇编点灯的前序&#xff1a;3. IMXULL汇编点灯之确定引脚&#xff1a;4. IMXULL汇编点灯之引脚功能编写&#xff1a;4.1 第一步&#xff0c;开时钟4.2 第二步&#xff0c;定功能&#xff08;MUX&#xff09;4.3 第三步&#xff0c;定电…

【笔试训练】day17

1.小乐乐该数字 遇到按位处理的情况可以考虑用字符串去读 代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include<string> using namespace std;int main() {string str;cin >> str;int ans 0;for (int i 0; i < str.siz…

JavaEE 初阶篇-深入了解 Junit 单元测试框架和 Java 中的反射机制(使用反射做一个简易版框架)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Junit 单元测试框架概述 1.1 使用 Junit 框架进行测试业务代码 1.2 Junit 单元测试框架的常用注解&#xff08;Junit 4.xxx 版本&#xff09; 2.0 反射概述 2.1 获…

神经网络中的优化方法

一、引入 在传统的梯度下降优化算法中&#xff0c;如果碰到平缓区域&#xff0c;梯度值较小&#xff0c;参数优化变慢 &#xff0c;遇到鞍点&#xff08;是指在某些方向上梯度为零而在其他方向上梯度非零的点。&#xff09;&#xff0c;梯度为 0&#xff0c;参数无法优化&…

机器人系统ros2-开发实践04-ROS2 中 tf2的定义及示例说明

1. what ros2 tf2 &#xff1f; tf2的全称是transform2&#xff0c;在ROS&#xff08;Robot Operating System&#xff09;中&#xff0c;它是专门用于处理和变换不同坐标系间位置和方向的库。这个名字来源于“transform”这个词&#xff0c;表示坐标变换&#xff0c;而“2”则…

【Leetcode每日一题】 动态规划 - 简单多状态 dp 问题 - 删除并获得点数(难度⭐⭐)(70)

1. 题目解析 题目链接&#xff1a;740. 删除并获得点数 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 问题分析 本题是「打家劫舍」问题的变种&#xff0c;但核心逻辑依然保持一致。题目要求从给定的数组nums中选择…

C++ stack和queue的使用方法与模拟实现

文章目录 一、 stack的使用方法二、 queue的使用方法三、 容器适配器四、 stack的模拟实现五、 queue的模拟实现 一、 stack的使用方法 stack介绍文档 stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的…