admin 发布的文章

一、背景

随着信息时代的到来, 数据呈爆发式的增长, 如何从这些数据中通过智能技术自动提取出真正有价值的信息尤为重要。知识图谱是一类知识表示, 由实体、关系以及属性构成。知识图谱的构建过程: 首先从数据源中提取出碎片化事实, 然后对碎片化事实进行知识的融合, 再经过知识加工后通过迭代更新建立基于知识的体系显然, 知识图谱的构建过程包括: 信息抽(information extraction), 知识融合, 知识加工等。信息抽取作为知识图谱的主要组成, 从数据源中抽取出实体和实体之间的关系等结构化信息包括对实体、关系以及事件等方面的抽取。

1.面临的问题

知识图谱中的信息抽取面对着 3 个挑战:
(1).第一, 如何从需要构建知识图谱的领域语料中利用启发式的信息来发现语料中的隐含知识, 从而在较少的人工标注中获得较高的准确度。
(2).第二, 如何解决已有知识图谱中部分不完整的实体、关系与事件信息所带来的噪声与语义漂移问题。
(3).第三, 如何在开放领域中利用现有的标注或加上较少的标注实现知识图谱在新信息中的完善与更新。

2.知识抽取的三个主要任务

(1).实体识别
(2).关系抽取
(3).属性抽取

二、实体识别

1.定义

命名实体识别 (named entity recognition, NER) 是实体抽取的别称。 命名实体能在具有相似属性的一组事物中清楚的标识出一个事物. 它可以理解为有文本标识的实体, 而实体 (entity) 是不依附于其他东西而存在的。

2.方法归类

NER三种识别方法
(1)基于规则和字典的方法
(2)基于机器学习-统计模型的方法
(3)基于深度学习-神经网络的方法。
近年来, 越来越多的研究者开始关注基于深度学习的NER方法.
这三种方式的对比
微信截图_20221027141020.png

3.基于规则的方法

基于规则的方法通过专家手工构建规则集,将文本等数据与规则集匹配来得到命名实体信息。该方法在处理小规模的知识图谱时精度较高,但是随着知识图谱规模的增大,规则构建困难,且由于规则基于人工构建,难以进行大规模扩展并应用于不同领域的知识图谱。

4.基于机器学习-统计模型的方法

基于统计模型的方法将NER作为序列标注问题,以完全或部分标注的语料进行模型训练。常见的统计模型有条件马尔可夫模型(Conditional Markov Model,CMM)、隐马尔可夫(Hidden Markov Model,H M M)、条 件 随 机 场(Conditional Random Fields,CRF)和最大熵(Maximum Entropy,ME)等。基于统计模型的方法在构建一个新的领域知识图谱时需要做的改动较少,通用性强。

但是统计模型的状态搜索空间庞大、训练时间长,高度依赖特征选取和语料库,难以从海量数据中发现复杂且隐含的关键特征。

5.基于深度学习-神经网络

由于深度学习能够自动地从数据中学习复杂的隐藏特征,所需的领域专业知识和经验知识较少,基于神经网络的
NER 已 成 为 目 前 主 流 方 法 ,主 要 模 型 有 卷 积 神 经 网 络(Convolutional Neural Network,CNN)和 循 环 神 经 网 络(Recurrent Neural Network,RNN)等。

深度学习在实体抽取领域取得较好效果后, 研究人员开始在词汇级别上对其神经网络结构进行改进研究。

1.早期深度学习模型

模型偏重于词或字符的特征提取, 无法动态的表征上下文语境中的一词多义。主要有一下几种方式:
(1) Lample 等人[16]通过加入 CRF 模块以优化标签序列输出, 提出了 BiLSTM-CRF 模型, 在语料库上取得了比较高的 F1 值
(2) Ma等人[17]在双向 LSTM-CNNS结构上, 添加了 CRF 模块, 提出 BiLSTM-CNNs-CRF模型, 模型能同时利用词和字符级表示.
(3) Luo等人[18]提出了一种 Att-BiLSTM-CRF 模型, 该模型用于文档级实体识别, 在数据集上取得的 F1 值为 91.14%.

2.结合上下文语境或语义的模型

(1)Devlin 等人[19] 提出了 BERT 模型, 该模型可以使上下文语境或语义中的词得到充分的表征.
(2) Souza 等人[20]将 BERT-CRF 模型应用于葡萄牙 NER任务上, 获得了新的最佳 F1 值.
(3)谢腾等人[21] 提出一种 BERT- BiLSTMCRF 模型, 该模型在两个语料库上进行实验, 得到的F1 值分别是 94.65% 和 95.67%.
(4)百度推出了 ERNIE 模型[22], 该模型是通过加强 BERT的 masking 来获取知识. 实验表明, 在 5 项 NER 任务上, ERNIE 刷新了榜单.
(5)微软提出了一种多任务的训练方式的 MT-DNN 模型[23], 该模型比 BERT 更加稳定,泛化能力更好.
(6)由卡内基梅隆大学提出的 XLNet 模型[24]是一种通用的自回归预训练模型, 该模型解决了 BERT在预训练时加入 [MASK] 的 token, 从而导致 pretrain和 finetune 在训练数据上的差异.
(7)Liu 等人[25] 对 BERT的预训练进行了仔细的评估, 提出了一种能更好地训练 BERT 的方法, 称为 RoBERTa 模型, 该模型比 BERT之后的所有 psot-BERT 模型的效果好.
(8) Joshi 等人[26] 提出一种 SpanBERT 模型, 模型旨在更清晰的预测和表达文本跨度, 不再通过随机标记而是通过屏蔽连续的
随机跨度来使得 BERT 得到扩展.
(9)谷歌提出了 ALBERT模型[27], 该模型在 BERT 模型的基础上, 减小了两种参数量, 通过两个参数稍减技术克服了扩展预训练模型面临的主要障碍, 使得训练更加稳定.

三、关系抽取

关系抽取 (relation extraction, RE) 旨根据实体之间的上下文语境来确定语义关系, 它为许多下游任务提供了基础支持, 比如文本理解中, 为了理解复杂的语句,识别语句中的实体对之间的关系是至关重要的.在问答系统中, 关系抽取所得到的实体间的关系实例可以作为背景知识支撑问题的问答. 在 NLP 领域中, 关系抽取最重要的应用是构建知识图谱.

传统的关系分类模型需要耗费大量的人力去设计特征, 而且很多隐性特征也难以定义. 因此传统方法在
大规模关系抽取任务中效果不佳. 基于深度学习的关系抽取能够自动学习有效特征。

1.基于卷积神经网络的关系抽取

(1)Zeng等[42]首次提出使用CNN提取单词和句子级特征,形成特征向量预测关系分类。

2.基于循环神经网络的关系抽取

Socher 等[45]首次提出基于 RNN 的语义合成模型 MVRNN,学习任意长度的组合向量表示并用于名词间因果或主题信息等语义 关系分类 。

3.基于注意力机制的关系抽取

Attention-CNN[48]考虑文本中不同信息与实体的相关性,利用词嵌入信息,将文本段编码为语义信息,通过单词级ATT确定句子中的哪些部分对实体影响最大。

4.基于图卷积网络的关系抽取

C-GCN(Contextualized GCN)[52]
针对现有依存树模型在不同结构树下计算效率低、剪枝导致忽视信息等问题,提出基于GCN 和修剪依存树的关系抽取方法。

5.基于对抗训练的关系抽取

Wu等[55]首次提出在关系抽取中应用AT策略,Wang等[56]在此基础上,提出了 AMNRE(Adversarial Multi-lingual Neural Relation Extraction),以 AT策略保证对多种语言的句子表征,提取出语义一致的关系。

6.实体-关系联合抽取。

最早的实体-关系联合抽取方法是Miwa等[62]提出的堆叠双向树型LSTM-RNNs模型,在考虑实体信息的情况下进行关
系抽取。本质上,该方法的实体识别和关系抽取仍然是分离的.

四、属性抽取

1.定义

属性抽取是知识库构建和应用的基础,通过从不同信息源的原始数据中抽取实体的属性名和属性值,构建实体的属列表,形成完整的实体概念,实现知识图谱对实体的全面刻画。

2.方法分类

(1)传统的监督、无监督属性抽取
(2)基于神经网络的属性抽取和其他类型(如元模式、多模态等)的属性抽取。

1.传统的监督、无监督属性抽取

目前大部分属性抽取是从文本数据中抽取信息。传统方法中监督学习的属性抽取一般使用 H M M 和 CRF 等抽取属性。
(1)Raju 等[67]使用名词聚类方式,从名词类中抽取属性。
(2)Shinzato等[68]则提出一种无监督的属性抽取方式,自动对语料库质量进行注释,生成知识库。

2.基于神经网络的属性抽取

(1)基于神经网络的属性抽取一般作为序列标注任务,使用序列标注模型抽取文本中的属性值。如Zhao等[69]基于BERT预训练模型,使用 LSTM 结合 CRF 的序列标签模型抽取文本中的属性。

(2)基于元模式的属性抽取如Jiang等[70]提出的MetaPAD,将类型化的文本模式结构命名为元结构,可以在海量语料库中发现元模式。在属性抽取的场景中,能使用这种方法发现文本中高质量的属性描述语句,作为实体的属性值。

(3)Logan等[71]针对属性抽取大部分是基于文本数据的现 状 ,提 出 了 多 模 态 属 性 抽 取(Multimodal Attribute Extraction,MAE)方法及数据集,实现对多种类型数据(如图像、视频、音频等)的属性抽取。

五、统一抽取框架

1.目前抽取技术存在的问题

目前,大多数IE方法都是面向特定任务的,这导致了针对不同IE任务的专用体系结构、独立模型和专用知识源。这些任务专用解决方案极大地阻碍了IE系统的快速体系结构开发、有效的知识共享和快速跨领域适应。首先,为大量IE任务/设置/场景开发专用架构非常复杂。其次,学习孤立模型严重限制了相关任务和环境之间的知识共享。最后,构建专门用于不同IE任务的数据集和知识源既昂贵又耗时。

2.统一抽取框架-UIE

(1)论文地址:https://arxiv.org/pdf/2203.12277.pdf
(2)框架简介:
UIE-通用信息抽取(2022)。论文提出了一个统一的文本到结构生成框架,即UIE,它可以通用地建模不同的IE任务,自适应地生成目标结构,并从不同的知识源协作学习通用的IE能力。具体而言,UIE通过结构化提取语言对不同的提取结构进行统一编码,通过基于模式的提示(prompt)机制自适应生成目标提取,并通过大规模预训练的文本到结构模型捕获常见IE能力。实验表明,UIE在4个IE任务、13个数据集上,以及在所有有监督、低资源和few-shot设置上,对广泛的实体、关系、事件和情感提取任务及其统一,都取得了最先进的性能。这些结果验证了UIE的有效性、通用性和可移植性。

参考文献:

16.Lample G, Ballesteros M, Subramanian S, et al. Neural
architectures for named entity recognition. Proceedings of the 12016 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies. San Diego: Association for Computational Linguistics, 2016. 260–270.

17.Ma XZ, Hovy EH. End-to-end sequence labeling via bidirectional LSTM-CNNS-CRF. Proceedings of the 54th Annual Meeting of the Association for Computational Linguistics. Berlin: ACL Press, 2016. 1064–1074.

18.Luo L, Yang ZH, Yang P, et al. An attention-based
BiLSTM-CRF approach to document-level chemical named entity recognition. Bioinformatics, 2018, 34(8): 1381 –1388.

19.Devlin J, Chang MW, Lee K, et al. BERT: Pre-training of deep bidirectional transformers for language understanding.Proceedings of the 2019 Conference of the North American
Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long and ShortPapers). Minneapolis: Association for Computational Linguistics, 2019. 4171–4186.

20.Souza F, Nogueira R, Lotufo R. Portuguese named entity
recognition using BERT-CRF. arXiv: 1909.10649, 2019.

21.谢腾, 杨俊安, 刘辉. 基于 BERT-BiLSTM-CRF 模型的中文实体识别. 计算机系统应用, 2020, 29(7): 48–55. [doi: 10.15888/j.cnki.csa.007525]

22.Sun YS, Wang SH, Li YK, et al. ERNIE: Enhanced representation through knowledge integration. Proceedings of the 57th Annual Meeting of the Association for Computational Linguistics. ACL, 2019. 1441–1451.

23.Liu XD, He PC, Chen WZ, et al. Multi-task deep neural networks for natural language understanding. Proceedings of the 57th Annual Meeting of the Association for Computational Linguistics. Florence: Association for Computational Linguistics , 2019. 4487–4496.

24.Yang ZL, Dai ZH, Yang YM, et al. XLNet: Generalizedautoregressive pretraining for language Understanding.arXiv: 1906.08237, 2019.

25.Liu YH, Ott M, Goyal N, et al. RoBERTa: A robustly optimized BERT pretraining approach. arXiv: 1907.11692,2019.

26.Joshi M, Chen DQ, Liu YH, et al. SpanBERT: Improvingpre-training by representing and predicting spans.Transactions of the Association for ComputationalLinguistics, 2020, 8: 64–77. [doi: 10.1162/tacl_a_00300]

27.Lan ZZ, Chen MD, Goodman S, et al. ALBERT: A liteBERT for self-supervised learning of languagerepresentations. arXiv: 1909.11942, 2019.

42.ZENG D J,LIU K,LAI S W,et al. Relation classification via
convolutional deep neural network[C]// Proceedings of the 25th International Conference on Computational Linguistics:Technical Papers. Dublin: Dublin City University, Association for Computational Linguistics,2014:2335-2344.

45.SOCHER R,HUVAL B,MANNING C D,et al. Semantic compositionality through recursive matrix-vector spaces [C]//Proceedings of the 2012 Joint Conference on Empirical Methods in Natural Language Processing and Computational Natural Language Learning. Stroudsburg, PA: Association for Computational Linguistics,2012:1201-1211.

48.SHEN Y T,HUANG X J. Attention-based convolutional neural network for semantic relation extraction[C]// Proceedings of the 26th International Conference on Computational Linguistics: Technical Papers. [S. l.] : The COLING 2016 Organizing Committee,2016:2526-2536.

52.ZHANG Y H,QI P,MANNING C D. Graph convolution ove pruned dependency trees improves relation extraction [C]//Proceedings of the 2018 Conference on Empirical Methods inNatural Language Processing. Stroudsburg,PA:Association for Computational Linguistics,2018:2205-2215.

55.WU Y,BAMMAN D,RUSSELL S. Adversarial training for relation extraction[C]// Proceedings of the 2017 Conference on Empirical Methods in Natural Language Processing. Stroudsburg,PA:Association for Computational Linguistics,2017:1778-1783

56.WANG X Z,HAN X,LIN Y K,et al. Adversarial multi-lingual neural relation extraction [C]// Proceedings of the 27thInternational Conference on Computational Linguistics.Stroudsburg, PA: Association for Computational Linguistics,2018:1156-1166.

62.MIWA M,BANSAL M. End-to-end relation extraction using LSTMs on sequences and tree structures[C]// Proceedings of the54th Annual Meeting of the Association for ComputationalLinguistics. Stroudsburg, PA: Association for Computational Linguistics,2016:1105-1116.

67.RAJU S,PINGALI P,VARMA V. An unsupervised approach to product attribute extraction [C]// Proceedings of the 2009 European Conference on Information Retrieval, LNCS 5478. Berlin:Springer,2009:796-800.

68.SHINZATO K,SEKINE S. Unsupervised extraction of attributesb and their values from product description[C]// Proceedings of the 6th International Joint Conference on Natural Language Processing. Stroudsburg, PA: Association for ComputationalLinguistics,2013:1339-1347.

69.ZHAO G,ZHANG T,WANG C X,et al. Applications of BERT
based sequence tagging models on Chinese medical text attributesextraction[EB/OL]. (2020-08-22)[2020-12-11]. https://arxiv.org/pdf/2008. 09740. pdf.

70.JIANG M,SHANG J B,CASSIDY T,et al. MetaPAD:meta pattern discovery from massive text corpora[C]// Proceedings ofthe 23rd ACM SIGKDD International Conference on KnowledgeDiscovery and Data Mining. New York:ACM,2017:877-886.

71.LOGAN R L IV,HUMEAU S,SINGH S. Multimodal attribute extraction[C]// Proceedings of the 6th Workshop on Automated Knowledge Base Construction at NIPS 2017. Red Hook,NY:Curran Associates Inc. ,2017:No. 19.

一、知识图谱构成

1.需要抽取模型

知识图谱的抽取一般需要三个模块:实体识别、属性抽取、关系抽取,有时候还有事件抽取。

2.工具评测标准

1.抽取模块是否齐全
2.抽取准确率是否高
3.抽取是否支持小样本学习
4.是否支持标注工具

二、抽取工具介绍

1.UIE-百度

(1)背景介绍

官方地址1(paddle版本):https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie
官方地址2(pytorch版本):https://github.com/heiheiyoyo/uie_pytorch
论文地址:https://arxiv.org/pdf/2203.12277.pdf
发布时间:2022年并持续维护升级

(2)支持功能

支持:实体识别、属性抽取、关系抽取、事件抽取、观点抽取、情感分类
领域:支持跨领域
语言:支持多语言(中英)
多模型:大、中、小不同模型大小
小样本:支持小样本学习
其他:支持模型评测、部署(cpu/gpu)
支持标注工具:https://github.com/heiheiyoyo/uie_pytorch/blob/main/doccano.md

2.DeepKe:浙江大学

(1)背景介绍

官网:https://github.com/zjunlp/DeepKE/blob/main/README_CN.md
论文:https://arxiv.org/abs/2201.03335
发布时间:2022年并持续维护升级

(2)支持功能

支持:实体识别、属性抽取、关系抽取;不支持:事件抽取
语言:支持多语言(中英)
小样本:支持小样本学习

3.OpenUE:浙江大学

官网:https://github.com/zjunlp/OpenUE
论文:https://aclanthology.org/2020.emnlp-demos.1.pdf
发布时间:2020年,后续没有更新

(2)支持功能

支持:实体识别、属性抽取、关系抽取;不支持:事件抽取
语言:支持多语言(中英)

4.NeuralKG:浙江大学开源知识图谱表示学习工具

官网地址:https://github.com/zjukg/NeuralKG/blob/main/README_CN.md
支持多种方法:NeuralKG提供了对三类知识图谱嵌入方法的代码实现,包括传统知识图谱嵌入,基于图神经网络的知识图谱嵌入,以及基于规则的知识图谱嵌入
发布时间:2022年并持续维护升级

5.其他抽取工具-不推荐(时间较长,功能支持不全)

(1)OpenEA: https://github.com/nju-websoft/OpenEA
(2)OmniEvent: https://github.com/THU-KEG/OmniEvent

综合比较和试验,百度UIE目前最合适

三、抽取工具-UIE详解

1. 模型简介

UIE(Universal Information Extraction):Yaojie Lu等人在ACL-2022中提出了通用信息抽取统一框架UIE。该框架实现了实体抽取、关系抽取、事件抽取、情感分析等任务的统一建模,并使得不同任务间具备良好的迁移和泛化能力。
613eb1.png

2.UIE版本

(1)paddle版本:https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie
(2)torch版本:https://github.com/heiheiyoyo/uie_pytorch

3.UIE优势

(1)使用简单:用户可以使用自然语言自定义抽取目标,无需训练即可统一抽取输入文本中的对应信息。实现开箱即用,并满足各类信息抽取需求。

(2)降本增效:以往的信息抽取技术需要大量标注数据才能保证信息抽取的效果,为了提高开发过程中的开发效率,减少不必要的重复工作时间,开放域信息抽取可以实现零样本(zero-shot)或者少样本(few-shot)抽取,大幅度降低标注数据依赖,在降低成本的同时,还提升了效果。
(3)效果领先:开放域信息抽取在多种场景,多种任务上,均有不俗的表现

4.UIE支持功能

1.实体抽取
命名实体识别(Named Entity Recognition,简称NER),是指识别文本中具有特定意义的实体。在开放域信息抽取中,抽取的类别没有限制,用户可以自己定义。
例如抽取的目标实体类型是"时间"、"选手"和"赛事名称", schema构造如下:
['时间', '选手', '赛事名称']

2.关系抽取
关系抽取(Relation Extraction,简称RE),是指从文本中识别实体并抽取实体之间的语义关系,进而获取三元组信息,即<主体,谓语,客体>。
例如以"竞赛名称"作为抽取主体,抽取关系类型为"主办方"、"承办方"和"已举办次数", schema构造如下:

{
  '竞赛名称': [
    '主办方',
    '承办方',
    '已举办次数'
  ]
}

3.事件抽取
事件抽取 (Event Extraction, 简称EE),是指从自然语言文本中抽取预定义的事件触发词(Trigger)和事件论元(Argument),组合为相应的事件结构化信息。

例如抽取的目标是"地震"事件的"地震强度"、"时间"、"震中位置"和"震源深度"这些信息,schema构造如下:

{
  '地震触发词': [
    '地震强度',
    '时间',
    '震中位置',
    '震源深度'
  ]
}

触发词的格式统一为触发词或`XX触发词,XX表示具体事件类型,上例中的事件类型是地震,则对应触发词为地震触发词
4 评论观点抽取
评论观点抽取,是指抽取文本中包含的评价维度、观点词。

例如抽取的目标是文本中包含的评价维度及其对应的观点词和情感倾向,schema构造如下:

{
  '评价维度': [
    '观点词',
    '情感倾向[正向,负向]'
  ]
}

5 情感分类
句子级情感倾向分类,即判断句子的情感倾向是“正向”还是“负向”,schema构造如下:

'情感倾向[正向,负向]'
调用示例:

>>> schema = '情感倾向[正向,负向]' # Define the schema for sentence-level sentiment classification
>>> ie.set_schema(schema) # Reset schema
>>> ie('这个产品用起来真的很流畅,我非常喜欢')
[{'情感倾向[正向,负向]': [{'text': '正向', 'probability': 0.9988661643929895}]}]

6 跨任务抽取
例如在法律场景同时对文本进行实体抽取和关系抽取,schema可按照如下方式进行构造:

[
  "法院",
  {
      "原告": "委托代理人"
  },
  {
      "被告": "委托代理人"
  }
]
5. 模型选择

2022-10-21 17-53-02屏幕截图.png

6. 数据标注

详细标注介绍参考:https://github.com/PaddlePaddle/PaddleNLP/blob/develop/model_zoo/uie/doccano.md
推荐使用数据标注平台doccano 进行数据标注,本示例也打通了从标注到训练的通道,即doccano导出数据后可通过doccano.py脚本轻松将数据转换为输入模型时需要的形式,实现无缝衔接。标注方法的详细介绍请参考doccano数据标注指南。

原始数据示例:

深大到双龙28块钱4月24号交通费
抽取的目标(schema)为:

schema = ['出发地', '目的地', '费用', '时间']

标注步骤如下:

在doccano平台上,创建一个类型为序列标注的标注项目。
定义实体标签类别,上例中需要定义的实体标签有出发地、目的地、费用和时间。
使用以上定义的标签开始标注数据,下面展示了一个doccano标注示例:
4b80.png

标注完成后,在doccano平台上导出文件,并将其重命名为doccano_ext.json后,放入./data目录下。

7 模型部署

以下是UIE Python端的部署流程,包括环境准备、模型导出和使用示例。

环境准备 UIE的部署分为CPU和GPU两种情况,请根据你的部署环境安装对应的依赖。

CPU端

CPU端的部署请使用如下命令安装所需依赖

pip install -r deploy/python/requirements_cpu.txt
GPU端

为了在GPU上获得最佳的推理性能和稳定性,请先确保机器已正确安装NVIDIA相关驱动和基础软件,确保CUDA >= 11.2,cuDNN >= 8.1.1,并使用以下命令安装所需依赖

pip install -r deploy/python/requirements_gpu.txt

一、题目列表:
题目1、用两个栈实现队列JZ9

二、题目
题目1、用两个栈实现队列JZ9
描述
用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。

数据范围: nle1000n≤1000
要求:存储n个元素的空间复杂度为 O(n)O(n) ,插入与删除的时间复杂度都是 O(1)O(1)

2.代码

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.stack1 = []
        self.stack2 = []
    def push(self, node):
        # write code here
        self.stack1.append(node)
    def pop(self):
        # return xx
        if  self.stack2 == []:
            while self.stack1:
                self.stack2.append(self.stack1.pop())
        return self.stack2.pop()
        
        

Three Policies
Your assistant uses policies to decide which action to take at each step in a conversation. There are three different policies that the default config.yml file starts out with:

1.The RulePolicy handles conversations that match predefined rule patterns. It makes predictions based on any rules you have in your rules.yml file.
2.The MemoizationPolicy checks if the current conversation matches any of the stories in your training data. If so, it will predict the next action from the matching stories.
3.The TEDPolicy uses machine learning to predict the next best action. It is explained in full detail in our paper and on our YouTube channel.

一、相关竞品产品调研

1.左手医生
https://open.zuoshouyisheng.com/--优先
2.百度灵医
https://01.baidu.com/index.html (线上无法体验)
3.科大迅飞-全科辅诊诊疗系统
http://www.iflytek.com/health/qkfzzl (线上无法体验)
4.阿里健康
https://www.doctoryou.ai/dm
5.腾讯
https://tencentmiying.com/official/

二、相关文章

1.https://zhuanlan.zhihu.com/p/379202949
2.https://zhuanlan.zhihu.com/p/59401605

三、开源项目

1.基于知识图谱和向量检索的医疗诊断问答系统
https://github.com/wangle1218/KBQA-for-Diagnosis
2.知识图谱问答
https://github.com/wangle1218/QASystemOnMedicalKG
3.医疗知识图谱问答
https://github.com/LuoFanA595/Medical-Robot-AI

四、baseline选型

1.baseline参考源码:https://github.com/LuoFanA595/Medical-Robot-AI
2.使用框架:rasa、官方网站:http://wwww.rasa.com
3.技术架构选型:为多种问答系统的综合应用,包括:问答型、任务型、闲聊型,其中问答型包括:FAQ、KBQA(知识图谱)
4.技术流程图:后期预期加入asr、tts模块
技术架构.png

五、对话系统环境配置

1.baseline环境配置:知识图谱部分

(1)如果是windows下直接参考git相关配置
(2)一般都是linux下配置,部分内容需要修改

#1.配置环境:创建所需环境:
conda create -n 环境名 python=3.7
#激活环境:
conda activate 环境名
#2.项目所需安装包已打包在requirements.txt中Terminal终端命令执行:
pip install -r requirements.txt 即可安装

(3)知识图谱数据库neo4j下载、安装、运行:
1)下载:
从官网:https://neo4j.com/download-center/#community 下载3.5.35版本(linux)。
2)解压:下载完成后通过命令:
tar -zxvf neo4j-community-3.5.35-unix.tar 解压
3)启动:neo4j命令:
./bin/neo4j start
4)web访问:在浏览器中输入,默认端口7474
http://localhost:7474/browser/
显示如图则启动成功:
20210227101959817.png
5)结构化疾病数据入库:
python build_medicalgraph.py
注意修改代码中数据库账户和秘密,最终可视化效果:
graph_summary.png

2.闲聊部分---这部分是基于理解自己添加的。

(1)环境安装

pip install paddlepaddle
pip install paddlenlp
pip install paddle

(2)使用模型
plato-mini

六、代码运行与服务启动

1.rasa后台服务启动(启动有先后顺序)
#(1)运行rasa cors,作用对话状态跟踪,对话管理部分:
 nohup python3 -m rasa run -vv --cors "*" --port 5005 --endpoints endpoints.yml --credentials 
 credentials.yml --debug >log1.log 2>&1 &

#(2)运行 rasa action,行为管理:
nohup python3 -m rasa run actions --port 5055 --actions actions --debug >log2.log 2>&1 &

#(3)用端口将文件映射到本地:
python -m http.server 8888

#(4)docker容器启动:
docker run -p 8000:8000 rasa/duckling
2.前端接口修改

修改路径:
rasa_bot_front_dist-main/static/js/main.341de945.chunk.js
修改ip地址:http://192.168.2.220:5055/webhooks/rest/webhook/
将ip修改为rasa启动服务端地址
之后,在浏览器打开rasa_bot_front_dist-main/index.html即可对话

七、baseline知识图谱实现功能

1.知识图谱实体类型
实体类型中文含义实体数量举例
Check诊断检查项目3,353支气管造影;关节镜检查
Department医疗科目54整形美容科;烧伤科
Disease疾病8,807血栓闭塞性脉管炎;胸降主动脉动脉瘤
Drug药品3,828京万红痔疮膏;布林佐胺滴眼液
Food食物4,870番茄冲菜牛肉丸汤;竹笋炖羊肉
Producer在售药品17,201通药制药青霉素V钾片;青阳醋酸地塞米松片
Symptom疾病症状5,998乳腺组织肥厚;脑实质深部出血
Total总计44,111约4.4万实体量级
2、知识图谱实体关系类型
实体关系类型中文含义关系数量举例
belongs_to属于8,844<妇科,属于,妇产科>
common_drug疾病常用药品14,649<阳强,常用,甲磺酸酚妥拉明分散片>
do_eat疾病宜吃食物22,238<胸椎骨折,宜吃,黑鱼>
drugs_of药品在售药品17,315<青霉素V钾片,在售,通药制药青霉素V钾片>
need_check疾病所需检查39,422<单侧肺气肿,所需检查,支气管造影>
no_eat疾病忌吃食物22,247<唇病,忌吃,杏仁>
recommand_drug疾病推荐药品59,467<混合痔,推荐用药,京万红痔疮膏>
recommand_eat疾病推荐食谱40,221<鞘膜积液,推荐食谱,番茄冲菜牛肉丸汤>
has_symptom疾病症状5,998<早期乳腺癌,疾病症状,乳腺组织肥厚>
acompany_with疾病并发疾病12,029<下肢交通静脉瓣膜关闭不全,并发疾病,血栓闭塞性脉管炎>
Total总计294,149约30万关系量级
3、知识图谱属性类型
属性类型中文含义举例
name疾病名称喘息样支气管炎
desc疾病简介又称哮喘性支气管炎...
cause疾病病因常见的有合胞病毒等...
prevent预防措施注意家族与患儿自身过敏史...
cure_lasttime治疗周期6-12个月
cure_way治疗方式"药物治疗","支持性治疗"
cured_prob治愈概率95%
easy_get疾病易感人群无特定的人群

4、理论上支持问答类型

问句类型中文含义问句举例
disease_symptom疾病症状乳腺癌的症状有哪些?
disease_cause疾病病因为什么有的人会感冒
disease_acompany疾病的并发症失眠有哪些并发症?
disease_not_food疾病需要忌口的食物感冒不能吃什么
disease_do_food疾病建议吃什么食物感冒了能吃什么
food_not_disease什么病最好不要吃某事物什么病不能吃豆腐
disease_drug啥病要吃啥药感冒应该吃什么药
drug_disease药品能治啥病板蓝根颗粒能治啥病?
disease_check疾病需要做什么检查脑膜炎怎么才能查出来?
check_disease 检查能查什么病全血细胞计数能查出啥来?
disease_prevent预防措施怎样才能预防肾虚?
disease_lasttime治疗周期感冒要多久才能好?
disease_cureway治疗方式高血压要怎么治?
disease_cureprob治愈概率白血病能治好吗?
disease_easyget疾病易感人群什么人容易得高血压?
disease_desc疾病描述糖尿病

对话效果展示:
2022-09-08 16-52-39屏幕截图.png

八、目前对话系统存在的问题和解决方法

1.目前的对话系统上还存在部分bug,存在提问无法回答的情况
2.目前还无法支持多轮对话,无法实现和用户的交互式问答
3.对用户提问问题的多样性(相同问题不同的提问方式)这种情况还无法很好兼容
4.基于检索的问答FAQ功能还没有加上去
5.根据用户疾病症状,预测疾病功能还不能实现
6.目前疾病知识图谱的知识结构化还不完全,需要继续做信息抽取

针对以上问题,目前都有相关解决办法,需要后续持续推进开发。

九、多轮对话

1.不同疾病共有交互问题

年龄、性别、症状持续时间