def __init__(self,
embeddings,
n_labels,
n_blstm_layers=3,
lstm_hidden_size=400,
use_gru=False,
n_arc_mlp_layers=1,
n_arc_mlp_units=500,
n_label_mlp_layers=1,
n_label_mlp_units=100,
mlp_activation=F.leaky_relu,
embeddings_dropout=0.33,
lstm_dropout=0.33,
arc_mlp_dropout=0.33,
label_mlp_dropout=0.33,
pad_id=0):
super(DeepBiaffine, self).__init__()
self._pad_id = pad_id
blstm_cls = nn.GRU if use_gru else nn.LSTM
self.embed = Embed(*embeddings, dropout=embeddings_dropout,
padding_idx=pad_id)
embed_size = self.embed.size - self.embed[0].weight.data.shape[1]
self.blstm = blstm_cls(
num_layers=n_blstm_layers,
input_size=embed_size,
hidden_size=(lstm_hidden_size
if lstm_hidden_size is not None else embed_size),
batch_first=True,
dropout=lstm_dropout,
bidirectional=True
)
layers = [MLP.Layer(lstm_hidden_size * 2, n_arc_mlp_units,
mlp_activation, arc_mlp_dropout)
for i in range(n_arc_mlp_layers)]
self.mlp_arc_head = MLP(layers)
layers = [MLP.Layer(lstm_hidden_size * 2, n_arc_mlp_units,
mlp_activation, arc_mlp_dropout)
for i in range(n_arc_mlp_layers)]
self.mlp_arc_dep = MLP(layers)
layers = [MLP.Layer(lstm_hidden_size * 2, n_label_mlp_units,
mlp_activation, label_mlp_dropout)
for i in range(n_label_mlp_layers)]
self.mlp_label_head = MLP(layers)
layers = [MLP.Layer(lstm_hidden_size * 2, n_label_mlp_units,
mlp_activation, label_mlp_dropout)
for i in range(n_label_mlp_layers)]
self.mlp_label_dep = MLP(layers)
self.arc_biaffine = \
Biaffine(n_arc_mlp_units, n_arc_mlp_units, 1,
bias=(True, False, False))
self.label_biaffine = \
Biaffine(n_label_mlp_units, n_label_mlp_units, n_labels,
bias=(True, True, True))
评论列表
文章目录