基于Python实现的嵌套命名实体识别

资源下载地址:https://download.csdn.net/download/sheziqiong/85648959

一、实验描述

​ 本次实验为嵌套命名实体识别,即对于每个句子中可能存在嵌套性的明明实体进行抽取识别,并标注出其出现位置以及性质,不同实体之间的次序是没有关系的。本次实验的数据集由三部分给出,第一部分训练集由15022个句子构成,每个句子第一行为原始文本第二行为用|分隔开的不同命名实体,存在部分句子没有命名实体而空缺第二行的情况。第二部分开发集,由1669个句子组成,格式同训练集。第三部分测试集,共有1855个句子纯文本。实验允许使用外部词向量,但是不能使用如bert等语言模型,实验设置的满分阈值为f1=0.78。

二、运行方法

  • 实验依赖文件已经描述在 requirements.txt 当中,执行pip install -r requirements.txt即可配置环境。

  • 本实验依赖的word embedding的下载方式参见 参考资料 第二点,放到指定位置后可以进行之后操作。

  • 实验的数据文件train.txt dev.txt test.txt需要放在./data/NLPHW/目录下。

  • 本次实验使用 jupyter notebook 完成,建议在 google-colab 或同等GPU配置环境下运行以保障最佳性能。

    • 项目运行所需的文件有 Nested.ipynb 以及 data,embeddings,model,module,reader,training,util文件夹下的全部内容(由于大小要求,embeddings与data并未上传,请按照上面两条进行准备后再运行)

    • 模型参数在第二个cell中指定,可以根据个人需要选择合适的参数进行训练

在这里插入图片描述

  • 运行时直接点击 jupyter notebookRun All Cells 按钮即可完成数据预处理、训练、预测、生成文件的完整过程。最终会在./dumps/目录下生成log、模型、预测结果txt三个文件。

  • 生成预测结果后,会按照本次作业提交格式,在根目录下生成名为181220010.txt的提交文件

三、实现方法

  • 数据预处理部分位于reader模块:将三个初始文本预处理为分词array,为每一个词设置相应id用于简单表示,最终加载预训练的word embedding产生每个词的word_vector。将以上文件用pickle存储于./data目录下。
  • 使用pytorch实现的神经网络模块位于module中:主要有线性条件随机场(Linear-Chain-CRF), Drop-Out, 多层长短期记忆网络(MultyLayer-LSTM)三种组件。
  • 组合使用上述模块构建模型位于model中:主体部分采用FastLSTM与DropOut的组合针对上述已经数组化的训练集进行训练,此外我们将CNN与CRF相结合得到的卷积条件随机场ConvCrf用于在保持条件独立性的情况下增大并行程度(主要体现在使用GPU的情况下)以加快训练速度。
  • 训练过程的实现位于training
  • 其余一些工具类函数的定义在util

四、实验结果

  • 最终打榜f1:0.770421
  • 训练时间在colab上Tesla T4显卡条件下一个epoch约为2分钟,本地Geforce 2060情况下约为3.5分钟,最终结果为训练60个epoch得到,由于固定了随机种子应当可以直接复现结果。
  • 如需复现实验结果,请不要修改任何参数,并运行 nested.ipynb

资源下载地址:https://download.csdn.net/download/sheziqiong/85648959

猜你喜欢

转载自blog.csdn.net/newlw/article/details/125295027