jiesutd / LatticeLSTM

Chinese NER using Lattice LSTM. Code for ACL 2018 paper.
1.8k stars 453 forks source link

采用新数据集训练latticeLSTM #14

Closed coldplaying42 closed 6 years ago

coldplaying42 commented 6 years ago

Hi @jiesutd 我最近在用latticeLSTM训练医疗数据集来标注,有如下问题: 1)现在的模型batch size固定为1, 那么mask还起作用吗? 2) 我看到了main文件里调用的是bilstmcrf模型,然后bilstmcrf里面调用了bilstm和crf两个模型,bilstm里面调用了latticelstm,所以整个project是实现了latticeLSTM一个模型还是实现了包括bilstmcrf,latticelstm等各种模型?我用默认配置运行run_main.sh,得到的是latticelstm模型的结果? 3)我如果在医疗数据上运行latticeLSTM,利用目前提供的gigaword_chn.all.a2b.uni.ite50.vec以及ctb.50d.vec可行吗

wangruicn commented 6 years ago

@coldplaying42 在这份代码中,bilstm泛指BiLSTM-CRF这个架构内,用于提供特征的LSTM。可以用普通的character-based BiLSTM,也可以用LatticeLSTM。默认的设定是使用LatticeLSTM,在bilstm.py中约65行:

self.forward_lstm = LatticeLSTM(lstm_input, lstm_hidden, data.gaz_dropout, data.gaz_alphabet.size(), data.gaz_emb_dim, data.pretrain_gaz_embedding, True, data.HP_fix_gaz_emb, self.gpu)
if self.bilstm_flag:
    self.backward_lstm = LatticeLSTM(lstm_input, lstm_hidden, data.gaz_dropout, data.gaz_alphabet.size(), data.gaz_emb_dim, data.pretrain_gaz_embedding, False, data.HP_fix_gaz_emb, self.gpu)
# self.lstm = nn.LSTM(lstm_input, lstm_hidden, num_layers=self.lstm_layer, batch_first=True, bidirectional=self.bilstm_flag)

被注释掉的代码即为普通的BiLSTM。注释掉前面的LatticeLSTM,并取消最后一行的注释,即可使用普通的BiLSTM。当然,还需要修改相应的调用(init函数中将模型移至GPU的部分;get_lstm_features中的前向运算部分)。

unigram、bigram、word的向量是在大规模语料上训练的,我认为还是可以用的。不过,效果可能会略差一点。

jiesutd commented 6 years ago

@wangruicn 感谢回复!