Large Language Model系列之一:语言模型与表征学习(Language Models and Representation Learning)

语言模型与表征学习(Language Models and Representation Learning)

1 语言模型

N-Gram模型

在这里插入图片描述
在这里插入图片描述

from collections import defaultdictsentences = ['The swift fox jumps over the lazy dog.','The swift river flows under the ancient bridge.','The swift breeze cools the warm summer evening.']preprocesses_sentences = [["<s>"] + sentence.lower().replace(".","").split() + ["</s>"] for sentence in sentences]
print(preprocesses_sentences)bigram_model = defaultdict(lambda: defaultdict(lambda: 0))for sentence in preprocesses_sentences:for w1, w2 in zip(sentence[:-1], sentence[1:]):bigram_model[w1][w2] += 1
print(bigram_model)for w1 in bigram_model:total_count = float(sum(bigram_model[w1].values()))for w2 in bigram_model[w1]:bigram_model[w1][w2] /= total_count
print(bigram_model)bigram_model_probs = {w1: dict(w2) for w1, w2 in bigram_model.items()}
print(bigram_model_probs)

参考资料:
1 了解N-Gram模型
2 语言模型

神经网络语言模型(NNLM)

在这里插入图片描述

import torch
import torch.nn as nn
import torch.optim as optimsentences = ["i like dog", "i love coffee", "i hate milk"]word_list = " ".join(sentences).split()  # 制作词汇表
print(word_list)
word_list = list(set(word_list))  # 去重
print("after set: ", word_list)
word_dict = {w: i for i, w in enumerate(word_list)}  # 每个单词对应的索引
number_dict = {i: w for i, w in enumerate(word_list)}  # 每个索引对应的单词
n_class = len(word_dict)  # 单词总数# NNLM Parameter
n_step = 2  # 根据前两个单词预测第3个单词
n_hidden = 2  # h 隐藏层神经元的个数
m = 2  # m 词向量的维度def make_batch(sentences):input_batch = []target_batch = []for sen in sentences:word = sen.split()input = [word_dict[n] for n in word[:-1]]target = word_dict[word[-1]]input_batch.append(input)target_batch.append(target)return torch.LongTensor(input_batch), torch.LongTensor(target_batch)class NNLM(nn.Module):def __init__(self):super(NNLM, self).__init__()self.C = nn.Embedding(n_class, m)self.H = nn.Parameter(torch.randn(n_step * m, n_hidden).type(torch.FloatTensor))self.W = nn.Parameter(torch.randn(n_step * m, n_class).type(torch.FloatTensor))self.d = nn.Parameter(torch.randn(n_hidden).type(torch.FloatTensor))self.U = nn.Parameter(torch.randn(n_hidden, n_class).type(torch.FloatTensor))self.b = nn.Parameter(torch.randn(n_class).type(torch.FloatTensor))def forward(self, X):X = self.C(X)X = X.view(-1, n_step * m)  # [batch_size, n_step * n_class]tanh = torch.tanh(self.d + torch.mm(X, self.H))  # [batch_size, n_hidden]output = self.b + torch.mm(X, self.W) + torch.mm(tanh, self.U)  # [batch_size, n_class]return outputmodel = NNLM()criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)input_batch, target_batch = make_batch(sentences)# Training
for epoch in range(5000):optimizer.zero_grad()output = model(input_batch)# output : [batch_size, n_class], target_batch : [batch_size] (LongTensor, not one-hot)loss = criterion(output, target_batch)  # 求lossif (epoch + 1) % 1000 == 0:print('Epoch:', '%04d' % (epoch + 1), 'cost =', '{:.6f}'.format(loss))loss.backward()optimizer.step()# Predict
predict = model(input_batch).data.max(1, keepdim=True)[1]# Test
print([sen.split()[:2] for sen in sentences], '->', [number_dict[n.item()] for n in predict.squeeze()])

参考资料:
1 【NLP】神经网络语言模型(NNLM)
2 A Neural Probabilistic Language Model_论文阅读及代码复现pytorch版
3 语言模型

2 词表示

Word2vec

Word2vec是一种用于生成词嵌入的算法,它通过分析词在文本中的上下文来捕捉词的语义信息。利用海量的文本序列,根据上下文单词预测目标单词共现的概率,让一个构造的网络向概率最大化优化,得到的参数矩阵就是单词的向量。

Word2vec算法模型

Word2vec算法包含两种主要的模型,每种模型都以不同的方式利用上下文来学习词的向量表示:
连续词袋模型(CBOW):

  • 在CBOW模型中,上下文词被用来预测它们中间的目标词。这种方法将上下文视为一个整体,不考虑词的顺序,类似于一个“词袋”。
  • 给定一个目标词,CBOW模型会考虑其周围的词,并尝试基于这些上下文词来预测目标词。

在这里插入图片描述

Skip-gram模型:

  • 与CBOW相反,Skip-gram模型使用单个词来预测它的上下文。这种模型适合于处理较大的词汇表,并且能够更精确地捕捉词与上下文之间的关系。
  • Skip-gram模型的名称来源于其能力,可以“跳过”目标词并预测其周围的词,即使这些词在句子中的位置相隔较远。
    两种模型都通过优化神经网络的权重来学习词的向量表示,使得词向量能够捕捉到词义和上下文的复杂关系。通过这种方式,word2vec能够为每个词生成一个连续的向量空间中的点,这些点在向量空间中的相对位置反映了词之间的语义相似性。

在这里插入图片描述

Word2vec加快训练速度

Word2vec的实现中,有两种主要的技术用于提高训练效率和处理大数据集:层次Softmax(Hierarchical Softmax)和负采样(Negative Sampling)。

Hierarchical Softmax(层次Softmax)

层次Softmax用于加速Softmax层的计算过程,核心思想是将条件概率估计可以转换为 l o g 2 ∣ V ∣ log_{2}|V| log2V 个两类分类问题。在传统的Softmax中,计算所有词汇的概率分布需要对词汇表中的每个词进行操作,这在大规模词汇表中非常耗时。

  • 构建二叉树:层次Softmax首先基于词汇表构建一个二叉树,每个节点代表一个词汇,叶子节点是词汇表中的词,内部节点是虚拟的词。
  • 从根到叶的路径:对于每个目标词,都有一个从根节点到该词所在叶子节点的路径。
  • 路径上的节点进行二分类:在这条路径上,模型只需要对每个内部节点做出是向左子树还是向右子树的二分类决策,而不是在整个词汇表上进行多分类。
  • 减少计算量:这种方法显著减少了计算量,因为每次只对词汇表中的一部分进行操作,而不是全部词汇。
Negative Sampling(负采样)

负采样是另一种提高训练效率的技术,,核心思想是将条件概率转化为多个二分类问题,特别是在处理大规模数据集时。

  • 选择正样本:在每次迭代中,除了目标词(正样本)之外,还会随机选择几个“噪声词”作为负样本。
  • 训练二分类器:模型被训练为将正样本与负样本区分开来。这通过多次二分类问题来近似Softmax的多分类问题。
  • 减少计算复杂度:与层次Softmax不同,负采样不需要构建树结构,但它通过减少每次迭代中考虑的词的数量来降低计算复杂度。
  • 参数调整:负采样中的关键是负样本的数量,这需要根据具体任务和数据集进行调整。

层次Softmax和负采样都是word2vec中用于提高训练效率的技术。层次Softmax通过构建词汇的二叉树结构来减少Softmax层的计算量,而负采样通过引入负样本来近似Softmax的输出分布,两者都能在保持词向量质量的同时加快模型的训练速度。在实际应用中,根据数据集的大小和训练资源,可以选择其中一种或两种技术的组合来优化word2vec的训练过程。

word2vec的训练过程:以CBOW为例

假设我们有句子 “I learn NLP everyday”,并且我们用 “I”, “learn”, “everyday” 作为上下文来预测 “NLP”。
在这里插入图片描述

  • One-hot编码:将上下文词 “I”, “learn”, “everyday” 转换为one-hot向量。
    在这里插入图片描述

  • 嵌入矩阵乘法:将one-hot向量与嵌入矩阵相乘,得到上下文词的向量化表示。
    在这里插入图片描述

  • 求平均:将这些向量相加后求平均,形成CBOW模型的隐藏层表示。
    在这里插入图片描述

  • 预测计算:将隐藏层表示与另一个嵌入矩阵相乘,得到预测词的原始分数。
    在这里插入图片描述

  • Softmax输出:通过Softmax函数将原始分数转换为概率,选择概率最高的词作为预测结果。
    在这里插入图片描述

  • 损失计算与优化:计算预测结果与实际目标词之间的损失,并使用梯度下降等优化算法来调整权重矩阵。

参考资料:
1 【NLP】图解词嵌入和Word2vec
2 深入理解word2vec
3 详解Word2Vec,从理论到实践让你从底层彻底了解Word2Vec!

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

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

相关文章

华为1000人校园实验记录

在这里插入代码片1000人校园区网设计 1、配置Eth-trunk实现链路冗余 vlan 900 管理WLAN #接入SW8 操作&#xff1a;sys undo in en sysname JR-SW8 int Eth-Trunk 1 mode lacp-static trunkport g0/0/1 0/0/2 port link-type trunk port trunk allow-pass vlan 200 900 qu vla…

模拟器小程序/APP抓包(Reqable+MUMU模拟器)

一、使用adb连接上MUMU模拟器 打开多开器点击ADB图标 连接模拟器端口&#xff1a; adb connect 127.0.0.1:16384列出已连接的设备&#xff1a; adb devices正常会显示MuMu的设备已连接 二、下载Reqable 1.下载链接&#xff1a;客户端下载 | Reqable 2.文档链接&#xff1a;…

redis基本类型和订阅

redis-cli -h <host> -p <port> -a <password> 其中&#xff0c;< host>是Redis服务器的主机名或IP地址&#xff0c;< port>是Redis服务器的端口号&#xff0c;< password>是Redis服务器的密码&#xff08;如果有的话&#xff09;。 set …

LLM基础模型系列:Prompt-Tuning

------->更多内容&#xff0c;请移步“鲁班秘笈”&#xff01;&#xff01;<------ 大型预训练语言模型的规模不断扩大&#xff0c;在许多自然语言处理 &#xff08;NLP&#xff09; 基准测试中取得了最先进的结果。自GPT和BERT开发以来&#xff0c;标准做法一直是在下游…

数字化教育资源如何适应人工智能时代

01 教育资源应动态适应一线教学需求 用好数字化教育资源是一项系统工程&#xff0c;涉及教育教学的各个方面&#xff0c;包括教师和学生的教育观念与技术观念、信息技术素养&#xff0c;以及课程教学改革、教师培训等。还涉及数字化教育资源提供方的服务&#xff0c;如技术支持…

【STM32嵌入式系统设计与开发---拓展】——1_9_1上拉输入和下拉输入

在使用GPIO引脚时&#xff0c;上拉输入和下拉输入的选择取决于外部电路的特性和应用需求。以下是它们各自的应用场景&#xff1a; 1、上拉输入&#xff08;Pull-up Input&#xff09; 用途: 当默认状态需要为高电平时。 避免引脚悬空&#xff08;floating&#xff09;导致的…

计算机网络——网络层(路由选择协议、路由器工作原理、IP多播、虚拟专用网和网络地址转换)

目录 路由选择协议 因特网的路由选择协议特点 路由信息协议RIP RIP衡量目的网络距离 RIP选择路由器的方式 RIP具有以下三个重要特点 RIP的基本工作流程 RIP的距离向量算法 ​编辑 ​编辑 RIP存在的问题——“坏消息传播得慢” RIP的封装 开放最短路径优先协议OSPF…

昇思25天学习打卡营第23天|基于MindSpore的Pix2Pix实现图像转换

Pix2Pix实现图像转换 Pix2Pix概述 Pix2Pix是基于条件生成对抗网络&#xff08;cGAN, Condition Generative Adversarial Networks &#xff09;实现的一种深度学习图像转换模型&#xff0c;该模型是由Phillip Isola等作者在2017年CVPR上提出的&#xff0c;可以实现语义/标签到…

【贪心算法】贪心算法30题

一、贪心算法简介 证明贪心策略正确性的常用方法&#xff1a;直接证明、交换论证法、反证法、分类讨论… 二、相关编程题 2.1 柠檬水找零 题目链接 860. 柠檬水找零 - 力扣&#xff08;LeetCode&#xff09; 题目描述 算法原理 提示&#xff1a;最优解和贪心解唯一可能不同…

《昇思25天学习打卡营第19天|Diffusion扩散模型》

什么是Diffusion Model&#xff1f; 什么是Diffusion Model? 如果将Diffusion与其他生成模型&#xff08;如Normalizing Flows、GAN或VAE&#xff09;进行比较&#xff0c;它并没有那么复杂&#xff0c;它们都将噪声从一些简单分布转换为数据样本&#xff0c;Diffusion也是从…

共建特色基地 协同互促育人

作为芯片和集成电路、人工智能、智能网联车等临港重点产业布局的知识密集型相关企业&#xff0c;核心技术人才和技术骨干是公司参与全球竞争的重要核心竞争力之一。 知从科技通过不断的创新和规范&#xff0c;在深化产教融合、校企合作、“双师型”、联合办学协同育人、产业人…

git回退分支版本git reset --hard HEAD

git回退分支版本git reset --hard HEAD git reset --hard HEAD 上面命令清除本地所有修改&#xff0c;与下面相似&#xff1a; git reset --hard origin/master 等同于&#xff1a; git reset --hard HEAD~0 说明&#xff1a; HEAD 当前版本 HEAD^ 上一个版本 HEAD^^ 上上…

Linux - 冯-诺依曼体系结构、初始操作系统

目录 冯•诺依曼体系 结构推导 内存提高效率的方法 数据的流动过程 体系结构相关知识 初始操作系统 定位 设计目的 操作系统之上之下分别有什么 管理精髓&#xff1a;先描述&#xff0c;再组织 冯•诺依曼体系 结构推导 计算机基本工作流程图大致如下&#xff1a; 输入设备&a…

支付宝低代码搭建电商小程序,无需编程,可视化操作

大家好&#xff0c;我是小悟 在数字化浪潮的推动下&#xff0c;为了更快速、高效地搭建电商小程序&#xff0c;支付宝低代码平台凭借其独特优势&#xff0c;为商家提供了便捷的解决方案。 支付宝低代码平台犹如一座精心打造的智慧工坊&#xff0c;让电商小程序的搭建变得轻而易…

Excel办公技巧:制作二级联动下拉菜单

分享制作二级联动下拉菜单的方法&#xff0c;即使数据有增删&#xff0c;菜单也能自动更新&#xff01; 可以通过先定义名称&#xff0c;再结合数据验证&#xff0c;来做二级联动下拉菜单。 1. 准备数据 首先&#xff0c;我们需要准备好要进行二级联动下拉菜单的数据&#xff…

在 Linux 系统中安装MySQL 8.x(Ubuntu和CentOS)

文章目录 0. 前言1. 查看 Linux 的发行版本2. 在 Ubuntu 中安装MySQL 8.x2.1 更新包索引2.1.1 更改 Ubuntu 的镜像源2.1.2 更新软件包、升级软件包&#xff08;耗时可能较长&#xff09;2.1.3 可能遇到的问题 2.2 安装MySQL2.3 安全配置2.3.1 密码安全级别2.3.2 删除匿名用户2.…

6.Dockerfile及Dockerfile常用指令

Dockerfile是构建docker镜像的脚本文件 Dockerfile有很多的指令构成&#xff0c;指令由上到下依次运行。 每一条指令就是一层镜像&#xff0c;层越多&#xff0c;体积就越大&#xff0c;启动速度也越慢 井号开头的行是注释行。指令写大写写小写都行&#xff0c;但一般都写为…

介绍 Elasticsearch 中的 Learning to Tank - 学习排名

作者&#xff1a;来自 Elastic Aurlien Foucret 从 Elasticsearch 8.13 开始&#xff0c;我们提供了原生集成到 Elasticsearch 中的学习排名 (learning to rank - LTR) 实现。LTR 使用经过训练的机器学习 (ML) 模型为你的搜索引擎构建排名功能。通常&#xff0c;该模型用作第二…

nginx代理缓存

在服务器架构中&#xff0c;反向代理服务器除了能够起到反向代理的作用之外&#xff0c;还可以缓存一些资源&#xff0c;加速客户端访问&#xff0c;nginx的ngx_http_proxy_module模块不仅包含了反向代理的功能还包含了缓存功能。 1、定义代理缓存规则 参数详解&#xff1a; p…

减分虎-交管12123学习题目及答案

学法减分是对驾驶证已经存在的记分进行减免&#xff0c;并不是给驾驶证进行加分&#xff0c;不是代替违章扣分。学法免费获取的分值正是对扣分记录的清除。比如违章被扣6分&#xff0c;通过学法免分考试把6分清空重新开始。 学法减分政策为驾驶员提供了一次难得的加分机会。然而…