学习笔记(11)- 文本生成RNNLG
https://github.com/shawnwun/RNNLG
数据集
给出了4个行业的语料,餐馆、酒店、电脑、电视,及其组合数据。

数据格式

任务
根据给定格式的命令,生成自然语言。
方法、模型、策略
作者给出了5种模型,2种训练(优化)策略、2种解码方式
* Model
- (knn) kNN generator:
    k-nearest neighbor example-based generator, based on MR similarty.
- (ngram) Class-based Ngram generator [Oh & Rudnicky, 2000]:
    Class-based language model generator by utterance class partitions.
- (hlstm) Heuristic Gated LSTM [Wen et al, 2015a]:
    An MR-conditioned LSTM generator with heuristic gates.
- (sclstm) Semantically Conditioned LSTM [Wen et al, 2015b]:
    An MR-conditioned LSTM generator with learned gates.
- (encdec) Attentive Encoder-Decoder LSTM [Wen et al, 2015c]:
    An encoder-decoder LSTM with slot-value level attention.
* Training Strategy
- (ml) Maximum Likehood Training, using token cross-entropy
- (dt) Discriminative Training (or Expected BLEU training) [Wen et al, 2016]
* Decoding Strategy
- (beam) Beam search
- (sample) Random sampling
快速开始
需要python2环境,依赖:
* Theano 0.8.2 and accompanying packages such as numpy, scipy ...
* NLTK 3.0.0
创建虚机,Python2
virtualenv env
source env/bin/activate
pip install theano==0.8.2
pip install nltk==3.0.0
训练:python main.py -config config/sclstm.cfg -mode train
测试:python main.py -config config/sclstm.cfg -mode test

配置文件和参数
从上面的训练和测试的命令可以看出,参数在config目录下的文件配置,看看config/sclstm.cfg文件的内容
[learn] // parameters for training
lr          = 0.1 : learning rate of SGD.
lr_decay    = 0.5  : learning rate decay.
lr_divide   = 3 : the maximum number of times when validation gets worse.
                  for early stopping.
beta        = 0.0000001  : regularisation parameter.
random_seed = 5 : random seed.
min_impr    = 1.003 : the relative minimal improvement allowed.
debug       = True : debug flag
llogp       = -100000000 : log prob in the last epoch
[train_mode]
mode        = all : training mode, currently only support 'all'
obj         = ml  : training objective, 'ml' or 'dt'
###################################
* Training Strategy
- (ml) Maximum Likehood Training, using token cross-entropy
- (dt) Discriminative Training (or Expected BLEU training) [Wen et al, 2016]
###################################
gamma       = 5.0  : hyperparameter for DT training
batch       = 1 : batch size
[generator] // structure for generator
type        = sclstm : the model type, [hlstm|sclstm|encdec]
hidden      = 80 : hidden layer size
[data] // data and model file
domain      = restaurant  作者给出4种领域:餐馆、酒店、电脑、电视
train       = data/original/restaurant/train.json
valid       = data/original/restaurant/valid.json
test        = data/original/restaurant/test.json
vocab       = resource/vocab  词典
percentage  = 100 : the percentage of train/valid considered
wvec        = vec/vectors-80.txt  : pretrained word vectors 预训练的词向量,有多个维度
model       = model/sclstm-rest.model  : the produced model path 生成的模型文件名称
[gen] // generation parameters, decode='beam' or 'sample'
topk        = 5  : the N-best list returned
overgen     = 20  : number of over-generation
beamwidth   = 10  : the beam width used to decode utterances
detectpairs = resource/detect.pair  :  the mapping file for calculating the slot error rate 见下文
verbose     = 1  : verbose level of the model, not supported yet
decode      = beam  : decoding strategy, 'beam' or 'sample'
Below are knn/ngram specific parameters:
* [ngram]
- ngram         : the N of ngram
- rho           : number of slots considered to partition the dataset
结果
我在自己机器试了一下
inform(name=fresca;phone='4154472668')
Penalty TSER    ASER    Gen
0.0672  0       0       the phone number for fresca is 4154472668
0.1272  0       0       fresca s phone number is 4154472668
0.1694  0       0       the phone number of fresca is 4154472668
0.1781  0       0       the phone number for the fresca is 4154472668
0.2153  0       0       the phone number to fresca is 4154472668
文件resource/detect.pair
{
   "general" : {
       "address"    : "SLOT_ADDRESS",
       "area"       : "SLOT_AREA",
       "count"      : "SLOT_COUNT",
       "food"       : "SLOT_FOOD",
       "goodformeal": "SLOT_GOODFORMEAL",
       "name"       : "SLOT_NAME",
       "near"       : "SLOT_NEAR",
       "phone"      : "SLOT_PHONE",
       "postcode"	 : "SLOT_POSTCODE",
       "price"	     : "SLOT_PRICE",
       "pricerange" : "SLOT_PRICERANGE",
       "battery"    : "SLOT_BATTERY",
       "batteryrating"  : "SLOT_BATTERYRATING",
       "design"     : "SLOT_DESIGN",
       "dimension"  : "SLOT_DIMENSION",
       "drive"      : "SLOT_DRIVE",
       "driverange" : "SLOT_DRIVERANGE",
       "family"     : "SLOT_FAMILY",
       "memory"     : "SLOT_MEMORY",
       "platform"   : "SLOT_PLATFORM",
       "utility"    : "SLOT_UTILITY",
       "warranty"   : "SLOT_WARRANTY",
       "weight"     : "SLOT_WEIGHT",
       "weightrange": "SLOT_WEIGHTRANGE",
       "hdmiport"   : "SLOT_HDMIPORT",
       "ecorating"  : "SLOT_ECORATING",
       "audio"      : "SLOT_AUDIO",
       "accessories": "SLOT_ACCESSORIES",
       "color"      : "SLOT_COLOR",
       "powerconsumption"  : "SLOT_POWERCONSUMPTION",
       "resolution" : "SLOT_RESOLUTION",
       "screensize" : "SLOT_SCREENSIZE",
       "screensizerange" : "SLOT_SCREENSIZERANGE"
   },
   "binary"  : {
       "kidsallowed":["child","kid","kids","children"],
       "dogsallowed":["dog","dogs","puppy"],
       "hasinternet":["internet","wifi"],
       "acceptscreditcards":["card","cards"],
       "isforbusinesscomputing":["business","nonbusiness","home","personal","general"],
       "hasusbport" :["usb"]
   }
}
总结
将结构化的数据,转为非结构化的文本。整个任务的核心就是这个吧
学习笔记(11)- 文本生成RNNLG的更多相关文章
- Spring MVC 学习笔记11 —— 后端返回json格式数据
		
Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...
 - 《C++ Primer Plus》学习笔记11
		
<C++ Primer Plus>学习笔记11 第17章 输入.输出和文件 <<<<<<<<<<<<<< ...
 - Spring 源码学习笔记11——Spring事务
		
Spring 源码学习笔记11--Spring事务 Spring事务是基于Spring Aop的扩展 AOP的知识参见<Spring 源码学习笔记10--Spring AOP> 图片参考了 ...
 - Ext.Net学习笔记11:Ext.Net GridPanel的用法
		
Ext.Net学习笔记11:Ext.Net GridPanel的用法 GridPanel是用来显示数据的表格,与ASP.NET中的GridView类似. GridPanel用法 直接看代码: < ...
 - SQL反模式学习笔记11  限定列的有效值
		
目标:限定列的有效值,将一列的有效字段值约束在一个固定的集合中.类似于数据字典. 反模式:在列定义上指定可选值 1. 对某一列定义一个检查约束项,这个约束不允许往列中插入或者更新任何会导致约束失败的值 ...
 - golang学习笔记11  golang要用jetbrain的golang这个IDE工具开发才好
		
golang学习笔记11 golang要用jetbrain的golang这个IDE工具开发才好 jetbrain家的全套ide都很好用,一定要dark背景风格才装B 从File-->s ...
 - ArcGIS案例学习笔记2_2_等高线生成DEM和三维景观动画
		
ArcGIS案例学习笔记2_2_等高线生成DEM和三维景观动画 计划时间:第二天下午 教程:Pdf/405 数据:ch9/ex3 方法: 1. 创建DEM SA工具箱/插值分析/地形转栅格 2. 生成 ...
 - Python3+Selenium3+webdriver学习笔记11(cookie处理)
		
#!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记11(cookie处理)'''from selenium im ...
 - 并发编程学习笔记(11)----FutureTask的使用及实现
		
1. Future的使用 Future模式解决的问题是.在实际的运用场景中,可能某一个任务执行起来非常耗时,如果我们线程一直等着该任务执行完成再去执行其他的代码,就会损耗很大的性能,而Future接口 ...
 - SpringMVC:学习笔记(11)——依赖注入与@Autowired
		
SpringMVC:学习笔记(11)——依赖注入与@Autowired 使用@Autowired 从Spring2.5开始,它引入了一种全新的依赖注入方式,即通过@Autowired注解.这个注解允许 ...
 
随机推荐
- 在线直播: .NET与物联网主流技术探秘 初识IoT!
			
DNT精英论坛暨.NET北京俱乐部是由资深.NET专家和社区活跃分子发起的技术论坛,以“分享.成长.合作.共赢”为原则,致力于打造一个领先的技术分享平台和成长交流生态.本次活动由aelf赞助支持,刘洪 ...
 - 117. 填充每个节点的下一个右侧节点指针 II
			
Q: 给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右 ...
 - python web django base skill
			
web框架本质 socket + 业务逻辑 框架实现socket tonado node.js 使用WSGI实现socket django flask 自己实现框架思路 wsgiref socket ...
 - 从csv文件里取数据作为请求参数,和把返回数据放到一个csv文件
			
本来想把登陆后的token放到数组里,下一个参数用,但是貌似不支持数组,暂时先这样用了,并不麻烦,还很方便. 1.添加线程组等必要的东东后,添加csv配置器 2.进行设置 说明:csv文件设置不能读取 ...
 - opencv:图像直方图均衡化
			
// 直方图均衡化 Mat gray, dst; cvtColor(src, gray, COLOR_BGR2GRAY); equalizeHist(gray, dst); imshow(" ...
 - 7、Maven插件
			
什么是maven插件? maven 实际上是一类依赖插件执行的框架,每个任务实际上是由插件完成,Maven插件通常被用来 创建jar文件 创建war文件 编译代码文件 代码单元测试 创建工程文档 创建 ...
 - caffe 模型的加载
			
在caffe中模型的加载是通过这个函数加载的: void Net<Dtype>::CopyTrainedLayersFrom(const string trained_filename)
 - TensorFlow:谷歌图像识别网络inception-v3下载与查看结构
			
学习博客: # https://www.cnblogs.com/felixwang2/p/9190731.html # https://www.cnblogs.com/felixwang2/p/919 ...
 - 数据分析--excel
			
excel 的使用 1.excel基础 1.数据类型 数字类型 字符类型 注意: 1.普通文本:默认作对齐,左上方没有小绿点,数字默认又对齐 2.数字存储为文本类型,美容默认为左对齐,左上方有小绿点 ...
 - 洛谷P1131 时态同步
			
题意: 给一个n点的树,每条边都有边权,问从根出发需要增加多少长度,使得最终的儿子到根的距离是一样的 思路: 上来一个思路wa了3次,看完题解之后,又一次豁然开朗…… orz #include< ...