当前位置: 首页 > 科技观察

探索Google的自然语言API

时间:2023-03-19 16:49:24 科技观察

GoogleAPIinPython可以突出显示有关Google如何对网站进行分类以及如何调整内容以改善搜索结果的线索。作为技术SEO,我一直在寻找以新颖方式使用数据的方法,以更好地了解Google如何对网站进行排名。我最近研究了谷歌的自然语言API是否可以更好地揭示谷歌如何对网站内容进行分类。虽然有开源的NLP工具,但我想探索一下Google的工具是否可以在其他产品(例如搜索)中使用相同的技术。本文介绍了Google的自然语言API并探讨了常见的自然语言处理(NLP)任务以及如何使用它们来为网站内容创建提供信息。了解数据类型首先,了解GoogleNaturalLanguageAPI返回的数据类型很重要。实体实体是可以与物理世界中的某些事物相关联的文本短语。命名实体识别(NER)是NLP的一个困难部分,因为工具通常需要查看关键字的完整上下文以了解其用法。例如,同形异义词拼写相同,但具有多种含义。句子中的“lead”指的是一种金属:“lead”(名词),让人动容:“lead”(动词),也可能是剧本中的主角(也是名词)?Google有12种不同类型的实体,以及第13个集体类别,称为“未知”。一些实体与维基百科文章相关,显示了知识图谱对数据的影响。每个实体都会返回一个重要性分数,即它与所提供文本的整体相关性。实体情绪情绪是对某事物的感知或态度,在文档和句子级别以及在文档中找到的各个实体进行测量。情绪得分范围从-1.0(负面)到1.0(正面)。量级magnitude表示情绪的非归一化强度;它的范围从0.0到无穷大。句法解析涵盖了在更好的库中常见的大多数NLP活动,例如词形还原、词性标记和依存关系树解析。NLP主要处理帮助机器理解文本和关键字之间的关系。语法分析是大多数语言处理或理解任务的基本部分。语法分类法分类类别是将整个给定内容分配给特定行业或主题类别,置信度分数从0.0到1.0。这些类别似乎与其他Google工具(例如AdWords)使用的受众群体和网站类别相同。按类别提取数据现在,我将提取一些样本数据进行处理。我使用Google的SearchConsoleAPI收集了一些搜索查询及其相应的URL。GoogleSearchConsole是一种工具,可报告人们使用Google搜索在您的网站上查找网页的字词。这个开源的Jupyternotebook可以让你提取关于网站的类似数据。在此示例中,我提取了2019年1月1日至6月1日期间生成的网站(我没有提及名称)上的GoogleSearchConsole数据,并将其限制为至少获得一次点击(而不仅仅是曝光印象)查询。该数据集包含有关2969个页面和7144个查询的信息,这些页面显示在Google搜索结果中。下表显示绝大多数页面获得的点击次数很少,因为该网站专注于所谓的长尾(更具体,通常更长)而不是短尾(非常笼统,搜索量更大)搜索查询。所有页面的点击直方图为了减小数据集的大小并只获取表现最好的页面,我将数据集限制为在此期间至少获得20次展示的页面。这是经过优化的数据集的页面点击直方图,其中包括723页:使用GoogleNaturalLanguageAPI库的Python中部分网页的点击直方图要测试API,请创建一个google-cloud-language的小脚本图书馆。以下代码基于Python3.5+。首先,激活一个新的虚拟环境并安装库。将替换为您的环境的唯一名称。virtualenvsource/bin/activatepipinstall--upgradegoogle-cloud-languagepipinstall--upgraderequests此脚本从URL中提取HTML并将HTML提供给自然语言API。返回包含情感、实体和类别的字典,其中这些键的值是列表。我使用Jupyternotebook运行此代码,因为使用相同的内核更容易注释和重试代码。#导入所需的库importrequestsimportjsonfromgoogle.cloudimportlanguagefromgoogle.oauth2importservice_accountfromgoogle.cloud.languageimportenumsfromgoogle.cloud.languageimporttypes#构建语言API客户端(需要服务帐户密钥)client=language.LanguageServiceClient.from_service_account_json('services.json')#定义函数defpull_googlenlp(client,url,invalid_types=['OTHER'],**data):html=load_text_from_url(url,**data)ifnothtml:returnNonedocument=types.Document(content=html,type=language.enums.Document.Type.HTML)features={'extract_syntax':True,'extract_entities':True,'extract_document_sentiment':True,'extract_entity_sentiment':True,'classify_text':False}响应=client.annotate_text(document=document,features=features)情感t=response.document_sentimententities=response.entitiesresponse=client.classify_text(document)categories=response.categoriesdefget_type(type):returnclient.enums.Entity.Type(entity.type).nameresult={}结果['sentiment']=[]result['entities']=[]result['categories']=[]ifsentiment:result['sentiment']=[{'magnitude':sentiment.magnitude,'score':sentiment.score}]对于实体??中的实体:如果get_type(entity.type)不在invalid_types中:result['entities'].append({'name':entity.name,'type':get_type(entity.type),'salience':entity.salience,'wikipedia_url':entity.metadata.get('wikipedia_url','-')})forcategoryincategories:result['categories'].append({'name':category.name,'信心':category.confidence})返回resultdefload_text_from_url(url,**data):timeout=data.get('timeout',20)结果=[]try:print("Extractingtextfrom:{}".format(url))response=requests.get(url,timeout=timeout)text=response.textstatus=response.status_codeifstatus==200andlen(text)>0:returntextreturnNoneexceptExceptionase:print('Problemwithurl:{0}.'.format(url))returnNone要访问API,请按照Google的快速入门说明在GoogleCloudConsole中创建一个项目,启用API,并下载服务帐户密钥。json文件命名为services.json并上传到项目文件夹。然后,您可以通过运行以下命令提取任何URL(例如Opensource.com)的API数据:url="https://opensource.com/article/19/6/how-ssh-running-container"pull_googlenlp(client,url)如果设置正确,你会看到以下输出:OutputfromPullingAPIData为了让入门更容易,我创建了一个JupyterNotebook,你可以下载并使用它来测试提取网页的实体、类别和情感.我更喜欢使用JupyterLab,它是JupyterNotebooks的扩展,包括文件查看器和其他增强的用户体验功能。如果您不熟悉这些工具,我认为使用Anaconda是开始使用Python和Jupyter的最简单方法。它使安装和设置Python和公共库变得非常容易,尤其是在Windows上。处理数据使用这些获取给定页面的HTML并将其传递给NaturalLanguageAPI的函数,我可以对723URL进行一些分析。首先,我将通过查看所有页面返回的顶级类别的数量来查看与站点关联的类别。Taxonomy来自示例站点的分类数据似乎相当准确地表示了该特定站点的关键主题。通过查看表现最佳的页面排名的各个查询,我可以比较谷歌搜索结果中同一查询的其他排名页面。网址1|热门类别:/法律与政府/法律相关(0.5099999904632568)共1个类别。未返回任何类别。网址3|热门类别:/互联网和电信/移动和无线(0.6100000143051147)共1个类别。URL4|热门类别:/计算机与电子产品/软件(0.5799999833106995)有2个类别。网址5|热门类别:/互联网和电信/移动和无线/移动应用程序和配件(0.75)有1个类别。未返回任何类别。网址7|热门类别:/计算机与电子产品/软件/商业与生产力软件(0.7099999785423279)共有2个类别。网址8|热门类别:/法律与政府/法律相关(0.8999999761581421),有3个类别。网址9|顶级类别:/Reference/GeneralReference/TypeGuidesandTemplates(0.6399999856948853)有1个类别。未返回任何类别。上面括号中的数字表示Google对页面内容与该类别相关的信心程度。对于相同的分类,第八个结果比第一个具有更高的置信度,因此这似乎不是定义排名相关性的灵丹妙药。此外,类别过于宽泛,无法满足特定搜索主题的需求。按排名查看平均置信度,这两个指标之间似乎没有相关性,至少对于此数据集而言:平均置信度排名分布图这两种方法对于扩展站点以确保内容类别易于理解以及样板或销售是有意义的内容不会使您的页面与您的主要专业领域无关。想一想,如果您销售工业用品,但您的页面返回“营销”作为主要类别。似乎没有一个强烈的迹象表明类别相关性与您的排名有任何关系,至少在页面级别是这样。情绪我不会在情绪上花很多时间。在所有从API返回情绪的页面中,它们分为两个区间:0.1和0.2,这几乎是中性情绪。根据直方图,很容易看出情绪没有太大价值。对于新闻或意见网站,衡量特定页面的情绪与排名中位数之间的相关性将是一个更有趣的指标。独特页面实体的情感直方图实体在我看来是API中最有趣的部分。这是在所有页面中根据显着性(或与页面的相关性)选择的顶级实体。请注意,对于相同的术语(销售清单),Google会推断出不同的类型,这可能是错误的。这是由于这些术语在内容中出现的不同上下文。示例站点的顶级实体然后,我分别和一起查看了每个实体类型,以查看该实体的显着性和页面的最佳排名位置之间是否存在任何相关性。对于每种类型,我匹配匹配该类型的顶级实体的显着性(与页面的整体相关性),按显着性(降序)排序。某些实体类型在所有示例中都返回零重要性,因此我在下图中省略了这些结果。与最佳排名位置的显着性相关性“ConsumerGood”实体类型具有最高的正相关性,Pearson相关性为0.15854,尽管“PersonThe”实体的结果最好,相关性为-0.15483。这是一个非常小的样本集合,尤其是对于单一的实体类型,我对数据也不能做太多的判断。我没有找到任何相关性强的值,但是“Person”实体最有意义。网站通常有页面关于他们的首席执行官和其他可能在这些查询的搜索结果中表现出色的关键员工。继续,当从整体上看网站时,根据实体名称和实体类型出现以下主题。基于主题实体名称和实体类型我模糊了几个结果,这些结果似乎过于具体而无法掩盖网站的身份。从主题上讲,名称信息是在您(或竞争对手的)网站上本地查看其核心主题的好方法。这样做仅基于示例网站的排名URL,而不是所有网站的可能URL(因为SearchConsole数据仅记录在Google中显示的页面),但结果可能很有趣,尤其是如果您使用像Ahrefs这样的工具可以提取网站的主要排名URL,该工具跟踪许多查询以及这些查询的Google搜索结果。实体数据的另一个有趣部分是标记为“CONSUMER_GOOD”的实体倾向于“看起来”就像我看到的结果来自“KnowledgeResults”,即页面右侧的Google搜索结果。在我们的数据集中使用三个或更多关键字的“ConsumerGood”实体名称的Google搜索结果产生了5.8%的知识结果与Google的实体名称相同。这意味着,如果您在Google中搜索术语或短语,右侧的框(例如,上面针对Linux的知识结果)将出现在搜索结果页面中。由于Google“选择”代表实体的示例网页,因此很有可能在搜索结果中识别出独特的特征。同样有趣的是,在Google的这些知识结果名称中没有显示任何实体的维基百科URL中有5.8%是从NaturalLanguageAPI返回的。这很有趣,值得进一步分析。这将非常有用,尤其是对于在Ahrefs等传统全球排名跟踪工具的数据库中找不到的更深奥的主题。如前所述,知识结果对于希望将其内容包含在Google中的网站所有者非常重要,因为它们在桌面搜索中更加突出。假设地,它们也可能与GoogleDiscover的知识库主题保持一致,这是一种适用于Android和iOS的产品,它试图根据用户感兴趣但未明确搜索的主题为用户呈现内容。总结本文介绍了Google的自然语言API,共享了一些代码,并研究了该API可能对网站所有者有用的方式。关键要点是:学习使用Python和JupyterNotebooks将你的数据收集任务打开到一个由令人难以置信的聪明和才华横溢的人构建的令人难以置信的API和开源项目(如Pandas和NumPy)的世界。Python让我能够快速提取和测试关于特定目的的API值的假设。通过Google的TaxonomyAPI传递您网站的页面可以很好地检查以确保其内容分解为正确的主题类别。为竞争对手的站点执行此操作还可以提供有关在何处进行调整或创建内容的指导。谷歌的情绪评分对于示例网站来说似乎不是一个有趣的指标,但它可能适用于新闻或基于意见的网站。Google发现的实体提供了整个站点的更精细的主题级视图,并且与分类法一样,在竞争性内容分析中使用会很有趣。实体可以帮助定义您的内容与搜索结果或GoogleDiscover结果中的GoogleKnowledgeNuggets保持一致的机会。我们将5.8%的结果设置为较长(字数)的“消费品”实体,显示这些结果,并且对于某些站点,可能有机会更好地优化这些实体的页面显着性得分,从而为您提供更好的在Google搜索结果或GoogleDiscovers建议中占据重要位置的机会。