language model —— basic model 语言模型之基础模型

一、发展

起源:统计语言模型起源于 Ponte 和 Croft 在 1998年的 SIGIR上发表的论文

应用:语言模型的应用很多:

corsslingual retrieval

distributed IR

expert finding

passage retrieval

web search

genomics retrieval 基因组学检索

topic tracking

subtopic retrieval

二、basic model

1、Ponte and Croft

核心思想:query likelihood scoring

算法:

clip_image001

两个核心问题: (1) 如何定义 θD?

(2) 怎么计算θD?

多重伯努利模型 mutiple Bernoulli model : 该词出现(=1)或不出现(=0) ,只有两种情况

clip_image002

上述公式没有考虑 TF,若考虑的话,如下:

clip_image003

2、BBN and Twenty-one in TREC-7

本质: unigram model

公式:

clip_image004

平滑上述公式,如下:

clip_image005

文档的得分用下述公式计算:

clip_image006

三、basic model 变体总结

clip_image007

(1)Bernoulli并没有multinomial 受欢迎,因为前者没有考虑TF,即使考虑了,也不太自然

(2)bernoulli的假设是: term出现与否与其他term是独立的

multinomial的假设是:term出现次数与其他term是独立的,及时是出现在不同地方的同一个term

转载于:https://www.cnblogs.com/betterSN/p/4353186.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的Python示例,用于生成语言模型的代码: ```python import torch import torch.nn as nn import torch.optim as optim from torchtext.datasets import WikiText2 from torchtext.data.utils import get_tokenizer from torchtext.vocab import build_vocab_from_iterator from torch.utils.data import DataLoader from torch.nn.utils import clip_grad_norm_ # 加载WikiText-2数据集 train_dataset, valid_dataset, test_dataset = WikiText2.splits(text_field='text') # 建立词汇表 tokenizer = get_tokenizer('basic_english') vocab = build_vocab_from_iterator(map(tokenizer, iter(train_dataset)), specials=['<unk>', '<pad>', '<bos>', '<eos>'], min_freq=10) # 定义模型 class LanguageModel(nn.Module): def __init__(self, vocab_size, embedding_size, hidden_size, num_layers, dropout): super(LanguageModel, self).__init__() self.embedding = nn.Embedding(vocab_size, embedding_size) self.lstm = nn.LSTM(embedding_size, hidden_size, num_layers, dropout=dropout) self.fc = nn.Linear(hidden_size, vocab_size) def forward(self, x, hidden): x = self.embedding(x) output, hidden = self.lstm(x, hidden) output = self.fc(output.view(output.size(0)*output.size(1), output.size(2))) return output, hidden def init_hidden(self, batch_size): return (torch.zeros(self.num_layers, batch_size, self.hidden_size), torch.zeros(self.num_layers, batch_size, self.hidden_size)) # 定义超参数 batch_size = 32 embedding_size = 128 hidden_size = 256 num_layers = 2 dropout = 0.2 lr = 0.001 epochs = 10 # 初始化模型、损失函数和优化器 model = LanguageModel(len(vocab), embedding_size, hidden_size, num_layers, dropout) criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=lr) # 训练模型 train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True) for epoch in range(epochs): model.train() hidden = model.init_hidden(batch_size) for i, batch in enumerate(train_loader): x, y = batch.text.t().contiguous().cuda(), batch.target.t().contiguous().cuda() hidden = tuple(h.detach() for h in hidden) optimizer.zero_grad() output, hidden = model(x, hidden) loss = criterion(output, y.view(-1)) loss.backward() clip_grad_norm_(model.parameters(), 0.5) optimizer.step() if i % 100 == 0: print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}'.format(epoch+1, epochs, i+1, len(train_loader), loss.item())) # 使用模型生成文本 model.eval() hidden = model.init_hidden(1) x = torch.tensor([vocab.stoi['<bos>']]).unsqueeze(1).cuda() tokens = [] for i in range(100): output, hidden = model(x, hidden) output = output[-1,:].div(0.8).exp().cpu() token = torch.multinomial(output, 1)[0] x.fill_(token) tokens.append(token) text = ' '.join([vocab.itos[token] for token in tokens]) print(text) ``` 这段代码使用 PyTorch 和 TorchText 库加载 WikiText-2 数据集,并使用 torchtext.vocab 库建立词汇表。然后,它定义了一个语言模型类,包括嵌入层、LSTM层和全连接层。接下来,它定义了超参数,初始化模型、损失函数和优化器,然后使用 DataLoader 迭代训练数据集,训练模型。最后,它使用训练好的模型生成文本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值