使用机器学习算法构建问答系统

长时间以来,我一直在阅读关于人工智能和机器学习的多篇文章、一些论文和大量博客文章。最近,神经网络的进步特别引人注目,比如产生类似人类水平文本的 GPT3.5 模型。为了理解使用神经网络进行自然语言处理的最新技术,我想设计一个问答系统,该系统可以解析、理解并回答关于特定主题的问题,例如书籍内容。怀着这一宏伟目标,我开始了这个博客系列,涵盖所有相关的知识和工程领域:机器学习、自然语言处理、专家系统和神经网络。

本文简要总结了我设想中的问答系统的主要特征,并解释了可能有助于解决方案的相关知识领域。然而,我们将看到,系统最有可能需要结合不同领域的方法和程序来满足需求。所以,让我们开始这段旅程。

问答系统的要求

问答系统旨在理解给定的问题,推断其意义,调查可用数据,并提供自然语言答案。

给定的问题在几个阶段进行处理。首先,系统决定问题是否在语法和语义上正确。如果不正确,它将要求用户进行完善。其次,问题被转化为知识表示。第三,使用这种知识表示和问题意图查询内部知识数据库。最后,如果或如果不可以使用现有数据回答问题意图,则将制定答案。

系统需要基于特定知识领域。在撰写本文时,一个非常吸引人的想法是系统能够理解来自公共源的书籍,例如 Project Gutenberg 网页上的书籍。加载后,用户应选择其中一个已处理的书籍,然后打开一个终端。在此终端中,用户输入一个自然语言问题。

现在,让我们考虑构建此系统的相关技术领域。

问答系统的技术

撰写本文时,我假设以下知识领域对于设计和实现问答系统最为相关。我非常确定随着对知识领域的更熟悉以及探索如何构建具体系统,这种理解会随时间而变化。话虽如此,让我们单独考虑各个领域。

机器学习

机器学习涉及设计算法来处理结构化或非结构化数据,目标是识别模式和特征以及进行预测。这些预测与数据相关。例如,它可能是回归,即计算连续值,例如预测温度,或者是分类,将数据放入相似数据的不同簇中,如文本的正面或负面情绪,以及最后的特征学习,即用不同的、互不排斥或可组合的属性来标识数据,例如识别图片中的不同形状。

区分机器学习和人工智能至关重要。根据这些维基百科文章,很明显人工智能是原始的计算机科学学科,研究智能如何通过机器建立或表示。这包括硬件设计和软件解决方案,如算法和程序。AI 研究是一个一般学科,开发复杂的模型来表示行为、知识、推理和干预。机器学习是一个具体的分支,关注于发现数据中的模式并进行预测。

产生惊人进展的机器学习学科是深度学习,应用人工神经网络。神经网络与其他机器学习方法相比的决定性优势是它能够自行学习数据中的表示和模式。在大多数应用领域,特别是图像分类、文本分类和机器翻译中,神经网络已成为主导方法。

自然语言处理

自然语言处理(简称 NLP)是一门可追溯至 1950 年的计算机科学学科。根据维基百科上的解释,可以区分出三个不同的时代。符号时代试图创建复杂的规则系统来管理语言建模。然后,当计算机变得更普及时,统计时代出现了,这导致了更大的数据集和发现可以处理语言的机器学习算法。最后,当前的领域被称为神经 NLP,这是基于上述深度学习的。这种方法在许多最先进的性能领域取得了成果,例如语言建模,应用统计数据找到表示语言中正确句子的最有可能的词序列,或机器翻译。

语义网络

在互联网时代初期,显然随着时间的推移,大量数据将可供自动处理。然而,如何为人类消费和算法轻松消化结构化这些内容仍然是一个未解之谜。HTML 标准定义了文档的布局,但文本本身、其在屏幕上的外观和其含义,只能供人类观察者使用。为了应对这一点,语义网络的早期提议是使用 XML 文档帮助结构化数据。它们的结构是机器可读的,并通过添加类似模式的规则表示形式,意义可以被访问。语义网络随后向形成本体论发展,图结构通过描述实体、属性及其关系来表示知识领域。借助图查询语言,可以从这些图中获取具体知识。语义网络是一个活跃的研究领域,多年来创建了几个标准,如 OWL,用于描述知识的 Web 本体语言,和 SPARQL,一种查询语言。

项目概述和下一步

要启动该项目,我将首先更详细地了解知识领域,了解它们如何具体贡献,接着是系统将通过迭代方式构建的三个开发阶段。大致结构如下:

  • 机器学习基础:从我目前的观点来看,机器学习是处理非结构化数据、发现隐藏模式并正确预测值的非常成功的方法。因此,项目的第一部分将探索当前的机器学习景观以及具体算法。鉴于神经网络的巨大成功,我认为将重点放在这一领域,并从具体示例开始,看它们能在多大程度上为 QA 系统做出贡献。
  • 自然语言处理:在这一领域,我期望了解语言的抽象表示以及帮助从具体文本中提取意义的算法。准确地说,我想了解语言本身以及如何用语言表达知识。总的来说,我期望这个领域能提供如何设计 QA 系统界面的知识,即识别被问及的内容(或者根本没有被问及的内容!)并制定答案。
  • 语义网络:最后一个研究领域应提供对机器可读知识表示的表达方式的见解。特别的问题是如何定义这样的表示,以代表各种内容的文本。此外,基于可泛化但具体的知识库,如何生成任何信息或新知识?对于问答系统设计而言,这个领域应提供如何设计放置问题以寻找答案的知识数据库的见解。

完成这三个知识领域后,我将开始具体系统设计。

  • QA 系统探索性原型:第一个原型针对 QA 系统的核心:数据处理、信息/知识提取、概念化和查询知识表示。继续上述讨论,我可能已经有了一个非常具体的架构,并可以看到哪种技术和哪种算法有助于系统设计。原型还需要进行严格限制,例如只处理特定种类的文本。
  • QA 系统界面设计:第二阶段将构建一个原型,提供一个方便使用的界面,以提出问题并获得答案。这将是一个在 shell 中运行的命令行界面,或者需要连接到核心组件的网络应用程序。
  • QA 系统 Mark 1:界面就位后,我想发布系统并允许用户互动。提供这样的系统是我的项目的初始目标,从这里开始,新的版本和功能可能会发展。能够让用户上传他们自己的文本,及时处理数据,然后开始新的交互式 QA 会话将是非常好的。但我只能推测系统将如何发展。

代码示例

要构建一个简单的问答系统,我们可以使用 Python 和 Hugging Face 的 transformers 库来演示。这个示例将使用预训练的 BERT 模型来回答关于一个文本段落的问题。我们将使用 Google Colab 或任何支持 Python 的环境来运行以下代码。

安装必要的库
首先,我们需要安装 transformers 和 torch 库(如果还没有安装的话):

pip install transformers torch

编写问答代码
接下来,我们将编写一个简单的问答函数,它使用 BERT 模型来理解文本和回答问题:

from transformers import BertTokenizer, BertForQuestionAnswering
import torchdef answer_question(question, text):# 加载预训练的 BERT 模型和分词器tokenizer = BertTokenizer.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')model = BertForQuestionAnswering.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')# 对问题和文本进行编码处理inputs = tokenizer.encode_plus(question, text, add_special_tokens=True, return_tensors="pt")input_ids = inputs["input_ids"].tolist()[0]# 获取模型的答案answer_start_scores, answer_end_scores = model(**inputs)# 找到答案的开始和结束位置answer_start = torch.argmax(answer_start_scores)answer_end = torch.argmax(answer_end_scores) + 1# 转换id到token,提取答案answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(input_ids[answer_start:answer_end]))return answer# 定义文本和问题
text = "Hugging Face is a technology company based in New York and Paris. They focus on creating tools for natural language processing."
question = "Where is Hugging Face based?"# 调用函数并打印答案
answer = answer_question(question, text)
print(f"Answer: {answer}")

GPT
要构建一个简单的问答系统,我们可以使用 Python 和 Hugging Face 的 transformers 库来演示。这个示例将使用预训练的 BERT 模型来回答关于一个文本段落的问题。我们将使用 Google Colab 或任何支持 Python 的环境来运行以下代码。

安装必要的库
首先,我们需要安装 transformers 和 torch 库(如果还没有安装的话):

python
Copy code
!pip install transformers torch
编写问答代码
接下来,我们将编写一个简单的问答函数,它使用 BERT 模型来理解文本和回答问题:

python
Copy code
from transformers import BertTokenizer, BertForQuestionAnswering
import torch

def answer_question(question, text):
# 加载预训练的 BERT 模型和分词器
tokenizer = BertTokenizer.from_pretrained(‘bert-large-uncased-whole-word-masking-finetuned-squad’)
model = BertForQuestionAnswering.from_pretrained(‘bert-large-uncased-whole-word-masking-finetuned-squad’)

# 对问题和文本进行编码处理
inputs = tokenizer.encode_plus(question, text, add_special_tokens=True, return_tensors="pt")
input_ids = inputs["input_ids"].tolist()[0]# 获取模型的答案
answer_start_scores, answer_end_scores = model(**inputs)# 找到答案的开始和结束位置
answer_start = torch.argmax(answer_start_scores)
answer_end = torch.argmax(answer_end_scores) + 1# 转换id到token,提取答案
answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(input_ids[answer_start:answer_end]))return answer

定义文本和问题

text = “Hugging Face is a technology company based in New York and Paris. They focus on creating tools for natural language processing.”
question = “Where is Hugging Face based?”

调用函数并打印答案

answer = answer_question(question, text)
print(f"Answer: {answer}")
运行代码并查看结果
这段代码定义了一个文本段落和一个相关的问题。它使用 BERT 模型找到并返回文本中的答案。在这个例子中,问题是“Hugging Face的总部在哪里?”,预期的答案是“New York and Paris”。

当你运行上面的代码时,模型会分析文本和问题,然后输出最有可能的答案。这是一个基础示例,展示了如何使用现代 NLP 技术来实现一个简单的问答功能。对于更复杂的问答系统,你可能需要进一步调整模型和训练数据,以适应特定的应用场景。

结论

我将启动一个关于机器学习、自然语言处理和知识表示的新项目。本文简要概述了我想设计的系统,并概述了项目阶段。特别是,系统应该是一个以预选文本为初始的互动问答系统。从中,系统应生成抽象知识表示。用户可以提出问题,系统推断知识,并合成答案,例如通过引用书籍的相关部分或给出一个良好的答案。项目包括六个不同的阶段。前三个阶段将调查机器学习、自然语言处理和语义网络领域的最新科学状态。接下来的三个阶段将创建一个原型、一个界面和最终系统。我期待这次挑战以及从中学到的东西。

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

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

相关文章

富格林:戒备虚假套路保障安全

富格林悉知,现货黄金是一种传统而又具有吸引力的投资方式,因为它通常被视为一种避险资产。对于投资者来说,特别是新进场的新手投资者戒备虚假套路是保障做单安全的关键之处。那么我们该如何进行戒备虚假套路以达到安全做单的目标呢&#xff1…

React Router 6 + Ant Design:构建基于角色的动态路由和菜单

要根据用户的角色生成不同的路由菜单并实现权限控制,你可以采取以下步骤: 定义路由配置 首先,你需要定义一个包含所有可能路由的配置文件,例如: const routes [{path: /dashboard,element: <DashboardPage />,roles: [admin, manager, user]},{path: /users,element:…

Node.js 基础学习

文章目录 1. Node.js1.1 是什么&#xff1f;1.2 作用 2. 命令行工具2.1 命令的结构2.2 常用命令 3. Node.js 注意点3.1 Node.js 中不能使用DOM 和BOM 的API3.2 Node.js 中顶级对象叫做global 4. Buffer4.1 Buffer 特点4.2 Buffer 创建方式4.3 Buffer 操作与注意点 5. 计算机基础…

CSS基础:浮动(float)的3种方式,清除浮动3种方式的详解

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web 开发工具合…

【报错】ModuleNotFoundError: No module named ‘einops‘

1 报错 💔💔💔 ModuleNotFoundError: No module named einops 解决方法 💚 💚 💚 pip --default-timeout=100 install einops -i https://pypi.tuna.tsinghua.edu.cn/simple 问题解决啦!!!🌺🌺🌺 2 报错 💔💔💔 ModuleNotFoundError: No module

iOS OC项目中引入SwiftUI文件

iOS OC项目中引入SwiftUI文件 1、创建SwiftUI文件 2、第一次创建时&#xff0c;Xcode会提示桥接&#xff0c;选择 Creat Bridging Header即可。 3、创建swift管理类 /**在UIKit中使用SwiftUI&#xff0c;需要使用UIHostingController对SwiftUI进行包装&#xff0c;返回的是U…

C++11 数据结构7 队列的链式存储,实现,测试

前期考虑 队列是两边都有开口&#xff0c;那么在链式情况下&#xff0c;线性表的链式那一边作为对头好呢&#xff1f; 从线性表的核心的插入和删除算法来看&#xff0c;如果在线性表链表的头部插入&#xff0c;每次循环都不会走&#xff0c;但是删除的时候&#xff0c;要删除线…

echarts 双堆叠柱状图(数据整理)

1.后台返回的数据格式 {"code": "0000","message": "","messageCode": "操作成功","sign": null,"detail": null,"data": {"pieChart": [{"key": "产品…

C语言--基础面试真题

1、局部变量和静态变量的区别 普通局部变量和静态局部变量区别 存储位置&#xff1a; 普通局部变量存储在栈上 静态局部变量存储在静态存储区 生命周期&#xff1a; 当函数执行完毕时&#xff0c;普通局部变量会被销毁 静态局部变量的生命周期则是整个程序运行期间&#…

基于51单片机的电子秤LCD1602液晶显示( proteus仿真+程序+设计报告+讲解视频)

基于51单片机电子秤LCD显示 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真设计4. 程序代码5. 设计报告6. 设计资料内容清单&&下载链接 基于51单片机电子秤LCD显示( proteus仿真程序设计报告讲解视频&#xff09; 仿真图proteus8.9及以上 程序编译器&#xf…

深兰科技入选2024全国“人工智能+”行动创新案例TOP100

近日&#xff0c;中科院《互联网周刊》联合eNET研究院、德本咨询、中国社会科学院信息化研究中心共同发布了《2024全国“人工智能”行动创新案例TOP100》榜单。经评委会层层遴选&#xff0c;深兰科技专为洛阳市打造的“工业智能化洛阳中心”项目成功入围该榜单。一同入围的还包…

高通发布电脑CPU,比英特尔Ultra9领先51%

要说2024年最热门的关键词&#xff0c;那肯定非 AI 莫属&#xff0c;当前 AI 已经开始深入各行各业&#xff0c;AI 电视、AI 手机、AI 车机、AI 家电&#xff0c;以及 AI PC ,这些都意味着 AI 将对各个行业带来的新风向和不小的冲击。 2024 年了&#xff0c;PC 处理器还能卷出什…

安居水站:自来水安全性影响因素分析及监测管理对策

摘要&#xff1a;自来水作为人们日常生活的重要组成部分&#xff0c;其安全性直接关系到公众健康。本文深入探讨了可能影响自来水安全性的多种因素&#xff0c;包括水源污染、水处理工艺、供水管网问题、二次供水设施维护不当、工业及农业污染、重金属和微生物污染、季节变化以…

Python使用random模块随机生成ip、端口、字符串

import random import stringdef generate_random_ip():ip ".".join(str(random.randint(0,255)) for _ in range(4))return ipdef generate_random_port():port random.randint(0,65535)return portdef generate_random_data(length):# 从字母&#xff08;大小写&…

SIMRAD AP48 自动舵控制器维修用于 Continuum 自动驾驶仪系统Simrad显示器仪器深圳捷达工控维修

AP48 自动驾驶仪控制器是一款用于 Continuum 自动驾驶仪系统的高级专用控制头&#xff0c;采用现代玻璃舵造型进行了增强。 AP48 专为各种条件下的响应能力和易用性而设计&#xff0c;将大型铝制旋转控制旋钮与专用的“闪避键”配对&#xff0c;以 1 度或 10 度的增量调整左舷…

论文笔记:Large Language Models Are Zero-Shot Time Series Forecasters

2023 neurips 完全是零样本&#xff08;zero-shot&#xff09;的&#xff0c;不需要微调 1 方法 1.1 Tokenization&#xff08;分词和编码&#xff09; 现有的LLM&#xff08;比如GPT3&#xff09;的tokenizer不能直接用来编码时间序列的句子 比如对数字42235630&#xff0…

负载均衡的原理及算法

一、定义 负载均衡&#xff08;Load Balancing&#xff09;是一种计算机网络和服务器管理技术&#xff0c;旨在分配网络流量、请求或工作负载到多个服务器或资源&#xff0c;以确保这些服务器能够高效、均匀地处理负载&#xff0c;并且能够提供更高的性能、可用性和可扩展性。…

鸿蒙 harmonyos 线程 并发 总结 async promise Taskpool woker(二)多线程并发 Taskpool

多线程并发 并发模型是用来实现不同应用场景中并发任务的编程模型&#xff0c;常见的并发模型分为基于内存共享的并发模型和基于消息通信的并发模型。 ArkTS提供了TaskPool和Worker两种并发能力供开发者选择&#xff0c;其具体的实现特点和各自的适用场景存在差异。TaskPool&…

数据科学与大数据(3)

数据分析&#xff0c;它不应该是在一个不适合的工具下生搬硬套 工具为具体的场景服务&#xff0c;换一个场景大概率会很鸡肋&#xff0c;对于一个成熟的分析师来说&#xff0c;十八般武艺样样精通到后期为常态&#xff0c;不要产生工具上的路径依赖&#xff0c;不要想着学一个工…

IDEA更换新版本启动没反应

目前安装了新的IDEA(压缩包方式)&#xff0c;由于老版本的IDEA还在用&#xff0c;所以并没有删除&#xff0c;但是安装完后发现点击idea64.exe后没有反应&#xff0c;于是网上找了好多方法最后解决了 下面是我的解决过程 新版本&#xff1a;IntelliJIdea2024.1 老版本: Intelli…