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

目录

一、语言转换方法

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

1)数据预处理

2)特征提取

3)模型输入

4)模型推理

二、语言模型

1、统计语言模型

[1) 案例:](#1) 案例:)

[• 运行结果:](#• 运行结果:)

[• 稀疏矩阵内容表达:](#• 稀疏矩阵内容表达:)

[2) 统计学语言模型存在的问题](#2) 统计学语言模型存在的问题)

[• 参数空间的爆炸式增长](#• 参数空间的爆炸式增长)

[• 缺乏考虑词与词之间内在联系的能力](#• 缺乏考虑词与词之间内在联系的能力)

2、神经语言模型

[1) 传统自然语言处理](#1) 传统自然语言处理)

[2) 如何解决维度灾难问题](#2) 如何解决维度灾难问题)

[3) 词嵌入embedding](#3) 词嵌入embedding)

4)word2vec训练词向量的模型

[• CBOW](#• CBOW)

[• SkipGram](#• SkipGram)

[5) 模型训练过程](#5) 模型训练过程)


一、语言转换方法

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

1)数据预处理

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

2)特征提取

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

3)模型输入

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

4)模型推理

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

二、语言模型

1、统计语言模型

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

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

1) 案例:

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

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

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

python 复制代码
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则为需要训练的第一个权重参数**1,** 再将得到的4*300格式的矩阵按列相加求平均,即对每一列的值求平均,然后得到1*300的矩阵,再将这个1*300的矩阵乘以矩阵300*4960,这个300*4960则为需要训练的第二个权重参数**2** ,然后的得到1*4960的矩阵,对这个1*4960的矩阵进行softmax归一化后取出每个词的概率向量1*V,概率最大的则为预测的词,然后将这个预测的值与真实值利用损失函数计算损失值,然后还要进行反向传播 来不断更新权重参数来降低损失值的大小。

相关推荐
B站计算机毕业设计超人36 分钟前
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
大数据·人工智能·爬虫·python·机器学习·课程设计·数据可视化
学术头条40 分钟前
清华、智谱团队:探索 RLHF 的 scaling laws
人工智能·深度学习·算法·机器学习·语言模型·计算语言学
18号房客44 分钟前
一个简单的机器学习实战例程,使用Scikit-Learn库来完成一个常见的分类任务——**鸢尾花数据集(Iris Dataset)**的分类
人工智能·深度学习·神经网络·机器学习·语言模型·自然语言处理·sklearn
feifeikon1 小时前
机器学习DAY3 : 线性回归与最小二乘法与sklearn实现 (线性回归完)
人工智能·机器学习·线性回归
游客5201 小时前
opencv中的常用的100个API
图像处理·人工智能·python·opencv·计算机视觉
古希腊掌管学习的神1 小时前
[机器学习]sklearn入门指南(2)
人工智能·机器学习·sklearn
Ven%1 小时前
如何在防火墙上指定ip访问服务器上任何端口呢
linux·服务器·网络·深度学习·tcp/ip
凡人的AI工具箱1 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite
IT猿手1 小时前
最新高性能多目标优化算法:多目标麋鹿优化算法(MOEHO)求解TP1-TP10及工程应用---盘式制动器设计,提供完整MATLAB代码
开发语言·深度学习·算法·机器学习·matlab·多目标算法
咸鱼桨2 小时前
《庐山派从入门到...》PWM板载蜂鸣器
人工智能·windows·python·k230·庐山派