RNN基本应用

RNN基本应用,第1张

与人类理解文字的道理差不多,看书都是一个字一个字,一句话一句话去理解的。语言本身作为一种符号并没有意义,只不过是人类对其赋予了意义。而这种意义体现在每个字(语义)以及字的顺序(语义关系)上。RNN相当于在通用神经网络上加入了人的 先验知识 ,将文本信息按照序列输入的方式处理。

RNN对序列的基本思路是: 在序列任务中前面的数据会对当前的计算产生影响。 所以前一个cell的激活值会输入到后一个cell中。这样就其实就是对序列数据的特点做了一定程度的设计。

但是随着序列长度变化,激活值不断堆叠后就会损失一些信息,导致序列前面的信息对后面的影响变弱。要知道很多时候语言的头部信息对后面的信息可能有很大的影响。所以目前应用较广泛的是LSTM模型,在RNN基础结构上增加了一条长记忆线C,每个cell的X与A会使得C对信息进行补充或者丢失,而具有序列重要信息的C会对A的激活值具有影响。就像是模型附带了一个小本本,遇到新鲜事儿就记进去,然后在后续判断将小本本的信息加入,产出更有可信度的激活值。

在RNN应用过程中,逐渐发现有时候当前局部的计算不仅仅与前面的信息相关,也与后面的信息相关(特别是翻译、语音识别等)。所以提出了 双向RNN结构 ,将前面的信息与后面的信息综合起来做判断。

人在进行信息判断时,有时候不仅仅是综合整个序列的信息,有时候更会抓住重点去分析以便快速得到更好的答案,在序列模型中每个输入本身确实有重点,比如吃与食物相关,在分析吃的字词时只需将注意力分配到与食物相关得词上,其他的并不重要,因此提出了 注意力模型

如图所示,经过一个双向RNN处理过的输出值y,不同的y分配给不同的权重最终加和起来作为输入,那么该输入附带的信息就会有偏向,从而模型会有更好的效果。

正如前文所说,所有的模型都不完美,在拟合过程中就会出现信息丢失、梯度消失等现象,长短时记忆、双向计算、注意力机制都是典型的将人类知识加入模型中,使得模型负担减少,效果更好。

将语料库通过RNN模型训练后,模型就学会了人话的规律,从而可以在给定条件下判断下一个字是何字的概率,从而在多个场景有所应用:

同样的方式可以应用在音乐上,如果将音乐也当做一种序列去训练,最终我们也可以获得某种音乐风格的曲子,从而可以实现在文字上以及在音乐上的另类创作。

将RNN模型对接一个softmax输出,就可以对句子进行分类,通常用来判断情感趋向。

除了可以通过分析句子得到情感判断外,分析词语也可以。目前词的使用都是将符号向量映射( Word2Vec 算法)到语义空间上,所以词向量本身就具有语义含义,通过训练可以做情感分类。

翻译目前都是用如图所示结构,包含编码器与解码器。相当于将语句A通过RNN编码后灌入另一个模型去解码为另一个语句B,类似于卷积对的编码处理,序列模型在编码解码过程中也形成了一个表征语义的矩阵,该矩阵的语义表达与语言工具无关,作为两个语言之间的桥梁实现翻译功能。借鉴人类翻译过程中对前后文重点的读取,翻译模型会用到注意力机制以达到更好的模型效果

实际上前一阵子出现过AI换脸这种生成式的任务在社区火爆,特别是色情网站。其实这种生成任务很多时候也会用到这种编码-解码样式的结构

目前人机对话包含应用场景:问答型、聊天型、任务型。

问答型 在很多客服领域应用广泛,解决了头部高频问题。这类任务更多属于机器学习,对用户的疑问通过关键字检测分类至我们预先设好的问题分类中。

聊天型机器人 最典型的就是微软小冰,要保持这种开放性对话需要系统知识,不断产生新的话题。这类Chatbot的目标是实现《her》中的情感陪伴,但是就目前发展来讲,仍然不够。

任务型机器人 目前看起来最具有商业潜力,市面上的智能音箱基本属于这类范畴。目标是识别用户意图后在封闭的话题区间内进行对话直至满足用户需求。

在任务驱动型的人机对话中,首先就是获取人的意图。意图的识别属于自然语言理解,属于一种分类任务。很多智能音箱平台会推出一些技能,这些技能实际上就对应意图所对应的领域。通过意图识别后将业务处理逻辑落在这些技能上,技能与技能之间其实已经没有关联,这样的方式减轻了训练难度,使得机器人在特定任务上有更好的表现。

在计算机处理人类请求后,不仅要判断用户的意图分类,还要对请求语进行序列标注(实体识别、实体关系抽取等),分析出该意图下哪些必要信息已经获得,哪些信息没有获得,这些就是填槽的过程。

用户的请求往往是含糊不清的,多轮对话就是为了获取在该意图下所有的必要信息。整个过程需要对话管理的支持,对话管理实际一个决策过程(策略树),系统在对话过程中不断根据当前状态决定下一步应该采取的最优动作(如:提供结果,询问特定限制条件,澄清或确认需求…)从而最有效的辅助用户完成信息或服务获取的任务。对话管理的构建更需要人工设计,但似乎通过强化学习也能得到最佳路径。

DM对话管理过程中可能需要和用户交互,就会用到自然语言生成,将系统语义转化为人类语言。这是个有限集,用模板是一种选择,同样也可以用语言模型、类似翻译的编码解码模型。

gensim (/ˈdʒɛnsɪm/) 的读音是"jen-sim",其中"g"发"j"音。

gensim的名字来自于"Generate Similar",意为生成相似的文本数据。这个名字和gensim的主要功能相对应,即生成文本向量,计算文本相似性,构建主题模型和进行话题分类等。gensim这个名字也与该库用于自然语言处理和文本分析任务的主要功能密切相关。

gensim是一个用于处理自然语言文本的Python库。它提供的工具和算法可用于从文本集合中提取语言特征并进行相似性比较。gensim中的工具包括:

1、文章、单词和短语的向量表示。

2、从语料库中训练文本向量化模型。

3、计算文档和单词的相似性。

4、使用主题模型进行话题建模。

5、使用word2vec进行词向量表示。

6、使用doc2vec进行段落和文档向量化。

gensim的优势在于它的高效性和可扩展性。它可以用于处理大规模的文本集合,并支持分布式计算。gensim还提供了易于使用的文本预处理和清理工具,可以简化自然语言处理的任务。

gensim的应用

gensim库是一个常用的自然语言处理工具,应用广泛,以下是gensim的应用场景:

1、文本向量化和相似性计算:gensim可以使用多种方法从文本数据集中构建词向量,将文本表示为向量,并计算不同文本之间的相似性得分。

2、主题建模和文档分类:gensim提供了主题模型算法,可以将文本数据聚类成主题,进而进行文档分类、搜索推荐等任务。

3、单词嵌入和词义推断:gensim的word2vec和doc2vec算法可以用于获取单词和短语的向量表示,这些向量可以捕捉到单词和短语的语义信息,进而可以进行词义推断和相关性计算。

gensim的应用场景不仅限于上述几个方面,还可以用于文本摘要、文本聚类、情感分析、机器翻译、自然语言生成等任务。

http://wwwdocincom/p-2177206264html

任务机器人

知识图谱机器人

FAQ机器人

闲聊机器人

阅读理解机器人

query -> 纠错->标准化->文本特征提取->query改写[同义词] ->BM25 算法 -> 计算语句和候选句的相似度s(q,q') , 并排序

相似度计算:冷启动-深度学习匹配-知识图谱-拒识

https://blogcsdnnet/qq_42491242/article/details/105286787

https://zhuanlanzhihucom/p/84809907

字面匹配 文本相似度(jaccard, cosine)+ xgboost

词向量 word2vec,glove =Global Vectors for Word Representation

句向量 WMD[无监督] ,SIF

结论 虽然句子中无加权的平均词嵌入是简单的基准做法,但是Smooth Inverse Frequency是更强有力的选择

https://zhuanlanzhihucom/p/37104535

排序阶段也可以利用排序训练模型,得到知识库内的相似问,构造句对训练数据,训练有监督的模型

判断(query, question)的分数,选择分数最高的问题对应的知识点作为机器人回复

通过搜索引擎里 Query 和 Title 的海量的点击曝光日志,用 DNN 把 Query 和 Title 表达为低纬语义向量,并通过 cosine 距离来计算两个语义向量的距离,最终训练出语义相似度模型。该模型既可以用来预测两个句子的语义相似度,又可以获得某句子的低纬语义向量表达。

https://wwwjianshucom/p/8f19d915b3f8

联合学习

-文本分类:同时进行语句匹配和分类

-文本生成:匹配和seq2seq训练

多语料迁移:

-fine-tune

-adversarial loss

预训练模型

-ELMO , BERT

对话管理

query->nlu-DST-DPL -NLG ->response

NLU : 意图识别(规则或分类)槽位提取(NER)

DST-会话状态管理(DQN)

DPL- 会话策略学习,选择下一步

NLG- 根据action 返回回复文本

预判 客服机器人多轮对话的意图预判功能通常依赖于访客的接入渠道、着陆页、访问轨迹等数据,机器人可以通过这些数据来预测客户想要咨询的问题

https://blogcsdnnet/stay_foolish12/article/details/90265394

https://wwwcnblogscom/qcloud1001/p/9181900html

任务型机器人指特定条件下提供信息或服务的机器人。通常情况下是为了满足带有明确目的的用户,例如查流量,查话费,订餐,订票,咨询等任务型场景

理解了用户意图之后,通过引导用户完善任务要求,完成任务。

处理流程:场景选择,实体抽取,关系预测

问答式

引导式

根据知识逐步递进,一步步进行约束定义

从文章中抽取答案,阅读理解建模。

seq2seq, 上下文建模

ASR, NLP, TTS,MRCP

智能电话管理

人群管理,话术管理,电话任务管理,知识库管理,算法模型管理

外呼统计

任务监控,通话监控,意向度筛选,通话详情,统计分析

功能组件:语义解析,语义匹配,会话意图识别,答案生成,情感分析

深度迁移学习,知识图谱引擎

问答标注平台,模型训练平台,分布式爬虫,hadoop 集群

问答管理,相似问题,智能学习

回答,引导转人工

1- 单轮: 深度语义匹配 迁移学习 知识图谱

2- 多轮 对话管理-槽位提取-端到端学习-强化学习

3- 阅读理解机器人-开放域闲聊机器人

许多数据分析应用都会涉及到从短文本中提取出潜在的主题,比如微博、短信、日志文件或者评论数据。一方面,提取出潜在的主题有助于下一步的分析,比如情感评分或者文本分类模型。另一方面,短文本数据存在一定的特殊性,我们无法直接用传统的主题模型算法来处理它。短文本数据的主要难点在于:

主题提取模型通常包含多个流程,比如文本预处理、文本向量化、主题挖掘和主题表示过程。每个流程中都有多种处理方法,不同的组合方法将会产生不同的建模结果。

本文将主要从实际操作的角度来介绍不同的短文本主题建模算法的优缺点,更多理论上的探讨可以参考以下文章。

下文中我将自己创建一个数据集,并利用 Python scikit-learn 来拟合相应的主题模型。

本文主要介绍三个主题模型, LDA(Latent Dirichlet Allocation), NMF(Non-Negative Matrix Factorization)和SVD(Singular Value Decomposition)。本文主要采用 scikit-learn 来实现这三个模型。

除了这三个模型外,还有其他一些模型也可以用来发现文档的结构。其中最重要的一个模型就是 KMeans 聚类模型,本文将对比 KMeans 聚类模型和其他主题模型的拟合效果。

首先,我们需要构建文本数据集。本文将以四个自己构建的文本数据集为例来构建主题模型:

首先,我们需要考虑下如何评估一个主题模型建模效果的好坏程度。多数情况下,每个主题中的关键词有以下两个特征:

一些研究表明:关键词还需具备以下两个特征:

接下来,我们将介绍如何实现上述的四个模型——NMF, SVD, LDA 和 KMEANS。对于每个主题模型,我们将分别采用两种文本向量化的方法—— TF(Term Frequence) 和 TFIDF(Term-frequence-inverse-document-frequence)。通常情况下,如果你的数据集中有许多词语在多篇文档中都频繁出现,那么你应该选择采用 TFIDF 的向量化方法。此时这些频繁出现的词语将被视为噪声数据,这些数据会影响模型的拟合效果。然而对于短文本数据而言,TF和TFIDF方法并没有显著的区别,因为短文本数据集中很难碰到上述情况。如何将文本数据向量化是个非常热门的研究领域,比如 基于word embedding模型的方法——word2vec和doc2vec。

主题模型将选择主题词语分布中频率最高的词语作为该主题的关键词,但是对于 SVD 和 KMEANS 算法来说,模型得到的主题词语矩阵中既包含正向值也包含负向值,我们很难直接从中准确地提取出主题关键词。为了解决这个问题,我选择从中挑出绝对数值最大的几个词语作为关键词,并且根据正负值的情况加上相应的标签,即对负向词语加上 "^" 的前缀,比如"^bergers"。

sklearn 中的 truncated SVD implementation 类似于主成分分析算法,它们都试图利用正交分解的方法选择出具有最大方差的变量信息。

对于 clearcut-topic 数据集来说,我们分别利用 TF 和 TFIDF方法来向量化文本数据,并构建 SVD 模型,模型的拟合结果如下所示。正如我们之前所提到的,SVD 模型所提取的关键词中包含正负向词语。为了简单起见, 我们可以理解为该主题包含正向词语,不包含负向的词语。

比如,对于 "Topic 1: bergers | ^hate | love | ^sandwiches" 来说,该文本的主题中包含 "love bergers" 但是不包含 "hate sandwiches"。

由于模型的随机效应,所以每次运行模型得到的结果都会存在细微的差异。在 SVD 的拟合结果中我们发现发现 Topic 3: bergers | ^hate | ^love | sandwiches 成功地提取了 “food” 的主题。

当我们在解释 SVD 模拟的拟合结果时,我们需要对比多个主题的信息。比如上述的模型拟合结果可以解释成:数据集中文档的主要差异是文档中包含 “love bergers” 但不包含 “hate sandwiches”。

接下来我们将利用 SVD 来拟合 unbalanced topic 数据集,检验该模型处理非平衡数据集的效果。

从下述结果中可以看出,SVD无法处理噪声数据,即无法从中提取出主题信息。

LDA 是最常用的主题提取模型之一,因为该模型能够处理多种类型的文本数据,而且模拟的拟合效果非常易于解释。

直观上来看,LDA 根据不同文档中词语的共现频率来提取文本中潜在的主题信息。另一方面,具有相同主题结构的文本之间往往非常相似,因此我们可以根据潜在的主题空间来推断词语之间的相似性和文档之间的相似性。

LDA 算法中主要有两类参数:

接下来我们将研究这些参数是如何影响 LDA 模型的计算过程,人们更多的是根据经验来选择最佳参数。

与 SVD 模型不同的是,LDA 模型所提取的主题非常好解释。以 clearcut-topics 数据集为例,LDA 模型中每个主题都有明确的关键词,它和SVD主要有以下两个区别:

此外,对 LDA 模型来说,采用不同的文本向量化方法也会得到不同的结果。

在 sklearn 中,参数 topic_word_prior 和 doc_topic_prior 分别用来控制 LDA 模型的两类参数。

其中 topic_word_prior 的默认值是(1/n_topics),这意味着主题中的每个词语服从均匀分布。

NMF 可以视为 LDA模型的特例,从理论上来说,这两个模型之间的联系非常复杂。但是在实际应用中,NMF 经常被视为参数固定且可以获得稀疏解的 LDA 模型。虽然 NMF 模型的灵活性不如 LDA 模型,但是该模型可以很好地处理短文本数据集。

另一方面,NMF 最大的缺点是拟合结果的不一致——当我们设置过大的主题个数时,NMF 拟合的结果非常糟糕。相比之下,LDA模型的拟合结果更为稳健。

首先我们来看下 NMF 模型不一致的拟合结果。对于 clearcut topics 数据集来说,当我们设置提取5个主题时,其结果和真实结果非常相似:

类似于 KMeans 模型的聚类方法能够根据文档的向量形式对其进行分组。然而这个模型无法看成是主题模型,因为我们很难解释聚类结果中的关键词信息。

但是如果结合 TF或TFIDF方法,我们可以将 KMeans 模型的聚类中心视为一堆词语的概率组合:

最后,我将简单比较下不同的主题提取模型。大多数情况下,我们倾向于根据文档的主题分布情况对其进行分组,并根据关键词的分布情况来提取主题的信息。

大多数研究者都认为词语的语义信息是由其上下文信息所决定的,比如 “love” 和 “hate”可以看成是语义相似的词语,因为这两个词都可以用在 “I _ apples” 的语境中。事实上,词向量最重要的一个研究就是如何构建词语、短语或者文档的向量形式,使得新的向量空间中仍然保留着语义信息。

找寻语义相同的词语不同于计算词语的共现频率。从下述的结果中可以看出,大多数主题提取模型只涉及到词语的共现频率,并没有考虑词语的语义信息,只有 SVD 模型简单涉及到语义信息。

需要注意的是,本文所采用的数据集是根据一定的规则随机生成的,所以下述结果更多的是用于说明不同模型之间的区别:

原文链接: http://nbviewerjupyterorg/github/dolaameng/tutorials/blob/master/topic-finding-for-short-texts/topics_for_short_textsipynb

译者:Fibears

欢迎分享,转载请注明来源:浪漫分享网

原文地址:https://hunlipic.com/qinggan/3973199.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-08-19
下一篇2023-08-19

发表评论

登录后才能评论

评论列表(0条)

    保存