Azure Machine Learning - 使用 Python 进行语义排名

在 Azure AI 搜索中,语义排名是查询端功能,它使用 Microsoft AI 对搜索结果重新评分,将具有更多语义相关性的结果移动到列表顶部。

关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。

file

环境准备

  • 具有活动订阅的 Azure 帐户。 免费创建帐户。

  • Azure AI 搜索,位于基本层或更高层级,且[已启用语义排名]。

  • API 密钥和搜索服务终结点:

    登录到 Azure 门户并查找你的搜索服务。

    在“概述”中,复制 URL 并将其保存到记事本以供后续步骤使用。 示例终结点可能类似于 https://mydemo.search.windows.net

    在“密钥”中,复制并保存管理密钥,以获取创建和删除对象的完整权限。 有两个可互换的主要密钥和辅助密钥。 选择其中一个。

file

添加语义排名

要使用语义排名,请将_语义配置_添加到搜索索引,并将参数添加到查询。 如果有现有索引,可以进行这些更改,无需重新编制内容索引,因为不会影响可搜索内容的结构。

  • 语义配置为提供在语义重新排名中使用的标题、关键字和内容的字段建立优先级顺序。 字段优先级允许更快的处理。

  • 调用语义排名的查询包括查询类型、查询语言以及是否返回字幕和答案的参数。 可以将这些参数添加到现有的查询逻辑。 与其他参数没有冲突。

设置你的环境

我们使用以下工具创建了本快速入门。

  • 带有 Python 扩展的 Visual Studio Code(或等效的 IDE),Python 版本为 3.7 或更高

  • 用于 Python 的 Azure SDK 中的 azure-search-documents 包

连接到 Azure AI 搜索

在此任务中,创建笔记本、加载库并设置客户端。

  1. 在 Visual Studio Code 中创建新的 Python3 笔记本:

    1. 按 F1 并搜索“Python 选择解释器”,然后选择 Python 3.7 版本或更高版本。
    2. 再次按 F1 并搜索“创建:新的 Jupyter Notebook”。 应在编辑器中打开一个空的无标题 .ipynb 文件,为第一个条目做好准备。
  2. 在第一个单元格中,从用于 Python 的 Azure SDK 加载库,包括 [azure-search-documents]。 此代码导入 “SemanticConfiguration”、“PrioritizedFields”、“SemanticField” 和 “SemanticSettings”。

    %pip install azure-search-documents --pre
    %pip show azure-search-documents
    %pip install python-dotenvimport os
    from azure.core.credentials import AzureKeyCredential
    from azure.search.documents.indexes import SearchIndexClient 
    from azure.search.documents import SearchClient
    from azure.search.documents.indexes.models import (  SearchIndex,  SearchField,  SearchFieldDataType,  SimpleField,  SearchableField,ComplexField,SearchIndex,  SemanticConfiguration,  PrioritizedFields,  SemanticField,  SemanticSettings,  
    )
    
  3. 从环境中设置服务终结点和 API 密钥。 由于代码为你生成了 URI,因此只需在服务名称属性中指定搜索服务名称。

    service_name = "<YOUR-SEARCH-SERVICE-NAME>"
    admin_key = "<YOUR-SEARCH-SERVICE-ADMIN-KEY>"index_name = "hotels-quickstart"endpoint = "https://{}.search.windows.net/".format(service_name)
    admin_client = SearchIndexClient(endpoint=endpoint,index_name=index_name,credential=AzureKeyCredential(admin_key))search_client = SearchClient(endpoint=endpoint,index_name=index_name,credential=AzureKeyCredential(admin_key))
    
  4. 删除索引(如果存在)。 此步骤允许代码创建索引的新版本。

    try:result = admin_client.delete_index(index_name)print ('Index', index_name, 'Deleted')
    except Exception as ex:print (ex)
    

创建或更新索引
  1. 创建或更新索引架构以包含SemanticConfigurationSemanticSettings。 如果要更新现有索引,此修改无需重新编制索引,因为文档的结构保持不变。

    name = index_name
    fields = [SimpleField(name="HotelId", type=SearchFieldDataType.String, key=True),SearchableField(name="HotelName", type=SearchFieldDataType.String, sortable=True),SearchableField(name="Description", type=SearchFieldDataType.String, analyzer_name="en.lucene"),SearchableField(name="Description_fr", type=SearchFieldDataType.String, analyzer_name="fr.lucene"),SearchableField(name="Category", type=SearchFieldDataType.String, facetable=True, filterable=True, sortable=True),SearchableField(name="Tags", collection=True, type=SearchFieldDataType.String, facetable=True, filterable=True),SimpleField(name="ParkingIncluded", type=SearchFieldDataType.Boolean, facetable=True, filterable=True, sortable=True),SimpleField(name="LastRenovationDate", type=SearchFieldDataType.DateTimeOffset, facetable=True, filterable=True, sortable=True),SimpleField(name="Rating", type=SearchFieldDataType.Double, facetable=True, filterable=True, sortable=True),ComplexField(name="Address", fields=[SearchableField(name="StreetAddress", type=SearchFieldDataType.String),SearchableField(name="City", type=SearchFieldDataType.String, facetable=True, filterable=True, sortable=True),SearchableField(name="StateProvince", type=SearchFieldDataType.String, facetable=True, filterable=True, sortable=True),SearchableField(name="PostalCode", type=SearchFieldDataType.String, facetable=True, filterable=True, sortable=True),SearchableField(name="Country", type=SearchFieldDataType.String, facetable=True, filterable=True, sortable=True),])]
    semantic_config = SemanticConfiguration(name="my-semantic-config",prioritized_fields=PrioritizedFields(title_field=SemanticField(field_name="HotelName"),prioritized_keywords_fields=[SemanticField(field_name="Category")],prioritized_content_fields=[SemanticField(field_name="Description")])
    )semantic_settings = SemanticSettings(configurations=[semantic_config])
    scoring_profiles = []
    suggester = [{'name': 'sg', 'source_fields': ['Tags', 'Address/City', 'Address/Country']}]
    
  2. 发送请求。 请注意,SearchIndex()采用semantic_settings参数。

    index = SearchIndex(name=name,fields=fields,semantic_settings=semantic_settings,scoring_profiles=scoring_profiles,suggesters = suggester)try:result = admin_client.create_index(index)print ('Index', result.name, 'created')
    except Exception as ex:print (ex)
    
  3. 如果要新建索引,请上传一些要编制索引的文档。 本文档的有效负载与全文搜索快速入门中使用的有效负载相同。

    documents = [{"@search.action": "upload","HotelId": "1","HotelName": "Secret Point Motel","Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Time's Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.","Description_fr": "L'hôtel est idéalement situé sur la principale artère commerciale de la ville en plein cœur de New York. A quelques minutes se trouve la place du temps et le centre historique de la ville, ainsi que d'autres lieux d'intérêt qui font de New York l'une des villes les plus attractives et cosmopolites de l'Amérique.","Category": "Boutique","Tags": [ "pool", "air conditioning", "concierge" ],"ParkingIncluded": "false","LastRenovationDate": "1970-01-18T00:00:00Z","Rating": 3.60,"Address": {"StreetAddress": "677 5th Ave","City": "New York","StateProvince": "NY","PostalCode": "10022","Country": "USA"}},{"@search.action": "upload","HotelId": "2","HotelName": "Twin Dome Motel","Description": "The hotel is situated in a  nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts.","Description_fr": "L'hôtel est situé dans une place du XIXe siècle, qui a été agrandie et rénovée aux plus hautes normes architecturales pour créer un hôtel moderne, fonctionnel et de première classe dans lequel l'art et les éléments historiques uniques coexistent avec le confort le plus moderne.","Category": "Boutique","Tags": [ "pool", "free wifi", "concierge" ],"ParkingIncluded": "false","LastRenovationDate": "1979-02-18T00:00:00Z","Rating": 3.60,"Address": {"StreetAddress": "140 University Town Center Dr","City": "Sarasota","StateProvince": "FL","PostalCode": "34243","Country": "USA"}},{"@search.action": "upload","HotelId": "3","HotelName": "Triple Landscape Hotel","Description": "The Hotel stands out for its gastronomic excellence under the management of William Dough, who advises on and oversees all of the Hotel's restaurant services.","Description_fr": "L'hôtel est situé dans une place du XIXe siècle, qui a été agrandie et rénovée aux plus hautes normes architecturales pour créer un hôtel moderne, fonctionnel et de première classe dans lequel l'art et les éléments historiques uniques coexistent avec le confort le plus moderne.","Category": "Resort and Spa","Tags": [ "air conditioning", "bar", "continental breakfast" ],"ParkingIncluded": "true","LastRenovationDate": "2015-09-20T00:00:00Z","Rating": 4.80,"Address": {"StreetAddress": "3393 Peachtree Rd","City": "Atlanta","StateProvince": "GA","PostalCode": "30326","Country": "USA"}},{"@search.action": "upload","HotelId": "4","HotelName": "Sublime Cliff Hotel","Description": "Sublime Cliff Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 1800 palace.","Description_fr": "Le sublime Cliff Hotel est situé au coeur du centre historique de sublime dans un quartier extrêmement animé et vivant, à courte distance de marche des sites et monuments de la ville et est entouré par l'extraordinaire beauté des églises, des bâtiments, des commerces et Monuments. Sublime Cliff fait partie d'un Palace 1800 restauré avec amour.","Category": "Boutique","Tags": [ "concierge", "view", "24-hour front desk service" ],"ParkingIncluded": "true","LastRenovationDate": "1960-02-06T00:00:00Z","Rating": 4.60,"Address": {"StreetAddress": "7400 San Pedro Ave","City": "San Antonio","StateProvince": "TX","PostalCode": "78216","Country": "USA"}}
    ]
    
  4. 发送请求。

    try:result = search_client.upload_documents(documents=documents)print("Upload of new document succeeded: {}".format(result[0].succeeded))
    except Exception as ex:print (ex.message)
    
运行查询
  1. 从空查询开始(作为验证步骤),证明索引可操作。 应获得酒店名称和说明的无序列表,计数为 4,表示索引中有四个文档。

    results =  search_client.search(query_type='simple',search_text="*" ,select='HotelName,Description',include_total_count=True)print ('Total Documents Matching Query:', results.get_count())
    for result in results:print(result["@search.score"])print(result["HotelName"])print(f"Description: {result['Description']}")
    
  2. 出于比较目的,请执行调用全文搜索和 BM25 相关性评分的基本查询。 提供查询字符串时,会调用全文搜索。 响应包括排名结果,其中较高的分数会授予具有更多匹配字词实例或更重要字词的文档。

    在此查询“哪家酒店现场有不错的餐厅”中,Sublime Cliff Hotel 脱颖而出,因为它的说明中包含“现场”。 不经常出现的字词会提高文档的搜索分数。

    results =  search_client.search(query_type='simple',search_text="what hotel has a good restaurant on site" ,select='HotelName,HotelId,Description')for result in results:print(result["@search.score"])print(result["HotelName"])print(f"Description: {result['Description']}")
    
  3. 现在添加语义排名。 新参数包括 query_typesemantic_configuration_name

    这是同一个查询,但请注意,语义排名器将 Triple Landscape Hotel 正确识别为更相关的结果(鉴于初始查询)。 此查询还会返回模型生成的标题。 此示例中的输入太少,无法创建有趣标题,但该示例成功演示了语法。

    results =  search_client.search(query_type='semantic', semantic_configuration_name='my-semantic-config',search_text="what hotel has a good restaurant on site", select='HotelName,Description,Category', query_caption='extractive')for result in results:print(result["@search.reranker_score"])print(result["HotelName"])print(f"Description: {result['Description']}")captions = result["@search.captions"]if captions:caption = captions[0]if caption.highlights:print(f"Caption: {caption.highlights}\n")else:print(f"Caption: {caption.text}\n")
    
  4. 在此最终查询中,会返回语义答案。

    语义排名可以生成具有问题特征的查询字符串的答案。 生成的答案从内容中逐字提取。 要获取语义答案,问题和答案必须密切一致,并且模型必须找到明确回答问题的内容。 如果可能的答案无法满足置信度阈值,模型不会返回答案。 出于演示目的,此示例中的问题旨在获取响应,以便你可以看到语法。

    results =  search_client.search(query_type='semantic', semantic_configuration_name='my-semantic-config',search_text="what hotel stands out for its gastronomic excellence", select='HotelName,Description,Category', query_caption='extractive', query_answer="extractive",)semantic_answers = results.get_answers()
    for answer in semantic_answers:if answer.highlights:print(f"Semantic Answer: {answer.highlights}")else:print(f"Semantic Answer: {answer.text}")print(f"Semantic Answer Score: {answer.score}\n")for result in results:print(result["@search.reranker_score"])print(result["HotelName"])print(f"Description: {result['Description']}")captions = result["@search.captions"]if captions:caption = captions[0]if caption.highlights:print(f"Caption: {caption.highlights}\n")else:print(f"Caption: {caption.text}\n")
    

关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/192498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单链表的模拟实现

单链表的模拟实现 一&#xff1a;单链表的概念&#xff1a;二&#xff1a;单链表中的方法&#xff1a;1&#xff1a;得到单链表的长度2&#xff1a;查找是否包含关键字key是否在单链表当中3&#xff1a;打印单链表中的数据&#xff1a;display&#xff08;&#xff09;3&#x…

WPF实现文字纵向排布的TabItem

文章目录 基本用法文字竖排显示 WPF布局 基本用法 WPF中的TabControl是一个容器控件&#xff0c;用于在单个窗体或页面中承载多个选项卡。每个选项卡可以包含不同的控件&#xff0c;用于显示不同的内容&#xff0c;其最简单的调用方法如下&#xff0c;只需在TabControl中无脑…

1.3 Linux文件系统

一、Linux文件系统结构 Linux下都是文件&#xff0c;所以没有Windows一样的盘&#xff0c;有的只有文件夹。 cd /    // 进入根目录 ls     // 查看根目录"/"下的文件及文件夹 /bin    &#xff1a;存储了很多系统命令&#xff0c; /usr/sbin 也存储了…

未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序报错的解决办法

当在本地计算机上使用Microsoft Office相关库时&#xff0c;可能会出现“未在本地计算机上注册microsoft.ACE.oledb.12.0”提供程序的报错。这是由于缺少相关的驱动程序或者未安装相应的软件所导致的。下面是解决该问题的完整攻略。 可能是因为没有安装数据访问组件&#xff0…

[蓝桥杯 2019 省 B] 特别数的和-C语言的解法

小明对数位中含有 2、0、1、9 的数字很感兴趣&#xff08;不包括前导 0&#xff09;&#xff0c;在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40&#xff0c;共 28 个&#xff0c;他们的和是 574。 请问&#xff0c;在 1 到 n 中&#xff0c;所有这样的数的和是多少&…

极智一周 | AI 算力国产化、MR、Cybertruck、华为造车、登月“造假“ And so on

欢迎关注我的公众号 [极智视界]&#xff0c;获取我的更多技术分享 大家好&#xff0c;我是极智视界&#xff0c;带来本周的 [极智一周]&#xff0c;关键词&#xff1a;AI 算力国产化、MR、Cyberturck、华为造车、登月"造假" And so on。 邀您加入我的知识星球「极智…

蓝桥杯第1037题子串分值和 C++ 字符串 逆向思维 巧解

题目 思路和解题方法 方案一——遍历哈希表 仅能过60%样例,大多数同学都用的该方法&#xff0c;就不过多赘述 #include <iostream> #include <unordered_map> using namespace std; int main() {string s;cin >> s;int n s.size();int res n;for (int i 0…

各类声音数据集大合集—乐器、车辆、鸟鸣、蜜蜂声音、歌曲、喇叭、人类声音不同等类型的声音数据集

最近收集了一大波关于各类声音的数据集&#xff0c;包含乐器、车辆、鸟鸣、蜜蜂声音、歌曲、喇叭、人类声音不同等类型的声音数据集&#xff0c;废话不多说&#xff0c;给大家逐一介绍&#xff01;&#xff01; 1、吉他和弦大调、小调数据集 吉他和弦大调、小调数据集&#x…

Vue基础知识点梳理

在Vue中&#xff0c;被用来响应地更新HTML属性的指令是v-model页面挂载成功之后会触发哪一个钩子函数mounted挂载之后会进行页面的渲染v-on是动作元素不属于条件渲染指令 在Vue中&#xff0c;下列关于Vue实例对象说法不正确的是&#xff08;&#xff09;。A.Vue实例对象是通过n…

Linux docker批量安装软件

1.前提 具备docker-compose.yml 和 prometheus.yml 文件 常见报错&#xff1a; 1.没有配置network 配置network即可&#xff1a; 2.缺少相关依赖 docker-compose.yml加入相关配置 3.重复项 删除掉重复的 最后 执行 等待完成 下载后相当于有了这些软件包的镜像 启动的每…

思维模型 同体效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。我们是自己人。 1 同体效应的应用 1.1 同体效应在市场营销上的应用-耐克的“Just Do It”营销活动 耐克是一家全球知名的运动品牌&#xff0c;其“Just Do It”营销活动是市场营销领域的经…

深度学习常见回归分支算法逐步分析,各种回归之间的优缺点,适用场景,举例演示

文章目录 1、线性回归&#xff08;Linear Regression&#xff09;1.1 优点1.2 缺点1.3 适用场景1.4 图例说明 2、多项式回归&#xff08;Polynomial Regression&#xff09;2.1 优点2.2 缺点2.3 适用场景2.4 图例说明 3、决策树回归&#xff08;Decision Tree Regression&#…

Beta冲刺随笔-DAY6-橘色肥猫

这个作业属于哪个课程软件工程A这个作业要求在哪里团队作业–站立式会议Beta冲刺作业目标记录Beta冲刺Day6团队名称橘色肥猫团队置顶集合随笔链接Beta冲刺笔记-置顶-橘色肥猫-CSDN博客 文章目录 SCRUM部分站立式会议照片成员描述 PM报告项目程序&#xff0f;模块的最新运行图片…

制作一个RISC-V的操作系统二-RISC-V ISA介绍

文章目录 ISA的基本介绍啥是ISA为什么要设计ISACISCvsRISCISA的宽度知名ISA介绍 RISC-V历史和特点RISC-V发展RISC-V ISA 命名规范模块化的ISA通用寄存器Hart特权级别Control and Status Register&#xff08;CSR&#xff09;内存管理与保护异常和中断 ISA的基本介绍 啥是ISA …

【UE】UEC++获取屏幕颜色GetPixelFromCursorPosition()

目录 【UE】UE C 获取屏幕颜色GetPixelFromCursorPosition() 一、函数声明与定义 二、函数的调用 三、运行结果 【UE】UE C 获取屏幕颜色GetPixelFromCursorPosition() 一、函数声明与定义 创建一个蓝图方法库方法 GetPixelFromCursorPosition()&#xff0c;并给他指定UF…

【MATLAB】RLMD分解+FFT+HHT组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 RLMD分解FFTHHT组合算法是一种强大的分析方法&#xff0c;结合了局部均值分解&#xff08;LMD&#xff09;、快速傅里叶变换&#xff08;FFT&#xff09;和希尔伯特-黄变换&#xff08;H…

WIN10 WIN11 关闭更新的绝佳办法(极简单无副作用)

WIN10 WIN11 关闭更新的绝佳办法&#xff08;极简单无副作用&#xff09; 极其简单用实用可以关闭更新20年 winr&#xff0c;输入regedit 打开注册表打开注册表的这个路径&#xff1a; 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 右键空白的地方…

图文深入理解TCP三次握手

前言 TCP三次握手和四次挥手是面试题的热门考点&#xff0c;它们分别对应TCP的连接和释放过程&#xff0c;今天我们先来认识一下TCP三次握手过程&#xff0c;以及是否可以使用“两报文握手”建立连接&#xff1f;。 1、TCP是什么&#xff1f; TCP是面向连接的协议&#xff0c;…

QT 中使用 QTableView 和 QStandardItemModel 实现将数据导出到Excel 和 从Excel导入到 QTableView 的功能

简介 在Qt中&#xff0c;使用QTableView和QStandardItemModel来实现将数据导出到Excel和从Excel导入到QTableView的功能&#xff0c;而不使用第三方库&#xff08;如QXlsx&#xff09;。 效果 将 QTableView 中的数据导出到Excel //从tableview 导出到 EXcle void MainInterfa…

Vulhub-信息泄露

1.Jetty WEB-INF 敏感信息泄露漏洞&#xff08;CVE-2021-28164&#xff09; docker-compose up -d 启动环境&#xff0c;显示8080端口被占用 修改 docker-compose.yml 中的映射端口 curl 访问 http://192.168.48.129:8090/WEB-INF/web.xml 显示404&#xff1a; 通过 %2e 绕过…