【系列笔记】
【Andrej Karpathy 神经网络从Zero到Hero】–1. 自动微分autograd实践要点
本文主要参考 大神Andrej Karpathy 大模型讲座 | 构建makemore 系列之一:讲解语言建模的明确入门,演示
- 如何利用统计数值构建一个简单的 Bigram 语言模型
- 如何用一个神经网络来复现前面 Bigram 语言模型的结果,以此来展示神经网络相对于传统 n-gram 模型的拓展性。
统计 Bigram 语言模型
首先给定一批数据,每个数据是一个英文名字,例如:
['emma',
'olivia',
'ava',
'isabella',
'sophia',
'charlotte',
'mia',
'amelia',
'harper',
'evelyn']
Bigram语言模型的做法很简单,首先将数据中的英文名字都做成一个个bigram的数据
其中每个格子中是对应的二元组,eg: “rh” ,在所有数据中出现的次数。那么一个自然的想法是对于给定的字母,取其对应的行,将次数归一化转成概率值,然后根据概率分布抽取下一个可能的字母:
g = torch.Generator().manual_seed(2147483647)
P = N.float() # N 即为上述 counts 矩阵
P = P / P.sum(1, keepdims=True) # P是每行归一化后的概率值
for i in range(5):
out = []
ix = 0 ## start符和end符都用 id=0 表示,这里是start
while True:
p = P[ix] # 当前字符为 ix 时,预测下一个字符的概率分布,实质是一个多项分布(即可能抽到的值有多个,eg: 掷色子是六项分布)
ix = torch.multinomial(p, num_samples=1, replacement=True, generator=g).item()
out.append(itos[ix])
if ix == 0: ## 当运行到end符,停止生成
break
print(''.join(out))
输出类似于:
mor.
axx.
minaymoryles.
kondlaisah.
anchshizarie.
质量评价方法
我们还需要方法来评估语言模型的质量,一个直观的想法是:
P ( s 1 s 2 . . . s n ) = P ( s 1 ) P ( s 2 ∣ s 1 ) ⋯ P ( s n ∣ s n − 1 ) P(s_1s_2...s_n) = P(s_1)P(s_2|s_1)\cdots P(s_n|s_{n-1}) P(s1s2...sn

&spm=1001.2101.3001.5002&articleId=141403381&d=1&t=3&u=70f76e222c8946d79eecad19c936ff4e)
1476

被折叠的 条评论
为什么被折叠?



