介绍参赛项目和产品涉及模型和算法的需求,主要是自然语言处理(NLP)和知识图谱(KG)。NLP涉及的领域太多,但是专注于特定的场景,需要花很大的功夫去产生和实现。作为NLP的主要方向,情感分析、文本多分类、实体识别等都在项目中有所应用。例如,通过实体识别,提取出文中提到的公司、个人、金融产品等。通过情感分析,判断新闻信息对其中提到的企业和个人是否有利?通过文本多分类,判断信息是否优质?判断信息的行业和主题?详情稍后分享。然而,文本生成和序列到序列(SequencetoSequence)在机器翻译、问答系统和聊天机器人中得到广泛应用。他们不参与参与项目。本文主要通过tensorflow+bert+seq2seq模型实现一个简单的问答,旨在了解和熟悉seq2seq。数据关于seq2seq的demo数据有很多,比如小黄鸡聊天语料、影视语料、翻译语料等。由于最近总是做一些奇怪的梦,所以就想着做一个AI解梦应用,玩玩,玩玩。通过采集,将周公的梦境分析数据从网上搜集,经过清洗,形成梦境:梦境;解码:梦分析结果。这样的序列对总共有33000多条记录。数据集下载地址:后台回复“解梦”{"dream":"梦见商人或富翁","decode":"吉兆,未来事业有成的机会,但如果梦中的富翁是我,则是不祥之兆。"}模型准备#下载bert$gitclonehttps://github.com/google-research/bert.git#下载中文预训练模型$wget-chttps://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip$unzipchinese_L-12_H-768_A-12.zipbert的输入: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],name="input_mask")self.segment_ids=tf.placeholder(dtype=tf.int32,shape=[None,None],name="segment_ids")self.dropout=tf.placeholder(dtype=tf.float32,shape=None,name="dropout")bert的模型:self.bert_config=modeling.BertConfig.from_json_file(bert_config)model=modeling.BertModel(config=self.bert_config,is_training=self.is_training,input_ids=self.input_ids,input_mask=self.input_mask,token_type_ids=self.segment_ids,use_one_hot_embeddings=False)seq2seq的encoder_embedding替换:#默认seq2segment_ids,input_mask])defpad_data(data):c_data=copy.deepcopy(data)max_x_length=max([len(i[0])foriinc_data])max_y_length=max([len(i[1])foriinc_data])#这里生成的序列的tag-id和input-id的长度要分开#print("max_x_length:{},max_y_length:{}".format(max_x_length,max_y_length))padded_data=[]foriinc_data:tokens,tag_ids,inputs_ids,segment_ids,input_mask=itag_ids=tag_ids+(max_y_length-len(tag_ids))*[0]#注意补充了tag-ids的长度,与预测一致序列长度inputs_ids=inputs_ids+(max_x_length-len(inputs_ids))*[0]segment_ids=segment_ids+(max_x_length-len(segment_ids))*[0]input_mask=input_mask+(max_x_length-len(input_mask))*[0]assertlen(inputs_ids)==len(segment_ids)==len(input_mask)padded_data.append([tokens,tag_ids,inputs_ids,segment_ids,input_mask])returnpadded_data训练$python3model.py--task=train\--is_training=True\--epoch=100\--size_layer=256\--bert_config=chinese_L-12_H-768_A-12/bert_config.json\--vocab_file=chinese_L-12_H-768_A-12/vocab.txt\--num_layers=2\--learning_rate=0.001\--batch_size=16\--checkpoint_dir=result预测$python3model.py--task=predict\--is_training=False\--epoch=100\--size_layer=256\--bert_config=chinese_L-12_H-768_A-12/bert_config.json\--vocab_file=chinese_L-12_H-768_A-12/vocab.txt\--num_layers=2\--learning_rate=0.001\--batch_size=16\--checkpoint_dir=resultJustForFun^_^本文代码:https://github.com/saiwaiyany...作者:saiwaiyanyu链接:https://juejin.im/post/5dd9e0...来源:掘金
