使用深度学习进行自动意图分类

[ad_1]
使用深度学习进行自动意图分类

搜索引擎的运作方式发生了重大变化,应该质疑我们对SEO的传统看法:

  1. 研究关键词。
  2. 写内容。
  3. 建立链接。

如今,即使关键字不存在,搜索引擎也能够匹配页面。他们在直接回答问题方面也越来越好。

与此同时,搜索者越来越习惯使用自然语言查询。我甚至发现越来越多的证据表明新网站在没有建立链接的情况下排名竞争性条款。

Google最近的研究甚至质疑了一个基本的内容营销框架: 买方的旅程

结论 是我们不应该再考虑游客从意识到决策的线性路径。我们应该 适应独特的道路 由每个潜在客户采取。

考虑到所有这些重大变化,我们如何适应?

当然,使用机器学习!

自动化一切:机器学习可以帮助您以手动无法实现的方式理解和预测意图。

在本文中,您将学习如何做到这一点。

这是一个非常重要的话题,我将离开我强烈的编码会议 过去的文章。我会详细介绍Python代码,使其适用于整个SEO社区。

以下是我们的行动计划:

  • 我们将学习如何使用深度学习对文本进行分类,而无需编写代码。
    • 我们将通过建立BBC新闻文章培训的分类模型来实践。
    • 我们将根据Google趋势中的新闻标题测试该模型。
  • 我们将构建一个类似的模型,但我们将在不同的数据集上训练它,并根据其意图分组问题。
    • 我们将使用Google Data Studio从Google Search Console中提取潜在问题。
    • 我们将使用该模型对从Data Studio导出的问题进行分类。
    • 我们将根据他们的意图对问题进行分组,并提取可用于确定内容开发工作优先级的可操作见解。
  • 我们将讨论使这成为可能的基本概念:单词向量,嵌入和编码器/解码器。
  • 我们将构建一个复杂的模型,不仅可以解析意图,还可以解析您为Siri和Alexa提供的特定操作。
  • 最后,我将分享一些资源以了解更多信息。

优步路德维希

使用深度学习完成上面描述的计划通常需要编写高级Python代码。

幸运的是,优步发布了一个名为的超级有价值的工具 路德维希 这样就可以非常轻松地构建和使用预测模型。

我们将从内部运行路德维希 Google Colaboratory 为了使用他们的免费GPU运行时。

在不使用GPU的情况下培训深度学习模型可能是等待几分钟到等待时间之间的区别。

自动文本分类

为了构建预测模型,我们需要相关的标记数据和模型定义。

让我们直接从一个简单的文本分类模型练习 路德维希的例子

我们将使用按类别组织的BBC文章的标签数据集。这个 文章 应该让你了解我们不必做的编码水平,因为我们正在使用路德维希。

设置路德维希

Google Colab附带张量流1.12。让我们确保使用Ludwig所期望的正确版本,并确保它支持GPU运行时。

在Runtime菜单项下,选择Python 3和GPU。

!pip install tensorflow-gpu == 1.13.1!pip install ludwig

准备数据集进行培训

下载BBC标记的数据集。

!gsutil cp gs://dataset-uploader/bbc/bbc-text.csv。

让我们创建一个模型定义。我们将使用第一个 例子

运行Ludwig来构建和评估模型

!ludwig experiment –data_csv bbc-text.csv –model_definition_file model_definition.yaml

当您查看Ludwig的输出时,您会发现它可以帮助您避免执行您需要的任务 手动执行。例如,它会自动将数据集拆分为培训,开发和测试数据集。

训练集:1556

验证集:215

测试集:454

我们的训练步骤在12个时期后停止。这个 Quora回答 提供了对时期,批次和迭代的很好的解释。

我们的测试精度仅为0.70,与参考文章中手动实现的0.96相比相形见绌。

尽管如此,这是非常有希望的,因为我们不需要任何深入的学习专业知识,只需要一小部分工作。我将就如何在资源部分改进模型提供一些指导。

可视化培训过程

使用深度学习的自动意图分类“width =”424“height =”280“data-srcset =”“data-src =”https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/training_curve。 PNG

让我们用新数据测试模型

我们用这个吧 JavaScript代码段 刮掉Google趋势文章标题以提供给模型。

在使用文章标题创建熊猫数据框后,我们可以继续从训练模型中获取预测。

以下是全球顶级类别的预测结果。

使用深度学习的自动意图分类“width =”1428“height =”1000“sizes =”(max-width:1428px)100vw,1428px“data-srcset =”https://cdn.searchenginejournal.com/wp-content/上传/ 2019/06 / bbc_predictions_all.png 1428w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/bbc_predictions_all-480x336.png 480w,https://cdn.searchenginejournal.com/wp- content / uploads / 2019/06 / bbc_predictions_all-680x476.png 680w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/bbc_predictions_all-768x538.png 768w,https://cdn.searchenginejournal。 com / wp-content / uploads / 2019/06 / bbc_predictions_all-1024x717.png 1024w“data-src =”https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/bbc_predictions_all.png

我从技术和业务部门中删除了头条新闻,虽然技术部门预测不是特别好,但业务部门显示出更多的承诺。

使用深度学习的自动意图分类“width =”1444“height =”1052“sizes =”(最大宽度:1444px)100vw,1444px“data-srcset =”https://cdn.searchenginejournal.com/wp-content/ uploads / 2019/06 / business_predictions.png 1444w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/business_predictions-480x350.png 480w,https://cdn.searchenginejournal.com/wp- content / uploads / 2019/06 / business_predictions-680x495.png 680w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/business_predictions-768x560.png 768w,https://cdn.searchenginejournal。 com / wp-content / uploads / 2019/06 / business_predictions-1024x746.png 1024w“data-src =”https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/business_predictions.png

我会说司法部追求谷歌肯定不是娱乐。不是谷歌肯定!

自动问题分类

我们将使用完全相同的过程和模型,但是在a 不同的数据集 这将使我们能够做更强大的事情:学会根据他们的意图对问题进行分类。

登录到Kaggle并下载数据集后,您可以使用该代码将其加载到Colab中的数据框。

使用深度学习的自动意图分类“width =”1444“height =”1070“sizes =”(max-width:1444px)100vw,1444px“data-srcset =”https://cdn.searchenginejournal.com/wp-content/上传/ 2019/06 / questions_dataset.png 1444w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/questions_dataset-480x356.png 480w,https://cdn.searchenginejournal.com/wp- content / uploads / 2019/06 / questions_dataset-680x504.png 680w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/questions_dataset-768x569.png 768w,https://cdn.searchenginejournal。 com / wp-content / uploads / 2019/06 / questions_dataset-1024x759.png 1024w“data-src =”https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/questions_dataset.png

这个令人敬畏的数据集根据预期答案的类型将问题分组,使用更广泛和更具体的两个类别。

我通过添加新的输出类别更新了模型定义,因此我们现在有两个预测。

培训过程是一样的。我只更改了源数据集。

!ludwig experiment –data_csv Question_Classification_Dataset.csv –model_definition_file model_definition.yaml

当我们审查培训输出时,我们看到每个类别都是单独培训的,并分别进行评估和组合。

训练在第14纪元停止,我们得到的综合测试精度为0.66。虽然我们付出了少量努力,但并不是很好,但也不是很糟糕。

使用深度学习的自动意图分类“width =”424“height =”280“data-srcset =”“data-src =”https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/questions_training。 PNG

让我们使用Google Search Console数据测试模型

我整理了一个Google Data Studio 报告 您可以克隆以从Google Search Console中提取长搜索查询。根据我的经验,这些通常都是问题。

使用深度学习的自动意图分类“width =”2480“height =”1330“sizes =”(最大宽度:2480px)100vw,2480px“data-srcset =”https://cdn.searchenginejournal.com/wp-content/上传/ 2019/06 / questions_report.png 2480w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/questions_report-480x257.png 480w,https://cdn.searchenginejournal.com/wp- content / uploads / 2019/06 / questions_report-680x365.png 680w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/questions_report-768x412.png 768w,https://cdn.searchenginejournal。 com / wp-content / uploads / 2019/06 / questions_report-1024x549.png 1024w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/questions_report-1600x858.png 1600w“data-src = “https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/questions_report.png

我用一个小技巧创建了一个新字段来计算单词。我删除单词并计算空格。然后我创建了一个过滤器来排除少于6个单词的短语。随意更新以反映您的客户站点的数据。

通过在VIEW模式下单击报告右上角的三个点来导出搜索控制台数据。使用我在上面分享的相同代码将其上传到Google Colab。

我们可以使用此代码获得预测

这就是他们的样子。

使用深度学习的自动意图分类“width =”1724“height =”1060“sizes =”(最大宽度:1724px)100vw,1724px“data-srcset =”https://cdn.searchenginejournal.com/wp-content/ uploads / 2019/06 / ludwig_intent_predictions.png 1724w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/ludwig_intent_predictions-480x295.png 480w,https://cdn.searchenginejournal.com/wp- content / uploads / 2019/06 / ludwig_intent_predictions-680x418.png 680w,https://cdn.searchenginejournal.com / wp-content / uploads / 2017/17 / 7dw,https://cdn.searchenginejournal com / wp-content / uploads / 2019/06 / ludwig_intent_predictions-1024x630.png 1024w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/ludwig_intent_predictions-1600x984.png 1600w“data-src = “https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/ludwig_intent_predictions.png

在我的数据集中,我们对从Google Search Console提取的2656个查询的意图进行了分类。考虑到努力,相当惊人。

通过调整模型定义和增加训练数据的数量和质量,有很大的空间来提高准确性。这是您通常在深度学习项目中花费大部分时间的地方。

切实可行的见解

由于我们还从搜索控制台中提取点击次数和搜索展示次数数据,因此我们可以根据预测的类别对数千个关键字进行分组,同时总结其展示次数和点击次数。

我们希望查找搜索展示次数较多但点击次数较少的问题组。这将有助于确定内容开发工作的优先顺序。

test_df.join(predictions)((“Query”,“Category0_predictions”,“Clicks”,“Impressions”))。groupby(“Category0_predictions”)。sum()

使用深度学习的自动意图分类“width =”2118“height =”536“sizes =”(最大宽度:2118px)100vw,2118px“data-srcset =”https://cdn.searchenginejournal.com/wp-content/上传/ 2019/06 / pasted_image_6_6_19__4_52_pm.png 2118w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/pasted_image_6_6_19__4_52_pm-480x121.png 480w,https://cdn.searchenginejournal.com/wp- content / uploads / 2019/06 / pasted_image_6_6_19__4_52_pm-680x172.png 680w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/pasted_image_6_6_19__4_52_pm-768x194.png 768w,https://cdn.searchenginejournal。 com / wp-content / uploads / 2019/06 / pasted_image_6_6_19__4_52_pm-1024x259.png 1024w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/pasted_image_6_6_19__4_52_pm-1600x405.png 1600w“data-src = “https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/pasted_image_6_6_19__4_52_pm.png
例如,我们可以看到很多实体的搜索需求(32795),但点击次数很少(518)。

我会将第二个更细粒度的类别的分组点击次数和展示次数作为读者的练习。

理解自然语言处理

我将使用一个非常简单的类比来解释当您使用深度学习时自然语言处理(NLP)的工作原理。

使用深度学习的自动意图分类“width =”1911“height =”930“sizes =”(max-width:1911px)100vw,1911px“data-srcset =”https://cdn.searchenginejournal.com/wp-content/ uploads / 2019/06 / deeplearning1.png 1911w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/deeplearning1-480x234.png 480w,https://cdn.searchenginejournal.com/wp- content / uploads / 2019/06 / deeplearning1-680x331.png 680w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/deeplearning1-768x374.png 768w,https://cdn.searchenginejournal。 com / wp-content / uploads / 2019/06 / deeplearning1-1024x498.png 1024w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/deeplearning1-1600x779.png 1600w“data-src = “https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/deeplearning1.png

在我的 TechSEO提升谈话 去年,我通过上面的插图解释了深度学习的工作原理。

将原始数据(上述示例中的图像)编码到潜在空间中,然后将潜在空间表示解码为预期变换,其也是原始数据。

使用深度学习的自动意图分类“width =”1604“height =”1120“sizes =”(最大宽度:1604px)100vw,1604px“data-srcset =”https://cdn.searchenginejournal.com/wp-content/ uploads / 2019/06 / uber_diagram.png 1604w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/uber_diagram-480x335.png 480w,https://cdn.searchenginejournal.com/wp- content / uploads / 2019/06 / uber_diagram-680x475.png 680w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/uber_diagram-768x536.png 768w,https://cdn.searchenginejournal。 com / wp-content / uploads / 2019/06 / uber_diagram-1024x715.png 1024w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/uber_diagram-1600x1117.png 1600w“data-src = “https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/uber_diagram.png

在解释路德维希如何运作时,优步使用了类似的图表。

为了训练模型来对文本或问题进行分类,我们首先需要将单词编码为向量,更具体地说是单词嵌入。

这些是所有SEO都必须理解的非常重要的概念,所以让我们用一个类比来说明这一点:物理地址和GPS系统。

在物理世界中通过名称查找业务,并通过其地址或GPS坐标查找业务之间存在很大差异。

按名称查找商家相当于通过内容中的关键字匹配搜索和页面。

谷歌在纽约的实际地址是 第八大道111号。在西班牙语中,它是111 octava avenida。在日本111番街。如果你在附近,你可以用块数和转数来表示它。你明白了。

换句话说,它是同一个地方,但当被问及方向时,不同的人会根据他们的特定背景以不同的方式引用这个地方。

当人们以许多不同的方式提到同一件事时,同样的事情就会发生。计算机需要一种通用的方式来引用与上下文无关的事物。

单词向量代表单词作为数字。您通常会获取源文本中的所有唯一单词,并构建一个字典,其中每个单词都有一个数字。

例如,这相当于将第八大道中的所有商业名称转换为街道号码,在第八大道上是第114号。

这个初始步骤很好,能够唯一地识别单词或街道地址,但不足以轻松地计算全局地址之间的距离并提供方向。我们还需要使用绝对坐标编码接近度信息。

说到GPS坐标所做的物理地址。谷歌在纽约市的地址有GPS坐标40°44'29“N 74°0'11”W,而Pad Thai Noodle Lounge有40°44'27“N 74°0'5”W,非常接近。

使用深度学习的自动意图分类“width =”2134“height =”1198“sizes =”(最大宽度:2134px)100vw,2134px“data-srcset =”https://cdn.searchenginejournal.com/wp-content/上传/ 2019/06 / pad_thai_noodle.png 2134w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/pad_thai_noodle-480x269.png 480w,https://cdn.searchenginejournal.com/wp- content / uploads / 2019/06 / pad_thai_noodle-680x382.png 680w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/pad_thai_noodle-768x431.png 768w,https://cdn.searchenginejournal。 com / wp-content / uploads / 2019/06 / pad_thai_noodle-1024x575.png 1024w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/pad_thai_noodle-1600x898.png 1600w“data-src = “https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/pad_thai_noodle.png

类似地,当谈到单词时,这就是嵌入字的作用。嵌入本质上是绝对坐标,但具有数百个维度。

想象一下,在一个假想的空间中,将词嵌入作为GPS坐标,其中相似的词靠近在一起,不同的词相隔很远。

由于单词嵌入和GPS坐标只是简单的向量,它们只是具有多个维度的数字,因此它们可以像常规数字(标量)一样进行操作。

同样,您可以通过减去它们来计算两个数字之间的差异,也可以使用数学运算计算两个向量之间的差异(它们的距离)。最常见的是:

让我们把它带回家,看看单词向量和嵌入在实践中是如何实际看起来的,以及它们如何使得比较相似单词变得容易。

这是“酒店”一词的矢量表示。

这就是这种矢量方法可以很容易地比较相似的单词。

因此,总之,当我们向Ludwig提供训练文本时,Ludwig将这些单词编码为矢量/嵌入,以便于计算它们的距离/相似度。

实际上,嵌入是预先计算并存储在查找表中,这有助于加快培训过程。

超越意图分类

现在,让我们做一些更有野心的事情。让我们构建一个模型,它可以解析文本并提取操作以及完成操作所需的任何信息。

例如:“预定晚上7点到伦敦的航班”,不应该只是了解预定航班的意图,而是出发时间和出发城市。

Ludwig在自然语言理解部分下包含了这种模型的一个例子。

我们打算用 这个标记的数据集 这是旅游业特有的。登录Kaggle并下载后,您可以将其上传到Colab,如前面的示例所示。

它是一个zip文件,因此您需要解压缩它。

!解压缩atis-dataset-clean.zip

使用深度学习的自动意图分类“width =”1518“height =”1058“sizes =”(最大宽度:1518px)100vw,1518px“data-srcset =”https://cdn.searchenginejournal.com/wp-content/上传/ 2019/06 / atis_intents.png 1518w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/atis_intents-480x335.png 480w,https://cdn.searchenginejournal.com/wp- content / uploads / 2019/06 / atis_intents-680x474.png 680w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/atis_intents-768x535.png 768w,https://cdn.searchenginejournal。 com / wp-content / uploads / 2019/06 / atis_intents-1024x714.png 1024w“data-src =”https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/atis_intents.png

这是模型定义。

我们像往常一样运行Ludwig训练模型。

!ludwig experiment –data_csv atis.train.csv –model_definition_file model_definition.yaml

在我的运行中,它在第20纪元之后停止并且达到了0.74的组合测试精度。

以下是从测试数据集中获取预测的代码。

最后,这是预测的样子。

使用深度学习的自动意图分类“width =”1938“height =”1150“sizes =”(max-width:1938px)100vw,1938px“data-srcset =”https://cdn.searchenginejournal.com/wp-content/ uploads / 2019/06 / atist_intent_slot_predictions.png 1938w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/atist_intent_slot_predictions-480x285.png 480w,https://cdn.searchenginejournal.com/wp- content / uploads / 2019/06 / atist_intent_slot_predictions-680x404.png 680w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/atist_intent_slot_predictions-768x456.png 768w,https://cdn.searchenginejournal。 com / wp-content / uploads / 2019/06 / atist_intent_slot_predictions-1024x608.png 1024w,https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/atist_intent_slot_predictions-1600x949.png 1600w“data-src = “https://cdn.searchenginejournal.com/wp-content/uploads/2019/06/atist_intent_slot_predictions.png资源以了解更多信息

如果您不是技术人员,这可能是您学习深度学习及其可能性的最佳课程: AI For Everyone

如果您有技术背景,我推荐这个专业: Andrew Ng的深度学习。我也完成了一个 Udacity 去年,但我发现NLP的报道在Coursera中更为深入。

第三个模块, 构建机器学习项目,它的方法非常有价值和独特。本课程中的材料将提供您减少模型预测中的错误所需的一些关键知识。

我写这篇文章的灵感来自于出色的工作 关键字分类 通过 丹布鲁克斯 来自Aira SEO团队。

图片来源

所有截图均由作者拍摄,2019年6月

相关文章