自然语言处理:电脑如何理解我们的语言?

  

c0e90a73eecb4225b1119f65a39ae785.png

☁️主页 Nowl

🔥专栏《机器学习实战》 《机器学习》

📑君子坐而论道,少年起而行之 

178df7fef0cf44119524865535cee8ff.gif

文章目录

​编辑

常见方法

1.基于词典的方法

2.基于计数的方法

基于推理的方法

Bert

input_ids

attention_mask

token_type_ids

结语


 

在广阔的人工智能领域中,有着这样一个神奇的分支——自然语言处理,它研究人工智能在各种语言场景中的应用,我们不禁会思考这样一个问题,电脑是怎么理解我们的自然语言的呢。

24af9e5415c04eeba1ebac7ba8e65893.png

常见方法

1.基于词典的方法

介绍

在自然语言处理学科发展的早期,人们将一些词语的关系串成一个网络,这个网络也叫作同义词词典,类似下图,从一个单词出发可以得到与它相关的近义词,反义词等,通过这个网络,可以让计算机了解单词之间的相关性(要找到一个词的近义词,就可能用某种图搜索方法去寻找)

最著名的同义词词典是WordNet,由普林斯顿大学开发

bace66a7ef084ef7a67389b39a7bf049.png

同义词词典的弊端

  • 不灵活,我们的语言习惯会随着时间产生变化,而词典不会,如果要修改的话牵扯到的劳力又太大,而且总是要更改,浪费时间与精力
  • 无法完全表达单词之间的联系,我们知道语言是很精妙的,有时候我们也无法解释一些词语,因为词语的意思可能与语境,单词顺序有关,而同义词词典难以实现这一功能

2.基于计数的方法

语料库

自然语言处理领域有非常多的语料库,这些语料库收录了许多人类写的文字,包括一些作家的文章,这些语料库可以看作是一个自然语言处理领域通用的数据集

然后呢我们要对其中的文字进行编码(因为计算机只能理解数字),考虑下面这一句话

sentence = "I like these stars because they are bright"

 我们将他们编码,做成一个编码字典

words = {'I': 0, 'like': 1, 'these': 2, 'stars': 3, 'because': 4, 'they': 5, 'are': 6, 'bright': 7}

真实的编码字典复杂得多,这里仅做示例 

这时如果我们要表达这一句话

"these stars are bright"

我们就可以用这样的编码表示

[2, 3, 6, 7]

分布式假设

分布式假设的思想是这样的,一个单词本身没有意义,它的意义与它上下文的单词有关,这点我们也能理解,就像我们常常在英语考试中通过上下文来理解某个不认识的单词一样

想想看,我们统计了两个不同单词的上下文,发现他们的上下文差不多,那么我们是不是就可以猜测这两个单词相关呢,这便是基于统计的方法,统计单词的上下文,以理解词与词之间的关系

假设要统计一个单词前后的词,以上面的例子举例就是这样

{'0': [1], '1': [0, 2], '2': [1, 3], '3': [2, 4], '4': [3, 5], '5': [4, 6], '6': [5, 7], '7': [6]}

得到了一个记录单词和它上下文的字典

基于推理的方法

上文中的基于词典,基于计数等方法都太片面,要理解一个单词的意思我们应该从多个维度考虑

我们在上文中了解到了给单词编码的原理,我们不妨拓展一下,除了单词本身可以编码,我们还能编码什么信息呢

我们经常听过这样一句话,"要抓重点",基于这个思想,我们可以告诉机器是否要省略某些词

还有,当语料库有许多个句子时,我们是不是要区分哪些词是哪句话的呢

基于这些思想,我们接着往下看吧

Bert

bert模型是一个自然语言处理任务的模型,在本章中我们将用它来进行讲解

from transformers import BertTokenizer

这句代码导入了bert模型的分词器,它用来处理句子的基础信息 

input_ids

input_ids是词编码,代表了一个单词在词表中的位置,这是一个单词的基本信息

from transformers import BertTokenizer# 指定分词模型为中文模型
token = BertTokenizer.from_pretrained('bert-base-chinese')
# 进行分词,固定长度为17,返回类型为pytorch张量
sentence = token.batch_encode_plus(["你好,这是一个编码工具", "它是一个预训练模型"], return_tensors='pt', padding='max_length', max_length=17)print(sentence["input_ids"])

81045c92eb2847c9ba713c04b61b748b.png

attention_mask

attention_mask表示是否要忽略某个词,它一般用在这些场景中

  • 我们编码句子时肯定需要确定一个固定长度,不统一长度的话之后进行运算会很麻烦,这时attention_mask就可以告诉模型要忽略那些多出句子长度的地方了
  • 在一些具体任务中,如单词填空,我们可以使用mask来遮住要预测的词,实现训练模型的效果
from transformers import BertTokenizertoken = BertTokenizer.from_pretrained('bert-base-chinese')
sentence = token.batch_encode_plus(["你好,这是一个编码工具", "它是一个预训练模型"], return_tensors='pt', padding='max_length', max_length=17)print(sentence["attention_mask"])

3d6b72096d5c4202b96ad99baedf6361.png

返回了两个句子的attention_mask,0代表忽略,这个例子中忽略了自动补齐长度的单词

token_type_ids

token_type_ids表示了这个词的种类,通常用于区分不同句子的词

from transformers import BertTokenizertoken = BertTokenizer.from_pretrained('bert-base-chinese')
sentence = token.batch_encode_plus(["你好,这是一个编码工具", "它是一个预训练模型"], return_tensors='pt', padding='max_length', max_length=17)print(sentence["token_type_ids"])

d619bf19a750432f8e6499454dbb7c28.png

由于这个例子中的编码器只是进行批处理,并未在意句子的不同,所以返回的token_type_ids是一样的

结语

  • 我们在这一篇文章中了解到了计算机理解自然语言的基本思想——将单词编码成数字
  • 同时我们还介绍了一些其他因素,是否要忽略某些词,考虑词属于哪些句子等
  • 要理解一个句子的过程是复杂的,跟着本专栏继续探索吧

 

9741edbb1a0546229968c1f90d259244.gif

感谢阅读,觉得有用的话就订阅下本专栏吧,有错误也欢迎指出

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序算法介绍(五)归并排序

0. 简介 归并排序(Merge Sort)是一种分治思想的应用,它将待排序的数组不断拆分成小数组,直到每个小数组只有一个元素,然后将小数组两两合并,直到最终得到有序的数组。 1. 归并排序的实现 归并排序的基本思…

【2021研电赛】基于EAIDK310的视觉导航自动驾驶小车

本作品介绍参与极术社区的有奖征集|分享研电赛作品扩大影响力,更有重磅电子产品免费领取! 团队价绍 参赛单位:上海应用技术大学 参赛队伍:EAIDK666 指导老师:蒋文萍 丁肇红 参赛队员:温晓静 孙亦劼 杜为栋 获奖情况&a…

JS防抖与节流

防抖 防抖是什么? 单位时间内,频繁触发事件,只执行最后一次 通俗易懂点就是把防抖想象成MOBA游戏的回城,在回城过程中被打断就要重来 例子:我们来做一个效果,我们鼠标在盒子上移动,数字就变化 …

Python爬虫:使用Scrapy框架进行高效爬取

Python爬虫可使用的架构有很多,对于我而言,经常使用Scrapy异步处理框架Twisted,其实意思很明确,Scrapy可以实现多并发处理任务,同一时间将可以处理多个请求并且大大提高工作效率。 Scrapy是一个强大且高效的Python爬虫…

鸿蒙Watch 页面跳转

新建页面 config.json 回自动注册 添加跳转 <button type"capsule" onclick"toStatusMonitor">状态检测</button>写跳转方法 import router from system.router;export default {data: {},onInit() {},onShow() {},toStatusMonitor() {rou…

深度学习——第3章 Python程序设计语言(3.2 Python程序流程控制)

无论是在机器学习还是深度学习中&#xff0c;Python已经成为主导性的编程语言。而且&#xff0c;现在许多主流的深度学习框架&#xff0c;例如PyTorch、TensorFlow也都是基于Python。本课程主要是围绕“理论实战”同时进行&#xff0c;所以本章将重点介绍深度学习中Python的必备…

pandas、numpy的几个示例

这里写自定义目录标题 Pandas 示例NumPy 示例数据分析案例: Iris 数据集 Pandas 示例 Pandas 是一个数据处理和分析的库&#xff0c;它提供了 DataFrame 和 Series 这两种主要数据结构。 # 从字典创建 DataFrame import pandas as pd# 创建一个字典 data {Name: [Alice, Bob…

C++学习之路(十七)C++ 用Qt5实现一个工具箱(增加托盘图标并且增加显示和退出菜单)- 示例代码拆分讲解

上篇文章&#xff0c;我们用 Qt5 实现了在小工具箱中添加了《为屏幕颜色提取功能增加一个点击复制的功能》功能。今天我们增加一个比较正式点的功能&#xff0c;就是增加托盘图标并且增加显示和退出菜单&#xff08;越来越像回事了吧 &#x1f601; &#xff09;。下面我们就来…

【CMD】关于在for中SET变量失效的问题

如题&#xff0c;在for中进行一些细化操作时发现SET变量一直不成功(尤其在读取文件时)   简单搜了下看到有个帖子(BAT求助与讨论-SET变量失效)是讨论这个问题的&#xff0c;然后有个老哥给出的解答&#xff0c;其中使用了使用CALL&#xff0c;这让我想起几天前看到的一个博客…

Linux4.7、环境变量

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 基本概念 见见环境变量 指令原理 常见环境变量及其测试 环境变量相关指令 环境变量组织方式 通过代码获取环境变量 通过系统变量获取环境变量以及设置环境变量 环境变量的全局属性 基本概念 首先&#xff0c;…

什么?居然可以免费使用Jetbrains?!

JetBrains是一家捷克的软件开发公司&#xff0c;该公司位于捷克的布拉格&#xff0c;并在俄罗斯的圣彼得堡及美国麻州波士顿都设有办公室&#xff0c;该公司最为人所熟知的产品是Java编程语言开发撰写时所用的集成开发环境&#xff1a;IntelliJ IDEA。 如下是jetbrains旗下的产…

【笔记】Clion 中运行 C/C++11 之 CMakeLists.txt 的配置

该文章记录第一次使用 Clion 时&#xff0c;对 CMakeLists 的配置&#xff0c;使其能够运行 C/C11 的代码。 一. CMakeLists.txt 的配置 1、首先我们在需要新建一个项目 2、填写新建项目相关的信息 3、修改 CMakeLists.txt 文件内容 替换文本&#xff1a; # 使用此 CMakeLis…

帆软报表不能增加SAP连接方式 通过插件一致性检测 同步至本地解决

帆软报表开发人员需要增加一个SAP数据连接方式&#xff1a;SAP_ECC_600环境 在服务器端不能直接增加&#xff0c;而在帆软报表设计器切换到远程模式时&#xff0c;又不能显示SAP连接&#xff0c;导致不能增加。 解决&#xff1a;重新进入帆软报表报计器时报以下错误&#xff0c…

开源运维监控系统-Nightingale(夜莺)应用实践(未完)

一、前言 某业务系统因OS改造,原先的Zabbix监控系统推倒后未重建,本来计划用外部企业内其他监控系统接入,后又通知需要自建才能对接,考虑之前zabbix的一些不便,本次计划采用一个类Prometheus的监控系统,镜调研后发现Nightingale兼容Prometheus,又有一些其他功能增强,又…

从马帮到金蝶云星空通过接口配置打通数据

从马帮到金蝶云星空通过接口配置打通数据 接入系统&#xff1a;马帮 上海马帮科技有限公司&#xff0c;是一家专注于提供全流程跨境电商ERP管理软件解决方案的企业。聚焦服务于各阶段、各领域的跨境电商从业者&#xff0c;旗下包含专业版ERP、亚马逊专用版ERP、东南亚海外版ERP…

JavaScript空值合并运算符

The Nullish Coalescing Operator&#xff08;空值合并运算符&#xff09;是一种 JavaScript 的新运算符&#xff0c;用于解决默认值设定中存在的一些问题。它的语法为 ??&#xff08;两个问号&#xff09;&#xff0c;表示当左侧的操作数为 null 或 undefined 时&#xff0c…

【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(1)spring boot项目搭建、vue项目搭建、微信小程序项目搭建

项目笔记为项目总结笔记,若有错误欢迎指出哟~ 【项目专栏】 【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(1)项目搭建 持续更新中… java+vue+微信小程序项目】从零开始搭建——健身房管理平台 项目简介Java项目搭建(IDEA)1.新建项目2.项目类型3.项目设置4…

mysql基础语句

【select查询】 1、Select * from 表名; 查询 例&#xff1a; Where 限定的条件查询 AND 连接两个或者多个查询条件 OR 连接两个或者多个查询条件&#xff0c;满足其中一个就可以查询出 2、Select * from 表名 where 字段 某某条件&#xff1b; 例&#xff1a; 3、Selec…

EasyRecovery易恢复2024最新免费版电脑数据恢复软件功能介绍

EasyRecovery从&#xff08;易恢复2024&#xff09;支持恢复不同存储介质数据&#xff0c;在Windows中恢复受损和删除文件,以及能检索数据格式化或损坏卷&#xff0c;甚至还可以从初始化磁盘。同时&#xff0c;你只需要最简单的操作就可以恢复数据文件&#xff0c;如&#xff1…

kubeadm 安装k8s1.28.x 底层走containerd 容器

1. k8s1.28.x 的概述 1.1 k8s 1.28.x 更新 Kubernetes v1.28 是 2023 年的第二个大版本更新&#xff0c;包含了 46 项主要的更新。 而今年发布的第一个版本 v1.27 有近 60 项&#xff0c;所以可以看出来&#xff0c;在发布节奏调整后&#xff0c; 每个 Kubernetes 版本中都会包…