本文代码: https://github.com/saiwaiyanyu/tensorflow-bert-seq2seq-dream-decoder
介绍
在参与的项目和产品中,涉及到模型和算法的需求,主要以自然语言处理(NLP
)和知识图谱(KG
)为主。NLP
涉及面太广,而聚焦在具体场景下,想要生产落地的还需要花很多功夫。
作为NLP的主要方向,情感分析,文本多分类,实体识别等已经在项目中得到应用。例如
- 通过实体识别,抽取文本中提及到的公司、个人以及金融产品等。
- 通过情感分析,判别新闻资讯,对其提到的公司和个人是否利好?
- 通过文本多分类,判断资讯是否是高质量?判断资讯的行业和主题?
具体详情再找时间分享。而文本生成、序列到序列(Sequence to Sequence
)在机器翻译、问答系统、聊天机器人中有较广的应用,在参与的项目中暂无涉及,本文主要通过tensorflow+bert+seq2seq
实现一个简单的问答模型,旨在对seq2seq
的了解和熟悉。
数据
关于seq2seq
的demo
数据有很多,例如小黄鸡聊天语料库,影视语料库,翻译语料库等等。由于最近总是做些奇怪的梦,便想着,做一个AI解梦的应用玩玩,just for fun
。
通过采集从网上采集周公解梦
数据,通过清洗,形成
- dream:梦境;
- decode:梦境解析结果。
这样的序列对,总计33000+ 条记录。数据集
{
"dream": "梦见商人或富翁",
"decode": "是个幸运的预兆,未来自己的事业很有机会成功,不过如果梦中的富翁是自己,则是一个凶兆。。"
}
模型准备
bert
下载 bert
$ git clone https://github.com/google-research/bert.git
下载中文预训练模型
$ wget -c https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip
$ unzip chinese_L-12_H-768_A-12.zip
bert + seq2seq
bert
的input
:
self.input_ids = tf.placeholder(
dtype=tf.int32,
shape=[None, None],
name="input_ids"
)
self.input_mask = tf.placeholder(
dtype=tf.int32,
shape=[None, None<