借助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 系列的模型有很多隐层,咱们能够有很多形式获取文本的向量化表征,比方对最初的隐层做『均匀池化』取得文本嵌入,咱们也能够用倒数第二层或倒数第三层(它们在实践上较少依赖于训练语言模型的文本语料库)。
对文本做嵌入示意的示例代码如下:
# 大家能够先命令行执行下列代码装置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是不确定的),咱们在附件维度上应用最大池化失去对立长度的表征。
以下是为给定电子邮件生成附件向量化表征的代码示例:
# 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 构建一个多分支神经网络了。参考代码如下:
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局部信息都十分重要)
💡 总结
咱们通过对电子邮件主动用意辨认和归类场景进行剖析和解决,构建了无效的混合网络高效地实现了这个工作。这外面十分值得思考的点,是不同类型的数据输出与预处理,适合的技术选型(并非越简单越好),充沛又失当的输出信息交融形式。
大家在相似的场景问题下,还能够尝试不同的注释预处理和附件分类模型,察看成果变动。其余的一些改良点包含,对于预估不那么必定(概率偏低)的邮件样本,推送人工审核分类,会有更好的成果。
参考资料
- 📘 AI实战 | 基于NLP文档嵌入技术的根底文本搜索引擎构建:https://showmeai.tech/article-detail/321
- 📘 TensorFlow 速查手册:https://www.showmeai.tech/article-detail/109
- 📘 深度学习教程:吴恩达专项课程 · 全套笔记解读:https://www.showmeai.tech/tutorials/35
- 📘 深度学习教程 | 自然语言解决与词嵌入:https://www.showmeai.tech/article-detail/226
- 📘 NLP教程 | 斯坦福CS224n · 课程带学与全套笔记解读:https://www.showmeai.tech/tutorials/36
- 📘 NLP教程(1) – 词向量、SVD合成与Word2Vec:https://www.showmeai.tech/article-detail/230
- 📘 NLP教程(2) – GloVe及词向量的训练与评估:https://www.showmeai.tech/article-detail/232
- 📘 TF-iDF:https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html
- 📘 PCA:https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html
- 📘 Doc2Vec:https://radimrehurek.com/gensim/models/doc2vec.html
- 📘 BERT:[https://huggingface.co/docs/t…](https://huggingface.co/docs/t…)
- 📘 HuggingFace:https://huggingface.co/
发表回复