charent / pytorch_IE_model

基于二分标注的文本三元组信息抽取模型。实现抽取出文本中的多个三元组,输出格式:[ (主实体, 关系, 客实体), ......]。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

基于二分标注的信息抽取模型

Read this in English.

抽取出一段文本中所有的三元组,如句子李庆绿李庆绿,斋号枕涛居,1973年生,广东揭西人,抽取出三元组('李庆绿', '出生日期', '1973年')('李庆绿', '出生地', '广东揭西')

本项目设计了两个基于注意力机制的层次二分标注信息抽取模型:P-SO模型和SP-O模型,在共享编码的基础上,利用注意力机制融合两个子任务之间流动信息,使得两个子任务关联性更强。本项目设计的两个模型特征工程简单,没有利用任何自然语言处理工具,如分词、词性标注等,避免引入新误差的同时,在工程应用中的推断解码速度更快。

信息抽取模型在只利用字向量和位置向量的简单特征工程下,SP-O模型的F1分数达到0.801。为解决逐条解码慢的问题,本项目设计了批处理推断解码方法,用GTX 1050Ti显卡在数据集上的推断解码速度达到359条/秒,对比单条解码速度平均提升817%

环境要求:

  • python >= 3.7,3.7、3.8、3.10测试无问题
  • cuda >= 10.1,建议10.2

安装依赖:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host tuna.tsinghua.edu.cn

下载预训练模型(可选,默认不使用预训练模型):

  • 中文Bert、Albert的pytorch版本下载地址:

  • Bert:bert-base-chinese

  • Albert:albert-base-chinese-cluecorpussmall

  • 下载的文件存放搭配model_file文件夹下,并修改embedding下对应的 embeddeing.py文件开头的中定义的目录(TORCH_BERT_DIRALBERT_BERT_DIR)。

  • word2vec预训练词向量下载地址:Chinese-Word-Vectors

  • 下载的word2vec预训练可能太大导致内存不足,运行下面的代码进行处理(提取出数据集中包含的字向量,其他的词向量不要)

python ./utils/pertrain_to_numpy.py

数据集下载:

--/data
----train_data.json
----dev_data.json

运行:

# 先处理数据
python ./utils/process_raw_data.py

# 修改config配置
vi config.py

# 修改main.py确定运行哪个框架
vi main.py

# 运行, main.py的第一个参数可以是`train_sp_o`、`train_p_so`、`test_sp_o`、`test_p_so`
# 分别表示:训练sp_o模型、训练p_so模型、测试sp_o模型、测试p_so模型
python main.py train_sp_o
    

引用

如果你觉得本项目对你有所帮助,请引用以下论文:

https://kns.cnki.net/kcms2/article/abstract?v=7P_nOixU6lV4c5lbZIlAA0L1xyOeieRVh40VHRxIaT47vFCr5BStyodVzKStzcqTifi863z2Nx9bIsaXKF9OlV_GYlkPV8zEsSoCoUhFVa2gmjrqNDhdzQrcaPKHn8lQA2FkYQuO0co=&uniplatform=NZKPT&flag=copy

About

基于二分标注的文本三元组信息抽取模型。实现抽取出文本中的多个三元组,输出格式:[ (主实体, 关系, 客实体), ......]。

License:Apache License 2.0


Languages

Language:Python 100.0%