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

  每周跟踪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)等高级主题奠定了基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值