当前位置: 首页 > news >正文

AI大模型开发原理篇-1:语言模型雏形之N-Gram模型

N-Gram模型概念

N-Gram模型是一种基于统计的语言模型,用于预测文本中某个词语的出现概率。它通过分析一个词语序列中前面N-1个词的出现频率来预测下一个词的出现。具体来说,N-Gram模型通过将文本切分为长度为N的词序列来进行建模。

注意:这里的一个Gram(词)不一定是一个单词一个汉字,也可以是一个词组,一个短语,比如“唐僧”、“自然语言”等,还可以是一个字符,比如playing可以分为 play 和 ##ing 这2个Gram。

  • Unigram(1-Gram): 仅依赖于当前词的概率。例如,给定一个句子“我 爱 自然语言”,它将被切分为“我”,“爱”,“自然语言”三个独立的词。

  • Bigram(2-Gram): 使用前一个词来预测下一个词。例如,在句子“我 爱 自然语言”中,Bigram模型将考虑“我 → 爱”和“爱 → 自然语言”两个词对的概率。

  • Trigram(3-Gram): 使用前两个词来预测下一个词。例如,句子“我 爱 自然语言”可以表示为“我 爱 → 自然语言”的三元组。

主要特点:

  • 局部上下文:N-Gram模型假设一个词的出现仅依赖于前面N-1个词。这意味着它没有考虑词序列中更远的上下文信息。
  • 简易实现:N-Gram模型实现简单,可以用于机器翻译、文本生成、自动纠错等多种任务。
  • 数据稀疏问题:随着N的增大,可能会遇到数据稀疏问题,因为某些N-Gram组合可能在训练数据中没有出现过。

优缺点:

  • 优点
    • 简单易懂,容易实现。
    • 可以在不需要太复杂计算的情况下,对语言进行一定的建模。
  • 缺点
    • 模型可能会忽略远距离词之间的依赖关系,限制了其对复杂语言模式的捕捉能力。
    • 数据稀疏问题:如果某个N-Gram在训练数据中没有出现过,模型就无法进行有效预测。

应用场景:

  • 自动文本生成:通过N-Gram模型,可以生成流畅的文本,虽然在复杂度和语义准确度上有一定局限性。
  • 拼写纠错:可以根据大数据中最常见的词组合来判断用户输入是否有误。
  • 语言翻译:基于N-Gram的机器翻译模型,虽然如今已经被更先进的模型(如神经网络)所取代,但仍然有其历史意义。

N-Gram模型的构建过程

1. 数据预处理

首先,获取原始文本数据,并对其进行预处理。这个过程通常包括:

  • 文本清洗:去除无用的符号、标点符号、特殊字符、HTML标签等。
  • 分词将文本划分为词(或字),这是N-Gram模型的基础。在不同语言中,分词的方法可能有所不同。 一般的自然语言处理工具包都为我们提供好了分词的工具。比如,英文分词通常使用NLTK、spaCy等自然语言处理库,中文分词通常使用jieba库(中文NLP工具包),而如果你将来会用到BERT这样的预训练模型,那么你就需要使用BERT的专属分词器Tokenizer,它会把每个单词拆成子词——这是BERT处理生词的方法。
  • 去除停用词(可选):停用词是指在某些任务中不重要的词,比如“的”、“是”等。虽然在一些情况下,停用词不被删除,但在构建模型时有时会去除这些词以提高效率。

2. 生成N-Grams

在数据预处理完成后,接下来就是生成N-Grams。在这一过程中,将文本划分为连续的N个词组成的序列。

  • Unigram:每个单独的词构成一个N-Gram。例如,文本“我 爱 自然语言”会变成 ["我", "爱", "自然语言"]。
  • Bigram:将相邻的两个词作为一个N-Gram。例如,文本“我 爱 自然语言”会变成 ["我 爱", "爱 自然语言"]。(可称为二元组)
  • Trigram:将相邻的三个词作为一个N-Gram。例如,文本“我 爱 自然语言”会变成 ["我 爱 自然语言"]。

3. 计算N-Gram频率

对于生成的N-Grams,计算它们在整个训练语料中出现的频率。这通常使用一个词频统计工具或者简单的计数器来完成。例如,假设你的文本数据中出现了以下的Bigram:

  • “我 爱” 出现了5次
  • “爱 自然语言” 出现了3次
  • “我 学习” 出现了2次

4. 计算概率

N-Gram模型的核心就是通过计算每个N-Gram的出现概率。对于一个N-Gram模型,我们需要计算一个特定N-Gram的条件概率,表示给定前N-1个词的情况下,某个特定词出现的概率。如,二元组“我爱”在语料库中出现了3次,而二元组的前缀“我”在语料库中出现了10次,则给定“我”,下一个词为“爱”的概率为30%(如下图所示)。

给定“我”,下一个词为“爱”的概率为30%

5、预算文本

可以使用这些概率来预测文本中下一个词出现的可能性。多次迭代这个过程,甚至可以生成整个句子,也可以算出每个句子在语料库中出现的概率。

比如,从一个字“我”,生成“爱”,再继续生成“吃”,直到“我爱吃肉”这个句子。计算“我爱”“爱吃”“吃肉”出现的概率,然后乘以各自的条件概率,就可以得到这个句子在语料库中出现的概率了。

哪一个词更可能出现在“爱”后面

总结

N-Gram模型是一个简单而有效的语言建模方法,但对于复杂的语言依赖关系,它有一定的局限性。

相关文章:

AI大模型开发原理篇-1:语言模型雏形之N-Gram模型

N-Gram模型概念 N-Gram模型是一种基于统计的语言模型,用于预测文本中某个词语的出现概率。它通过分析一个词语序列中前面N-1个词的出现频率来预测下一个词的出现。具体来说,N-Gram模型通过将文本切分为长度为N的词序列来进行建模。 注意:这…...

STM32新建不同工程的方式

新建工程的方式 1. 安装开发工具 MDK5 / keil52. CMSIS 标准3. 新建工程3.1 寄存器版工程3.2 标准库版工程3.3 HAL/LL库版工程3.4 HAL库、LL库、标准库和寄存器对比3.5 库开发和寄存器的关系 4. STM32CubeMX工具的作用 1. 安装开发工具 MDK5 / keil5 MDK5 由两个部分组成&#…...

【Rust自学】14.5. cargo工作空间(Workspace)

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 14.4.1. 为什么需要cargo workspace 假如说我们构建了一个二进制crate,里面既有library又有库。随着项目规模不断增长&#…...

全面了解 Web3 AIGC 和 AI Agent 的创新先锋 MelodAI

不管是在传统领域还是 Crypto,AI 都是公认的最有前景的赛道。随着数字内容需求的爆炸式增长和技术的快速迭代,Web3 AIGC(AI生成内容)和 AI Agent(人工智能代理)正成为两大关键赛道。 AIGC 通过 AI 技术生成…...

10.3 LangChain实战指南:解锁大模型应用的10大核心场景与架构设计

LangChain实战指南:解锁大模型应用的10大核心场景与架构设计 关键词: LangChain使用场景、LLM应用案例、检索增强生成、智能体开发、知识库问答 一、LangChain场景全景图:从简单到复杂的应用分层 #mermaid-svg-nzjpyXIPLzL0j3PG {font-family:"trebuchet ms",ver…...

Swing使用MVC模型架构

什么是MVC模式? MVC是一组英文的缩写,其全名是Model-View-Controller,也就是“模型-视图-控制器”这三个部分组成。这三个部分任意一个部分发生变化都会引起另外两个发生变化。三者之间的关系示意图如下所示: MVC分为三个部分,所以在MVC模型中将按照此三部分分成三…...

设计新的 Kibana 仪表板布局以支持可折叠部分等

作者:来自 Elastic Teresa Alvarez Soler, Hannah Mudge 及 Nathaniel Reese 在 Kibana 中构建可折叠仪表板部分需要彻底改造嵌入式系统并创建自定义布局引擎。这些更新改进了状态管理、层次结构和性能,同时为新的高级仪表板功能奠定了基础。 我们正在开…...

修改maven的编码格式为utf-8

1.maven默认编码为GBK 注:配好MAVEN_HOME的环境变量后,在运行cmd. 打开cmd 运行mvn -v命令即可. 2.修改UTF-8为默认编码. 设置环境变量 变量名 MAVEN_OPTS 变量值 -Xms256m -Xmx512m -Dfile.encodingUTF-8 3.保存,退出cmd.重新打开cmd 运行mvn -v命令即可. 源码获取&…...

解锁罗技键盘新技能:轻松锁定功能键(罗技K580)

在使用罗技键盘的过程中,你是否曾因 F11、F12 功能键的默认设置与实际需求不符而感到困扰? 别担心,今天就为大家分享一个简单实用的小技巧 —— 锁定罗技键盘的 F11、F12 功能键,让你的操作更加得心应手! 通常情况下…...

HTB:Active[RE-WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用nmap对靶机…...

[C语言日寄] 源码、补码、反码介绍

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…...

安卓逆向之脱壳-认识一下动态加载 双亲委派(一)

安卓逆向和脱壳是安全研究、漏洞挖掘、恶意软件分析等领域的重要环节。脱壳(unpacking)指的是去除应用程序中加固或保护措施的过程,使得可以访问应用程序的原始代码或者数据。脱壳的重要性: 分析恶意软件:很多恶意软件…...

Nuxt:利用public-ip这个npm包来获取公网IP

目录 一、安装public-ip包1.在Vue组件中使用2.在Nuxt.js插件中使用public-ip 一、安装public-ip包 npm install public-ip1.在Vue组件中使用 你可以在Nuxt.js的任意组件或者插件中使用public-ip来获取公网IP。下面是在一个Vue组件中如何使用它的例子&#xff1a; <template…...

babylon.js-3:了解STL网格模型

网格模型上色 本篇文章主要介绍如何在 BabylonJS 中实现STL网格模型上色。 文章目录 网格模型上色运用场景概要延申正文加载器库的支持认识 OBJ 和 STL 文件GUI 色板选择器网格模型异步加载加载动画网格模型上色官方即将弃用 ImportMesh 而推荐使用 ImportMeshAsync 说明OBJ …...

基于SpringBoot的假期周边游平台的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

【MySQL】初始MySQL、库与表的操作

目录 基本使用 使用案例 SQL分类 存储引擎 库的操作 字符集和校验规则 查看系统默认字符集和校验规则 查看数据库支持的字符集 查看数据库支持的字符集校验规则 指定编码常见数据库 校验规则对数据库的影响 操纵数据库 库的备份与恢复 表的操作 创建表 查看表 …...

将DeepSeek接入Word,打造AI办公助手

最近&#xff0c;DeepSeek热度一路高涨&#xff0c;成为AI领域的焦点。通过开放的API&#xff0c;我们可以将DeepSeek接入Word&#xff0c;直接进行AI对话。更进一步&#xff0c;还能利用DeepSeek辅助修改文档&#xff0c;甚至提出一些排版建议。 Word报告工具已经新增“DeepS…...

Coze,Dify,FastGPT,对比

在当今 AI 技术迅速发展的背景下&#xff0c;AI Agent 智能体成为了关键领域&#xff0c;Coze、Dify 和 FastGPT 作为其中的佼佼者&#xff0c;各有千秋。 平台介绍 - FastGPT&#xff1a;由环界云计算公司发起&#xff0c;是基于大语言模型&#xff08;LLM&#xff09;的开源…...

Kafka 日志存储 — 磁盘存储

Kafka 依赖与磁盘来存储和缓存消息&#xff0c;采用文件追加的方式来写入消息。顺序写盘的速度快于随机写内存。 1 磁盘存储 除顺序写入外&#xff0c;Kafka中大量使用了页缓存、零拷贝等技术来进一步提升吞吐性能。 1.1 页缓存 页缓存是操作系统实现的一种磁盘缓存&#x…...

996引擎 - NPC-添加NPC引擎自带形象

996引擎 - NPC-添加NPC引擎自带形象 截图参考添加NPC参考资料截图参考 添加NPC 编辑NPC表:Envir\DATA\cfg_npclist.xls 1.1. 需要临时隐藏NPC时可以在id前加 // 1.2. 如果NPC朝向不对,可以调整dir 列。(按8方向,上是0顺时针数。我这里给的4) 1.3. 形象代码:NPC代码、怪物…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...