本文已使用 Google Cloud Translation API 自动翻译。
某些文档最好以原文阅读。
在过去的几十年里,我们看到人工智能 (AI) 的使用迅速增加。从 Netflix 和亚马逊上的推荐系统到我们智能手机上的语音助手,人工智能在我们的日常生活中的应用越来越广泛。在本文中,我们将研究如何使用 AI 构建一个简单的虚拟助手。
有许多不同类型的人工智能,但出于本文的目的,我们将使用一种称为自然语言处理 (NLP) 的人工智能。 NLP 是 AI 的一个分支,处理人类语言的理解和操作。 NLP 让我们的虚拟助手能够理解我们给它的命令并做出相应的反应。
构建虚拟助手的方法有很多种,但在本文中,我们将使用开源库 NLTK。 NLTK 是一个用于处理人类语言数据的 Python 库。它包含许多用于执行各种 NLP 任务的不同算法,例如标记化、词性标注和情感分析。
我们将使用 NLTK 构建一个虚拟助手,可以回答有关天气和当前时间的基本问题。让我们开始吧!
在开始构建我们的虚拟助手之前,我们需要安装 NLTK 库。 NLTK 可以使用 Python 包管理器 pip 安装。要安装 NLTK,请打开终端并键入以下命令:
$ pip install nltk
现在我们已经安装了 NLTK,我们可以开始构建我们的虚拟助手了。第一步是创建一个名为“assistant.py”的文件。在这个文件中,我们将导入 NLTK 库并创建一个新的“Assistant”类。
import nltk
class Assistant:
pass
接下来,我们需要为我们的 Assistant 类创建一个 init 方法。此方法将采用两个参数:self
和 text
。 self
是一个特殊变量,它引用类的当前实例。 text
是我们的虚拟助手将要处理的字符串。
def __init__(self, text):
self.text = text
现在,我们需要为我们的虚拟助手编写代码。我们将从标记化“文本”字符串开始。标记化是将字符串拆分为单个标记的过程。例如,字符串“What's the weather like today?”将被标记为以下标记:["What's", "the", "weather", "like", "today", "?"]
.
tokens = nltk.tokenize.word_tokenize(text)
接下来,我们需要用词性标记每个标记。词性标注是为每个标记分配词性标签的过程。词性标记表示标记在句子中扮演的角色。例如,令牌“What's”将被标记为“WP”,它代表 Wh-pronoun。
tagged_tokens = nltk.pos_tag(tokens)
现在我们已经用它们的词性标记了我们的令牌,我们可以开始为我们的虚拟助手编写代码。我们将从创建问题词列表开始。问题词是通常出现在问题开头的词,例如“what”、“when”和“where”。
question_words = ["what", "when", "where", "who", "whom", "whose", "which", "why", "how"]
接下来,我们将遍历 tagged_tokens
列表中的每个标记。如果 token 是疑问词,我们将打印出 token 及其词性标签。
for token, tag in tagged_tokens:
if token in question_words:
print(token, tag)
现在,我们需要为我们的虚拟助手编写代码来回答有关天气的问题。我们将从检查第一个标记是否为“What's”而第二个标记是否为“the”开始。如果是这样,我们将打印出一条消息,表明我们的虚拟助手可以回答有关天气的问题。
if tokens[0] == "What's" and tokens[1] == "the":
print("I can answer questions about the weather.")
接下来,我们需要检查下一个标记是否为“天气”。如果是这样,我们将打印出当前的天气状况。
if tokens[2] == "weather":
print("The current weather conditions are Cloudy and Cool.")
现在,我们需要为我们的虚拟助手编写代码来回答有关当前时间的问题。我们将从检查第一个标记是否为“What's”而第二个标记是否为“the”开始。如果是这样,我们将打印出一条消息,表明我们的虚拟助手可以回答有关时间的问题。
if tokens[0] == "What's" and tokens[1] == "the":
print("I can answer questions about the time.")
接下来,我们需要检查下一个标记是否为“时间”。如果是这样,我们将打印出当前时间。
if tokens[2] == "time":
print("The current time is 3:15 PM.")
最后,我们需要在我们的 assistant.py 文件中添加一个 main 函数。此函数将负责处理命令行参数并调用我们的“助手”类。
if __name__ == "__main__":
text = input("You: ")
assistant = Assistant(text)
现在我们已经编写了虚拟助手代码,让我们对其进行测试。为此,请打开终端并键入以下命令:
$ python assistant.py
您应该看到以下输出:
You: What's the weather like today?
I can answer questions about the weather.
The current weather conditions are Cloudy and Cool.
现在,尝试向我们的虚拟助手询问有关时间的问题。
You: What's the time?
I can answer questions about the time.
The current time is 3:15 PM.
如您所见,我们的虚拟助手能够理解并回答有关天气和时间的基本问题。在下一节中,我们将研究如何扩展我们的虚拟助手来处理更复杂的问题。
在上一节中,我们看到了如何构建一个可以回答有关天气和时间的基本问题的简单虚拟助手。在本节中,我们将扩展我们的虚拟助手以处理更复杂的问题。
为此,我们需要使用一种称为问答的 NLP。问答是从文本中提取信息来回答问题的过程。对于我们的虚拟助手,我们将使用一种称为问答系统 (QAS) 的问答算法。
QAS 算法将问题和文本作为输入并返回问题的答案。要使用 QAS 算法,我们需要先安装 qas
Python 包。要安装 qas 包,请打开终端并键入以下命令:
$ pip install qas
现在我们已经安装了 qas 包,我们可以将它导入到我们的 assistant.py 文件中。
import qas
接下来,我们需要更新我们的“助手”类以使用 QAS 算法。我们将通过向我们的类添加一个新的“answer”方法来做到这一点。此方法将问题作为输入并返回问题的答案。
def answer(self, question):
return qas.answer(question, self.text)
现在,我们需要更新我们的 main 函数来调用 answer 方法。我们还将添加一些代码来打印问题的答案。
if __name__ == "__main__":
text = input("You: ")
assistant = Assistant(text)
question = input("Question: ")
answer = assistant.answer(question)
print("Answer:", answer)
现在我们已经更新了“Assistant”类以使用 QAS 算法,让我们测试一下。为此,请打开终端并键入以下命令:
$ python assistant.py
您应该看到以下输出:
You: The weather is Cloudy and Cool.
Question: What's the weather like?
Answer: Cloudy and Cool
如您所见,我们的虚拟助手现在能够回答有关天气的更复杂问题。在下一节中,我们将研究如何提高虚拟助手的准确性。
在上一节中,我们看到了如何使用 QAS 算法来回答有关天气的问题。然而,我们的虚拟助手的准确性并不完美。在本节中,我们将研究如何提高虚拟助手的准确性。
有许多不同的方法可以提高问答系统的准确性。一种方法是使用更复杂的算法。另一种方法是使用更大、更多样化的训练数据集。在本节中,我们将看看如何做这两件事。
在上一节中,我们看到了如何使用 QAS 算法来回答有关天气的问题。然而,QAS 算法并不是唯一可用的问答算法。有许多不同的算法可用于问答,例如递归神经网络问答器 (RNNQA) 和 DeepQA 算法。
要使用更复杂的算法,我们首先需要安装 qas
Python 包。要安装 qas 包,请打开终端并键入以下命令:
$ pip install qas
现在我们已经安装了 qas 包,我们可以将它导入到我们的 assistant.py 文件中。
import qas
接下来,我们需要更新我们的“助手”类以使用 RNNQA 算法。我们将通过向我们的类添加一个新的“answer”方法来做到这一点。此方法将问题作为输入并返回问题的答案。
def answer(self, question):
return qas.answer(question, self.text, algorithm="rnnqa")
现在,我们需要更新我们的 main 函数来调用 answer 方法。我们还将添加一些代码来打印问题的答案。
if __name__ == "__main__":
text = input("You: ")
assistant = Assistant(text)
question = input("Question: ")
answer = assistant.answer(question)
print("Answer:", answer)
在上一节中,我们看到了如何使用 QAS 算法来回答有关天气的问题。然而,我们的虚拟助手的准确性并不完美。提高我们的虚拟助手准确性的一种方法是使用更大、更多样化的训练数据集。
有许多不同的数据集可用于训练问答系统。一个这样的数据集是问答数据集(QADataset)。 QADataset 是一个包含超过 100,000 个问题和答案的数据集。
要使用 QADataset,我们首先需要安装 qas
Python 包。要安装 qas 包,请打开终端并键入以下命令:
$ pip install qas
现在我们已经安装了 qas 包,我们可以将它导入到我们的 assistant.py 文件中。
import qas
接下来,我们需要更新我们的“助手”类以使用 QADataset。我们将通过向我们的类添加一个新的“answer”方法来做到这一点。此方法将问题作为输入并返回问题的答案。
def answer(self, question):
return qas.answer(question, self.text, dataset="qadataset")
现在,我们需要更新我们的 main 函数来调用 answer 方法。我们还将添加一些代码来打印问题的答案。
if __name__ == "__main__":
text = input("You: ")
assistant = Assistant(text)
question = input("Question: ")
answer = assistant.answer(question)
print("Answer:", answer)
在本文中,我们了解了如何使用 AI 构建一个简单的虚拟助手。我们首先安装 NLTK 库并构建一个可以回答有关天气和时间的问题的基本虚拟助手。然后,我们通过使用 QAS 算法扩展了我们的虚拟助手以处理更复杂的问题。最后,我们看到了如何通过使用更复杂的算法和更大、更多样化的训练数据集来提高虚拟助手的准确性。