Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >超精准!AI 结合邮件内容与附件的意图理解与分类!⛵

超精准!AI 结合邮件内容与附件的意图理解与分类!⛵

原创
作者头像
ShowMeAI
发布于 2022-11-18 08:59:16
发布于 2022-11-18 08:59:16
1.5K00
代码可运行
举报
文章被收录于专栏:ShowMeAI研究中心ShowMeAI研究中心
运行总次数:0
代码可运行

借助AI进行邮件正文与附件内容的识别,可以极大提高工作效率。本文讲解如何设计一个AI系统,完成邮件内容意图检测:架构初揽、邮件正文&附件的理解与处理、搭建多数据源混合网络、训练&评估。


💡 作者:韩信子@ShowMeAI 📘 深度学习实战系列:https://www.showmeai.tech/tutorials/42 📘 TensorFlow 实战系列:https://www.showmeai.tech/tutorials/43 📘 本文地址:https://www.showmeai.tech/article-detail/332 📢 声明:版权所有,转载请联系平台与作者并注明出处 📢 收藏ShowMeAI查看更多精彩内容

对于很多企业而言,电子邮件仍然是主要沟通渠道之一,很多正式的内容也要基于邮件传达,供应商、合作伙伴和公共管理部门也每天会有大量的电子邮件。邮件的信息提取和处理可能是一项耗时且重复的任务,对拥有大量客户的企业而言尤其是这样。

💡 场景 & 背景

有一些场景下,如果我们能借助于AI自动做一些内容和附件等识别,可以极大提高效率,例如以下这些场景:

  • 保险公司的客户索赔管理。
  • 电信和公用事业企业客户投诉处理。
  • 银行处理各种与抵押贷款相关的请求。
  • 旅游行业公司的预订相关电子邮件。

如果我们希望尽量智能与自动化地进行电子邮件处理,我们需要完成以下任务:

  • 电子邮件分流。我们希望智能理解邮件,并将其转到相应的专门业务部门进行处理。在AI的视角我们可以通过电子邮件的意图分类来尝试解决这个问题。
  • 信息提取。根据确定的意图,提取一些信息给到下游流程,例如在CRM系统中记录客户案例进行跟踪。

在本篇文章中,ShowMeAI 将专注于意图检测部分,我们将一起看一看如何设计一个AI系统来解决这个任务。

💦 场景 1

假设一家保险公司客户,想申请理赔与报销。 这个场景下他会填写保险报销表,并将其连同药物收据和银行 ID 文件附在电子邮件中。可能的一个电子邮件可能长这样:

💦 场景 2

假设一家银行的客户,搬家并对之前的某项服务费有疑问。 如果选择发送电子邮件来进行申请和处理,邮件可能长这样:

💡 实现方案

本文会涉及到NLP相关知识,有兴趣更系统全面了NLP知识的宝宝,建议阅读ShowMeAI 整理的自然语言处理相关教程和文章

📘深度学习教程:吴恩达专项课程 · 全套笔记解读📘深度学习教程 | 自然语言处理与词嵌入📘NLP教程 | 斯坦福CS224n · 课程带学与全套笔记解读📘NLP教程(1) - 词向量、SVD分解与Word2Vec📘NLP教程(2) - GloVe及词向量的训练与评估

💦 架构初览

我们前面提到了,在意图识别场景中,我们经常会视作『多分类问题』来处理,但在我们当前场景下,有可能邮件覆盖多个意图目的,或者本身意图之间有重叠,因此我们先将其视为多标签分类问题。

然而,在许多现实生活场景中,多标签分类系统可能会遇到一些问题:

  • 电子邮件在大多数情况下是关于一个主要意图,有时它们具有次要意图,在极少数情况下还有第三个意图。
  • 很难找到涵盖所有多标签组合的标签数据。

我们可以试着构建一个融合方案来解决,可以预测主要意图并检测剩余的次要意图和第三意图,我们可以设计多输出神经网络网络来实现这一点,如下图所示。

我们涉及到2类输入:电子邮件正文 和 附件,在深度学习场景下,我们都需要对它们做向量化标准。如下图的架构是一个可行的尝试方案:我们用transformer类的模型对正文进行编码和向量化标注,而对于附件,可以用相对简单的NLP编码器,比如TF-IDF。

💦 实现细节

① 电子邮件正文:AI理解&处理

整个方案中最重要的输入是正文数据,我们在深度学习中,需要把非结构化的数据表征为向量化形式,方便模型进行信息融合和建模,在自然语言处理NLP领域,我们也有一些典型的向量化嵌入技术可以进行对文本处理。

最『简单』的处理方法之一是使用 📘TF-iDF + 📘PCA。

对于文本(词与句)嵌入更现代一些的 NLP 方法,例如 Word2Vec 和 📘Doc2Vec ,它们分别使用浅层神经网络来学习单词和文本嵌入。大家可以使用 gensim 工具库或者 fasttext 工具库完成文本嵌入,也有很多预训练的词嵌入和文本嵌入的模型可以使用。

关于 TF-IDF 和 DocVec 的详细知识,可以查看ShowMeAI 的文章 📘基于NLP文档嵌入技术的基础文本搜索引擎构建。

现在最先进的技术是基于 transformer 的预训练语言模型(例如 📘BERT)来构建『上下文感知』文本嵌入。我们上面的方案中也是使用最先进的深度学习方法——直接使用 📘HuggingFace的 📘预训练模型 和 📘API 来构建正文文本嵌入。

transformer 系列的模型有很多隐层,我们可以有很多方式获取文本的向量化表征,比如对最后的隐层做『平均池化』获得文本嵌入,我们也可以用倒数第二层或倒数第三层(它们在理论上较少依赖于训练语言模型的文本语料库)。

对文本做嵌入表示的示例代码如下:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 大家可以先命令行执行下列代码安装sentence-transformers
# pip install -U sentence-transformers

from sentence_transformers import SentenceTransformer
# 需要编码的文本内容列表
sentences = ["This is example sentence 1", "This is example sentence 2"]

# 编码,文本向量化嵌入表征
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
embeddings = model.encode(sentences)
print(embeddings)

② 电子邮件附件:AI理解&处理

我们在这个解决方案中,单独把邮件附件拿出来做处理了。在有些处理方式中,会把附件的内容和正文直接拼接,用上面介绍的方式进行编码,但这样处理不够精细,可能有如下问题而导致最后模型效果不佳:

  • 附件文本可能非常大,包含许多多余的内容,这些内容可能会淹没电子邮件正文中更重要的微妙细节。
  • 对于意图检测而言,重要的是文档的性质或类型,而不是详细的内容。

基于上述考虑,我们单独训练附件分类器来生成附件的密集向量表示。可能我们的附件包含不规则的 PDF 或者图片,我们可能要考虑用 OCR 引擎(例如 Tesseract)进行识别和提取部分内容,

假设我们的附件数量为N,DC 是经过训练的附件分类器。DC对每个附件预测处理输出一个向量(文档类型分布概率向量)。 由于最终的附件向量表示需要具有固定长度(但是N是不确定的),我们在附件维度上使用最大池化得到统一长度的表征。

以下是为给定电子邮件生成附件向量化表征的代码示例:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# DC是文档分类器
distributions = []
for attachment in attachments:
  current_distribution = DC(attachent)
  distributions.append(current_distribution)
np_distributions = np.array(distributions) #维度为(X,N)的附件向量组
attachments_feat_vec = np.max(np_distributions, axis=0) #最大池化

③ 搭建多数据源混合网络

下面部分使用到了TensorFlow工具库,ShowMeAI 制作了快捷即查即用的工具速查表手册,大家可以在下述位置获取:TensorFlow速查手册

在上述核心输入处理和表征后,我们就可以使用 Tensorflow 构建一个多分支神经网络了。参考代码如下:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
def build_hybrid_mo_model(bert_input_size, att_features_size, nb_classes):
    emb_input = tf.keras.Input(shape=(bert_input_size,), name="text_embeddings_input")
    att_classif_input = tf.keras.Input(shape=(att_features_size,), name="attachments_repr_input")


    DenseEmb1 = tf.keras.layers.Dense(units=256, activation='relu')(emb_input)
    compressed_embs = tf.keras.layers.Dense(units=32, activation='relu', name="compression_layer")(DenseEmb1)
    combined_features = tf.keras.layers.concatenate([compressed_embs,att_classif_input], axis=1)


    Dense1= tf.keras.layers.Dense(units=128)(combined_features)
    Dense2= tf.keras.layers.Dense(units=128)(Dense1)


    out1 = tf.keras.layers.Dense(units=nb_classes, name="intention_category_output")(Dense2)
    out2 = tf.keras.layers.Dense(units=1, name="information_request_output")(Dense2)


    model = tf.keras.Model(inputs=[emb_input,att_classif_input], outputs=[out1, out2])
    losses = {
        "intention_category_output" : tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
        "information_request_output" : tf.keras.losses.BinaryCrossentropy(from_logits=True)}


    model.compile(optimizer="adam",loss= losses,  metrics=["accuracy"])


    print (model.summary())
    
    return model

构建完模型之后,可以通过tf.keras.utils.plot_model打印出模型架构,如下图所示:

上图的模型架构,和我们在『架构初览』板块的设计完全一致它包含更多的细节信息:

  • 电子邮件正文文本嵌入,维度为768维
  • 附件文件包含8种类型,向量化表征为8维

模型的输出部分包含:

  • 7个主要意图
  • 1个次要意图

④ 训练&评估

作为测试,作者在银行业务相关电子邮件的专有数据集上训练了模型,具体情况如下:

  • 数据集由 1100 封电子邮件组成,包含 7 个主要意图,但分布不均。
  • 构建的神经网络包含 22.7w 个参数( 具体细节如上图,大家也可以通过model.summary()输出模型信息)。
  • 以batch size大小为32训练了 50 个 epoch
  • 实际没有使用到GPU,在16核的CPU上做的训练(但大家使用GPU一定有更快的速度)
  • 主要意图分类任务上达到了 87% 的加权 F1 分数平均值。如果不使用附件,加权 F1 分数平均值降低10%。(可见2部分信息都非常重要)

💡 总结

我们通过对电子邮件自动意图识别和归类场景进行分析和处理,构建了有效的混合网络高效地完成了这个任务。这里面非常值得思考的点,是不同类型的数据输入与预处理,合适的技术选型(并非越复杂越好),充分又恰当的输入信息融合方式。

大家在类似的场景问题下,还可以尝试不同的正文预处理和附件分类模型,观察效果变化。其余的一些改进点包括,对于预估不那么肯定(概率偏低)的邮件样本,推送人工审核分类,会有更好的效果。

参考资料

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
AI识万物:从0搭建和部署手语识别系统 ⛵
据北京听力协会预估数据,我国听障人群数量已过千万。而在全球范围内有4.66亿人患有残疾性听力损失,约占全世界人口的5%。聋哑人士很特殊,他们需要使用手语进行交流,其他与常人无异,我国存在特殊教育水平在各城市中发展力度具有较大差异,国家通用手语推广程度浅,但不懂手语,与听力障碍者交流会非常困难。
ShowMeAI
2022/08/09
1.1K0
AI识万物:从0搭建和部署手语识别系统 ⛵
爆肝万字,终于搞定这篇⛵神经网络搭建全全全流程!学不会你来找我~
深度学习是机器学习的一类算法,它应用各种结构的神经网络解决问题(深度学习中的『深度』指的是我们会通过深层次的神经网络构建强大的学习器),模仿人类获得某些类型知识的方式,与传统机器学习模型相比,神经网络有更灵活的结构设计,更强的学习能力,能支撑更大量级的数据学习,因此广泛引用于各种业务中。
ShowMeAI
2022/08/09
1.5K0
爆肝万字,终于搞定这篇⛵神经网络搭建全全全流程!学不会你来找我~
​大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构 @推荐与计算广告系列
双塔模型是推荐、搜索、广告等多个领域的算法实现中最常用和经典的结构,实际各公司应用时,双塔结构中的每个塔会做结构升级,用CTR预估中的新网络结构替代全连接DNN,本期看到的是腾讯浏览器团队的推荐场景下,巧妙并联CTR模型应用于双塔的方案。
ShowMeAI
2021/11/24
3.6K1
​大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构 @推荐与计算广告系列
TensorFlow深度学习!构建神经网络预测股票价格!⛵
股票价格数据是一个时间序列形态的数据,诚然,股市的涨落和各种利好利空消息更相关,更多体现的是人们的信心状况,但是它的形态下,时序前后是有一定的相关性的,我们可以使用一种特殊类型的神经网络『循环神经网络(RNN)』来对这种时序相关的数据进行建模和学习。
ShowMeAI
2022/11/12
1.1K0
TensorFlow深度学习!构建神经网络预测股票价格!⛵
深度学习多分类案例:新闻文本分类
之前介绍过一个单分类的问题。当每个数据点可以划分到多个类别、多个标签下,这就是属于多分类问题了。
皮大大
2022/04/02
1.7K0
深度学习多分类案例:新闻文本分类
只能用于文本与图像数据?No!看TabTransformer对结构化业务数据精准建模
自 Transformers 出现以来,基于它的结构已经颠覆了自然语言处理和计算机视觉,带来各种非结构化数据业务场景和任务的巨大效果突破,接着大家把目光转向了结构化业务数据,它是否能在结构化表格数据上同样有惊人的效果表现呢?
ShowMeAI
2022/10/30
8801
只能用于文本与图像数据?No!看TabTransformer对结构化业务数据精准建模
推荐系统!基于tensorflow搭建混合神经网络精准推荐! ⛵
本文从常见的推荐系统方法(基于内容、协同过滤等近邻算法、基于知识等)讲起,一直覆盖到前沿的新式推荐系统,不仅详细讲解原理,还手把手教大家如何用代码实现。
ShowMeAI
2022/08/26
1.2K0
推荐系统!基于tensorflow搭建混合神经网络精准推荐! ⛵
全都会!预测蛋白质标注!创建讲义!解释数学公式!最懂科学的智能NLP模型Galactica尝鲜 ⛵
图片本文浅试Meta开源的大型AI语言模型『Galactica』,带大家体验安装与多场景使用。Galactica被称为“最懂科学的智能NLP模型”,能够预测蛋白质标注!创建讲义!解释数学公式!全都会!---💡 作者:韩信子@ShowMeAI📘 机器学习实战系列:https://www.showmeai.tech/tutorials/41📘 深度学习实战系列:https://www.showmeai.tech/tutorials/42📘 自然语言处理实战系列:https://www.showmeai.tech
ShowMeAI
2022/12/07
7850
全都会!预测蛋白质标注!创建讲义!解释数学公式!最懂科学的智能NLP模型Galactica尝鲜 ⛵
实际应用效果不佳?来看看提升深度神经网络泛化能力的核心技术(附代码)
神经网络是一种由神经元、层、权重和偏差组合而成的特殊机器学习模型,随着近些年深度学习的高速发展,神经网络已被广泛用于进行预测和商业决策并大放异彩。
ShowMeAI
2022/10/31
7410
实际应用效果不佳?来看看提升深度神经网络泛化能力的核心技术(附代码)
深度学习实战-新闻文本多分类
广泛使用的文本分类数据集:46个不同的主题,即输出有46个类别。某些样本的主题更多,但是训练集中的每个主题至少有10个样本
皮大大
2023/08/23
3340
流水账︱Elmo词向量中文训练过程杂记
参考:《文本嵌入的经典模型与最新进展》 人们已经提出了大量可能的词嵌入方法。最常用的模型是 word2vec 和 GloVe,它们都是基于分布假设的无监督学习方法(在相同上下文中的单词往往具有相似的含义)。
悟乙己
2019/05/26
2.5K0
教程 | 用TensorFlow Estimator实现文本分类
选自ruder.io 作者:Sebastian Ruder 机器之心编译 参与:Geek AI、张倩 本文探讨了如何使用自定义的 TensorFlow Estimator、嵌入技术及 tf.layers 模块来处理文本分类任务,使用的数据集为 IMDB 评论数据集。通过本文你将学到如何使用 word2vec 词嵌入和迁移学习技术,在有标签数据稀缺时获得更好的模型性能。 本文主要内容如下: 使用 Datasets 装载数据 使用预封装好的评估器(estimator)构建基线 使用词嵌入技术 通过卷积层和 LS
机器之心
2018/06/08
2K0
TensorFlow从1到2(五)图片内容识别和自然语言语义识别
上一节我们讲过了完整的保存模型及其训练完成的参数。 Keras中使用这种方式,预置了多个著名的成熟神经网络模型。当然,这实际是Keras的功劳,并不适合算在TensorFlow 2.0头上。 当前TensorFlow 2.0-alpha版本捆绑的Keras中包含:
俺踏月色而来
2019/04/25
2.3K0
TensorFlow从1到2(五)图片内容识别和自然语言语义识别
Mercari数据集——机器学习&深度学习视角
我很高兴与大家分享我的机器学习和深度学习经验,同时我们将在一个Kaggle竞赛得到解决方案。学习过程的分析也是非常直观,具有娱乐性和挑战性。希望这个博客最终能给读者一些有用的学习帮助。
磐创AI
2020/09/07
1.3K0
20 行代码!带你快速构建基础文本搜索引擎 ⛵
本文使用tf-idf(词频-逆文件频率)、lsi(潜在语义索引)和 doc2vec(文档向量化嵌入)这3种最基础的NLP文档嵌入技术,对文本进行嵌入操作(即构建语义向量)并完成比对检索,构建一个基础版的文本搜索引擎。
ShowMeAI
2022/08/26
5790
20 行代码!带你快速构建基础文本搜索引擎 ⛵
机器翻译的Attention机制
在机器翻译(Neural Machine Translation)中,Seq2Seq模型将源序列映射到目标序列,其中Encoder部分将源序列编码为Context Vector传递给Decoder,Decoder将Context Vector解码为目标语言的序列。
YoungTimes
2022/04/28
1.5K0
机器翻译的Attention机制
垃圾邮件检测:第2部分
作者 | Md Sohel Mahmood 编译 | VK 来源 | Towards Data Science
磐创AI
2021/11/10
1K0
TensorFlow从1到2(十)带注意力机制的神经网络机器翻译
机器翻译和语音识别是最早开展的两项人工智能研究。今天也取得了最显著的商业成果。 早先的机器翻译实际脱胎于电子词典,能力更擅长于词或者短语的翻译。那时候的翻译通常会将一句话打断为一系列的片段,随后通过复杂的程序逻辑对每一个片段进行翻译,最终组合在一起。所得到的翻译结果应当说似是而非,最大的问题是可读性和连贯性非常差。 实际从机器学习的观点来讲,这种翻译方式,也不符合人类在做语言翻译时所做的动作。其实以神经网络为代表的机器学习,更多的都是在“模仿”人类的行为习惯。 一名职业翻译通常是这样做:首先完整听懂要翻译的语句,将语义充分理解,随后把理解到的内容,用目标语言复述出来。 而现在的机器翻译,也正是这样做的,谷歌的seq2seq是这一模式的开创者。 如果用计算机科学的语言来说,这一过程很像一个编解码过程。原始的语句进入编码器,得到一组用于代表原始语句“内涵”的数组。这些数组中的数字就是原始语句所代表的含义,只是这个含义人类无法读懂,是需要由神经网络模型去理解的。随后解码过程,将“有含义的数字”解码为对应的目标语言。从而完成整个翻译过程。这样的得到的翻译结果,非常流畅,具有更好的可读性。
俺踏月色而来
2019/05/14
7690
听音识情绪 | 程序员手把手教你搭建神经网络,更快get女朋友情绪,求生欲max!⛵
《礼记·乐记》中说:“凡音之起,由人心生也。人心之动,物使之然也。感于物而动,故形于声。声相应,故生变。”
ShowMeAI
2022/08/09
7430
听音识情绪 | 程序员手把手教你搭建神经网络,更快get女朋友情绪,求生欲max!⛵
直观理解并使用Tensorflow实现Seq2Seq模型的注意机制
Seq2seq模型构成了机器翻译、图像和视频字幕、文本摘要、聊天机器人以及任何你可能想到的包括从一个数据序列到另一个数据序列转换的任务的基础。如果您曾使用过谷歌Translate,或与Siri、Alexa或谷歌Assistant进行过互动,那么你就是序列对序列(seq2seq)神经结构的受益者。
deephub
2020/07/14
7140
推荐阅读
相关推荐
AI识万物:从0搭建和部署手语识别系统 ⛵
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验