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.