def main(_): FLAGS.torch = True melt.apps.init() ev.init() embedding = None if FLAGS.word_embedding_file and os.path.exists(FLAGS.word_embedding_file): embedding = np.load(FLAGS.word_embedding_file) FLAGS.emb_dim = embedding.shape[1] #model = getattr(base, FLAGS.model)(embedding) model = getattr(base, 'MReader')(embedding) logging.info('model\n', model) if FLAGS.lm_path: _, updated_params = lele.load(model, FLAGS.lm_path) assert updated_params, FLAGS.lm_path train = melt.apps.get_train() criterion = Criterion() train(Dataset, model, criterion.forward, eval_fn=ev.evaluate)
def main(_): FLAGS.num_folds = 10 FLAGS.torch = True melt.apps.init() ev.init() embedding = None if FLAGS.word_embedding_file and os.path.exists(FLAGS.word_embedding_file): embedding = np.load(FLAGS.word_embedding_file) FLAGS.emb_dim = embedding.shape[1] model = getattr(base, FLAGS.model)(embedding) if FLAGS.num_finetune_words: model.encode.embedding.register_backward_hook(freeze_embedding) if FLAGS.num_finetune_chars and FLAGS.use_char and FLAGS.use_char_emb: model.encode.char_embedding.register_backward_hook(freeze_char_embedding) logging.info('model\n', model) param_groups = None if FLAGS.lm_path: #both BiLanguageModel or RNet or MReader.. use self.ecode so ok update encode.embedding.weight... encode.char_embedding.weight.. _, updated_params = lele.load(model, FLAGS.lm_path) if FLAGS.lm_lr_factor != 1: ignored_params = list(map(id, updated_params)) base_params = filter(lambda p: id(p) not in ignored_params, model.parameters()) param_groups = [ {'params': base_params}, {'params': updated_params, 'lr': FLAGS.learning_rate * FLAGS.lm_lr_factor} ] train = melt.apps.get_train() optimizer = None if FLAGS.optimizer == 'noam': # Hard to find optim parmas so not to use currently # optimizer = lele.training.optimizers.NoamOpt(FLAGS.emb_dim, 2, 4000, # torch.optim.Adam(model.parameters(), lr=0, betas=(0.9, 0.98), eps=1e-9)) optimizer = lele.training.optimizers.NoamOpt(128, 2, 4000, torch.optim.Adamax(model.parameters(), lr=0)) train(Dataset, model, criterion, eval_fn=ev.evaluate, valid_write_fn=ev.valid_write, infer_write_fn=ev.infer_write, valid_names=ev.valid_names, valid_suffix='.valid.csv', infer_debug_names=ev.valid_names, infer_suffix='.infer.txt', write_streaming=True, optimizer=optimizer, param_groups=param_groups )
def main(_): FLAGS.num_folds = 8 FLAGS.torch = True melt.apps.init() ev.init() embedding = None if FLAGS.word_embedding_file and os.path.exists(FLAGS.word_embedding_file): embedding = np.load(FLAGS.word_embedding_file) FLAGS.emb_dim = embedding.shape[1] model = getattr(base, FLAGS.model)(embedding) if FLAGS.num_finetune_words: model.encode.embedding.register_backward_hook(freeze_embedding) if FLAGS.num_finetune_chars and FLAGS.use_char and FLAGS.use_char_emb: model.encode.char_embedding.register_backward_hook( freeze_char_embedding) logging.info('model\n', model) param_groups = None if FLAGS.lm_path: #both BiLanguageModel or RNet or MReader.. use self.ecode so ok update encode.embedding.weight... encode.char_embedding.weight.. _, updated_params = lele.load(model, FLAGS.lm_path) assert updated_params, lm_path if FLAGS.lm_lr_factor != 1: ignored_params = list(map(id, updated_params)) base_params = filter(lambda p: id(p) not in ignored_params, model.parameters()) param_groups = [{ 'params': base_params }, { 'params': updated_params, 'lr': FLAGS.learning_rate * FLAGS.lm_lr_factor }] train = melt.apps.get_train() #criterion = Criterion(ev.class_weights) criterion = Criterion() train(Dataset, model, criterion.forward, eval_fn=ev.evaluate, valid_write_fn=ev.valid_write, infer_write_fn=ev.infer_write, valid_suffix='.valid.csv', infer_suffix='.infer.csv', param_groups=param_groups)
def main(_): FLAGS.torch = True FLAGS.emb_dim = 300 FLAGS.cell = 'lstm' FLAGS.num_layers = 1 FLAGS.rnn_hidden_size = 400 FLAGS.concat_layers = False FLAGS.use_char = True FLAGS.share_fc = True FLAGS.share_pooling = True FLAGS.recurrent_dropout = False FLAGS.rnn_no_padding = False FLAGS.rnn_padding = True FLAGS.att_combiner = 'sfu' FLAGS.hop = 1 FLAGS.use_label_att = False FLAGS.use_self_match = False FLAGS.encoder_type = 'rnn' FLAGS.encoder_output_method = 'max' FLAGS.model_dir = '/home/gezi/temp/ai2018/sentiment/model/lm/word.jieba.ft.long/torch.word.lm.nopad.lstm.hidden400/' melt.apps.init() FLAGS.model = 'MReader' model_path = '%s/latest.pyt' % FLAGS.model_dir global vocab, char_vocab, model vocab_path = '%s/vocab.txt' % FLAGS.model_dir char_vocab_path = vocab_path.replace('vocab.txt', 'char_vocab.txt') FLAGS.vocab = vocab_path vocab = gezi.Vocabulary(vocab_path) char_vocab = gezi.Vocabulary(char_vocab_path) model = getattr(base, FLAGS.model)() model = model.cuda() print('model\n', model) lele.load(model, model_path) contents = [ '这是一个很好的餐馆,菜很不好吃,我还想再去', '这是一个很差的餐馆,菜很不好吃,我不想再去', '这是一个很好的餐馆,菜很好吃,我还想再去', '这是一个很好的餐馆,只是菜很难吃,我还想再去', '这是一个很好的餐馆,只是菜很不好吃,我还想再去', '好吃的!黑胡椒牛肉粒真的是挺咸的', '不论是环境的宽敞度还是菜的味道上', '烤鸭皮酥脆入口即化,总体还可以', '烤鸭皮酥脆入口即化', '软炸鲜菇据说是他家的优秀美味担当', '环境挺好的,服务很到位', '肉松的味道都不错,量一般', '也不算便宜,不过吃着好吃', '高大上的餐厅,一级棒的环境', '比较硬,比较喜欢芝士和咖喱口味的', '有嚼劲,很入味宫廷豌豆黄造型可爱', '蔬菜中规中矩,解腻不错', '女友生日菜有点贵架势不错味道就这样', '相比其他兰州拉面粗旷的装饰风格,这家设计很小清新,座位宽敞,客人不多' ] sim('牛肉赞', '牛肉好吃') sim('牛肉赞', '牛肉不好吃') sim('牛肉赞', '牛肉一般') sim('牛肉赞', '他们家的牛肉很好吃') sim('牛肉赞', '羊肉一般') sim('牛肉赞', '羊肉好吃') sim('羊肉赞', '羊肉好吃') sim('适合闺蜜聚会', '适合朋友聚会') sim('适合闺蜜聚会', '适合孕妇的餐厅') sim('适合闺蜜聚会', '适合拍照的餐厅') sim('适合闺蜜聚会', '和闺蜜一起来的') sim('当来到颐和园,皇家所独有的庄重大气便被融入内核', '在我印象应该不仅是豪华酒店了,而是奢华酒店级别的了') sim('店非常的简约小清新', '在我印象应该不仅是豪华酒店了,而是奢华酒店级别的了') sim('店非常的简约小清新', '环境小清新') sim('店非常的简约小清新', '文艺清新') sim('环境小清新', '文艺清新') sim('环境小清新', '高大上') sim('当来到颐和园,皇家所独有的庄重大气便被融入内核', '高大上') sim('当来到颐和园,皇家所独有的庄重大气便被融入内核', '文艺清新') sim('在我印象应该不仅是豪华酒店了,而是奢华酒店级别的了', '高大上') sim('在我印象应该不仅是豪华酒店了,而是奢华酒店级别的了', '文艺清新') sim('在我印象应该不仅是豪华酒店了,而是奢华酒店级别的了', '适合拍照') sim('在我印象应该不仅是豪华酒店了,而是奢华酒店级别的了', '复古') sim('古色古香的院子', '复古')
def main(_): FLAGS.torch = True FLAGS.emb_dim = 300 FLAGS.cell = 'lstm' FLAGS.num_layers = 2 FLAGS.rnn_hidden_size = 400 FLAGS.concat_layers = False FLAGS.use_char = True FLAGS.share_fc = False FLAGS.share_pooling = False FLAGS.recurrent_dropout = False FLAGS.rnn_no_padding = False FLAGS.rnn_padding = True FLAGS.att_combiner = 'sfu' FLAGS.hop = 1 FLAGS.use_label_att = False FLAGS.use_self_match = True FLAGS.encoder_type = 'rnn' FLAGS.encoder_output_method = 'att' FLAGS.model_dir = '/home/gezi/temp/ai2018/sentiment/model/v14/0/word.jieba.ft/torch.self_attention.unkaug.elmo.finetune_6k.exclusive_pooling.exclusive_fc.onlyatt.pad/' melt.apps.init() FLAGS.model = 'MReader' model_path = '%s/latest.pyt' % FLAGS.model_dir global vocab, char_vocab, model vocab_path = '%s/vocab.txt' % FLAGS.model_dir char_vocab_path = vocab_path.replace('vocab.txt', 'char_vocab.txt') FLAGS.vocab = vocab_path vocab = gezi.Vocabulary(vocab_path) char_vocab = gezi.Vocabulary(char_vocab_path) model = getattr(base, FLAGS.model)() model = model.cuda() print('model\n', model) lele.load(model, model_path) contents = [ '这是一个很好的餐馆,菜很不好吃,我还想再去', '这是一个很差的餐馆,菜很不好吃,我不想再去', '这是一个很好的餐馆,菜很好吃,我还想再去', '这是一个很好的餐馆,只是菜很难吃,我还想再去', '这是一个很好的餐馆,只是菜很不好吃,我还想再去', '好吃的!黑胡椒牛肉粒真的是挺咸的', '不论是环境的宽敞度还是菜的味道上', '烤鸭皮酥脆入口即化,总体还可以', '烤鸭皮酥脆入口即化', '软炸鲜菇据说是他家的优秀美味担当', '环境挺好的,服务很到位', '肉松的味道都不错,量一般', '也不算便宜,不过吃着好吃', '高大上的餐厅,一级棒的环境', '比较硬,比较喜欢芝士和咖喱口味的', '有嚼劲,很入味宫廷豌豆黄造型可爱', '蔬菜中规中矩,解腻不错', '女友生日菜有点贵架势不错味道就这样', '相比其他兰州拉面粗旷的装饰风格,这家设计很小清新,座位宽敞,客人不多', '这家店的菜做的不错,但是服务特别差', '印象中这家店适合拍照', '适合和闺蜜一起去', '''被朋友安利的地方。刺身都很大块,厚厚的一片塞进嘴巴里,爽爆了!甜虾超级大的个头,不过要自己剥皮,自己动手丰衣足食。北极贝,三文鱼,金枪鱼各个都片大肉厚,吃的超满足。鹅肝,牛舌,鳕鱼都很嫩,不过口味稍微有丢丢咸。点的所有的食物除了芥末章鱼芥末味道太重没吃完,别的全都吃的干干 净净!中午因为大部分是吃定食的,所以给自助的我们安排了包间,打电话过去预订的时候还有特别提醒说有团购,服务不错,而且基本没有漏单。总之是很不错的日式放题,下次还会去。''', '孕妇还有呼吸系统不太好的老人请慎重', '但还是不建议孕妇与小孩来', '感谢对孕妇的满满善意', '对我这个孕妇来说环境很清爽很好', '让孕妇情何以堪', '还有1个孕妇等了从12点多等到2点', '作为孕妇吃的小心翼翼', '适合老人孩子孕妇冬天吃一下', '当来到颐和园,皇家所独有的庄重大气便被融入内核', '在我印象应该不仅是豪华酒店了,而是奢华酒店级别的了', '也就少了点高端的氛围', '店非常的简约小清新', '环境清新', '难得再回学校的时候发现这么小清新的小店', '感觉多放些奶油更加完美', '晚上还有表演' ] for content in contents: print(content) predict(content) sim('牛肉赞', '牛肉好吃') sim('牛肉赞', '牛肉不好吃') sim('牛肉赞', '牛肉一般') sim('牛肉赞', '羊肉一般') sim('牛肉赞', '牛肉赞', aspect=ATTRIBUTES.index('dish_taste')) sim('牛肉赞', '羊肉赞', aspect=ATTRIBUTES.index('dish_taste')) sim('牛肉赞', '牛肉好吃', aspect=ATTRIBUTES.index('dish_taste')) sim('牛肉赞', '羊肉好吃', aspect=ATTRIBUTES.index('dish_taste')) sim('羊肉赞', '羊肉好吃') sim('羊肉赞', '羊肉好吃', aspect=ATTRIBUTES.index('dish_taste')) #sim('当来到颐和园,皇家所独有的庄重大气便被融入内核', '在我印象应该不仅是豪华酒店了,而是奢华酒店级别的了') sim('当来到颐和园,皇家所独有的庄重大气便被融入内核', '在我印象应该不仅是豪华酒店了,而是奢华酒店级别的了', aspect=ATTRIBUTES.index('environment_decoration')) #sim('店非常的简约小清新', '在我印象应该不仅是豪华酒店了,而是奢华酒店级别的了') sim('店非常的简约小清新', '在我印象应该不仅是豪华酒店了,而是奢华酒店级别的了', aspect=ATTRIBUTES.index('environment_decoration')) #sim('店非常的简约小清新', '难得再回学校的时候发现这么小清新的小店') sim('店非常的简约小清新', '难得再回学校的时候发现这么小清新的小店', aspect=ATTRIBUTES.index('environment_decoration')) #sim('店非常的简约小清新', '环境高大上', aspect=ATTRIBUTES.index('environment_decoration')) #sim('店非常的简约小清新', '环境文艺清新', aspect=ATTRIBUTES.index('environment_decoration')) sim('店非常的简约小清新', '环境小清新', aspect=ATTRIBUTES.index('environment_decoration')) sim('店非常的简约小清新', '文艺清新', aspect=ATTRIBUTES.index('environment_decoration')) sim('环境小清新', '文艺清新', aspect=ATTRIBUTES.index('environment_decoration')) sim('环境小清新', '高大上', aspect=ATTRIBUTES.index('environment_decoration')) #sim('当来到颐和园,皇家所独有的庄重大气便被融入内核', '环境高大上', aspect=ATTRIBUTES.index('environment_decoration')) sim('当来到颐和园,皇家所独有的庄重大气便被融入内核', '高大上', aspect=ATTRIBUTES.index('environment_decoration')) sim('当来到颐和园,皇家所独有的庄重大气便被融入内核', '文艺清新', aspect=ATTRIBUTES.index('environment_decoration')) #sim('在我印象应该不仅是豪华酒店了,而是奢华酒店级别的了', '环境高大上', aspect=ATTRIBUTES.index('environment_decoration')) sim('在我印象应该不仅是豪华酒店了,而是奢华酒店级别的了', '高大上', aspect=ATTRIBUTES.index('environment_decoration')) sim('在我印象应该不仅是豪华酒店了,而是奢华酒店级别的了', '文艺清新', aspect=ATTRIBUTES.index('environment_decoration')) sim('当来到颐和园,皇家所独有的庄重大气便被融入内核', '高大上', aspect=ATTRIBUTES.index('others_overall_experience')) sim('当来到颐和园,皇家所独有的庄重大气便被融入内核', '文艺清新', aspect=ATTRIBUTES.index('others_overall_experience')) #sim('在我印象应该不仅是豪华酒店了,而是奢华酒店级别的了', '环境高大上', aspect=ATTRIBUTES.index('environment_decoration')) sim('在我印象应该不仅是豪华酒店了,而是奢华酒店级别的了', '高大上', aspect=ATTRIBUTES.index('others_overall_experience')) sim('在我印象应该不仅是豪华酒店了,而是奢华酒店级别的了', '文艺清新', aspect=ATTRIBUTES.index('others_overall_experience')) sim('牛肉好吃', '高大上', aspect=ATTRIBUTES.index('environment_decoration')) sim('适合闺蜜聚会', '适合朋友聚会') sim('适合闺蜜聚会', '适合孕妇的餐厅') sim('适合闺蜜聚会', '适合拍照的餐厅') sim('适合闺蜜聚会', '和闺蜜一起来的') sim('适合闺蜜聚会', '适合朋友聚会', aspect=ATTRIBUTES.index('environment_decoration')) sim('适合闺蜜聚会', '适合孕妇的餐厅', aspect=ATTRIBUTES.index('environment_decoration')) sim('适合闺蜜聚会', '适合拍照的餐厅', aspect=ATTRIBUTES.index('environment_decoration')) sim('适合闺蜜聚会', '和闺蜜一起来的', aspect=ATTRIBUTES.index('environment_decoration'))