1.一种基于知识图谱的古代诗词语义检索方法,其特征在于,具体步骤如下:
(1)对古诗文网、诗词大全和诗词名句网等网站的数据爬取,进行SPACY处理,获得符合规范的能用于数据挖掘任务的古诗词数据集PoemData;
(2)搭建BERT-TextCNN神经网络算法,输入CLASSIFY_DATA进行关系抽取实验,训练神经网络,保存模型CLASSIFY_MODEL;
(3)使用BERT分类算法比较相似问题的相似度及实体识别THULAC对问答数据集进行古诗词系统的问句相似度比较和全句中关键字的提取;
(4)用户输入问题是根据白话文翻译古诗词的问题,先使用Seq2Seq对用户输入的白话文内容进行古诗词的翻译,再使用聚类算法Doc2vec算法对有关古诗词进行聚类,从Neo4j库中查询到与关键字有关的实体,返回出最佳的前10个选项;
(5)开放Neo4j图数据库接口API和古诗词语义检索系统接口API,对用户输入古诗词相关关键字或语句调用算法获取相关实体数据和相似回答,将查询数据返还WEB应用程序;通过ECharts渲染古诗词实体属性数据和实体间关系数据,提供用户古诗词实体数据可视化,实现古诗词自动问答系统。
2.根据权利要求1所述的一种基于知识图谱的古代诗词语义检索方法,其特征在于,所述步骤(1)中获得符合规范的能用于数据挖掘任务的古诗词数据集PoemData的具体步骤如下:(1.1)整合从古诗文网、诗词大全和诗词名句网等网站爬取到的数据,将其导入MySQL数据库,创建all_poems表来存储古诗词数据;
(1.2)将all_poems表中的存在停用词以及乱码的数据过滤掉,形成新的古诗词表;
(1.3)创建auhtor表,提取all_poems表的作者进行分类,定义字段名为authorid:ID(Author)和name,分别表示作者数据的ID号和诗人属性名称;
(1.4)创建dynasty表,提取all_poems表的朝代字段进行分类,定义字段名为dynastyid:ID(Dynasty)和name,分别表示朝代数据的ID号和朝代属性名称;
(1.5)创建title表,提取all_poems表的标题和内容字段进行分类,定义字段名为titleid:ID(Title)、title和content,分别表示朝代数据的ID号和古诗词的题目和内容;
(1.6)创建Relation1表,提取all_poems表的标题和朝代字段结合步骤(1.4)创建的dynasty表和步骤(1.5)创建的title表进行创建;Relation1表定义字段名为:START_ID(Title),:END_ID(Dynasty)和DLinks;:START_ID(Title)表示Relation1表的主键和外键ID号,即title表的titleid:ID(Title)相一致;:END_ID(Dynasty)表示Relation1表的主键和外键,即dynasty表的dynastyid:ID(Dynasty)相一致;DLinks表示关系为朝代;
(1.7)创建Relation2表,提取all_poems表的标题和朝代字段结合步骤(1.3)创建的author表和步骤(1.5)创建的title表进行创建。Relation2表定义字段名为:START_ID(Title),:END_ID(Author)和ALinks;:START_ID(Title)表示Relation2表的主键和外键ID号,即title表的titleid:ID(Title)相一致;:END_ID(Author)表示Relation1表的主键和外键,即author表的authorid:ID(Author)相一致;ALinks表示关系为作者;
(1.8)将步骤(1.1)至步骤(1.5)中所创建的所有实体表,抽取实体表中实体编号集合作为各个实体索引导入Neo4j库中;将步骤(1.6)至步骤(1.7)中所创建的所有关系表,其中的实体关系导入Neo4j库中,形成古诗词三元组关系网络。
3.根据权利要求1所述的一种基于知识图谱的古代诗词语义检索方法,其特征在于,所述步骤(2)中搭建BERT分类算法,具体步骤如下:(2.1)采用BERT问答分类算法对问题库进行预训练,将Bert问答分类用作多分类的模式,分别对用户目的进行分类,分为5类,分别是搜索诗题目、搜索朝代、搜索作者、搜索诗内容和根据白话文搜索文言文,根据PoemData标注的训练数据集PoemTrain,验证数据集PoemTestVal,测试数据集PoemTest,计算已标注的数据集R总数sum_R;分别定义训练集比例train_prop、验证集比例val_prop和测试集比例test_prop;
(2.2)按照6:2:2的比例随机分配问答数据集设定train_prop=6,val_prop=2,Test_prop=2;分别计算训练集总数train_num、验证集总数val_num以及测试集总数trest_num,得到训练集Train_R={T1,T2,T3,…,Ta},测试集Test_R={N1,N2,…,Na}和验证集Val_R={V1,V2,V3,…,Va};
(2.3)定义类InputExample用来表示数据,初始化变量guid、text和label,分别表示训练id、字和字对应的标签;
(2.4)定义类DataProcessor用于数据处理,编写的继承类PoemNerProcessor,定义get_labels函数用来返回实体标签集,定义_create_example函数用于调用类InputExample给guid,text及label赋值,生成训练和验证样本;
(2.5)定义函数model_builder,构建模型PoemEntityModel。实现以下内容:将text与label转换为ids表示,使用参数加载BERT模型,得到字embedding和最大序列长度max_seq_length;使用TensorFlow对输入数据的ids表示按行求和得到当前batch中的序列长度lengths。定义变量num_labels为数据集L中的标签数量,利用BERT模型参数作为SchoolEntityModel模型的参数初始值,加载BiLSTM-CRF模型,输入模型参数embedding,num_labels,max_seq_length,lengths,label集合labels并设置模型参数lstm维度为128,droupout_rate为0.5,learning_rate为2e-5;
(2.6)利用TensorFlow将字标注数据集Train_R转化为数据文件train.tf_record,读取该数据文件组成batch;
(2.7)训练BERT-BiLSTM-CRF模型,其中模型参数设置BERT预训练模型路径,训练时批量处理数据集的大小为64,学习率为2e-5;
(2.8)得到基于BERT-BiLSTM-CRF的学校领域实体识别模型PoemEntityModel。
4.根据权利要求1所述的一种基于知识图谱的古代诗词语义检索方法,其特征在于,所述步骤(3)中使用BERT分类算法对用户问题进行分类,建立词向量模型的具体步骤如下:(3.1)提取all_poems表中的title,author和dynasty字段,定义特征集合RomainList,根据属性分为三大类,对词性进行类型标注;
(3.2)使用THULAC中文分词包,主要公式为
将步骤(3.1)中的RomainList字段属性加入Thulac分词工具包中;
(3.3)对用户输入的问答句子调用训练好的BERT模型进行分类;读取标签库中的内容列表RomainList={[‘题目类型’,1],[‘作者类型’,2],[‘朝代类型’,3]},根据用户输入的问题,计算问题长度为length2,返回标签值label=[‘0’,‘1’,‘2’,‘3’,‘4’]中的一项,这一项即为最终的分类结果,表示用户问题的所属类别,此类别记为type如果为前四类,则进入步骤(3.4),否则进入步骤(4);
(3.4.1)调用步骤(3.2)中的THULAC训练模型,对用户问句中的关键词进行提取,记分词列表为M,计算M长度记为length,设置计数器i=0,起始位m=0,str为空字符串,按简单检索算法不断匹配长句中的短句与THULAC词典库进行比较,返回匹配到的实体名称entityname;
(3.4.2)如果type<6,就会执行步骤(3.4.3),否则就执行步骤(3.4.9);
(3.4.3)如果i
(3.4.4)如果m<=I,就会执行(3.4.7),否则执行步骤(3.4.5);
(3.4.5)使得i=i+1,m=0,str为空,除了计数器其他更新到初始值;
(3.4.6)令m=m+1;
(3.4.7)令str=str+M[i][0],不断更新str的值,查找尽可能多的实体识别的结果;
(3.4.8)检索str在RomainList中是否存在,若存在则执行步骤(3.4.9),否则执行步骤(3.4.3);
(3.4.9)根据分类类型type和实体名称entityname在Neo4j库检索相关内容,即查询属性为type和名称为entityname的实体,若查询到实体则返回该实体,否则返回空值。
5.根据权利要求1所述的一种基于知识图谱的古代诗词语义检索方法,其特征在于,所述步骤(4)中建立可视化模型的具体步骤如下:(4.1.1)预训练Seq2Seq翻译模型,使用机器翻译自动评估算法BLEU,计算翻译完成句子和数据集中已有白话文句子的共词频率,用于预测翻译算法准确率;
(4.1.2)调用训练好的Seq2Seq模型,计算出整个输入序列X,设置learning_rate2=
0.003,max_gradient_norm=5.0,dropout2=1.0,batch_size=64,size=1024,num_layers=5,num_samples=512,num_epoch=5,num_per_epoch=300000,翻译用户传入句子根据句子s中的输入序列去得到输出序列的词概率,找出最大概率的词向量,计算最大似然函数,并映射为相应的汉字字符串。对用户输入的白话文进行翻译,生成对应的翻译结果为TranslateResult;
(4.2.1)预训练Doc2vec,根据特征词训练文本上下文,根据中文词典生成对应词向量,根据词向量训练每个词性之间的关联数值,对文本相似度较大的古诗词短句进行无监督聚类;
(4.2.2)调用训练好的Doc2vec模型,设定Doc2vec将丢失出现词频少于5次生僻字的古诗词,得到集合G;对步骤(4.1.2)中的翻译结果TranslateResult计算文本相似度,输出{[label1,similarity]}的字典集,记录序号和相似度,返回相似度高的前10个古诗的id号,其id值与步骤(1.5)中title表的titleid:ID(Title)相一致,将返回的古诗词id号装入集合PoemResult中;
(4.3)将PoemResult的古诗词id集合返回,并在Neo4j库中检索古诗词title实体相一致id内容。
6.根据权利要求1所述的一种基于知识图谱的古代诗词语义检索方法,其特征在于,所述步骤(5)中通过用户输入获取相关实体数据和相似回答,提供用户古诗词实体数据可视化步骤如下:(5.1)开放Neo4j图数据库接口API和古诗词语义检索系统接口API;
(5.2)通过用户账户创建线程,接入进程管理;
(5.3)判断线程是否完成,若是完成则进入步骤(5.9),若没有则进入步骤(5.4);
(5.4)根据用户输入信息查询古诗词信息;
(5.5)系统处理查询信息,进行分类;
(5.6)系统构造包含查询信息的Cypher查询语句,获取初试实体相关属性数据,通过关联挖掘系统提供的接口对查询所得的古诗词实体数据进行实体间关系维度扩展;
(5.7)将系统通过关联挖掘所得的实体数据集封装返还WEB应用程序;
(5.8)结束查询调用,返回步骤(5.3);
(5.9)关闭线程;
(5.10)WEB应用程序通过ECharts渲染古诗词实体数据和实体间关系数据,提供用户古诗词实体数据可视化,实现古诗词自动问答系统。