论文复现_2:Chinese NER Using Lattice LSTM

函数1:建立语料库

data_initialization(data, gaz_file, train_file, dev_file, test_file)

def data_initialization(data, gaz_file, train_file, dev_file, test_file):
    data.build_alphabet(train_file)#建立的train file的词表
    data.build_alphabet(dev_file)
    data.build_alphabet(test_file)
    # TODO gaz_file词典?
    data.build_gaz_file(gaz_file)
    data.build_gaz_alphabet(train_file)
    data.build_gaz_alphabet(dev_file)
    data.build_gaz_alphabet(test_file)
    data.fix_alphabet()
    return data

之后的数据处理部分的核心函数在data文件夹下。

data.build_alphabet(dev_file)——建立语料库。

data.build_gaz_alphabet(dev_file)——建立词典库。
加载pretrain的词典库。

之后,上边的vbocabluary可以得到词典集合、char集合和Word集合。根据集合可以确定对应的index值。

在之后,是将每句话的Word、char和词典使用对应的ID存储。

data.generate_instance_with_gaz(train_file,‘train’)

#返回的是 #train_text返回的是words, biwords, chars, gazs, labels,train_ids返回的是word_Ids, biword_Ids, char_Ids, gaz_Ids, label_Ids

之后,加载预训练的词向量。

data.build_word_pretrain_emb(char_emb)#pretrain_word_embedding——numpy数组,word_emb_dim——int
data.build_biword_pretrain_emb(bichar_emb)
data.build_gaz_pretrain_emb(gaz_file)

在之后,是调用模型完成训练。

train(data, save_model_dir, seg)

模型部分

主模型:BiLSTM_CRF模型
子模型:
BiLSTM和CRF模型。

在BILSTM 模型中,包含的子模型有:
CharBiLSTM、CharCNN、LatticeLSTM 模型。

self.word_embeddings = nn.Embedding(len(data.word_alphabet), self.embedding_dim)
self.biword_embeddings = nn.Embedding(len(data.biword_alphabet), data.biword_emb_dim)
        if data.pretrain_word_embedding is not None:
            self.word_embeddings.weight.data.copy_(torch.from_numpy(data.pretrain_word_embedding))
        else:
            self.word_embeddings.weight.data.copy_(torch.from_numpy(self.random_embedding(len(data.word_alphabet), self.embedding_dim)))
            
        if data.pretrain_biword_embedding is not None:
            self.biword_embeddings.weight.data.copy_(torch.from_numpy(data.pretrain_biword_embedding))
        else:
            self.biword_embeddings.weight.data.copy_(torch.from_numpy(self.random_embedding(len(data.biword_alphabet), data.biword_emb_dim)))
        # The LSTM takes word embeddings as inputs, and outputs hidden states
        # with dimensionality hidden_dim.

默认的embedding_dim是Word和char的embedding,lstm_input = self.embedding_dim + self.char_hidden_dim
如果使用,bi-gram,
lstm_input += data.biword_ emb_dim

在lattice_lstm中,
主函数是Lattice_LSTM,子函数包括:WordLSTMCell、MultiInputLSTMCell,

self.rnn = MultiInputLSTMCell(input_dim, hidden_dim)
self.word_rnn = WordLSTMCell(word_emb_dim, hidden_dim)

在这里插入图片描述

目前,在py3.7版本或者以上额版本是可以运行 ,但是loss好像存在问题。欢迎一起来改。
(py2的环境下,win里,我没有安上torch的0.3.0,在py3上的做的程序运行。)

本机地址:E:\PythonProject\pythonProject_draft\词典使用\LatticeLSTM-master
https://gitcode.net/Hekena/latticelstm-master_py3/-/tree/master

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YingJingh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值