【NLP入门系列一】NLP概述和独热编码

article/2025/7/5 18:21:21

在这里插入图片描述

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊

博主简介:努力学习的22级本科生一枚 🌟​;探索AI算法,C++,go语言的世界;在迷茫中寻找光芒​🌸
博客主页:羊小猪~~-CSDN博客
内容简介:NLP入门一。
🌸箴言🌸:去寻找理想的“天空“”之城

文章目录

  • 1、NLP概论
    • 什么是NLP?
    • NLP存在的歧义问题
    • NLP处理内容
    • NLP评测
    • 从汉字信息处理到汉语
  • 2、独热编码
    • 概念
    • 英文本文案例
    • 中文文本案例

👀 参考资料

  • 哈工大nlp课件

1、NLP概论

什么是NLP?

📑自然语言处理可以定义为研究在人与人交际中以及在人与计算机交际中的语言问题的一门学科。自然语言处理要研制表示语言能力(linguistic competence)和语言应用(linguistic performance)的模型,建立计算框架来实现这样的语言模型,提出相应的方法来不断地完善这样的语言模型,根据这样的语言模型设计各种实用系统,并探讨这些实用系统的评测技术。

👓 有两个关键词:人与人交际、人与计算机交际,说白了就是机器理解人说话。

NLP存在的歧义问题

在自然语言处理的各个阶段广泛大量地存在着形形色色的歧义问题,这是自然语言与人工语言的根本差别之一,也是自然语言处理的难点所在。

⚜️ 如下案例:

  • 分词

    • 严守一把手机关了
      • 严守/ 一把手/ 机关/ 了
      • 严守一/ 把/ 手机/ 关/ 了
  • 词性标注

    • 我/pro 计划/v 考/v 研/n
    • 我/pro 完成/v 了/aux 计划/n

可以看出,不同分词意思是不一样的

NLP处理内容

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

NLP评测

在这里插入图片描述

在这里插入图片描述

从汉字信息处理到汉语

📘 词处理

**词:**词是自然语言中最小的有意义的构成单位

分词规范:《信息处理用现代汉语分词规范》(中华人民共和国国家标准GB13715)

研究内容: 分词、词性标注、词义消歧等

📖 语句处理

  • 语法分析
  • 语句的语义分析

2、独热编码

概念

👀 词向量
文字对于计算机来说就仅仅只是一个个符号,计算机无法理解其中含义,更无法处理。因此,NLP第一步就是:将文本数字化。

NLP中最早期的文本数字化方法,就是将文本转换为字典序列。如:“阿”是新华字典中第1个单词所以它的字典序列就是 1。

在这里插入图片描述

但是,这种数字化方法存在一个问题就是模型可能会错误地认为不同类别之间存在一些顺序或距离关系,而实际上这些关系可能是不存在的或者不具有实际意义的。

📘​ 独热编码

one-hot编码的基本思想是将每个类别映射到一个向量,其中只有一个元素的值为1,其余元素的值为0。这样,每个类别之间就是相互独立的,不存在顺序或距离关系。

例如,对于三个类别的情况,可以使用如下的one-hot编码:

  • 类别1:[1,0, 0]
  • 类别2:[0,1,0]
  • 类别3:[0,0, 1]

💛 优点
解决了分类器不好处理离散数据的问题,食能够处理非连续型数值。
特征。

😢 缺点

  • one-hot 编码是一个词袋模型,是不考虑词和词之间的顺序问题,它是假设词和词之间是相互独立的,但是在大部分情况下词和词之间是相互影响的。
  • one-hot编码得到的特征是离散稀疏的,每个单词的one-hot编码维度是整个词汇表的大小,维度非常巨大,编码稀疏,会使得计算代价变大。

英文本文案例

import torch
import torch.nn.functional as F # 案例文本
texts = ['Hello, how are you?', 'I am doing well, thank you!', 'Goodbye.']# 构造词汇表
word_index = {}
index_word = {}
for i, word in enumerate(set(" ".join(texts).split())):  # " ".join(texts)字符串拼接,用' '; split默认空格分割; set去重重复项(哈希表)word_index[word] = i  # word: iindex_word[i] = word  # i: word# 将文本转化为整数序列
sequences = [[word_index[word] for word in text.split()] for text in texts]  # 每句话分割,每句话就是一个特征向量# 获取词汇表大小
vocab_size = len(word_index)# 整数序列转化为独立编码
one_hot_results = torch.zeros(len(texts), vocab_size)   # 创建矩阵
for i, seq in enumerate(sequences):   # 遍历每个特征向量的元素one_hot_results[i, seq] = 1  # 打印结果
print("词汇表:")
print(word_index)
print("文本: ")
print(texts)
print("文本序列: ")
print(sequences)
print("one-hot:")
print(one_hot_results)
词汇表:
{'you!': 0, 'doing': 1, 'well,': 2, 'are': 3, 'how': 4, 'you?': 5, 'am': 6, 'Hello,': 7, 'thank': 8, 'Goodbye.': 9, 'I': 10}
文本: 
['Hello, how are you?', 'I am doing well, thank you!', 'Goodbye.']
文本序列: 
[[7, 4, 3, 5], [10, 6, 1, 2, 8, 0], [9]]
one-hot:
tensor([[0., 0., 0., 1., 1., 1., 0., 1., 0., 0., 0.],[1., 1., 1., 0., 0., 0., 1., 0., 1., 0., 1.],[0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.]])

独热编码很想构造线性无关的特征向量,结合本案例,行表示每句话,列表示这句话有啥单词

中文文本案例

import torch 
import torch.nn.functional as F  # 文本
texts = ['你好,最近怎么样?', '我过得很好,谢谢!', '羊小猪']# 词汇表
word_index = {}
index_word = {}
for i, word in enumerate(set(" ".join(texts))):  # 中文和英文不同注意,英文每个词都是空格分开word_index[word] = i index_word[i] = word # 将文本转化为整数序列
sequences = [[word_index[word] for word in text] for text in texts]# 获取词汇表大小
vocab_size = len(word_index)# 将整数转化为one-hot
one_hot_results = torch.zeros(len(texts), vocab_size)   # 创建矩阵
for i, seq in enumerate(sequences):one_hot_results[i, seq] = i # 打印结果
print("词汇表:")
print(word_index)
print("文本: ")
print(texts)
print("文本序列: ")
print(sequences)
print("one-hot:")
print(one_hot_results)
词汇表:
{' ': 0, '样': 1, '你': 2, '?': 3, '猪': 4, '小': 5, '怎': 6, '过': 7, '很': 8, '么': 9, '最': 10, '得': 11, '好': 12, '羊': 13, '谢': 14, '我': 15, '近': 16, ',': 17, '!': 18}
文本: 
['你好,最近怎么样?', '我过得很好,谢谢!', '羊小猪']
文本序列: 
[[2, 12, 17, 10, 16, 6, 9, 1, 3], [15, 7, 11, 8, 12, 17, 14, 14, 18], [13, 5, 4]]
one-hot:
tensor([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,0.],[0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 1., 1., 0., 1., 1., 0., 1.,1.],[0., 0., 0., 0., 2., 2., 0., 0., 0., 0., 0., 0., 0., 2., 0., 0., 0., 0.,0.]])

注意:上面案例都是以“字”为单位的,但是中文词拆开后会有歧义,不需要进行分词操作。

常用的分词有:结巴分词(jieba)

  • 定义jieba 是一个开源的中文分词 Python 库,广泛用于自然语言处理(NLP)任务,如文本分析、词频统计、情感分析等。
  • 特点
    • 支持多种分词模式(精确模式、全模式、搜索引擎模式)。
    • 支持自定义词典和词频调整。
    • 支持繁体中文分词。
    • 高效快速,基于前缀词典和动态规划算法。
    • 提供关键词提取、词性标注等高级功能。
import torch 
import torch.nn.functional as F  
import jieba # 文本
texts = ['你好,最近怎么样?', '我过得很好,谢谢!', '羊小猪']# 分词
tokenized_texts = [list(jieba.cut(text)) for text in texts]print("tokenized_texts: ", tokenized_texts)# 词汇表
word_index = {}
index_word = {}
for i, word in enumerate(set([word for text in tokenized_texts for word in text])):  # 将分词后的文本列表(tokenized_texts)合并为一个包含所有唯一词汇的集合word_index[word] = i index_word[i] = word # 将文本转化为整数序列
sequences = [[word_index[word] for word in text] for text in tokenized_texts]# 获取词汇表大小
vocab_size = len(word_index)# 将整数转化为one-hot
one_hot_results = torch.zeros(len(texts), vocab_size)   # 创建矩阵
for i, seq in enumerate(sequences):one_hot_results[i, seq] = i # 打印结果
print("词汇表:")
print(word_index)
print("文本: ")
print(texts)
print("文本序列: ")
print(sequences)
print("one-hot:")
print(one_hot_results)
Building prefix dict from the default dictionary ...
Dumping model to file cache C:\Users\WY118C~1\AppData\Local\Temp\jieba.cache
Loading model cost 1.109 seconds.
Prefix dict has been built successfully.
tokenized_texts:  [['你好', ',', '最近', '怎么样', '?'], ['我过', '得', '很', '好', ',', '谢谢', '!'], ['羊', '小猪']]
词汇表:
{'得': 0, '好': 1, '羊': 2, '怎么样': 3, '很': 4, '最近': 5, '?': 6, '!': 7, '我过': 8, ',': 9, '你好': 10, '小猪': 11, '谢谢': 12}
文本: 
['你好,最近怎么样?', '我过得很好,谢谢!', '羊小猪']
文本序列: 
[[10, 9, 5, 3, 6], [8, 0, 4, 1, 9, 12, 7], [2, 11]]
one-hot:
tensor([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],[1., 1., 0., 0., 1., 0., 0., 1., 1., 1., 0., 0., 1.],[0., 0., 2., 0., 0., 0., 0., 0., 0., 0., 0., 2., 0.]])

http://www.hkcw.cn/article/VxMyDKrjRb.shtml

相关文章

【知识点】第2章:Python程序实例解析

文章目录 知识点整理Python程序语法元素分析 练习题判断题填空题选择题 知识点整理 Python程序语法元素分析 Python程序包括格式框架、注释、变量、表达式、分支语句、循环语句、函数等语法元素。 程序的格式框架 Python语言采用严格的 “缩进” 来表明程序的格式框架。缩进…

Webug4.0靶场通关笔记05- 第5关SQL注入之过滤关键字

目录 一、代码审计 1、源码分析 2、SQL注入分析 (1)大小写绕过 (2)双写绕过 二、第05关 过滤型注入 1、进入靶场 2、sqlmap渗透 (1)bp抓包保存报文 (2)sqlmap渗透 &…

001在线拍卖系统技术揭秘:构建高效交互的竞拍平台

在线拍卖系统技术揭秘:构建高效交互的竞拍平台 在互联网经济蓬勃发展的当下,在线拍卖系统以其独特的交易模式,吸引着众多用户参与。该系统涵盖个人中心、用户管理等多个关键模块,通过前台展示与后台录入的协同运作,满…

LabVIEW输血袋字符智能检测系统

针对医疗行业输血袋字符检测需求,基于 LabVIEW 图形化开发平台与基恩士(KEYENCE)机器视觉硬件,构建高精度、高可靠性的字符在线识别系统。通过选用基恩士工业相机、光源及 NI 数据采集设备等硬件,结合 LabVIEW 强大的图…

Conditional注解的使用

目录 1.ConditionalOnBean 1.1、作用 1.2、使用场景 2. ConditionalOnMissingBean 2.1、作用 2.2、使用场景 3. 两者结合使用 4. 高级用法: 5. 注意事项 6. 实际应用场景 前言 在 Spring 框架中,ConditionalOnBean 和 ConditionalOnMissingBea…

CTFshow web3

文件包含和伪协议 用GET传入一个URL值,/?url文件路径 伪协议php://input 用来执行PHP代码,将POST请求当作PHP代码执行 测试一下,可以正确解析 拿到FLAG 还有一种解法,写入一句话木马 #Payload #把一句话木马写入2.phpdata:/…

数据库暴露--Get型注入攻击

1.背景知识 1.1Post、Get的对比 特性GET 方法POST 方法HTTP 方法类型GETPOST数据位置URL 查询字符串(?key=value)请求体(Request Body)数据可见性明文显示在 URL 和浏览器历史中不可见(除非开发者工具查看)数据长度限制受 URL 长度限制(通常约 2048 字符)无明确限制(…

Linux 1.0.4

父子shell linux研究的就是shell 打开两个窗口就是两个shell 终端的软件有很多 bash也是一个软件 我们在terminal里面再打开一个bash,然后再次使用ps命令发现多出来一个bash,之后点击exit只是显示了一个exit,这个只是退出了在terminal中打开…

挖洞日记 | 记一次MSSQL注入绕waf过程

在挖漏洞时,使用 xia sql 插件发现一个注入点,经过测试发现存在 waf 拦截记录一下。 在查询中发现单引号是空白页面,在加一个单引号,显示空数据,但是有回显,初步判断 pname 存在 SQL注入。 然后判断列数1o…

Linux-pcie ranges介绍

参考链接&#xff1a;https://elinux.org/Device_Tree_Usage#PCI_Host_Bridge pcie bar高低端BAR起始地址介绍 pcie设备树节点 / {compatible "rockchip,rk3588";interrupt-parent <&gic>;#address-cells <2>;#size-cells <2>;pcie3x4: p…

模块化设计,static和extern(面试题常见)

文章目录 一、函数的声明和定义1.1 单个文件1.2 多个文件1.3 static和extern1.3.1 static修饰局部变量1.3.2 static修饰全局变量1.3.3 static修饰函数 总结 一、函数的声明和定义 1.1 单个文件 一般我们在使用函数的时候&#xff0c;直接将函数写出来就使用了 题目:写一个函数…

探讨下LLM 在逻辑推理中的记忆现象

简述 今天刷到一篇推理模型训练的论文&#xff0c;研究解答了我们使用大模型的人困惑&#xff0c;大模型的能力到底是弈中高级的匹配模式还是真的在做逻辑推理 [2410.23123] On Memorization of Large Language Models in Logical ReasoningAbstract page for arXiv paper 24…

deepseekR1模型:Win11本地部署(ollam+DS:8b+chatbox AI)

目录 一、部署工具包二、Ollama安装1. 修改Ollama模型路径&#xff08;不需要修改安装路径可忽略此部分&#xff09;1.1 模型路径原配置1.2 更改模型路径原配置&#xff0c;释放C盘压力 2. 安装Ollama2.1 下载Ollama安装包2.1 安装验证 三、安装大模型&#xff08;博主安装DS-r…

leetcode:7. 整数反转(python3解法,数学相关算法题)

难度&#xff1a;中等 给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] &#xff0c;就返回 0。 假设环境不允许存储 64 位整数&#xff08;有符号或无符号&#xff09;。 示例…

ROS 2 中的 robot_state_publisher 和 joint_state_publisher 详解

文章目录 总体简介&#x1f9e9; 1 . joint_state_publisher - 关节状态发布器&#x1f4cc; 核心功能⚙️ 工作原理&#x1f9e0; 主要任务&#x1f4bb; 基本用法 &#x1f9e9; 2. robot_state_publisher - 机器人状态发布器&#x1f4cc; 核心功能⚙️ 工作原理&#x1f9e…

第10讲、Odoo 18框架设计原理全解析

前言 Odoo是一套开源的企业资源规划(ERP)系统&#xff0c;以其模块化、可扩展性和全面的业务应用套件而闻名。Odoo 18作为其最新版本&#xff0c;在架构设计、前端技术和后端实现上都有显著的创新和优化。本文将从前端的OWL组件化、模块化&#xff0c;到后端的ORM封装&#xf…

MPC5744P——eTimer简介

1、eTimer结构图 eTimer模块提供&#xff1a; 六个相同的计数器/定时器通道一个看门狗定时器功能&#xff08;可能并非每个eTimer模块实例都具备&#xff09; 2、eTimer通道结构图 eTimer中的每个计时器/计数器通道结构图如下图所示&#xff0c;每个16位计数器/定时器通道包…

MySQL主从复制---笔记

一、MySQL主从复制架构 常见拓扑 基础一主一从 主库&#xff08;Master&#xff09;处理写操作&#xff0c;从库&#xff08;Slave&#xff09;同步数据并处理读请求。 适用场景&#xff1a;读写分离、数据备份。 一主多从 一个主库对应多个从库&#xff0c;显著提升读性能…

Wayland模式X11模式LinuxFB​​模式,Linux图形显示系统三大模式深度解析

Linux图形显示系统三大模式深度解析&#xff1a;Wayland &#xff0c; X11 &#xff0c; LinuxFB​​ ​​一、技术原理与架构设计​​ ​​LinuxFB&#xff08;帧缓冲直通模式&#xff09;​​ 工作原理​​&#xff1a;直接读写内核帧缓冲设备&#xff08;/dev/fb0&#x…

戴尔AI服务器订单激增至121亿美元,但传统业务承压

戴尔科技121亿美元的AI服务器订单&#xff0c;不仅超过了公司整个2025财年的AI服务器出货量&#xff0c;更让其AI订单积压达到144亿美元的历史高位。 戴尔科技最新财报显示&#xff0c;AI服务器需求的爆炸式增长正在重塑这家老牌PC制造商的业务格局&#xff0c;但同时也暴露出…