今天给大家介绍一下DeepKE这个开源工具。DeepKE一个支持cnSchema、低资源、长篇章、多模态的知识图谱抽取开源工具。主要是由浙江大学和阿里团队研发的。
DeepKE是一种基于深度学习的知识抽取工具,它可以从文本数据中抽取出实体、关系和事件等知识,并将其表示为结构化的形式,可以用于自然语言处理、信息提取、搜索引擎优化以及其他相关领域。
官网地址:http://deepke.zjukg.cn/CN/index.html
论文地址:https://arxiv.org/pdf/2201.03335.pdf
官方文档:https://zjunlp.github.io/DeepKE
DeepKE的步骤通常包括以下几个方面:
1.预处理:对原始文本进行分词、词性标注、命名实体识别等处理,以便后续的模型训练和使用;
2.知识抽取:使用深度学习模型,例如神经网络、卷积神经网络和循环神经网络等,从预处理后的文本中抽取出实体、关系和事件等知识;
3.结构化表示:将抽取出的知识表示为结构化的形式,例如图或表格等,以便后续的应用和分析。
首先deepke支持各种方式的安装
conda环境
conda create -n deepke python=3.8
conda activate deepke
pip方式
pip install deepke
还提供了dockerfile来创建docker镜像。
cd docker
docker build -t deepke .
conda activate deepke
博主使用conda和pip直接进行install出现了报错,所以是直接下载deep的压缩包并setup
下载地址: https://pypi.doubanio.com/packages/d1/79/3ec7a5b14ecc16677b13e2f2603f56849a54ec9a0a527f1556d65f9c9f3a/deepke-2.2.1.tar.gz
解压后在deepke-2.2.1目录下运行
python setup.py install
发现还是报错,原因是该包里面没有requirements.txt(希望官方改正)
于是找到官方文档中的安装依赖并写入requirements.txt放入setup.py的同级目录下再运行(已被调试过)。
torch == 1.10.0
hydra-core == 1.0.6
tensorboard == 2.4.1
matplotlib == 3.4.1
protobuf==3.19.2
transformers == 3.4.0
jieba == 0.42.1
scikit-learn == 0.24.1
pytorch-transformers == 1.2.0
seqeval == 1.2.2
tqdm == 4.60.0
opt-einsum==3.3.0
wandb==0.12.7
ujson
使用命令后可能会由于从python官方库下载而导致的超时问题,因此我们直接使用如下命令
pip install -r requirements.txt -i https://pypi.douban.com/simple
来将依赖直接安装之后再运行命令
python setup.py install
就安装成功了。
import deepke
# 加载训练数据
train_data = [
{
"text": "乔布斯是苹果公司的创始人。",
"entities": {
"PERSON": [{"start": 0, "end": 2}]
},
"relations": {
"FOUNDED_BY": [{"head": 0, "tail": 3}]
}
},
{
"text": "比尔盖茨是微软公司的创始人。",
"entities": {
"PERSON": [{"start": 0, "end": 4}]
},
"relations": {
"FOUNDED_BY": [{"head": 0, "tail": 5}]
}
},
# ... 其他训练数据
]
# 训练模型
model = deepke.train(train_data)
# 保存模型
model.save_model("model_path")
import deepke
# 加载预训练模型
model = deepke.load_model(model_path)
# 对输入文本进行预处理
text = "乔布斯是苹果公司的创始人。"
tokens = deepke.tokenize(text)
# 使用模型进行知识抽取
entities, relations = model.predict(tokens)
# 输出抽取结果
print("Entities:", entities)
print("Relations:", relations)
以上代码使用预训练模型对输入文本进行了知识抽取,并输出了实体和关系等结构化信息。
数据集格式为json数据。训练数据的格式必须符合DeepKE要求的格式。具体而言,每个训练样例应该包含一个文本字段(即**“text”字段)以及一个实体字段(即“entities”字段),实体字段的值应该是一个字典类型,键为实体类型,值为一个列表,列表中的每个元素表示一个实体在文本中的位置信息(即“start”和“end”字段)。同时,在存在关系的情况下,每个训练样例还应该包含一个关系字段(即“relations”字段),关系字段的值也应该是一个字典类型,键为关系类型,值为一个列表,列表中的每个元素表示一条关系,其中“head”和“tail”**分别表示关系头和尾在实体列表中的索引。
以下是一个示例的训练数据格式:
{
"text": "史蒂夫·乔布斯是苹果公司的创始人。",
"entities": {
"PERSON": [{"start": 0, "end": 5}],
"ORG": [{"start": 9, "end": 13}]
},
"relations": {
"FOUNDED_BY": [{"head": 0, "tail": 1}]
}
}
如有任何问题请参考开源地址:https://gitee.com/openkg/deepke