NLP学习

本文探讨了使用NNLM进行语言模型预测的实际操作,介绍了如何通过Embedding层将词转化为分布式表示,并详细解释了如何通过神经网络实现从上下文预测下一个词的过程。重点在于演示如何利用ILike预测特定词汇的案例。
摘要由CSDN通过智能技术生成

项目地址

git@github.com:graykode/nlp-tutorial.git

NNLM

NNLM

首先看数据是个啥

    sentences = ["i like dog", "i love coffee", "i hate milk"]

目的, 用 i like 预测 dog , 用i love 预测 coffe

其实就是语言模型(下式为n-gram)

$ P ^ ( w t ∣ w 1 t − 1 ) ≈ P ^ ( w t ∣ w t − n + 1 t − 1 ) \hat{P}\left(w_{t} \mid w_{1}^{t-1}\right) \approx \hat{P}\left(w_{t} \mid w_{t-n+1}^{t-1}\right) P^(wtw1t1)P^(wtwtn+1t1)$

首先是Embedding

self.C = nn.Embedding(n_class, m)

demo中一共有7个词, 其实是一个7x2的线性层

进Embedding前:

X.shape
Out[13]: torch.Size([3, 2])

3个batch, 2个step(根据前两个词预测后一个词是什么, 相当与2-gram)

进Embedding后:

X.shape
Out[15]: torch.Size([3, 2, 2])

分布式表示. 不然如果用OHE 就是[3, 2, 7]了.

X = X.view(-1, n_step * m)
X.shape
Out[16]: torch.Size([3, 4])

对2个词做了拼接, 方便喂给线性层

self.H(X).shape
Out[17]: torch.Size([3, 2])

出隐层

tanh = torch.tanh(self.d + self.H(X)) # [batch_size, n_hidden]
self.H = nn.Linear(n_step * m, n_hidden, bias=False)
self.d = nn.Parameter(torch.ones(n_hidden))
self.U = nn.Linear(n_hidden, n_class, bias=False)
self.W = nn.Linear(n_step * m, n_class, bias=False)
self.b = nn.Parameter(torch.ones(n_class))
tanh = torch.tanh(self.d + self.H(X)) # [batch_size, n_hidden]
output = self.b + self.W(X) + self.U(tanh) # [batch_size, n_class]

需要注意的是, 如果用了CrossEntropyLoss损失函数, 不需要手动加softmax

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值