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

长时间以来,我一直在阅读关于人工智能和机器学习的多篇文章、一些论文和大量博客文章。最近,神经网络的进步特别引人注目,比如产生类似人类水平文本的 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 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}")

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 技术来实现一个简单的问答功能。对于更复杂的问答系统,你可能需要进一步调整模型和训练数据,以适应特定的应用场景。

结论

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

  • 23
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

第欧根尼的酒桶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值