decoder.py """ 实现解码器 """ import heapq import torch.nn as nn import config import torch import torch.nn.functional as F import numpy as np import random from chatbot.attention import Attention class Decoder(nn.Module): def __i…
cut_sentence.py """ 实现句子的分词 注意点: 1. 实现单个字分词 2. 实现按照词语分词 2.1 加载词典 3. 使用停用词 """ import string import jieba import jieba.posseg as psg import logging stopwords_path = "../corpus/stopwords.txt" stopwords = [i.strip() fo…
attention.py """ 实现attention """ import torch import torch.nn as nn import torch.nn.functional as F import config class Attention(nn.Module): def __init__(self,method="general"): super(Attention,self).__init__() ass…
自然语言处理任务,比如caption generation(图片描述文本生成).机器翻译中,都需要进行词或者字符序列的生成.常见于seq2seq模型或者RNNLM模型中. 这篇博文主要介绍文本生成解码过程中用的greedy search 和beam search算法实现.其中,greedy search 比较简单,着重介绍beam search算法的实现. 我们在文本生成解码时,实际上是想找对最有的文本序列,或者说是概率,可能性最大的文本序列.而要在全局搜索这个最有解空间,往往是不可能的(因为词…
Beam Search的问题 先解释一下什么要对Beam Search进行改进.因为Beam Search虽然比贪心强了不少,但还是会生成出空洞.重复.前后矛盾的文本.如果你有文本生成经验,一定对这些现象并不陌生.在语言模型还不像如今的BERT.GPT这么厉害的时候,这种现象更加明显. 没有经验也没关系,我们来看一个论文里面的例子.输入模型的引文(context) "The study, published in the Proceedings of the They were cattle c…
目录 Beam Search快速理解及代码解析(上) Beam Search 贪心搜索 Beam Search Beam Search代码解析 准备初始输入 序列扩展 准备输出 总结 Beam Search快速理解及代码解析(下) Beam Search的问题 解决对策 随机采样 top-k采样 核采样(Nucleus sampling) 惩罚重复 代码解析 参考资料 Beam Search快速理解及代码解析(上) Beam Search 简单介绍一下在文本生成任务中常用的解码策略Beam Se…
构建seq2seq模型,并训练完成后,我们只要将源句子输入进训练好的模型,执行一次前向传播就能得到目标句子,但是值得注意的是: seq2seq模型的decoder部分实际上相当于一个语言模型,相比于RNN语言模型,decoder的初始输入并非0向量,而是encoder对源句子提取的信息.因此整个seq2seq模型相当于一个条件语言模型,本质上学习的是一个条件概率,即给定输入\(x\),学习概率分布\(P(y|x)\).得到这个概率后,对应概率最大的目标句子\(y\)就是模型认为的最好的输出.我们…
Beam Search 简单介绍一下在文本生成任务中常用的解码策略Beam Search(集束搜索). 生成式任务相比普通的分类.tagging等NLP任务会复杂不少.在生成的时候,模型的输出是一个时间步一个时间步依次获得的,而且前面时间步的结果还会影响后面时间步的结果.也就是说,每一个时间步,模型给出的都是基于历史生成结果的条件概率.为了生成完整的句子,需要一个称为解码的额外动作来融合模型多个时间步的输出,而且使得最终得到的序列的每一步条件概率连乘起来最大. 在文本生成任务中,每一个时间步可能…
找遍百度也没有找到关于Beam Search的详细解释,只有一些比较泛泛的讲解,于是有了这篇博文. 首先给出wiki地址:http://en.wikipedia.org/wiki/Beam_search 1.简介 Beam Search(集束搜索)是一种启发式图搜索算法,通常用在图的解空间比较大的情况下,为了减少搜索所占用的空间和时间,在每一步深度扩展的时候,剪掉一些质量比较差的结点,保留下一些质量较高的结点.这样减少了空间消耗,并提高了时间效率,但缺点就是有可能存在潜在的最佳方案被丢弃,因此B…
Wiki定义:In computer science, beam search is a heuristic search algorithm that explores a graph by expanding the most promising node in a limited set. Beam search is an optimization of best-first search that reduces its memory requirements. Best-first…