天元建设集团有限公司承包,西安网站建设优化,做中东市场哪个网站合适,wordpress 父级子页面语言模型
假设长度为 T T T的文本序列中的词元依次为 x 1 , x 2 , ⋯ , x T x_1,x_2,\cdots,x_T x1,x2,⋯,xT。 于是, x T x_T xT#xff08; 1 ≤ t ≤ T 1\le t\le T 1≤t≤T#xff09; 可以被认为是文本序列在时间步 t t t处的观测或标签。 在给定这样的文本…语言模型
假设长度为 T T T的文本序列中的词元依次为 x 1 , x 2 , ⋯ , x T x_1,x_2,\cdots,x_T x1,x2,⋯,xT。 于是, x T x_T xT 1 ≤ t ≤ T 1\le t\le T 1≤t≤T 可以被认为是文本序列在时间步 t t t处的观测或标签。 在给定这样的文本序列时语言模型language model的目标是估计序列的联合概率: P ( x 1 , x 2 , ⋯ , x T ) P(x_1,x_2,\cdots,x_T) P(x1,x2,⋯,xT) 应用包括
做预训练模型(BERT,GPT-3)生成本文给定前面几个词不断的使用 x t ∼ p ( x t ∣ x 1 , ⋯ , x t − 1 ) x_t\sim p(x_t|x_1,\cdots,x_{t-1}) xt∼p(xt∣x1,⋯,xt−1)生成后续文本判断多个序列中哪个更常见
1.使用计数来建模(n_gram)
假设序列长度为2我们预测 p ( x , x ′ ) p ( x ) p ( x ′ ∣ x ) n ( x ) n n ( x , x ′ ) n ( x ) p(x,x)p(x)p(x|x)\frac{n(x)}{n}\frac{n(x,x)}{n(x)} p(x,x′)p(x)p(x′∣x)nn(x)n(x)n(x,x′) 其中 n n n是总次数 n ( x ) , n ( x , x ′ ) n(x),n(x,x) n(x),n(x,x′)是单个单词和连续单词对的出现次数
序列长度为3的情况也很容易 p ( x , x ′ , x ′ ′ ) p ( x ) p ( x ′ ∣ x ) p ( x ′ ′ ∣ x , x ′ ) n ( x ) n n ( x , x ′ ) n ( x ) n ( x , x ′ ) n ( x , x ′ , x ′ ′ ) p(x,x,x)p(x)p(x|x)p(x|x,x)\frac{n(x)}{n}\frac{n(x,x)}{n(x)}\frac{n(x,x)}{n(x,x,x)} p(x,x′,x′′)p(x)p(x′∣x)p(x′′∣x,x′)nn(x)n(x)n(x,x′)n(x,x′,x′′)n(x,x′)
显然我们得到了一种简单的建模方式 p ( x t ∣ x 1 , ⋯ , x t ) n ( x 1 , ⋯ , x t ) n p(x_t|x_1,\cdots,x_t)\frac{n(x_1,\cdots,x_t)}{n} p(xt∣x1,⋯,xt)nn(x1,⋯,xt) 但这样有个问题
当序列很长时因为文本量不够大很可能 n ( x 1 , ⋯ , x T ) ≤ 1 n(x_1,\cdots,x_T)\le 1 n(x1,⋯,xT)≤1即某些序列是合理的但文本中没有出现。可以使用马尔科夫假设缓解这个问题
一元语法 p ( x 1 , x 2 , x 3 , x 4 ) n ( x 1 ) n n ( x 2 ) n n ( x 3 ) n n ( x 5 ) n p(x_1,x_2,x_3,x_4)\frac{n(x_1)}n\frac{n(x_2)}n\frac{n(x_3)}n\frac{n(x_5)}n p(x1,x2,x3,x4)nn(x1)nn(x2)nn(x3)nn(x5)与前面无关二元语法 p ( x 1 , x 2 , x 3 , x 4 ) n ( x 1 ) n n ( x 1 , x 2 ) n ( x 1 ) n ( x 2 , x 3 ) n ( x 2 ) n ( x 3 , x 4 ) n ( x 3 ) p(x_1,x_2,x_3,x_4)\frac{n(x_1)}n \frac{n(x_1,x_2)}{n(x_1)} \frac{n(x_2,x_3)}{n(x_2)} \frac{n(x_3,x_4)}{n(x_3)} p(x1,x2,x3,x4)nn(x1)n(x1)n(x1,x2)n(x2)n(x2,x3)n(x3)n(x3,x4)与前面一个词有关系三元语法 p ( x 1 , x 2 , x 3 , x 4 ) p ( x 1 ) p ( x 2 ∣ x 1 ) p ( x 3 ∣ x 1 , x 2 ) p ( x 4 ∣ x 2 , x 3 ) p(x_1,x_2,x_3,x_4)p(x_1)p(x_2|x_1)p(x_3|x_1,x_2)p(x_4|x_2,x_3) p(x1,x2,x3,x4)p(x1)p(x2∣x1)p(x3∣x1,x2)p(x4∣x2,x3)与前面两个词有关系
另一种常见的策略师执行某种形式的拉普拉斯平滑具体方法是在所有计数中添加一个小常量用 n n n表示训练集中的单词总数用 m m m表示唯一单词的数量这个方案有助于处理单元素问题 其中 ϵ 1 , ϵ 2 , ϵ 3 \epsilon_1,\epsilon_2,\epsilon_3 ϵ1,ϵ2,ϵ3是超参数这样的模型很容易变得无效原因如下首先我们需要存储所有的计数 其次这完全忽略了单词的意思。 例如“猫”cat和“猫科动物”feline可能出现在相关的上下文中 但是想根据上下文调整这类模型其实是相当困难的。 最后长单词序列大部分是没出现过的 因此一个模型如果只是简单地统计先前“看到”的单词序列频率 那么模型面对这种问题肯定是表现不佳的。
2.语言模型和数据集的代码实现
import random
import torch
import re
from d2l import torch as d2ld2l.DATA_HUB[time_machine] (d2l.DATA_URL timemachine.txt,090b5e7e70c295757f55df93cb0a180b9691891a)def read_time_machine(): # save将时间机器数据集加载到文本行的列表中with open(d2l.download(time_machine), r) as f:lines f.readlines()return [re.sub([^A-Za-z], , line).strip().lower() for line in lines]tokens d2l.tokenize(read_time_machine())
# 因为每个文本行不一定是一个句子或一个段落因此我们把所有文本行拼接到一起
corpus [token for line in tokens for token in line]
vocab d2l.Vocab(corpus)
print(vocab.token_freqs[:10])freqs [freq for token, freq in vocab.token_freqs]
print(freqs[:10])
d2l.plot(freqs, xlabeltoken: x, ylabelfrequency: n(x),xscalelog, yscalelog)
d2l.plt.show() 词频图词频以一种明确的方式迅速衰减将前几个单词作为例外消除后(停用词类似theaIand之类的)生育的所有单词大致遵循双对数坐标图上的一条直线这意味着单词的频率满足齐普夫定律(Zipf’s law)即第 i i i个最常用的频率 n i n_i ni为 n i ∝ 1 n i n_i\propto \frac 1{n_i} ni∝ni1 等价于
l o g n i − α l o g i c log\ n_i -\alpha log\ ic log ni−αlog ic 这意味着通过计数统计和平滑来建模单词是不可行的因为这样建模的结果会大大高估尾部单词的频率。
多元语法
注意最新的d2l库中的Vocab类好像有问题处理不了元组将库中的Vocab类替换一下再加上count_corpus函数就可以正常处理元组。 bigram_tokens [pair for pair in zip(corpus[:-1], corpus[1:])]
bigram_vocab d2l.Vocab(bigram_tokens)
print(二元:,bigram_vocab.token_freqs[:10])trigram_tokens [triple for triple in zip(corpus[:-2], corpus[1:-1], corpus[2:])]
trigram_vocab d2l.Vocab(trigram_tokens)
print(三元:,trigram_vocab.token_freqs[:10])bigram_freqs [freq for token, freq in bigram_vocab.token_freqs]
trigram_freqs [freq for token, freq in trigram_vocab.token_freqs]
d2l.plot([freqs, bigram_freqs, trigram_freqs], xlabeltoken: x,ylabelfrequency: n(x), xscalelog, yscalelog,legend[unigram, bigram, trigram])
d2l.plt.show() 发现
除了一元语法词单词序列似乎也遵循齐普夫定律 尽管公式中的指数更小 指数的大小受序列长度的影响词表中n元组的数量并没有那么大这说明语言中存在相当多的结构 这些结构给了我们应用模型的希望很多n元组很少出现这使得拉普拉斯平滑非常不适合语言建模。 作为代替我们将使用基于深度学习的模型。
随机采样
# 随机采样
def seq_data_iter_random(corpus, batch_size, num_steps): #save使用随机抽样生成一个小批量子序列# num_steps意思是取多少个token来进行预测# 从随机偏移量开始对序列进行分区随机范围包括num_steps-1corpus corpus[random.randint(0, num_steps - 1):]# 减去1是因为我们需要考虑标签,最后一个样本没有可预测的数据num_subseqs (len(corpus) - 1) // num_steps# 长度为num_steps的子序列的起始索引initial_indices list(range(0, num_subseqs * num_steps, num_steps))# 在随机抽样的迭代过程中# 来自两个相邻的、随机的、小批量中的子序列不一定在原始序列上相邻print(initial_indices)random.shuffle(initial_indices) # 打乱顺序不会生成新的列表在原列表上打乱的print(initial_indices)def data(pos):# 返回从pos位置开始的长度为num_steps的序列return corpus[pos: pos num_steps]num_batches num_subseqs // batch_sizefor i in range(0, batch_size * num_batches, batch_size): #后面一个是步长# 在这里initial_indices包含子序列的随机起始索引initial_indices_per_batch initial_indices[i: i batch_size]X [data(j) for j in initial_indices_per_batch]Y [data(j 1) for j in initial_indices_per_batch]yield torch.tensor(X), torch.tensor(Y)生成一个0到34的序列假设批量大小为2时间步数为5这意味着可以生成(35-1)/5 6个特征-标签子序列对my_seq list(range(35))
for X, Y in seq_data_iter_random(my_seq, batch_size2, num_steps5):print(X: , X, \nY:, Y)顺序分区
def seq_data_iter_sequential(corpus, batch_size, num_steps): # save使用顺序分区生成一个小批量子序列# 顺序分区保证不同批次内的子序列在原始序列上是连续的不会跳过任何元素这对某些任务(语言建模)可能更合适# X: tensor([[ 1, 2, 3, 4, 5],# [17, 18, 19, 20, 21]])# Y: tensor([[ 2, 3, 4, 5, 6],# [18, 19, 20, 21, 22]])# X: tensor([[ 6, 7, 8, 9, 10], 和[1,2,3,4,5]是连续的# [22, 23, 24, 25, 26]]) 和[17,18,19,20,21]是连续的# Y: tensor([[ 7, 8, 9, 10, 11],# [23, 24, 25, 26, 27]])# X: tensor([[11, 12, 13, 14, 15],# [27, 28, 29, 30, 31]])# Y: tensor([[12, 13, 14, 15, 16],# [28, 29, 30, 31, 32]])# 从随机偏移量开始划分序列offset random.randint(0, num_steps)num_tokens ((len(corpus) - offset - 1) // batch_size) * batch_sizeXs torch.tensor(corpus[offset: offset num_tokens])Ys torch.tensor(corpus[offset 1: offset 1 num_tokens])Xs, Ys Xs.reshape(batch_size, -1), Ys.reshape(batch_size, -1)num_batches Xs.shape[1] // num_stepsfor i in range(0, num_steps * num_batches, num_steps):X Xs[:, i: i num_steps]Y Ys[:, i: i num_steps]print(X: , X, \nY:, Y)yield X, Y #返回一个值序列而不是一次性返回所有值。for X, Y in seq_data_iter_sequential(my_seq, batch_size2, num_steps5):print(X: , X, \nY:, Y)
包装
class SeqDataLoader: # save加载序列数据的迭代器def __init__(self, batch_size, num_steps, use_random_iter, max_tokens):if use_random_iter:self.data_iter_fn d2l.seq_data_iter_randomelse:self.data_iter_fn d2l.seq_data_iter_sequentialself.corpus, self.vocab d2l.load_corpus_time_machine(max_tokens)self.batch_size, self.num_steps batch_size, num_stepsdef __iter__(self):return self.data_iter_fn(self.corpus, self.batch_size, self.num_steps)def load_data_time_machine(batch_size, num_steps, # saveuse_random_iterFalse, max_tokens10000):返回时光机器数据集的迭代器和词表data_iter SeqDataLoader(batch_size, num_steps, use_random_iter, max_tokens)return data_iter, data_iter.vocab
NLP BERT GPT等模型中 tokenizer 类别说明详解-腾讯云开发者社区-腾讯云 (tencent.com) 文章转载自: http://www.morning.byzpl.cn.gov.cn.byzpl.cn http://www.morning.yrmpr.cn.gov.cn.yrmpr.cn http://www.morning.zsrjn.cn.gov.cn.zsrjn.cn http://www.morning.xuejitest.com.gov.cn.xuejitest.com http://www.morning.gwdmj.cn.gov.cn.gwdmj.cn http://www.morning.lmxzw.cn.gov.cn.lmxzw.cn http://www.morning.pluimers.cn.gov.cn.pluimers.cn http://www.morning.drtgt.cn.gov.cn.drtgt.cn http://www.morning.kxmyj.cn.gov.cn.kxmyj.cn http://www.morning.gybnk.cn.gov.cn.gybnk.cn http://www.morning.mlcwl.cn.gov.cn.mlcwl.cn http://www.morning.tqsgt.cn.gov.cn.tqsgt.cn http://www.morning.xmrmk.cn.gov.cn.xmrmk.cn http://www.morning.dlbpn.cn.gov.cn.dlbpn.cn http://www.morning.rwmft.cn.gov.cn.rwmft.cn http://www.morning.syrzl.cn.gov.cn.syrzl.cn http://www.morning.kxrhj.cn.gov.cn.kxrhj.cn http://www.morning.wdpt.cn.gov.cn.wdpt.cn http://www.morning.nrbqf.cn.gov.cn.nrbqf.cn http://www.morning.pwghp.cn.gov.cn.pwghp.cn http://www.morning.rkck.cn.gov.cn.rkck.cn http://www.morning.mcfjq.cn.gov.cn.mcfjq.cn http://www.morning.bygyd.cn.gov.cn.bygyd.cn http://www.morning.tfbpz.cn.gov.cn.tfbpz.cn http://www.morning.kxypt.cn.gov.cn.kxypt.cn http://www.morning.ktnt.cn.gov.cn.ktnt.cn http://www.morning.ndlww.cn.gov.cn.ndlww.cn http://www.morning.kpzbf.cn.gov.cn.kpzbf.cn http://www.morning.jlnlr.cn.gov.cn.jlnlr.cn http://www.morning.kjgdm.cn.gov.cn.kjgdm.cn http://www.morning.ptwqf.cn.gov.cn.ptwqf.cn http://www.morning.dhyzr.cn.gov.cn.dhyzr.cn http://www.morning.kltmt.cn.gov.cn.kltmt.cn http://www.morning.gglhj.cn.gov.cn.gglhj.cn http://www.morning.dwztj.cn.gov.cn.dwztj.cn http://www.morning.yppln.cn.gov.cn.yppln.cn http://www.morning.ydrn.cn.gov.cn.ydrn.cn http://www.morning.mpsnb.cn.gov.cn.mpsnb.cn http://www.morning.oioini.com.gov.cn.oioini.com http://www.morning.tlbhq.cn.gov.cn.tlbhq.cn http://www.morning.c7510.cn.gov.cn.c7510.cn http://www.morning.wqrk.cn.gov.cn.wqrk.cn http://www.morning.lmctj.cn.gov.cn.lmctj.cn http://www.morning.sjftk.cn.gov.cn.sjftk.cn http://www.morning.tfqfm.cn.gov.cn.tfqfm.cn http://www.morning.zfqr.cn.gov.cn.zfqr.cn http://www.morning.fwmln.cn.gov.cn.fwmln.cn http://www.morning.qkrgk.cn.gov.cn.qkrgk.cn http://www.morning.nqrfd.cn.gov.cn.nqrfd.cn http://www.morning.wnjwb.cn.gov.cn.wnjwb.cn http://www.morning.zmyhn.cn.gov.cn.zmyhn.cn http://www.morning.tbkqs.cn.gov.cn.tbkqs.cn http://www.morning.ryxbz.cn.gov.cn.ryxbz.cn http://www.morning.wjqbr.cn.gov.cn.wjqbr.cn http://www.morning.srgnd.cn.gov.cn.srgnd.cn http://www.morning.bpmtr.cn.gov.cn.bpmtr.cn http://www.morning.ggnrt.cn.gov.cn.ggnrt.cn http://www.morning.linzhigongmao.cn.gov.cn.linzhigongmao.cn http://www.morning.pbtrx.cn.gov.cn.pbtrx.cn http://www.morning.dkgtr.cn.gov.cn.dkgtr.cn http://www.morning.rfdqr.cn.gov.cn.rfdqr.cn http://www.morning.jfch.cn.gov.cn.jfch.cn http://www.morning.gjws.cn.gov.cn.gjws.cn http://www.morning.grzpc.cn.gov.cn.grzpc.cn http://www.morning.zlqyj.cn.gov.cn.zlqyj.cn http://www.morning.qzdxy.cn.gov.cn.qzdxy.cn http://www.morning.tkzqw.cn.gov.cn.tkzqw.cn http://www.morning.trmpj.cn.gov.cn.trmpj.cn http://www.morning.lpnpn.cn.gov.cn.lpnpn.cn http://www.morning.mknxd.cn.gov.cn.mknxd.cn http://www.morning.zcfmb.cn.gov.cn.zcfmb.cn http://www.morning.mrqwy.cn.gov.cn.mrqwy.cn http://www.morning.fbtgp.cn.gov.cn.fbtgp.cn http://www.morning.nkjkh.cn.gov.cn.nkjkh.cn http://www.morning.ymmjx.cn.gov.cn.ymmjx.cn http://www.morning.wqmyh.cn.gov.cn.wqmyh.cn http://www.morning.rnlx.cn.gov.cn.rnlx.cn http://www.morning.dnls.cn.gov.cn.dnls.cn http://www.morning.tgmfg.cn.gov.cn.tgmfg.cn http://www.morning.zyrcf.cn.gov.cn.zyrcf.cn