📓
Study
  • README
  • Application
    • Contest
      • 竞赛trick
  • Basic Know
    • 半监督学习
    • 贝叶斯
      • 朴素贝叶斯分类器
    • 对抗训练
    • 概率图模型
      • CRF
      • HMM
      • 概率图模型
    • 关联分析
    • 归纳偏置
      • [什么是 Inductive bias(归纳偏置)?](BasicKnow/归纳偏置/什么是 Inductive bias(归纳偏置)?.md)
    • 聚类
    • 决策树
    • 绿色深度学习
    • 树模型&集成学习
      • 提升树
      • Ada Boost
      • [集成学习]
    • 特征工程
      • 数据分桶
      • 特征工程概述
      • 特征选择
      • LDA
      • PCA
    • 线性模型
      • 感知机
      • 最大熵模型
      • SVM
        • SVM支持向量机
      • 逻辑回归
      • 线性回归
    • 优化算法
      • 拉格朗日对偶性
      • 牛顿法
        • 牛顿法&拟牛顿法
      • 梯度下降法
        • 梯度下降算法
      • 优化算法
    • 预处理
      • [1-1]正则表达式
      • [1-2]文本预处理
      • [1-3]词性
      • [1-4]语法分析
      • [1-6]文本分类
      • [1-7]网络爬取
      • 【备用】正则表达式
      • 7.re模块
      • 词典匹配
      • 分词
      • 子表达式
      • Todo
    • 主题模型
      • LDA
    • Deep Learning
      • 反向传播
      • 梯度消失&梯度爆炸
      • Batch Size
      • 1.DLbasis
      • 小概念
      • MLstrategy
      • CNN
      • RNN及其应用
      • 关于深度学习实践
      • 神经网络概述
      • Batch Normalization
      • Program CNN
      • Program D Lbasis
      • Program DN Nimprove
      • Program Neural Style Transfer
      • Summer DL
    • EM算法
    • GAN
      • Gans In Action Master
    • GNN
      • 搜广推之GNN
      • Representation Learning
        • Anomalydetection
        • Conclusion
        • Others
        • Papernotes
        • Recommadation
    • k近邻法
      • K近邻
    • Language Model
      • 语言模型解码采样策略
      • [1-1][语言模型]从N-gram模型讲起
      • [1-2][语言模型]NNLM(神经网络语言模型)
      • [1-3][语言模型]基于RNN的语言模型
      • [1-4][语言模型]用N-gram来做完形填空
      • [1-5][语言模型]用KenLM来做完形填空
    • Loss Function
      • 常用损失函数
      • Focal Loss
      • softmax+交叉熵
    • Machine Learning
      • [基础]概念
      • 待整合
      • 交叉验证
      • 无监督学习
      • 优缺点
      • ML Yearning
      • SVD
    • Statistics Math
      • 程序员的数学基础课
      • 数学基础
      • 统计&高数
      • 统计题目
      • 线性代数
      • 组合数学
      • Discrete Choice Model
      • Nested Choice Model
  • Course Note
    • 基于TensorFlow的机器学习速成课程
      • [Key ML Terminology](CourseNote/基于TensorFlow的机器学习速成课程/Key ML Terminology.md)
    • 集训营
      • 任务说明
      • 算法实践1.1模型构建
      • 算法实践1.2模型构建之集成模型
      • 算法实践2.1数据预处理
    • 李宏毅机器学习
      • 10DNN训练Tips
        • Chapter 18
      • 16无监督学习
        • Chapter 25
    • 贪心NLP
      • 贪心NLP笔记
    • Cs 224 N 2019
      • [A Simple But Tough To Beat Baseline For Sentence Embeddings](CourseNote/cs224n2019/A Simple but Tough-to-beat Baseline for Sentence Embeddings.md)
      • [Lecture 01 Introduction And Word Vectors](CourseNote/cs224n2019/Lecture 01 Introduction and Word Vectors.md)
      • [Lecture 02 Word Vectors 2 And Word Senses](CourseNote/cs224n2019/Lecture 02 Word Vectors 2 and Word Senses.md)
      • [Lecture 03 Word Window Classification Neural Networks And Matrix Calculus](CourseNote/cs224n2019/Lecture 03 Word Window Classification, Neural Networks, and Matrix Calculus.md)
      • [Lecture 04 Backpropagation And Computation Graphs](CourseNote/cs224n2019/Lecture 04 Backpropagation and Computation Graphs.md)
      • [Lecture 05 Linguistic Structure Dependency Parsing](CourseNote/cs224n2019/Lecture 05 Linguistic Structure Dependency Parsing.md)
      • [Lecture 06 The Probability Of A Sentence Recurrent Neural Networks And Language Models](CourseNote/cs224n2019/Lecture 06 The probability of a sentence Recurrent Neural Networks and Language Models.md)
      • Stanford NLP
    • Deep Learning Book Goodfellow
      • Books
        • Deep Learning Book Chapter Summaries Master
      • 提纲
      • C 5
      • C 6
      • [Part I Applied Math And Machine Learning Basics](CourseNote/Deep-Learning-Book-Goodfellow/Part I - Applied Math and Machine Learning basics.md)
    • Lihang
    • NLP实战高手课
      • 极客时间_NLP实战高手课
    • 工具&资料
    • 机器学习、深度学习面试知识点汇总
    • 七月kaggle课程
    • 算法工程师
    • 贪心科技机器学习必修知识点特训营
    • 唐宇迪机器学习
    • 语言及工具
    • AI技术内参
    • Suggestions
  • Data Related
    • 数据质量
      • 置信学习
    • 自然语言处理中的数据增广_车万翔
      • 自然语言处理中的数据增广
    • Mixup
    • 数据不均衡问题
    • 数据增强的方法
  • Knowledge Graph
    • Information Extraction
      • 联合抽取
        • PRGC
      • Code
        • BERT微调
      • NER
        • 阅读理解做NER
          • MRC
        • FLAT
        • Global Pointer
        • 命名实体识别NER
    • Keyword Extraction
      • 关键词抽取
    • 小米在知识表示学习的探索与实践
    • KG
  • Multi Task
    • EXT 5
      • Ex T 5
  • NLG
    • Dailogue
      • 比赛
        • 对话评估比赛
          • [simpread-DSTC10 开放领域对话评估比赛冠军方法总结](NLG/Dailogue/比赛/对话评估比赛/simpread-DSTC10 开放领域对话评估比赛冠军方法总结.md)
      • 任务型对话
        • DST
          • DST概述
        • NLG
          • NLG概述
        • NLU
          • NLU概述
        • 任务型对话概述
        • simpread-任务型对话系统预训练最新研究进展
      • 问答型对话
        • 检索式问答
          • 基于预训练模型的检索式对话系统
          • 检索式文本问答
        • 业界分享
          • 低资源场景下的知识图谱表示学习和问答_阿里_李杨
          • QQ浏览器搜索智能问答
        • 问答型对话系统概述
      • 闲聊型对话
        • 闲聊型对话系统概述
      • 业界分享
        • 人工智能与心理咨询
        • 腾讯多轮对话机器人
        • 微软小冰
        • 小布助手闲聊生成式算法
        • 美团智能客服实践_江会星
        • 去哪儿智能客服探索和实践
        • 实时语音对话场景下的算法实践_阿里_陈克寒
        • 智能语音交互中的无效query识别_小米_崔世起
        • UNIT智能对话
      • 主动对话
      • EVA
        • EVA分享
        • EVA模型
      • PLATO
      • RASA
    • Machine Translation
      • 业界分享
        • 爱奇艺台词翻译分享
      • Paper
        • Deep Encoder Shallow Decoder
    • RAGRelated
    • Text 2 SQL
      • M SQL
        • [M SQL 2](NLG/Text2SQL/M-SQL/M-SQL (2).md)
      • [Text2SQL Baseline解析](NLG/Text2SQL/Text2SQL Baseline解析.md)
      • Text 2 SQL
    • Text Summarization
      • [文本摘要][paper]CTRLSUM
      • 文本摘要
  • Pre Training
    • 业界分享
      • 超大语言模型与语言理解_黄民烈
        • 超大语言模型与语言理解
      • 大模型的加速算法_腾讯微信
        • 大模型的加速算法
      • 孟子轻量化预训练模型
      • 悟道文汇文图生成模型
      • 悟道文澜图文多模态大模型
      • 语义驱动可视化内容创造_微软
        • 语义驱动可视化内容创造
    • Base
      • Attention
      • Mask
        • NLP中的Mask
      • Position Encoding
        • 位置编码
    • BERT
      • ALBERT
      • Bert
        • Venv
          • Lib
            • Site Packages
              • idna-3.2.dist-info
                • LICENSE
              • Markdown-3.3.4.dist-info
                • LICENSE
              • Tensorflow
                • Include
                  • External
                    • Libjpeg Turbo
                      • LICENSE
                  • Unsupported
                    • Eigen
                      • CXX 11
                        • Src
                          • Tensor
              • Werkzeug
                • Debug
                  • Shared
                    • ICON LICENSE
        • CONTRIBUTING
        • Multilingual
      • Ro BER Ta
      • BERT
      • BERT面试问答
      • BERT源码解析
      • NSP BERT
    • BERT Flow
    • BERT Zip
      • Distilling The Knowledge In A Neural Network
      • TINYBERT
      • 模型压缩
    • CPM
    • CPT
      • 兼顾理解和生成的中文预训练模型CPT
    • ELECTRA
    • EL Mo
    • ERNIE系列语言模型
    • GPT
    • MBART
    • NEZHA
    • NLG Sum
      • [simpread-预训练时代下的文本生成|模型 & 技巧](Pre-training/NLGSum/simpread-预训练时代下的文本生成|模型 & 技巧.md)
    • Prompt
      • 预训练模型的提示学习方法_刘知远
        • 预训练模型的提示学习方法
    • T 5
      • Unified SKG
      • T 5
    • Transformer
    • Uni LM
    • XL Net
    • 预训练语言模型
    • BERT变种
  • Recsys
    • 多任务Multi-task&推荐
    • 推荐介绍
    • 推荐系统之召回与精排
      • 代码
        • Python
          • Recall
            • Deep Match Master
              • Docs
                • Source
                  • Examples
                  • FAQ
                  • Features
                  • History
                  • Model Methods
                  • Quick Start
    • 业界分享
      • 腾讯基于知识图谱长视频推荐
    • 召回
    • Sparrow Rec Sys
    • 深度学习推荐系统实战
    • 推荐模型
    • Deep FM
  • Search
    • 搜索
    • 业界分享
      • 爱奇艺搜索排序算法实践
      • 语义搜索技术和应用
    • 查询关键字理解
    • 搜索排序
    • BM 25
    • KDD21-淘宝搜索中语义向量检索技术
    • query理解
    • TFIDF
  • Self Supervised Learning
    • Contrastive Learning
      • 业界分享
        • 对比学习在微博内容表示的应用_张俊林
      • Paper
      • R Drop
      • Sim CSE
    • 自监督学习
  • Text Classification
    • [多标签分类(Multi-label Classification)](TextClassification/多标签分类(Multi-label Classification)/多标签分类(Multi-label Classification).md)
    • Fast Text
    • Text CNN
    • 文本分类
  • Text Matching
    • 文本匹配和多轮检索
    • CNN SIM
    • Word Embedding
      • Skip Gram
      • Glove
      • Word 2 Vec
    • 文本匹配概述
  • Tool
    • 埋点
    • 向量检索(Faiss等)
    • Bigdata
      • 大数据基础task1_创建虚拟机+熟悉linux
      • 任务链接
      • Mr
      • Task1参考答案
      • Task2参考答案
      • Task3参考答案
      • Task4参考答案
      • Task5参考答案
    • Docker
    • Elasticsearch
    • Keras
    • Numpy
    • Python
      • 可视化
        • Interactivegraphics
        • Matplotlib
        • Tkinter
        • Turtle
      • 数据类型
        • Datatype
      • python爬虫
        • Python Scraping Master
          • phantomjs-2.1.1-windows
        • Regularexp
        • Scrapying
        • Selenium
      • 代码优化
      • 一行代码
      • 用python进行语言检测
      • Debug
      • Exception
      • [Features Tricks](Tool/python/Features & Tricks.md)
      • Fileprocess
      • Format
      • Functional Programming
      • I Python
      • Magic
      • Math
      • Os
      • Others
      • Pandas
      • Python Datastructure
      • Python操作数据库
      • Streamlit
      • Time
    • Pytorch
      • Dive Into DL Py Torch
        • 02 Softmax And Classification
        • 03 Mlp
        • 04 Underfit Overfit
        • 05 Gradient Vanishing Exploding
        • 06 Text Preprocess
        • 07 Language Model
        • 08 Rnn Basics
        • 09 Machine Translation
        • 10 Attention Seq 2 Seq
        • 11 Transformer
        • 12 Cnn
        • 14 Batchnorm Resnet
        • 15 Convexoptim
        • 16 Gradientdescent
        • 17 Optim Advance
    • Spark
      • Pyspark
        • pyspark之填充缺失的时间数据
      • Spark
    • SQL
      • 数据库
      • Hive Sql
      • MySQL实战45讲
    • Tensor Flow
      • TensorFlow入门
  • Common
  • NLP知识体系
Powered by GitBook
On this page
  • 意图识别
  • 难点
  • 槽填充
  • 上下文LU
  • 结构化LU
  • 联合训练
  • 参考资料

Was this helpful?

  1. NLG
  2. Dailogue
  3. 任务型对话
  4. NLU

NLU概述

PreviousNLUNext任务型对话概述

Last updated 3 years ago

Was this helpful?

意图识别

Domain/Intent Classification

传统方法:SVM、MaxEnt 。

这个就是用传统的SVM或MaxEnt,模型方面就是传统的MaxEnt或SVM(几个不同变种、几种不同核函数等),特征主要就是用户的输入Utterance的句法、词法、词性等特征,分类的label集合是事先确定的,这方面paper也不少,不过比较久远了。

DBN-Based ()

这种方法基于Deep belief network,它是一种生成模型,由多个限制玻尔兹曼机(Restricted Boltzmann Machines)层组成,被“限制”为可视层和隐层,层间有连接,但层内的单元间不存在连接。隐层单元被训练去捕捉在可视层表现出来的高阶数据的相关性。

具体到这篇论文,主要思路:无监督训练权重,然后用BP做Fine-tuning。另外,还对比了与SVM、最大熵、boosting的效果。

这是一种基于Deep convex network(一种可扩展的模式分类体系结构)做NLU,具体可以参考Li Deng大牛在2011的Interspeech的paper。

这个工作的主要思路:用n-grams对用户的Utterance做特征选择,然后把简单的分类器做Stacking,Stacking跟Bagging与Boosting一样,也是一种ensemble的方法。Stacking指训练一个模型用于组合其他各个模型,在这里相当于二次分类。首先训练多个不同的模型,然后把训练的各个模型的输出作为输入来训练一个模型以得到最终输出。

这种方法使用了RNN和LSTM。最终结论是,输入完所有词再进行意图分类效果更好。

这个方法是用RNN+CNN做对话的act分类,提出了基于RNN和CNN并融合preceding short texts的模型。短文本如果出现在一个序列中,使用preceding short texts可能提高分类效果,这就是本文的最大的动机和创新点,事实证明也确实达到了SOTA的效果。

本文的两部分:使用RNN/CNN把短文本变成向量表示,基于文本的向量表示和preceding short texts做act分类。

另外,还有rule-based的方法做Domain/Intent Classification,比如CFG、JSGF,感兴趣的可以看看。基于RNN的细分的话,还有RCNN(Lai et al., 2015)和C-LSTM(Zhou et al., 2015)两种方法

难点

  • 输入不规范:错别字、堆砌关键词、非标准自然语言;

  • 多意图:输入的语句信息量太少造成意图不明确,且有歧义。比如输入仙剑奇侠传,那么是想获得游戏下载、电视剧、电影、音乐还是小说下载呢;

  • 意图强度:输入的语句好像即属于A意图,又属于B意图,每个意图的的得分都不高;

  • 时效性:用户的意图是有较强时效性的,用户在不同时间节点的相同的query可能是属于不同意图的,比如query为“战狼”,在当前时间节点可能是想在线观看战狼1或者战狼2,而如果是在战狼3开拍的时间节点搜的话,可能很大概率是想了解战狼3的一些相关新闻了。

槽填充

槽填充一般是序列标注问题,因此在序列标注任务中广泛应用的CRF和RNN以及各种变种很自然的就可以用于槽填充。

意图识别:

先得到隐藏层的特征h,再使用max pooling来获取整句的表示,最后用softmax做意图分类。

槽填充:

输入词向量到卷积层得到特征表示h,再用triangular-CRF打分。具体打分公式如下:

其中,t(Yi-1,Yi)为转移打分,hij为CNN得到的特征,每时刻的特征经过前向网络得到每个标签的概率,然后结合起来作为最终得分。

思路一:采用encoder-decoder,encoder的最后输出+文本向量做意图分类。下面说下a、b、c三图的区别:图a隐层为非对齐attention的模型,decoder隐层为非对齐的方式;图b为隐层为对齐无attention的模型;图c隐层为对齐attention的模型。

思路二:

decoder的隐层输出加权得到最后的意图分类,BiRNN得到特征并与文本向量拼接后作为单层decoder的输入,然后识别槽位。

方法二也基于Attention,是2016年IJCAI的一篇paper,把意图识别和槽填充结合起来做的。输入词向量,使用双向GRU学习特征。基于学习的隐层特征,使用max pooling得到全句的表示,再用softmax进行意图分类;对隐层输入用前向网络得到每个标签的概率,再用CRF进行全局打分得到最优序列标注结果,根据序列标注结果完成槽填充。需要说明的一点是:联合损失函数为槽与意图的极大似然。也是在ATIS数据集做的实验。

Multi-task Learning

这类方法是跨领域的多任务同时学习,主要思想是在数据较多的领域或任务训练模型,然后迁移到数据较少的领域或任务,以便于提升其效果。这类方法底层网络跨领域或任务都是共享的,高层网络因为任务或领域不同而不同。代表性的工作包括:

这个工作主要是把 Segmentation 和 槽填充联合起来做的,对segments进行双向LSTM编码,再用LSTM解码并得到序列标注结果,最后就实现了槽填充。

这篇工作是把 Semantic Frame Parsing 与 意图分类、槽填充 联合起来做。另外说句题外话,这篇文章的作者们都是任务型对话领域的一流学者。需要注意的是,意图分类和槽填充在一个序列完成,跟下一种方法不一样。

这篇工作是基于Attention的RNN,把意图识别与槽填充结合起来做,其实在上面RNN(encoder-decoder)的方法中已经介绍过这个方法。为了跟上一种方法对比,需要注意的是,意图分类和槽填充不在同一个序列完成,decoder的隐层输出加权得到最后的意图分类,BiRNN得到特征并与文本向量拼接后作为单层decoder的输入,然后识别槽位。

这个方法是迁移学习中的领域适配。领域适配解决这类任务的主要思路是:利用源领域与目标领域分布之间的KL散度对目标领域模型进行Regularize。

Instance based transfer (Tur 2006) 这个方法是迁移学习中的基于Instance的转移。在领域之间自动映射相似的类别,并跨领域传递相似的实例。方法比较久远,不再赘述。

这个方法也是基于ATIS数据集做的。输入为词向量,每个词性看作权重向量 ,每个词在其路径的运算为词向量与词性权重向量的点积运算。基于根节点的输出向量做意图分类;采用基于Viterbi进行全局优化,采用基于tri-gram语言模型极大化标注序列进行槽填充。

上下文LU

这是一类结合上下文来进行SLU的方法,这类方法的主要好处是:在多轮对话中,解决歧义问题。

基于Seq2Seq模型对上下文建模,一次输入一个词,每句结束时输出标签。这种模型还具有对话者角色相关的LSTM层,并使用角色状态控制门来决定角色是不是active,而且角色状态随时间而线性传播,agent和client的角色也被加以区分。这种方法对上下文比较敏感,能解决多轮对话的歧义问题。

这种方法的主要idea是在作slot tagging时加入上下文知识, 然后以一种潜在的方式进行对话状态的追踪。

这是一种基于端到端的记忆网络携带Knowledge来做多轮对话中的上下文理解,将RNN和Memory Networks结合起来应用于SLU模块。具体分为4步:

1.记忆表示:为了存储前面对话轮中的知识,通过RNN将前面对话轮中的每个话语嵌入到连续的空间中,将每个话语转换成一个记忆向量;

2.知识注意力分布:在嵌入空间中,通过取内积然后softmax来计算当前输入和每个记忆向量间的匹配,该结果可以被看作是为了理解当前输入而建模知识传递的注意力分布;

3.知识编码表示:为了对来自历史的知识进行编码,历史向量是对由注意力分布加权的记忆嵌入的总和;

4.序列标注:提供携带的知识来提高序列标注的效果。

使用RNN探索新的建模对话上下文的方法,提出了序列对话编码网络,它允许按时间顺序对来自对话历史的上下文编码。之前轮和当前轮的encodings被输入一个共享所有存储器权重的前馈网络。并将序列对话编码网络的性能与仅使用先前的上下文的模型、在memory网络中编码失去对话顺序的上下文的模型进行比较,在多域对话数据集上的实验表明,序列对话编码网络能减少歧义。

结构化LU

本文提出了K-SAN:用先验知识当作引导,句子结构知识当作menory来存储。这是由先验知识引导的结构化注意力网络,其实就是RNN+attention+先验知识,但是跟RNN不同的是:该模型充分利用自然语言丰富的、结构化的信息而不再是线性扁平链。

该模型的两大优势是:可从少量数据中获取重要的子结构,增强模型的泛化能力;针对给定句子,可自动找出对其语义标签至关重要的显著子结构,从而缓解测试集中的unseen data,进一步提升NLU的效果。并在ATIS数据上表明 K-SAN 可以使用注意力机制有效地从子结构中提取出显著的知识,达到SOTA的效果。

联合训练

参考资料

DCN-Based ()

另外,基于DCN的方法还被扩展到kernel-DCN().

RNN-Based()

RNN+CNN based()

CRF ()()

CRF+CNN () 这篇工作在ATIS数据集把意图识别跟槽填充联合起来做的,主要方法是CNN+ triangular CRF,意图识别的准确率为94.09%、槽填充的F1为95.42%,可以看出比起前面基于CRF的模型效果好不少。 triangular-CRF与CRF的主要区别是输入前先用前向网络得到每个标签的类别。下面分别介绍下意图识别和槽填充如何实现。

RNN(n-grams)()() 这类基于RNN的模型使用了n-grams,也是在ATIS数据集做的实验

RNN(encoder-decoder) () () 这类基于RNN的模型使用了encoder-decoder,第二篇还加入了Attention,Attention是根据ht 和st 用feed- forward 网络来计算的。也是在ATIS数据集做的实验。

另外,基于Attention的RNN还有interspeech 2016的一篇工作(),本文也是把意图识别和槽填充结合起来做,主要提供两种思路和模型,下面具体说下。

LSTM() GRU() 这部分的两类方法主要是RNN的两大最有名的变种LSTM和GRU。也是在ATIS数据集做的实验。

Domain Adaptation Adaptation Adaptation ()

Parameter transfer( ) 这个方法是迁移学习中的参数转移。参数转移解决这类任务的主要思路是:使用词嵌入向量和相似标签分类器之间的参数共享,因此相似的分类器具有相似的超平面。另外需要指出的是,这个方法还使用了Zero-Shot Learning(举例说明的话:假如训练数据没有斑马,但是要识别斑马,那么可以用马的外形+老虎的条纹+熊猫的黑白色来组合训练)。

RecNN+Viterbi ()

这篇论文的所有作者都是任务型对话领域的知名学者。

对话

()

img

(一些论文模型)

Tur et al., 2012
Deng et al., 2012
Ravuri et al., 2015
Lee et al,2016
Wang and Acero,Interspeech 2006
Raymond and Riccardi,Interspeech 2007
Puyang Xu and Ruhi Sarikaya 2013
Yao et al. 2013
Mesnil et al, 2015
Kurata et al., EMNLP 2016
Simonnet et al., NIPS 2015
Liu and Lane 2016
Yao et al. 2014
Zhang and Wang 2016
Zhai et al., AAAI 2017
Hakkani-Tur et al., Interspeech 2016
Liu and Lane, Interspeech 2016
Jaech et al., Interspeech 2016
Yazdani and Henderson 2015
Guo et al., 2014
Hori et al, 2015
Chen et al., 2016
Bapna et.al., SIGDIAL 2017
Chen et al., 2016
Intent Detection and Slot Filling
总结|对话系统中的口语理解技术(SLU)(一)
总结|对话系统中的口语理解技术(SLU)(二)
总结|对话系统中的口语理解技术(SLU)(三)
一步到位解决SLU/NLU--意图识别和槽位填充联合训练模型理论和代码复现
Sarikaya et al., 2011
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img