分词的艺术:为AI拆解文本

news2024/10/7 9:45:24

  每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领域的领跑者。点击订阅,与未来同行! 订阅:https://rengongzhineng.io/

什么是分词?

在计算机科学中,我们将像英语和中文这样的人类语言称为“自然语言”,而与计算机交互的语言,如汇编语言(Assembly)和LISP,则被称为“机器语言”,这些语言遵循严格的语法规则,几乎没有任何解读的余地。计算机擅长处理高度结构化的机器语言,但在人类语言的复杂性面前往往表现不佳。

语言,尤其是文本,构成了我们大部分的交流和知识存储。例如,互联网上的大部分内容都是文本。像ChatGPT、Claude和Llama这样的大型语言模型是通过处理海量的文本数据训练而成的,这些文本数据几乎涵盖了互联网上所有可用的文本,使用了复杂的计算技术。然而,计算机并不直接处理文字或句子,它们依赖于数字运算。那么,如何填补人类语言与机器理解之间的鸿沟呢?

这就是自然语言处理(NLP)发挥作用的地方。NLP是一个结合了语言学、计算机科学和人工智能的领域,旨在让计算机理解、解释和生成人类语言。不管是将文本从英语翻译成法语,还是总结文章,亦或是进行对话,NLP使得机器能够从文本输入中生成有意义的输出。

在NLP中,处理原始文本的第一个关键步骤是将其转换为计算机能够有效处理的格式,这个过程被称为分词(tokenization)。分词是将文本拆分为较小的、易于管理的单位,称为“词元”(tokens),这些词元可以是单词、子词,甚至是单个字符。以下是分词的典型工作流程:

  1. 标准化:在进行分词之前,文本首先要进行标准化,以确保一致性。这可能包括将所有字母转换为小写,去除标点符号,以及应用其他归一化技术。
  2. 分词:标准化后的文本被拆分为词元。例如,句子 “The quick brown fox jumps over the lazy dog” 可以分词成以下单词:
    ["the", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"]
  3. 数值表示:由于计算机只能处理数字数据,每个词元接下来会被转换为数值表示。这可以是为每个词元分配一个唯一标识符,或者更复杂的方式是为词元创建多维向量,表示其含义和上下文。

文本标准化

我们来看看这两句话:

  1. “dusk fell, i was gazing at the Sao Paulo skyline. Isnt urban life vibrant??”
  2. “Dusk fell; I gazed at the São Paulo skyline. Isn't urban life vibrant?”

从表面上看,这两句话传达的含义相似。然而,计算机在处理这些句子时,尤其是在分词或编码时,可能会因为一些微小的差异而导致完全不同的结果,例如:

  • 大小写:如“dusk” vs. “Dusk”。
  • 标点符号:逗号与分号的差异;是否有问号。
  • 缩写形式:例如“Isnt” vs. “Isn't”。
  • 拼写和特殊字符:例如,“Sao Paulo” vs. “São Paulo”。

这些差异会显著影响算法如何解释文本。例如,没有撇号的“Isnt”可能无法被识别为“is not”的缩写,像“ã”这样的特殊字符也可能会被误解或引起编码问题。

因此,文本标准化是NLP中的一个重要预处理步骤,它能够减少不相关的变异性,确保输入模型的数据保持一致。这是特征工程的一种形式,目的是消除那些对任务无关紧要的差异。

一种简单的文本标准化方法包括:

  • 转换为小写:减少大小写导致的差异。
  • 移除标点符号:通过删除标点符号简化文本。
  • 规范化特殊字符:将诸如“ã”这样的字符转换为标准形式(如“a”)。

通过这些步骤,前面的两个句子可以标准化为:

  1. “dusk fell i was gazing at the sao paulo skyline isnt urban life vibrant”
  2. “dusk fell i gazed at the sao paulo skyline isnt urban life vibrant”

通过标准化文本,我们能够减少那些可能混淆计算模型的差异,从而使模型能够更加专注于句子之间的实际差异,例如“was gazing at”和“gazed at”之间的区别,而不是标点符号或大小写的不同。

分词

在文本标准化之后,NLP中的下一个关键步骤就是分词。分词是将标准化后的文本拆分成称为词元的小单位。这些词元是模型理解和生成人类语言的构建块。分词的目的是为向量化做好准备,即将每个词元转换为机器能够处理的数值表示。

常见的分词方法有三种:

  1. 词级分词:根据空格和标点符号将文本拆分为单个单词。这是最直观的分词方式。
    例如:

   text = "dusk fell i gazed at the sao paulo skyline isnt urban life vibrant"
   tokens = text.split()
   print(tokens)

输出:

   ['dusk', 'fell', 'i', 'gazed', 'at', 'the', 'sao', 'paulo', 'skyline', 'isnt', 'urban', 'life', 'vibrant']

  1. 字符级分词:将文本拆分为单个字符,包括字母和有时标点符号。
    例如:

   text = "Dusk fell"
   tokens = list(text)
   print(tokens)

输出:

   ['D', 'u', 's', 'k', ' ', 'f', 'e', 'l', 'l']

  1. 子词级分词:将单词拆分为更小的有意义的子词单元,这种方法在字符级和词级分词之间找到了平衡。常见的算法有Byte-Pair Encoding (BPE)和WordPiece。
    例如:

   from transformers import BertTokenizer

   text = "I have a new GPU!"
   tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
   tokens = tokenizer.tokenize(text)
   print(tokens)

输出:

   ['i', 'have', 'a', 'new', 'gp', '##u', '!']

子词分词为模型提供了更多的灵活性,它不仅能处理常见的词汇,还能通过分解罕见的单词来保留语义信息,帮助模型更有效地理解上下文。

总结

分词是自然语言处理中为计算模型准备文本数据的基础步骤。通过理解和实施适当的分词策略,我们可以使模型更加高效地处理和生成人类语言。这为进一步探索单词嵌入(word embeddings)和语言建模(language modeling)等高级主题奠定了基础。

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

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

相关文章

基于 springboot vue中学生日常行为评分管理系统设计与实现

博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php python(flask Django) 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找…

鸿蒙next开发者第一课02.DevEcoStudio的使用-习题

【习题】DevEco Studio的使用 通过/及格分80/ 满分100 判断题 1. 如果代码中涉及到一些网络、数据库、传感器等功能的开发,均可使用预览器进行预览。F 正确(True)错误(False) 预览器不能进行传感器等特殊功能的开发,需要使用真机开发 2. module.json5文件中的…

Day03-数据库服务管理语句

Day03-数据库服务管理语句 1、数据库服务语句分类1.1 什么是SQL语句1.2 SQL规范标准1.3 SQL语句分类 2、数据库服务字符设置2.1 为什么要有字符编码设置(避免中文乱码)--为什么中文会乱码?2.2 数据库中常用的字符编码以及区别2.3 数据库中如何…

Python | Leetcode Python题解之第461题汉明距离

题目: 题解: class Solution:def hammingDistance(self, x, y):ret 0bx, by bin(x)[2:].zfill(32), bin(y)[2:].zfill(32)for i in range(32):if bx[i] ! by[i]:ret 1return ret

全网最适合入门的面向对象编程教程:56 Python字符串与序列化-正则表达式和re模块应用

全网最适合入门的面向对象编程教程:56 Python 字符串与序列化-正则表达式和 re 模块应用 摘要: Python 的 re 模块提供了强大的正则表达式操作功能,用于在字符串中搜索、匹配、替换等,正则表达式是一种匹配字符串的模式。通过正则…

VAD 论文学习

VAD: Vectorized Scene Representation for Efficient Autonomous Driving 解决了什么问题?相关工作感知运动预测规划 提出了什么方法?概览1. 矢量化的场景学习矢量化地图交通参与者的矢量化运动 2. Planning via Interaction自车-其它交通参与者的交流自…

51单片机的水质检测系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温度传感器ph传感器浑浊度传感器蓝牙继电器LED、按键和蜂鸣器等模块构成。适用于水质监测系统,含检测和调整水温、浑浊度、ph等相似项目。 可实现功能: 1、LCD1602实时显示水温、水体ph和浑浊度 2、温…

YOLO11改进|注意力机制篇|引入并行分块注意力机制PPA

目录 一、【PPA】注意力机制1.1【PPA】注意力介绍1.2【PPA】核心代码 二、添加【PPA】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【PPA】注意力机制 1.1【PPA】注意力介绍 下图是PPA并行分块注意力机制结构图&#xff0c…

Taipy:AI应用全栈开发神器

Taipy 是一个免费使用的 Python 库,任何具备基本 Python 技能的人都可以使用。它是数据科学家、机器学习工程师和 Python 程序员的得力工具。使用 Taipy,你可以轻松地将数据和机器学习模型转换为功能齐全的 Web 应用程序。在我们生活的瞬息万变的世界中&…

消费者Rebalance机制

优质博文:IT-BLOG-CN 一、消费者Rebalance机制 在Apache Kafka中,消费者组 Consumer Group会在以下几种情况下发生重新平衡Rebalance: 【1】消费者加入或离开消费者组: 当一个新的消费者加入消费者组或一个现有的消费者离开消费…

springboot工程中使用tcp协议

文章目录 一、概述二、实现思路三、代码结构四、代码放送五、运行界面六. 主要技术点 一、概述 在上文JAVA TCP协议初体验 中,我们使用java实现了tcp协议的一个雏形,实际中大部分项目都已采用springboot,那么,怎么在springboot中…

【机器学习】知识总结1(人工智能、机器学习、深度学习、贝叶斯、回归分析)

目录 一、机器学习、深度学习 1.人工智能 1.1人工智能概念 1.2人工智能的主要研究内容与应用领域 1.2.1主要研究内容: 1.2.2应用领域 2.机器学习 2.1机器学习的概念 2.2机器学习的基本思路 2.3机器学习的分类 3.深度学习 3.1深度学习的概念 3.2人工智能…

Cocos_鼠标滚轮放缩地图

文章目录 前言一、环境二、版本一_code2.分析类属性方法详细分析详细分析onLoad()onMouseWheel(event)详细分析 总结 前言 学习笔记,请多多斧正。 一、环境 通过精灵rect放置脚本实现鼠标滚轮放缩地图。 二、版本一_code import { _decorator, Component, Node }…

task【XTuner微调个人小助手认知】

1 微调前置基础 本节主要重点是带领大家实现个人小助手微调,如果想了解微调相关的基本概念,可以访问XTuner微调前置基础。 2 准备工作 环境安装:我们想要用简单易上手的微调工具包 XTuner 来对模型进行微调的话,第一步是安装 XTu…

Trie树之最大异或对问题

这是C算法基础-数据结构专栏的第二十八篇文章,专栏详情请见此处。 从这篇博客开始,文章将会于每周一更新,望周知! 引入 上次,我们学习了Trie树之字符串统计问题,字符串统计问题中的Trie树节点存储的是字符…

面试官:如何实现分布式系统的限流?

限流的概念以及作用我前一篇文章已经做了介绍:并发限流算法的实践 目录 限流的几种算法 : 1、令牌桶算法 2、漏桶算法 3. 滑动时间窗口计数器算法 5. 全局限流 6. 客户端限流 7. API网关限流 8. 熔断与降级 本篇重点: 具体实现: 限流的几种算法 : 这里主要讲在分…

快速熟悉Nginx

一、Nginx是什么? ‌Nginx是一款高性能、轻量级的Web服务器和反向代理服务器。‌ ‌特点‌:Nginx采用事件驱动的异步非阻塞处理框架,内存占用少,并发能力强,资源消耗低。‌功能‌:Nginx主要用作静态文件服…

Arduino UNO R3自学笔记22 之 Arduino基础篇学习总结

注意:学习和写作过程中,部分资料搜集于互联网,如有侵权请联系删除。 前言:目前将Arduino的大多数基础内容学习了,做个总结。 1.编程语言 学习单片机,在面向单片机编程时,语言是最基础的&#…

给Linux操作系统命令取个别名

一个Linux终端命令的别名通常是其命令的缩写,用来减少键盘输入。命令格式为: alias [alias-name‘original-command’] 其中,alias-name是用户给命令取的别名(新名),original-comm…

whisper 实现语音识别 ASR - python 实现

语音识别(Speech Recognition),同时称为自动语音识别(英语:Automatic Speech Recognition, ASR),将语音音频转换为文字的技术。 whisper是一个通用的语音识别模型,由OpenAI公司开发。…