Expedia使用无监督学习对客户反馈进行分类


Expedia 撰写了关于其使用无监督学习对客户反馈进行分类的方法。我的一部分想知道,云提供商可以开箱即用地提供这些解决方案,难道不应该是一个已解决的问题吗?

在Expedia Group ,我们努力为旅客提供无摩擦的方式来提出他们的疑问、投诉或反馈,从而提高他们的满意度。我们每天都会收到数千条客户消息,需要一种有效的方式将每条消息发送给正确的 Expedia Group 团队。为此,我们会自动对收到的反馈进行分类,然后将其转发给正确的团队。本文介绍了我们如何利用无监督学习技术在不需要训练数据集的情况下执行多标签分类。

初步尝试
1、使用监督学习模型的多标签分类
使用预训练的 ML 模型,可以针对我们的自定义文本(反馈)进行微调,以分类为自定义多标签分类法。
为了能够做到这一点,所有现有的机器学习模型都需要数千个预先分类/标记的数据集进行微调。由于我们没有任何用于微调的预分类数据,我们将不得不投入大量精力来进行手动分类。因此,这种方法变得乏味且耗时。

2、使用词同义词的多标签分类
第二种方法:基于关键字及其各自同义词的文本分类的基本方法。
起初,它似乎是一个很好的解决方案,因为它不需要任何预先分类的数据进行训练,而且它似乎比第一种方法更快。
现在,让我们通过一些旅行者投诉/反馈的例子来考虑这一点:

Traveller 1. My plane was delayed.
Traveller 2. We flew an hour late.

在上面给出的示例中,两位旅客都希望报告他们各自的航班延误。这里,在第一个语句中,关键字“plane”是单词“flight”的同义词,因此我们可以很容易地将其归类为“flight issue”,而在第二个语句中,关键字“flew”不是“flight”一词,从而使算法难以将其归类为“飞行问题”。

理解并进一步解码上述问题:
让我们在这里再举一个例子。当我们听到“茶”和“咖啡因”这两个词时,我们通常会将它们与什么联系起来?也许,我们会说茶是一种饮料,其中含有大量的咖啡因。关键是,我们的大脑可以很容易地认识到这两个词是相互关联的。然而,当我们在上述算法中输入“茶”和“咖啡因”这两个词时,与我们不同的是,它无法识别这两个词之间的关联。
现在,这给我们带来了一个问题,因为第一种方法需要时间和精力来手动分类数千条反馈消息以训练 ML 模型,而第二种方法无法提供丰富的分类结果。

构建我们自己的启发式算法
我们的团队设计了一种方法来克服上述问题,方法是编写一个利用预先训练的词嵌入模型的启发式算法。这些模型有助于利用每个分类桶的反馈中关键字之间的距离,最终使我们的算法能够理解反馈的上下文。这有助于第一级分类,而不需要预先分类的数据集。为了进一步丰富结果,我们团队还构建了自定义分类规则(其功能细节不在本文讨论范围内)。
为了理解上述解决方案(第一级分类),让我们首先看看我们如何利用预训练的“词嵌入模型”来理解反馈的上下文。

寻找距离最近的桶
NLP世界中,单词以向量的形式表示。这些向量以某些维度占据嵌入空间,这些维度可能非常大,具体取决于语料库的大小。

have = [1, 0, 0, 0, 0, 0, … 0]
a = [0, 1, 0, 0, 0, 0, … 0]
good = [0, 0, 1, 0, 0, 0, … 0]
day = [0, 0, 0, 1, 0, 0, … 0] …

Word2Vec是使用浅层神经网络以词嵌入的形式最流行的文档词汇表表示之一。它能够根据与其他单词的语义和句法相似性来捕获文档中单词的上下文。它是由Google 的 Tomas Mikolov开发的。

Word2Vec 架构
Word2Vec 可以根据单词在文本中的出现情况对单词的含义做出强有力的评估。这些评估产生与语料库中其他单词的单词关联。为简单起见,让我们看一个只有两个维度的示例。在实际实现中,我们使用更多维度,稍后我们将详细讨论。在我们的简单示例中,“King”和“Queen”之类的词彼此非常相似。在对词嵌入进行代数运算时,您可以找到词相似度的近似值。例如,“King”的二维嵌入向量——“Man”的二维嵌入向量+“Woman”的二维嵌入向量,得到的向量与“Queen”的嵌入向量非常接近。

King    -    Man    +    Woman    =    Queen
[5,3]   -    [2,1]  +    [3, 2]   =    [6,4]

在我们的实际解决方案中,我们使用了来自GloVe的预训练词嵌入,它提供了与 Word2Vec 类似的功能。
GloVe 是一种用于获取单词向量表示的无监督学习算法。对来自语料库的聚合全局词-词共现统计进行训练,得到的表示展示了词向量空间的有趣的线性子结构。
GloVe 预训练的词嵌入可以从这里下载

与上面简单的二维示例不同,GloVe 嵌入具有高维,难以可视化。为了可视化本文的词嵌入,我们将使用PCA作为一种常见的降维技术,以阅读有关降维技术的更多信息,您可以在此处阅读。
现在我们对词嵌入有了一些基本的了解,让我们做一些分类……

考虑到我们必须将反馈分为“航班”、“酒店”和“汽车”三类。让我们首先看看这些类别关键字以及与上述类别相关的一些关键字是如何嵌入到向量空间中的。

GloVe 与 PCA [3D] 可视化词嵌入
让我们看看这条消息是如何分类的。

Traveller 2: We flew an hour late.


分类管道使用预处理步骤来清理数据。清理后剩余的关键字将是“飞flew”、“小时hour”、“迟到late”。
接下来分类管道将计算线性距离。它通过从反馈中找到关键字与我们的类别关键字“航班”、“酒店”和“汽车”的线性向量距离来做到这一点。如果得到的线性距离小于“N”(每个类别可能不同),启发式算法会将反馈分配给一个类别。让我们看看结果。


关键词:飞

距离类别
航班Flight:3.8168625831604004
酒店:5.281632900238037
汽车:5.459691047668457

关键词:小时

距离类别
航班Flight:4.56382942199707
酒店:5.3469719886779785
汽车:5.401400089263916

关键词:迟到

距离类别
航班Flight:5.427463531494141
酒店:5.393815517425537
汽车:5.658353805541992

正如我们在上面看到的,关键字“flew”最接近类别“Flight”(3.8168625831604004)。反馈的最终分类结果将是 'Flight' ,前提是 'Flight' 类别的 'N' 值配置为 4。
注意:通过对 'N' 的值进行微小的更改并分析结果,我们丰富了分类结果。

这就是我们如何能够使用无监督学习方法来理解反馈消息的上下文,以执行多标签分类。然后,我们能够将分类的反馈信息发送给正确的团队,以便他们对反馈采取行动。

结论
在本文中,我们提出了一种在没有可用于训练的数据集时对数据进行分类的方法,以通过利用 GloVe 的词嵌入来减轻普遍存在的监督分类模型的缺点。