SigParser 使用 ML.NET 来检测“非人类”电子邮件
SigParser 是一种 API 和服务,可自动执行添加到和维护客户关系管理(CRM)系统这一繁琐(通常成本高昂)过程。SigParser 从电子邮件签名中提取联系人信息,例如姓名、电子邮件地址和电话号码,并将所有这些信息作为联系人输入到 CRM 系统或数据库。
业务问题
当 SigParser 为公司处理电子邮件时,许多电子邮件是不是人为发送的(例如新闻稿、付款通知、密码重置等)。此类电子邮件中的发件人信息不应显示在联系人列表中或推送到 CRM 系统中。因此,SigParser 决定使用机器学习来预测电子邮件是否是“垃圾邮件”。
以下面的论坛通知电子邮件为例。此电子邮件的发件人不是应出现在 CRM 中的联系人,因此机器学习模型预测 “isSpammyLookingEmailMessage” 为 true:
为什么选择 ML.NET?
当 SigParser 团队决定使用机器学习时,他们最初尝试使用 R;但他们发现很难维护 API 并与使用 .NET Core 生成的 API 集成。
SigParser 的首席执行官兼创始人 Paul Mendoza 表示 R“与开发过程过于脱节。过去我们使用 R 生成所有常数,之后将这些常数复制并粘贴到 .NET 中,然后实践试用该模型并发现它不太有效,而且必须重复。这太慢了。”
因此,他们转而选择 ML.NET 将所有内容整合进一款应用中。
借助 ML.NET,我们能够训练模型,然后立即在代码中进行测试。这样可以更快地发布新的更改,因为所有工具都集中在一起。”
ML.NET 的影响
从 R 移动到 ML.NET 的影响是生产力提高了 10 倍。此外,在 SigParser 移动到 R 之前,他们只利用一个机器学习模型。自转换为 ML.NET 以来,他们现已拥有 6 个机器学习模型,以用于电子邮件分析的各个方面。之所以出现这种增长,是因为现在可以使用 ML.NET 快速试验新的机器学习创意并在应用程序中快速显示结果。
解决方案体系结构
数据处理
SigParser 首先使用著名的 Enron 数据集来训练其模型,但当他们意识到该数据集已经过时时,他们最终将自己的电子邮件帐户中的数千封电子邮件(符合 GDPR 规定)标记为人为或非人为,并将其用作训练数据集。
机器学习功能
SigParser 的 ML.NET 模型提供两个功能(用于预测 “IsHumanemail”):
HasUnsubscribes
—如果电子邮件正文中有“取消订阅”或“选择退出”,则为 TrueEmailBodyCleaned
—规范化 HTML 电子邮件正文,使电子邮件语言不可知,并删除任何个人身份信息
机器学习算法
这两个特征被输入到 Binary FastTree 算法中,该算法是一种用于分类场景的算法,输出是预测电子邮件是来自“真人”还是来自自动化来源。目前,SigParser 每月使用此 ML.NET 模型处理数百万封电子邮件。
var mlContext = new MLContext();
var(trainData, testData) = mlContext.BinaryClassification.TrainTestSplit(mlContext.CreateStreamingDataView(totalSampleSet), testFraction:0.2);
var pipeline = mlContext.Transforms.Text.FeaturizeText("EmailBodyCleaned", "EmailHTMLFeaturized")
.Append(mlContext.Transforms.Concatenate("Features", "HasUnsubscribes", "EmailHTMLFeaturized"))
.Append(mlContext.BinaryClassification.Trainers.FastTree(labelColumn: "IsHumanEmail", featureColumn: "Features"));
Console.WriteLine("Fitting data");
var fitResult = pipeline.Fit(trainData);
Console.WriteLine("Evaluating metrics");
var metrics = mlContext.BinaryClassification.Evaluate(fitResult.Transform(testData), label: "IsHumanEmail");
Console.WriteLine("Accuracy: " + metrics.Accuracy);
using (var stream = File.Create(emailParsingPath + "EmailHTMLTypeClassifier.zip"))
{
mlContext.Model.Save(fitResult, stream);
}
SigParser 将 ML.NET 的数据转换和算法用于多种机器学习解决方案,包括上面提到的垃圾邮件检测模型,这使它们能够从电子邮件签名中自动将正确的联系信息导出到客户数据库,而无需再手动输入练习输入,该过程耗时且容易出错。
准备好开始使用了吗?
分步教程将帮助你在计算机上运行 ML.NET。