AIUnlimited
🌳

AI基础

🌱
AI 种子

从零开始

🌿
AI 萌芽

打好基础

🌳
AI 枝干

付诸实践

🏕️
AI 树冠

深入探索

🌲
AI 森林

精通AI

🔨

AI精通

✏️
AI 草图

从零开始

🪨
AI 雕刻

打好基础

⚒️
AI 匠心

付诸实践

💎
AI 打磨

深入探索

🏆
AI 杰作

精通AI

📘

AI实战

📖
理解开源模型

开源模型的基础知识和资源

🎯
问题到模型任务

将业务问题转化为模型任务

⚡
跑通第一个模型

30分钟快速看到第一个结果

🔧
微调与评测

微调模型并评估性能

🚀
应用系统

构建实际AI应用系统

🎨
生成式AI

探索AIGC的开源模型

🤖
Agent智能体

学习Agent框架和MCP工具

📐
基础补充

LLM基础知识和评测

🎓

Claude 学院

🤖
Claude 101 入门

用 Claude 学习 AI 基础知识

💻
Claude Code 101 入门

让 Claude 成为你的结对编程伙伴

🤝
Claude Cowork 入门

与 Claude 协作完成复杂项目

⚙️
Claude 平台 101

使用 Claude API 构建应用

实验室

已加载 7 个实验
🧬神经网络沙盒🤖AI 还是人类?🥋提示工程道场🏁算法竞速🧠AI 知识挑战🏗️系统设计画布
🎯模拟面试进入实验室→
🚀

职业发展

🚀
面试发射台

开启你的旅程

🌟
行为面试精通

掌握软技能

💻
技术面试

通过编程轮次

🤖
AI与ML面试

ML面试精通

🏆
Offer与未来

拿下最好的Offer

立即开始
AIUnlimited

AI 教育平台

沪ICP备18025655号-11

学习

  • AI基础
  • AI实战
  • Claude学院
  • 实验室
  • 职业发展

社区

  • 关于
  • 常见问题

支持

  • 服务条款
  • 隐私政策
  • 联系我们
AI & 工程学习计划›✏️ AI 草图›课程›字符串与文本处理
📝
AI 草图 • 中级⏱️ 15 分钟阅读

字符串与文本处理

人工智能中文本无处不在

在人工智能理解你的问题、写论文或翻译句子之前,它必须处理原始文本。每个聊天机器人、搜索引擎和语言模型都以字符串开始——代表人类语言的字符序列。

了解字符串的工作原理打开了自然​​语言处理的大门,这是人工智能最令人兴奋的领域之一。

字符串基础知识

字符串只是按顺序存储的字符序列(字母、数字、空格和符号)。

message = "Hello, World!"

每个字符都有一个位置(索引),就像数组一样:

index:  0  1  2  3  4  5  6  7  8  9  10  11  12
char:   H  e  l  l  o  ,     W  o  r   l   d   !
字符串被分成单独的字符,索引位置显示在每个字符下方
在底层,字符串是一个字符数组 - 每个字符都有自己的索引。

子串

子字符串是字符串的一部分。出自《你好,世界!》您可以提取“World”(索引 7 到 11)。人工智能系统不断提取子字符串 - 从句子中提取名称,从推文中分离主题标签,或从网页中抓取 URL。

不变性

在大多数语言中,字符串是不可变的 - 您无法就地更改字符。相反,您创建一个新字符串。这对于性能很重要:如果您的 AI 管道修改文本数百万次,每次创建新字符串都会减慢速度。

🤯

莎士比亚的全部作品大约包含 90 万字。 GPT-4 在大数千倍的文本数据集上进行训练 - 数千亿个单词,在转换为数字之前全部作为字符串进行处理。

ChatGPT 如何读取文本:标记化

人工智能模型不像人类那样阅读文字。他们使用标记化 - 将文本分割成更小的部分,称为标记。

Input:  "unhappiness"
Tokens: ["un", "happiness"]

Input:  "ChatGPT is brilliant"
Tokens: ["Chat", "G", "PT", " is", " brilliant"]

标记化位于字符级和单词级处理之间。它通过将生僻单词分解为已知的子部分来处理生僻单词,从而保持词汇量易于管理。

🤔
Think about it:

当您在 ChatGPT 中输入一个长的、不寻常的单词(例如“antidistitutionalarianism”)时,模型会将其分解为熟悉的子词标记。为什么这比将每个可能的英语单词存储为单独的标记更好?

为什么代币化很重要

  • 典型的语言模型具有 50,000–100,000 个标记的词汇表。
  • 每个标记映射到一个数字(其 ID),模型实际处理该数字。
  • 文本标记化的方式会影响成本 - 更多的标记意味着更多的计算和更高的 API 费用。

模式匹配 - 大海捞针

核心字符串操作是在较大文本中搜索模式。这封邮件中是否包含“紧急”一词?此代码是否包含安全漏洞?

简单的方法

沿着文本滑动图案,逐个字符检查:

text:    "the cat sat on the mat"
pattern: "cat"

Position 0: "the" → no match
Position 1: "he " → no match
Position 4: "cat" → match found at index 4!

在最坏的情况下,这是 O(n × m),其中 n 是文本长度,m 是模式长度。对于短图案来说,这很好。为了扫描数百万份文档,我们需要更智能的方法。

🧠小测验

为什么对于非常大的文本,朴素模式匹配速度很慢?

经典弦乐挑战

字符串反转

反转字符串很简单,但揭示了您如何看待数据:

reverse("hello") → "olleh"
第 2 课,共 10 课已完成 0%
←数组与哈希表

讨论

登录 参与讨论

人工智能在序列到序列模型中使用反转——例如,一些早期的翻译模型反转输入句子以提高准确性。

回文检测

回文从前到后读起来都是一样的:“赛车”、“女士”、“级别”。

is_palindrome(text):
    return text == reverse(text)

字谜检测

如果两个单词包含不同顺序的相同字符,则它们是字谜词:“listen”和“silent”。

优雅的解决方案?使用哈希图计算字符频率:

are_anagrams(word1, word2):
    return character_counts(word1) == character_counts(word2)

这直接连接到上一课中的频率计数模式 - 哈希映射使其 O(n)。

🧠小测验

哪种方法最有效地检查两个单词是否是字谜?

正则表达式 - 类固醇模式匹配

正则表达式 (regex) 可让您描述模式而不是精确的文本:

|图案|比赛|使用案例| |---------|---------|----------| | \d+ |一位或多位数字 |从文本中提取数字 | | [A-Z][a-z]+ |大写的单词 |查找专有名词 | | \b\w+@\w+\.\w+\b |电子邮件地址 |数据提取| | (cat\|dog\|bird) |三个词中的任何一个 |分类关键词|

AI 数据管道广泛使用正则表达式进行数据清理 - 删除 HTML 标签、提取日期、标准化电话号码以及在训练前过滤掉不需要的字符。

💡

则表达式很强大,但也可能很棘手。写得不好的正则表达式可能会在某些输入上花费指数级的时间 - 这个问题被称为“灾难性回溯”。始终在边缘情况下测试您的模式。

真实世界的人工智能文本处理管道

以下是人工智能如何处理文本的简化视图:

  1. 原始文本 →“咖啡馆的 Wi-Fi 无法使用!!!”
  2. 小写 →“咖啡馆的 Wi-Fi 无法使用!!!”
  3. 删除标点符号 →“咖啡馆的wifi不工作”
  4. 标记化 → ["the", "café", "s", "wi", "fi", "isn", "t", "working"]
  5. 代币 ID → [1, 8432, 82, 5901, 3344, 2817, 83, 1562]
  6. 进入模型 → AI 实际可以处理的数字

每一步都涉及字符串操作——切片、搜索、替换和分割。

🤔
Think about it:

当您使用不使用单词之间空格的语言(例如中文或日语)向聊天机器人发送消息时,标记化的工作方式有何不同?这会带来什么额外的挑战?

🤯

OpenAI 的标记器将“标记化”拆分为 [“标记”、“化”] - 两个标记。但美式拼写“tokenization”变成了[“token”,“ization”]。相同的概念根据您的拼写方式不同,花费的金额也不同!

🧠小测验

在文本处理管道中,为什么要在将文本输入人工智能模型之前执行标记化?

要点

  • 字符串是字符序列 - 所有基于文本的人工智能的原材料。
  • 标记化通过将文本分割成可处理的片段来架起人类语言和机器学习的桥梁。
  • 模式匹配和正则表达式是清理和提取数据的重要工具。
  • 经典的字符串问题(反转、回文、字谜)培养人工智能文本处理所需的思维技能。
  • 您发送到 ChatGPT 的每条消息在模型看到之前都会经过字符串操作管道。