《深度学习》自然语言处理 统计、神经语言模型 结构、推导解析

news2024/11/17 20:26:48

目录

一、语言转换方法

1、如何将语言转换为模型可以直接识别的内容

1)数据预处理

2)特征提取

3)模型输入

4)模型推理

二、语言模型

1、统计语言模型

1) 案例:

• 运行结果:

• 稀疏矩阵内容表达:

2) 统计学语言模型存在的问题

• 参数空间的爆炸式增长

• 缺乏考虑词与词之间内在联系的能力

2、神经语言模型

1) 传统自然语言处理

2) 如何解决维度灾难问题

3) 词嵌入embedding

4)word2vec训练词向量的模型

• CBOW

• SkipGram

5) 模型训练过程


一、语言转换方法

1、如何将语言转换为模型可以直接识别的内容

        1)数据预处理

                首先,需要对原始语言数据进行预处理。这包括分词去除停用词 等操作,以便将语言数据转换成可以被模型处理的形式。

        2)特征提取

                在将语言转换为模型可识别的内容之前,需要将语言数据转换为数值特征。常见的特征提取方法包括TF-IDF词嵌入(如Word2VecGloVe)等。这些方法可以将文本中的单词短语转换为向量表示,便于输入到模型中进行处理。

        3)模型输入

                将特征转换为模型可以接受的输入形式。具体形式取决于所使用的模型类型。例如,对于神经网络模型,可以通过将特征表示为张量矩阵的形式来输入模型。

        4)模型推理

                将输入的特征数据输入到训练好的模型中进行推理或者生成。根据任务的不同,可以使用不同的模型,如分类模型、序列生成模型等。

二、语言模型

1、统计语言模型

        统计语言模型是一种基于统计模型的语言处理技术。它主要用于计算一个给定文本序列的概率或预测下一个单词的概率。统计语言模型通过分析大量的文本数据,学习单词之间的概率分布,从而能够生成符合语法和语义规则的新文本。

        比如之前机器学习中使用词向量转换的方法,将单词表示为向量的技术,能够捕捉单词之间的语义和语法关系。

        1) 案例:

                有以下4段文本字符串,可将其当做四个文本文档,将其转化为数值类型特征矩阵

                text = [' dog cat fish ' , ' dog cat cat ' , ' fish bird ' , ' bird ' ]

                对这四篇文档进行分词,然后转化为数值类型,代码如下

from sklearn.feature_extraction.text import CountVectorizer  # 导入库将文本集合转换为词频矩阵

texts = ['dog cat fish','dog cat cat','fish bird','bird']   # 随机建立个数据,每个文本字符串代表一个文档
cont = []
cv = CountVectorizer(max_features=6,ngram_range=(1,2))  # 建立一个模型,参数为最大特征数,转换后的特征矩阵将最多包含6列,以及词前后拼接长度范围
cv_fit = cv.fit_transform(texts)   # 训练数据,返回一个稀疏矩阵
print(cv_fit)   # 打印稀疏矩阵
print(cv.get_feature_names_out())  # 打印所有特征值
print(cv_fit.toarray())   # 将稀疏矩阵转变为矩阵类型
                • 运行结果:

        其中每一行代表一篇文章,每一列代表是否有总分词库中的词,由此来形成矩阵。

                • 稀疏矩阵内容表达:

        

        2) 统计学语言模型存在的问题
                • 参数空间的爆炸式增长

                        统计语言模型在建模时需要估计大量的参数,特别是在N(模型考虑的词语个数)较大时(N通常表示模型考虑的上下文的长度,也称为n-gram的n值),由于词汇量很大,参数空间会随着N的增加而指数级增长。这就导致模型需要更多的数据来进行准确的参数估计,训练时间和计算资源也会随之增加。

                 缺乏考虑词与词之间内在联系的能力

                        传统的统计语言模型主要关注词语的频率概率分布,并没有考虑到词之间的语义上下文关系。这使得模型在处理类似的句子时可能会出现问题。例如,在给定的训练数据中没有出现过类似于"the cat is walking in the bedroom"这样的句子,但是在训练数据中出现了类似的句子,如"the dog is walking in the bedroom""the cat is running in the bedroom"。从这些相似的句子中,我们可以推测出"the cat is walking in the bedroom"这个句子的概率较高,但是传统的统计语言模型可能无法准确地捕捉到这种内在联系性。

2、神经语言模型

        神经语言模型通过使用神经网络来学习文本数据中语言的概率分布,从而能够生成文本、评估文本的合理性和预测下一个词或句子

        在神经语言模型中,通常使用循环神经网络或其变种(如长短时记忆网络,LSTM)来处理序列化的文本数据。模型会根据输入文本的上下文信息预测下一个词或句子的概率分布

        神经语言模型可以通过训练大量的文本数据,学习出单词之间的语义和上下文关系。在训练过程中,模型会根据已经观察到的文本序列,通过优化方法调整模型参数,使得模型能更准确地预测下一个词或句子。

        1) 传统自然语言处理

                在传统自然语言中,通常将词语或者向量化,例如one-hot编码(独热编码,例如我们有一句话为:“我爱北京天安门”,我们分词后对其进行one-hot编码,即只有一个维度为1,其他维度都为0的向量。如下所示:

                首先将文章 “我爱北京天安门” 分词,得到【我,爱,北京,天安门】,那么这四个词即可表示这句话的词库,将这篇文章的分词进行独热编码得到下列表达方式:

                即文章的第一个词表示为词库索引的第一个词,将其表示为1,其余词表示为0,第二个词表示为第二个特征为1,其余特征为0,以此类推。

                假如此时有一篇文章有很多很多个词,将其分词后的得到的词库有1000个单词(不重复),那么按照上述独热编码的方式,将这这篇文章转变为向量格式,然后则会有第一个词表示为000.....0001,第二个词表示为000.....0010,每个词表示的有999个0和1个1,每一行代表一个单词的特征,列数表示词库中词的个数,行数表示文档内词的个数,此时则会出现矩阵为非常稀疏,出现维度灾难,例如将上述文档 “我爱北京天安门”以独热编码的格式表达,假设此时语料库中有4960个词,那么将这个文档表达后的形式为下列所示:

             2) 如何解决维度灾难问题

                将上述类型降低维度,即可达到目的

                此时通过神经网络训练将每个词都映射到一个较短的词向量上来,这个较短的词向量维度是多大呢? 一般需要在训练时自己来指定。现在很常见的例如300维。

            3) 词嵌入embedding

                词向量的意思是将自然语言转换为向量的过程,那么词嵌入就是神经语言模型中的一种词向量转换的一种方法。

                将高维度的词向量转换为低维度的词向量表示的方法,我们称之为词嵌入

            4)word2vec训练词向量的模型

                word2vec分为两个模型。

                    • CBOW

                        以上下文词汇预测当前词,前后两个单词预测当前词,这里的两个单词是自定义个数的

                        例如:有这么一句话,“普京若美不批准战略武器新条约俄将发展核力量”,此时将普京、若当做前两个词,不、批准当做后两个词,美当做被预测的值,那么此时这五个词当做第一个预测单元,那么第二个预测单元就是 若、美、不、批准、战略,第三个......,每个词都由独热编码的值表示,将每一个预测单元传入模型进行训练

                       • SkipGram

                        以当前词预测上下文词汇,即当前词预测前后两个单词,这里的两个单词也是自定义个数的

            5) 模型训练过程

                1、当前词的上下文词语的one-hot编码输入到输入层。

                2、这些词分别乘以同一个矩阵W(V*N)后分别得到各自的1*N 向量。

                3、将多个这些1*N 向量取平均为一个1*N 向量。

                4、将这个1*N 向量乘矩阵 W'(N*V) ,变成一个1*V 向量。

                5、将1*V 向量softmax归一化后输出取每个词的概率向量1*V

                6、将概率值最大的数对应的词作为预测词。

                7、将预测的结果1*V 向量和真实标签1*V 向量(真实标签中的V个值中有一个是1,其他是0)计算误差

                8、在每次前向传播之后反向传播误差,不断调整 W(V*N)和 W'(V*N)矩阵的值。

        例如上述的“普京若美不批准战略武器新条约俄将发展核力量”这句话,词库有4960个单词,首先将第一个预测单元的5个词的独热编码传入模型,输入层的格式为4*4960,即4个词,每个词的特征维度为4960个,传入后将其乘以矩阵4960*300,使其降低维度为4*300格式,这里的4960*300则为需要训练的第一个权重参数\omega1,再将得到的4*300格式的矩阵按列相加求平均,即对每一列的值求平均,然后得到1*300的矩阵,再将这个1*300的矩阵乘以矩阵300*4960,这个300*4960则为需要训练的第二个权重参数\omega2,然后的得到1*4960的矩阵,对这个1*4960的矩阵进行softmax归一化后取出每个词的概率向量1*V,概率最大的则为预测的词,然后将这个预测的值与真实值利用损失函数计算损失值,然后还要进行反向传播来不断更新权重参数来降低损失值的大小。

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

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

相关文章

AI Agent如何落地?来看看在教育行业大厂的落地实践

大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 以正教育AI Agent 以正教育大模型AI Agen…

【4.7】图搜索算法-DFS和BFS解根到叶子节点数字之和

一、题目 给定一个二叉树,它的每个结点都存放一个 0-9 的数字, 每条从根到叶子节点的路径都代表一个数字 。 例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。 说明 : 叶子节点是指没有子节点…

CF补题第二天

题1 先来一道最短路热身 题目描述: 思路:第一眼SPFA,结果直接超时,正解思路:每一条边只走一次,那么我们找出不同的连通块,然后拓扑排序求最短路(因为无环),…

有问题未解决(9.28)

#include <stdio.h> int main() {int a 1;int b 2;int c 3;int arr[] { a,b,c };arr[0] 10;printf("%d\n", a);//打印结果为1&#xff1b;return 0; } 颠覆认知了&#xff0c;或许也没有颠覆 arr是一个int类型的数组&#xff0c;他存的就是一个数&…

Android——ContentObserver监听短信

概述 内容观察器ContentObserver给目标内容注册一个观察器&#xff0c;目标内容的数据一旦发生变化&#xff0c;观察器规定好的动作马上触发&#xff0c;从而执行开发者预先定义的代码。 思路 注册一个监听 getContentResolver().registerContentObserver(uri, true, mObser…

QT+ESP8266+STM32项目构建三部曲三--QT从环境配置到源程序的解析

一、阿里云环境配置 大家在编写QT连接阿里云的程序之前&#xff0c;先按照下面这篇文章让消息可以在阿里云上顺利流转 QTESP8266STM32项目构建三部曲二--阿里云云端处理之云产品流转-CSDN博客文章浏览阅读485次&#xff0c;点赞7次&#xff0c;收藏4次。创建两个设备&#xff…

找不到msvcp110.dll怎么办,总结6种解决msvcp110.dll的方法

在电脑使用过程中&#xff0c;我们可能会遇到各种各样的问题&#xff0c;其中之一就是系统提示某个文件丢失。msvcp110.dll丢失是一个比较常见的问题&#xff0c;它可能导致某些程序无法正常运行。那么&#xff0c;如何解决这个问题呢&#xff1f;本文将详细介绍6种修复msvcp11…

手把手教你用PyTorch从零训练自己的大模型(非常详细)零基础入门到精通,收藏这一篇就够了

长按关注《AI科技论谈》 LLM是如今大多数AI聊天机器人的核心基础&#xff0c;例如ChatGPT、Gemini、MetaAI、Mistral AI等。这些LLM背后的核心是Transformer架构。 本文介绍如何一步步使用PyTorch从零开始构建和训练一个大型语言模型&#xff08;LLM&#xff09;。该模型以Tra…

OpenHarmony标准系统上实现对rk系列芯片NPU的支持(npu使用)

在上篇文章中&#xff0c;我们学习了移植rk的npu驱动到OpenHarmony提供的内核。本文我们来学习如何在OpenHarmony标准系统rk系列芯片如何使用npu OpenHarmony RK系列芯片运行npu测试用例 在移植npu驱动到OpenHarmony之后&#xff0c;来运行npu样例进行简单测试 1.O 测试准备…

【球形空间产生器】

题目 代码 #pragma GCC optimize(3) #include <bits/stdc.h> using namespace std; const double eps 1e-6; const int N 12; double g[N][N]; double ss[N]; int n; void gauss() {int c, r, t;for(c 1, r 1; c < n; c){int t r;for(int i r1; i < n; i)i…

Wayfair封号的常见原因及解决方案解析

近期关于Wayfair账号封禁的问题引发了广泛讨论。许多用户报告称&#xff0c;他们的Wayfair账户被突然封禁&#xff0c;这一现象不仅影响了用户的购物体验&#xff0c;也对Wayfair的品牌形象造成了一定的冲击。本文将深入探讨Wayfair封号的原因&#xff0c;并提出相应的解决方案…

【SpringCloud】服务注册/服务发现-Eureka

服务注册/服务发现-Eureka 1. 背景1.1 问题描述1.2 解决思路1.3 什么是注册中⼼1.4 CAP理论1.5 常⻅的注册中⼼ 2. Eureka 介绍3. 搭建Eureka Server 1. 背景 1.1 问题描述 上个章节的例⼦中可以看到, 远程调⽤时, 我们的URL是写死的 String url "http://127.0.0.1:90…

Flink CDC实时同步MySQL到Doris

文章目录 1.开启Flink集群2.MySQL准备数据并开启Binlog3.FlinkCDC 提交任务到集群任务提交同步变更库表迁移 问题总结 Apache Flink CDC&#xff08;Change Data Capture&#xff09;是一个用于捕获和跟踪数据库更改的技术&#xff0c;它能够实时地从数据库中获取数据变更&…

★ C++进阶篇 ★ map和set

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C进阶篇第四章----map和set ~ ❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️ 澄岚主页&#xff1a;椎名澄嵐-CSDN博客 C基础篇专栏&#xff1a;★ C基础篇 ★_椎名澄嵐的博客-CSDN博…

AVLTree【c++实现】

目录 AVL树1.AVL树的概念2.AVLTree节点的定义3.AVLTree的插入4.AVLTree的旋转4.1左单旋4.2右单旋4.3左右双旋4.4右左双旋 5.AVLTree的验证6.AVLTree的性能 AVL树 AVLTree的代码实现连接&#xff1a; AVLTree 代码链接 1.AVL树的概念 学习了二叉搜索树之后&#xff0c;我们知…

18年408数据结构

第一题&#xff1a; 解析&#xff1a;这道题很简单&#xff0c;按部就班的做就可以了。 画出S1&#xff0c;S2两个栈的情况&#xff1a; S1: S2: 2 3 - 8 * 5 从S1中依次弹出两个操作数2和3&a…

甄选范文“论企业应用系统的数据持久层架构设计”,软考高级论文,系统架构设计师论文

论文真题 数据持久层(Data Persistence Layer)通常位于企业应用系统的业务逻辑层和数据源层之间,为整个项目提供一个高层、统一、安全、并发的数据持久机制,完成对各种数据进行持久化的编程工作,并为系统业务逻辑层提供服务。它能够使程序员避免手工编写访问数据源的方法…

IDEA 高版本创建 Spring Boot 项目选不到 java 8

一、场景分析 现在高版本的 IDEA&#xff0c;创建 Spring Boot 项目时常常会选不到 Java 8&#xff1a; 直接使用 Java 17 新建项目&#xff0c;又会报错&#xff1a; Selected version of Java 17 is not supported by the project SDK 1.8. Either choose a lower version o…

Linux增加一个回收站功能(实用功能)

在linux中,默认是没有回收站的概念的,文件被删除之后,就没有了,很难进行恢复,本章教程,教你如何在linux中安装一个回收站功能,让你的文件即使删掉了,也有即使找回来。 一、安装插件 需要注意的是, python版本需要大于3.8,否则安装之后可能无法使用。 1、下载插件 ht…

基于Qt的多功能串口通信工具分享:实时数据收发与波形绘制

需要工程源码请私信 基于 Qt 框架开发的多功能串口通信工具&#xff0c;旨在为用户提供稳定、流畅的串口数据收发体验。该工具不仅支持基本的串口通信功能&#xff0c;还集成了定时发送、多线程数据处理、粘包问题解决、实时波形绘制等多种高级功能。通过使用 QSerialPort 进行…