Nlp2cron-自然语言转cron表达式的一次尝试:seq2seq翻译

背景

之前做问答机器人的时候需要一个定闹钟的场景,比如:

明早7点半叫我起床
下午2点的闹钟
每天8点半叫我起床

之类的,要根据该文字描述让后台创建一个定时任务来叫我起床,需要用到cron表达式,但是文本转换成cron是个头大的事情,竟然没找到合适的工具,尝试过提取时间,也最终被堆积的if else打败—是在下输了!

整理了一下思路:我要做的是 输入一段文字 然后转换成cron表达式,可以理解为翻译,基于这个思考,想到了序列生成模型seq2seq:输入文字进行向量编码->解码得到另外一个语种的表述!

另外,cron表达式无非就是就是年周月日时分秒七个变量倒过来,解码的长度是固定的,模型还简单了不少!

原理

一个正常的seq2seq原理图如下(图片来源:https://zhuanlan.zhihu.com/p/65591919,借用一下,如有侵权请联系删除):
seq2seq

考虑到本人使用场景的局限性,和序列的长度限制,做了一下简化:
简化一下seq2seq如下:

1.先通过一个RNN作为编码器将文字信息编码一个全局词向量context_vec,以及一个状态信息e5_h
2.使用另外一个RNN作为解码器,以e5_h作为初始状态,开始对context_vec进行解码
3.使解码的时候看做一个多标签分类问题,让RNN分别输出七个类别(cron的七个变量)
4.将七个类别组合成一个完整的cron表达式

在这里插入图片描述

 1.直接使用全局向量编码进行预测
 2.解码阶段假设状态h中已经包含了输出信息,不再使用上一个词的输出作为下一个词预测数输入(还有一个原因是我偷懒,然后我发现这样效果也不错!)
 3.为了简化模型,加快收敛,解码和编码统一使用GRU,放弃LSTM
在线体验

经过训练发布了一个简单版本:

注:训练样本局限,本人一行一行瞎编的,无法全部覆盖,目前仅支持时分秒的控制

在这里插入图片描述

在线体验
在这里插入图片描述

如何使用

文档及开源地址

有用的话支持点个Star

我的博客即将同步至 OSCHINA 社区,这是我的 OSCHINA ID:Huoyoooooo,邀请大家一同入驻:https://www.oschina.net/sharing-plan/apply

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大Huoyo

提醒博主一下,该起来写文章了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值