提交 8070b86f 编写于 作者: W wizardforcel

2020-12-07 18:33:39

上级 f34e7e84
......@@ -22,7 +22,7 @@
没有对手的游戏比拥有对手的游戏更容易优化。 具有多个玩家的游戏,游戏玩法变得更加复杂。 让我们考虑一个两人游戏。 玩家为赢得比赛而进行的每一个举动,对方玩家都会采取行动以阻止该玩家获胜。 因此,当搜索算法从当前状态中找到最佳移动方式集时,它就不能不考虑对方玩家的反向移动而仅仅进行移动。 这意味着每次移动后都需要不断重新评估搜索算法。
让我们讨论一下计算机如何感知任何给定的游戏。 我们可以将游戏视为搜索树。 该树中的每个节点代表一个未来状态。 例如,如果您正在演奏 **Tic–Tac–Toe** (无与交叉),则可以构造一棵树来表示所有可能的移动。 我们从树的根开始,这是游戏的起点。 该节点将具有几个代表各种可能动作的子代。 反过来,在对手进行更多移动之后,这些孩子将拥有更多代表游戏状态的孩子。 树的终端节点代表游戏的最终动作。 游戏将以平局结束,或者其中一名玩家将赢得比赛。 s 搜索算法搜索该树以在游戏的每个步骤做出决策。 现在,我们将学习各种搜索技术,包括如何进行详尽的组合搜索,以帮助我们在井字游戏中永不丢失,并解决许多其他问题。
让我们讨论一下计算机如何感知任何给定的游戏。 我们可以将游戏视为搜索树。 该树中的每个节点代表一个未来状态。 例如,如果您正在演奏 **Tic–Tac–Toe** (无与交叉),则可以构造一棵树来表示所有可能的移动。 我们从树的根开始,这是游戏的起点。 该节点将具有几个代表各种可能动作的子代。 反过来,在对手进行更多移动之后,这些孩子将拥有更多代表游戏状态的孩子。 树的终端节点代表游戏的最终动作。 游戏将以平局结束,或者其中一名玩家将赢得比赛。搜索算法搜索该树以在游戏的每个步骤做出决策。 现在,我们将学习各种搜索技术,包括如何进行详尽的组合搜索,以帮助我们在井字游戏中永不丢失,并解决许多其他问题。
# 组合搜索
......@@ -30,7 +30,7 @@
随着游戏变得越来越复杂,蛮力搜索可能不是最好的方法,因为可能性越来越多。 搜索很快变得难以处理。 为了解决该问题,可以使用组合搜索来解决问题。 组合搜索是指一个研究领域,其中搜索算法使用启发式方法有效地探索解决方案空间,以减小搜索空间的大小。 这在象棋或围棋之类的游戏中很有用。
组合搜索通过使用修剪策略有效地工作。 这些策略通过消除显然是 g 的解决方案来避免测试所有可能的解决方案。 这有助于节省时间和精力。 现在,我们已经了解了详尽的组合搜索及其局限性,我们将开始探索捷径,“修剪”搜索树并避免测试每个组合的方法。 在以下各节中,我们将探索一些特定的算法,这些算法使我们能够执行组合的 earch
组合搜索通过使用修剪策略有效地工作。 这些策略通过消除显然错误解决方案来避免测试所有可能的解决方案。 这有助于节省时间和精力。 现在,我们已经了解了详尽的组合搜索及其局限性,我们将开始探索捷径,“修剪”搜索树并避免测试每个组合的方法。 在以下各节中,我们将探索一些特定的算法,这些算法使我们能够执行组合搜索
## Minimax 算法
......@@ -40,7 +40,7 @@
## Alpha-Beta 修剪
Minimax 搜索是一种有效的策略,但最终仍会探索树上不相关的部分。 当在节点上找到指示符,表明该子树中不存在解决方案时,则无需评估该子树。 但是 Minimax 搜索过于保守,因此最终探索了其中的一些 b 树。
Minimax 搜索是一种有效的策略,但最终仍会探索树上不相关的部分。 当在节点上找到指示符,表明该子树中不存在解决方案时,则无需评估该子树。 但是 Minimax 搜索过于保守,因此最终探索了其中的一些树。
Alpha-Beta 算法更智能,可以避免搜索发现的树中没有解决方案的部分。 此过程称为,称为**修剪**,Alpha-Beta 修剪是一种策略,用于避免搜索树中不包含解决方案的部分。
......@@ -54,7 +54,7 @@ Alpha-Beta 修剪中的 Alpha 和 Beta 参数是指计算过程中使用的两
就游戏而言,给第一位玩家的给定位置的价值是给第二位玩家的价值的否定。 每个玩家都在寻找能够最大程度地伤害对手的举动。 此举所产生的价值应使对手获得最小价值。 这两种方法都可以无缝地工作,这意味着可以使用一种方法来评估头寸。 就简单性而言,这是它比 Minimax 更具优势的地方。 Minimax 要求第一个玩家选择具有最大值的移动,而第二个玩家必须选择具有最小值的移动。 这里也使用 Alpha-Beta 修剪。 现在,我们已经研究了几种最流行的组合搜索算法,下面我们安装一个库,以便我们可以构建一些 AI 并查看这些算法的实际应用。
# 安装 easyAI
# 安装`easyAI`
在本章中,我们将使用名为`easyAI`的库。 这是一个人工智能框架,它提供了构建两人游戏所需的所有功能。 [您可以在此处了解的更多信息](http://zulko.github.io/easyAI)
......@@ -72,7 +72,7 @@ $ pip3 install easyAI
在此游戏中,有一堆硬币,每个玩家轮流从该堆中取出许多硬币。 可从堆中取出的硬币数量有上限和下限。 游戏的目的是避免拿最后一枚硬币。 该配方是`easyAI`库中给出的“骨头游戏”配方的一种变体。 让我们看看如何构建一个可以与用户对战的游戏。
创建一个新的 Python 文件,并通过以下软件包导入 foll
创建一个新的 Python 文件,并导入以下软件包
```py
from easyAI import TwoPlayersGame, id_solve, Human_Player, AI_Player
......@@ -326,11 +326,11 @@ if __name__ == "__main__":
图 4:井字游戏最终输出
如我们所见,游戏以平局结束。 我们已经研究了可以与用户对抗的机器人。 现在让我们建立两个机器人来对抗。 这次是 Connect Four™中的
如我们所见,游戏以平局结束。 我们已经研究了可以与用户对抗的机器人。 现在让我们建立两个机器人来对抗。 这次在 Connect Four™ 中
# 建立两个机器人来互相玩 Connect Four™
Connect Four™是,这是一款流行的两人游戏,以 Milton Bradley 商标出售。 它也以其他名称(例如“连续四个”或“四个向上”)而闻名。 在此游戏中,玩家轮流将光盘放入由六行七列组成的垂直网格中。 目标是连续获取四张光盘。 这是`easyAI`库中提供的“连接四个”配方的变体。 让我们看看如何构建它。 在此配方中,我们将创建两个可以相互对抗的机器人,而不是与计算机对抗。 每个人将使用不同的算法来查看哪个获胜。
Connect Four™ 是,这是一款流行的两人游戏,以 Milton Bradley 商标出售。 它也以其他名称(例如“连续四个”或“四个向上”)而闻名。 在此游戏中,玩家轮流将光盘放入由六行七列组成的垂直网格中。 目标是连续获取四张光盘。 这是`easyAI`库中提供的“连接四个”配方的变体。 让我们看看如何构建它。 在此配方中,我们将创建两个可以相互对抗的机器人,而不是与计算机对抗。 每个人将使用不同的算法来查看哪个获胜。
创建一个新的 Python 文件并导入以下软件包:
......@@ -444,7 +444,7 @@ class GameController(TwoPlayersGame):
return -100 if self.loss_condition() else 0
```
定义`main`功能并从定义算法开始。 然后,这两种算法将相互竞争。 Negamax 将用于第一个计算机播放器, **SSS *** 算法将用于第二个计算机播放器。 SSS *是一种搜索算法,它通过以最佳优先方式遍历树来进行状态空间搜索。 两种方法都将事先考虑的匝数作为输入参数。 在这种情况下,让我们同时使用`5`
定义`main`功能并从定义算法开始。 然后,这两种算法将相互竞争。 Negamax 将用于第一个计算机播放器,`SSS*`算法将用于第二个计算机播放器。 `SSS*`是一种搜索算法,它通过以最佳优先方式遍历树来进行状态空间搜索。 两种方法都将事先考虑的匝数作为输入参数。 在这种情况下,让我们同时使用`5`
```py
if __name__ == '__main__':
......@@ -471,7 +471,7 @@ if __name__ == '__main__':
print("\nIt's a draw.")
```
完整代码在文件`connect_four.py`中给出。 这不是一个互动游戏。 该代码将一种算法与另一种算法进行比较。 Negamax 算法是玩家 1,SSS *算法是玩家 2。
完整代码在文件`connect_four.py`中给出。 这不是一个互动游戏。 该代码将一种算法与另一种算法进行比较。 Negamax 算法是玩家 1,`SSS*`算法是玩家 2。
如果运行代码,最初将获得以下输出:
......@@ -485,11 +485,11 @@ if __name__ == '__main__':
图 6:连接四个游戏的最终输出
如我们所见,第二名玩家赢得了比赛。 让我们再尝试一个 游戏:Hexapawn。
如我们所见,第二名玩家赢得了比赛。 让我们再尝试一个游戏:Hexapawn。
# 建立两个机器人来互相对抗 Hexapawn
**Hexapawn** 是一款两人游戏,尺寸为`N`*×*`M`。 棋子存在于棋盘的两侧,目标是将棋子一直推进到棋盘的另一端。 国际象棋的标准典当规则适用。 这是`easyAI`库中提供的 Hexapawn 配方的变体。 将创建两个机器人,并使其相互对峙。 让我们创建代码。
**Hexapawn** 是一款两人游戏,尺寸为`N×M`。 棋子存在于棋盘的两侧,目标是将棋子一直推进到棋盘的另一端。 国际象棋的标准典当规则适用。 这是`easyAI`库中提供的 Hexapawn 配方的变体。 将创建两个机器人,并使其相互对峙。 让我们创建代码。
创建一个新的 Python 文件并导入以下软件包:
......@@ -642,7 +642,7 @@ if __name__=='__main__':
scoring = lambda game: -100 if game.loss_condition() else 0
```
定义要使用的算法。 在这种情况下,我们将使用 Negamax,它可以预先计算`12`移动并为策略使用`scoring` lambda 函数:
定义要使用的算法。 在这种情况下,我们将使用 Negamax,它可以预先计算`12`移动并为策略使用`scoring` Lambda 函数:
```py
# Define the algorithm
......
......@@ -24,13 +24,13 @@
由于这种复杂性,很难定义一套可靠的规则来分析语音信号。 相反,即使语音可以有很多变化,人类在理解语音方面也很出色。 人类似乎相对容易做到这一点。 为了使机器做到相同,我们需要帮助他们以与人类相同的方式理解语音。
研究人员致力于语音的各个方面和应用,例如理解口语,识别说话者是谁,识别情绪以及识别口音。 在本章中,我们将着重于理解口语。 语音识别代表了人机交互领域的重要一步。 如果我们想构建可以与人类互动的认知机器人,那么他们需要以自然语言与我们对话。 这就是近年来自动语音识别成为许多研究人员关注的焦点的原因。 让我们继续,看看如何处理第个语音信号并构建语音识别 r
研究人员致力于语音的各个方面和应用,例如理解口语,识别说话者是谁,识别情绪以及识别口音。 在本章中,我们将着重于理解口语。 语音识别代表了人机交互领域的重要一步。 如果我们想构建可以与人类互动的认知机器人,那么他们需要以自然语言与我们对话。 这就是近年来自动语音识别成为许多研究人员关注的焦点的原因。 让我们继续,看看如何处理第个语音信号并构建语音识别
# 可视化音频信号
让我们看看如何可视化音频信号。 我们将学习如何从文件中读取音频信号并进行处理。 这将帮助我们了解音频信号的结构。 使用麦克风录制音频文件时,它们会采样实际的音频信号并存储数字化版本。 真实的音频信号是连续的值波,这意味着我们无法按原样存储它们。 我们需要以一定频率对信号进行采样并将其转换为离散的数值形式。
最常见的是,语音信号以 44,100 Hz 采样。 这意味着语音信号的每一秒被分解成 44,100 个部分,并且这些时间戳中每个时间戳的值都存储在输出文件中。 我们每 1 / 44,100 秒保存一次音频信号的值。 在这种情况下,我们说音频信号的采样频率为 44,100 Hz。 通过选择高采样频率,当人们听音频信号时,它似乎是连续的。 让我们继续进行可视化音频标记 al
最常见的是,语音信号以 44,100 Hz 采样。 这意味着语音信号的每一秒被分解成 44,100 个部分,并且这些时间戳中每个时间戳的值都存储在输出文件中。 我们每`1/44,100`秒保存一次音频信号的值。 在这种情况下,我们说音频信号的采样频率为 44,100 Hz。 通过选择高采样频率,当人们听音频信号时,它似乎是连续的。 让我们继续进行可视化音频信号
创建一个新的 Python 文件并导入以下软件包:
......@@ -305,7 +305,7 @@ plt.show()
图 4:音频信号生成的可视化
使用媒体播放器播放文件`generated_audio.wav`,以查看的外观。 这将是 *784 Hz* 信号和 n oise 信号的混合信号。
使用媒体播放器播放文件`generated_audio.wav`,以查看的外观。 这将是 *784 Hz* 信号和噪声信号的混合信号。
# 合成音调以产生音乐
......@@ -459,9 +459,9 @@ if __name__=='__main__':
为了从音频信号中提取频率特征,MFCC 首先提取功率谱。 然后,它使用滤波器组和**离散余弦变换****DCT**)提取特征。 如果您有兴趣进一步研究 MFCC,[请查看以下链接](http://practicalcryptography.com/miscellaneous/machine-learning/guide-mel-frequency-cepstral-coefficients-mfccs)
我们将使用一个名为`python_speech_features`的程序包来提取 MFCC 功能[该软件包在这里可用](http://python-speech-features.readthedocs.org/en/latest)
我们将使用一个名为`python_speech_features`的程序包来提取 MFCC 特征[该软件包在这里可用](http://python-speech-features.readthedocs.org/en/latest)
为了易于使用,相关的文件夹已包含在代码包中。 您将在代码包中看到一个名为`features`的文件夹,其中包含使用此软件包所需的文件。 让我们看看如何提取 MFCC 功能
为了易于使用,相关的文件夹已包含在代码包中。 您将在代码包中看到一个名为`features`的文件夹,其中包含使用此软件包所需的文件。 让我们看看如何提取 MFCC 特征
创建一个新的 Python 文件并导入以下软件包:
......@@ -499,7 +499,7 @@ print('\nMFCC:\nNumber of windows =', features_mfcc.shape[0])
print('Length of each feature =', features_mfcc.shape[1])
```
绘制 MFCC 功能
绘制 MFCC 特征
```py
# Plot the features
......@@ -536,11 +536,11 @@ plt.title('Filter bank')
plt.show()
```
完整代码在文件`feature_extractor.py`中给出。 如果运行代码,您将看到两个屏幕截图。 第一个屏幕截图显示了 MFCC 功能
完整代码在文件`feature_extractor.py`中给出。 如果运行代码,您将看到两个屏幕截图。 第一个屏幕截图显示了 MFCC 特征
![](img/B15441_14_05.png)
图 5:MFCC 功能
图 5:MFCC 特征
第二张屏幕截图显示了滤波器组功能:
......@@ -554,7 +554,7 @@ plt.show()
图 7:MFCC 和滤波器组功能输出
正如我们在上一张图表中所看到的以及在本章中学到的那样,将声音转换为图片可能非常有用,并且它可以让我们以不同的方式分析声音并得出我们有见识的见解 否则会错过 e
正如我们在上一张图表中所看到的以及在本章中学到的那样,将声音转换为图片可能非常有用,并且它可以让我们以不同的方式分析声音并得出我们否则会错过的有见识的见解
# 识别口语
......@@ -710,7 +710,7 @@ def build_models(input_folder):
sampling_freq, signal = wavfile.read(filepath)
```
提取 MFCC 功能
提取 MFCC 特征
```py
# Extract the MFCC features
......@@ -770,7 +770,7 @@ def run_tests(test_files):
sampling_freq, signal = wavfile.read(test_file)
```
提取 MFCC 功能
提取 MFCC 特征
```py
# Extract MFCC features
......@@ -864,4 +864,4 @@ $ python3 speech_recognizer.py --input-folder data
在本章中,我们学习了语音识别。 我们讨论了如何使用语音信号和相关概念。 我们学习了如何可视化音频信号。 我们讨论了如何使用傅立叶变换将时域音频信号转换为频域。 我们讨论了如何使用预定义的参数生成音频信号。
然后,我们使用此概念通过将音调缝合在一起来合成音乐。 我们讨论了 MFCC 及其在现实世界中的使用方式。 我们了解了如何从语音中提取频率特征。 我们学习了如何使用所有这些技术来构建语音识别系统。 在下一章中,我们将讨论自然语言处理以及如何通过 m 编码并对其进行分类来分析文本数据。
\ No newline at end of file
然后,我们使用此概念通过将音调缝合在一起来合成音乐。 我们讨论了 MFCC 及其在现实世界中的使用方式。 我们了解了如何从语音中提取频率特征。 我们学习了如何使用所有这些技术来构建语音识别系统。 在下一章中,我们将讨论自然语言处理以及如何通过建模并对其进行分类来分析文本数据。
\ No newline at end of file
......@@ -17,7 +17,7 @@
* 建立类别预测器
* 构造性别标识符
* 建立情绪分析器
* 使用潜在 Dirichlet 分配的主题建模
* 使用潜在狄利克雷分布的主题建模
# 软件包的介绍和安装
......@@ -60,7 +60,7 @@ $ pip3 install gensim
$ pip3 install pattern
```
您可以在[这个页面](https://radimrehurek.com/gensim)上找到有关 gensim 的更多信息。 现在,您已经安装了 NLTK 和`gensim`,让我们继续进行 Discu 会话
您可以在[这个页面](https://radimrehurek.com/gensim)上找到有关 Gensim 的更多信息。 现在,您已经安装了 NLTK 和`gensim`,让我们继续进行讨论
# 标记文本数据
......@@ -112,11 +112,11 @@ print(WordPunctTokenizer().tokenize(input_text))
图 1:分词器输出
句子标记程序将输入文本分为句子。 当涉及标点时,两个单词的分词器的行为会有所不同。 例如,单词'It's'由点词标记器划分的方式与常规 tok 分配器的划分方式不同。
句子标记程序将输入文本分为句子。 当涉及标点时,两个单词的分词器的行为会有所不同。 例如,单词`It's`由点词标记器划分的方式与常规分词器的划分方式不同。
# 使用词干将单词转换为其基本形式
使用文本意味着需要进行很多变化。 我们必须处理同一个单词的不同形式,并使计算机理解这些不同的单词具有相同的基本形式。 例如,单词`sing`可以以多种形式出现,例如*歌手**唱歌**歌曲,演唱的*等。 这组单词具有相似的含义。 此过程称为“阻止”。 词干是产生词根/基词形态变异的一种方式。 人类可以轻松地识别这些基本形式并得出上下文。
使用文本意味着需要进行很多变化。 我们必须处理同一个单词的不同形式,并使计算机理解这些不同的单词具有相同的基本形式。 例如,单词`sing`可以以多种形式出现,例如*歌手**唱歌**歌曲,演唱的*等。 这组单词具有相似的含义。 此过程称为词干提取。 词干是产生词根/基词形态变异的一种方式。 人类可以轻松地识别这些基本形式并得出上下文。
分析文本时,提取这些基本形式很有用。 这样做可以提取从输入文本中导出的有用统计信息。 阻止是实现此目的的一种方法。 词干分析器的目标是将单词从其不同形式简化为通用的基本形式。 基本上,这是一种启发式过程,可切断单词的结尾以提取其基本形式。 让我们看看如何使用 NLTK 做到这一点。
......@@ -172,7 +172,7 @@ for word in input_words:
让我们讨论一下这里使用的三种词干算法。 他们基本上都试图实现相同的目标。 它们之间的区别是用来达到基本形式的严格程度。
Porter 词干分析器最不严格,而 Lancaster 最严格。 如果仔细观察输出,您会发现差异。 对于`possibly``provision`之类的词,词干的行为有所不同。 从 Lancaster 词干提取器获得的词干输出有些混乱,因为它大大减少了单词数。 同时,该算法速度很快。 有一个很好的经验法则是使用 Snowball 提取器,因为它是速度和 s t 严格性之间的良好折衷。
Porter 词干分析器最不严格,而 Lancaster 最严格。 如果仔细观察输出,您会发现差异。 对于`possibly``provision`之类的词,词干的行为有所不同。 从 Lancaster 词干提取器获得的词干输出有些混乱,因为它大大减少了单词数。 同时,该算法速度很快。 有一个很好的经验法则是使用 Snowball 提取器,因为它是速度和严格性之间的良好折衷。
# 使用词形化将单词转换为其基本形式
......@@ -214,7 +214,7 @@ print('\n', formatted_text.format('INPUT WORD', *lemmatizer_names),
'\n', '='*75)
```
遍历单词并使用名词和动词 lemmatizers 对单词进行 lemmatize
遍历单词并使用名词和动词词形还原器对单词进行词形还原
```py
# Lemmatize each word and display the output
......@@ -230,7 +230,7 @@ for word in input_words:
图 3:脱胶机输出
我们可以看到,名词 lemmatizer 的作用与动词 lemmatizer 的作用不同,例如涉及`writing``calves`的单词。 如果将这些输出与词干输出进行比较,则也会看到差异。 lemmatizer 的输出都是有意义的,而词干提取器的输出可能是有意义的 是有意义的。
我们可以看到,名词词形还原器的作用与动词词形还原器的作用不同,例如涉及`writing``calves`的单词。 如果将这些输出与词干输出进行比较,则也会看到差异。 词形还原器的输出都是有意义的,而词干提取器的输出可能是有意义的也可能是没意义的。
# 将文本数据分为多个块
......@@ -337,9 +337,9 @@ if __name__=='__main__':
让我们通过使用每个句子中的单词计数为每个句子构造一个直方图。 每个特征向量都是 14 维的,因为我们有 14 个唯一的词:
* 句子 1:[2,1,1,1,1,1,0,0,0,0,0,0,0,0]
* 句子 2:[1,0,0,0,0,1,1,1,1,1,1,1,0,0]
* 句子 3:[0,1,0,1,1,0,0,0,1,1,1,1,1,1]
* 句子 1:`[2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]`
* 句子 2:`[1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0]`
* 句子 3:`[0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1]`
现在,我们已经使用“单词袋”模型提取了这些特征,我们可以使用机器学习算法来分析这些数据。
......@@ -542,7 +542,7 @@ for sent, category in zip(input_data, predictions):
图 6:类别预测器输出
我们可以直观地看到预测的类别是正确的。 接下来,我们将看另一种形式的文本分析 sis –性别识别。
我们可以直观地看到预测的类别是正确的。 接下来,我们将看另一种形式的文本分析 性别识别。
# 构造性别标识符
......@@ -653,7 +653,7 @@ input_names = ['Alexander', 'Danielle', 'David', 'Cheryl']
print(name, '==>', classifier.classify(extract_features(name, i)))
```
完整代码在文件`gender_identifier.py`中给出。 如果运行代码,您将得到以下输出 t
完整代码在文件`gender_identifier.py`中给出。 如果运行代码,您将得到以下输出:
![](img/B15441_15_07.png)
......@@ -708,7 +708,7 @@ if __name__=='__main__':
fileids=[f])), 'Negative') for f in fileids_neg]
```
定义培训和测试之间的区别。 在这种情况下,我们将为培训分配 80%,为测试分配 20%
定义培训和测试之间的区别。 在这种情况下,我们将为培训分配 80%,为测试分配 20%:
```py
# Define the train and test split (80% and 20%)
......@@ -809,7 +809,7 @@ if __name__=='__main__':
我们可以直观地看到并验证预测是否正确。
在本节中,我们构建了一个复杂的情绪分析器。 我们将继续在 NLP 空间中的旅程,并学习潜在 Dirichlet 分配的基础 ns
在本节中,我们构建了一个复杂的情绪分析器。 我们将继续在 NLP 空间中的旅程,并学习潜在狄利克雷分布的基础
# 使用潜在狄利克雷分配的主题建模
......@@ -952,7 +952,7 @@ if __name__=='__main__':
图 11:主题建模器输出
我们可以看到,将数学和历史这两个主题区分开来是相当不错的。 如果您查看这些文本,则可以验证每个句子 i 都是关于数学还是历史的。
我们可以看到,将数学和历史这两个主题区分开来是相当不错的。 如果您查看这些文本,则可以验证每个句子都是关于数学还是历史的。
# 总结
......
......@@ -11,9 +11,9 @@
* DialogFlow:
* 设置 DialogFlow
* 使用小部件将聊天机器人集成到网站中
* 使用 Python 将 chatbot 集成到网站中
* 使用 Python 将聊天机器人集成到网站中
* 在 DialogFlow 中设置 Webhook
* 为意图启用 webhook
* 为意图启用 Webhook
* 为意图设定训练短语
* 设置意图的参数和动作
* 通过 Webhook 建立履行响应
......@@ -77,7 +77,7 @@ Google Duplex 是一个很好的聊天机器人听起来很自然的有力例子
在深入研究自己的聊天机器人的设计之前,让我们介绍一些在开发过程中对我们有帮助的基础概念。
# Chatbot 概念
# 聊天机器人概念
在开发代码之前,让我们设定一个基准并访问一些与聊天机器人相关的有用定义。
......@@ -107,7 +107,7 @@ Google Duplex 是一个很好的聊天机器人听起来很自然的有力例子
**集成**
像 DialogFlow 和 Lex 这样的 Chatbot 平台可以与大多数最受欢迎的对话和消息传递平台集成,例如 Google Assistant,Facebook Messenger,Kik 和 Viber 等。
像 DialogFlow 和 Lex 这样的聊天机器人平台可以与大多数最受欢迎的对话和消息传递平台集成,例如 Google Assistant,Facebook Messenger,Kik 和 Viber 等。
**达成**
......@@ -128,7 +128,7 @@ Google Duplex 是一个很好的聊天机器人听起来很自然的有力例子
**唤醒词**
像 Alexa 或 Siri 这样的许多聊天机器人保持休眠状态,直到它们被“唤醒”并准备好接收命令为止。 要唤醒它们,需要一个“唤醒词”。 对于 Alexa,最常用的唤醒词是“ Alexa”。 对于 Siri,默认唤醒字为“ Hey Siri”。 并且,对于星舰企业版,唤醒词是“计算机”。
像 Alexa 或 Siri 这样的许多聊天机器人保持休眠状态,直到它们被“唤醒”并准备好接收命令为止。 要唤醒它们,需要一个“唤醒词”。 对于 Alexa,最常用的唤醒词是“Alexa”。 对于 Siri,默认唤醒字为“Hey Siri”。 并且,对于 StarShip 企业版,唤醒词是“Computer”。
**启动词**
......@@ -191,7 +191,7 @@ Webhook 是,HTTP 推送 API 或 Web 回调。 它也称为反向 API,因为
我们几乎已经准备好继续开发自己的聊天机器人。 但是,在此之前,我们应该考虑主要的聊天机器人平台,这些平台是我们聊天机器人的开发和发行的基础。
# Chatbot 平台
# 聊天机器人平台
一些使用最广泛的聊天机器人是由主要供应商(例如 Google,AWS 和 Microsoft)开发的平台实现的。 在为聊天机器人选择技术堆栈时,应仔细考虑他们的服务产品。 这三大供应商均提供可靠且可扩展的云计算服务,这些服务将帮助您根据需要实现和自定义聊天机器人。 到目前为止,可以轻松创建基于文本或语音的机器人的最著名平台如下:
......@@ -207,7 +207,7 @@ Webhook 是,HTTP 推送 API 或 Web 回调。 它也称为反向 API,因为
Google 在机器学习和**自然语言处理****NLP**)中有着广泛的研究历史。 这项研究的大部分内容都反映在他们的 DialogFlow 工具中。 DialogFlow 与 Google Cloud 语音转文本 API 以及其他第三方服务(例如 Google Assistant,Amazon Alexa 和 Facebook Messenger)集成在一起。
无需编写任何代码即可创建提供很多功能的聊天机器人。 最初,我们将回顾如何使用 **Google Cloud Platform****GCP**)控制台,仅通过即可不使用代码来配置聊天机器人。 在本章的以下各节中,我们将演示如何将 chatbot 与其他服务集成。 本章后面的部分将需要对 Python 语言有基本的了解。
无需编写任何代码即可创建提供很多功能的聊天机器人。 最初,我们将回顾如何使用 **Google Cloud Platform****GCP**)控制台,仅通过即可不使用代码来配置聊天机器人。 在本章的以下各节中,我们将演示如何将聊天机器人与其他服务集成。 本章后面的部分将需要对 Python 语言有基本的了解。
**入门步骤**
......@@ -232,13 +232,13 @@ DialogFlow 中的开发利用了我们之前讨论的两个主要概念-意向
![](img/B15441_16_02.png)
图 2:DialogFlow chatbot 意图创建
图 2:DialogFlow 聊天机器人意图创建
正如我们先前看到的,聊天机器人开发中的另一个重要概念是插槽类型。 在 DialogFlow 中,我们将插槽类型称为实体。 通过实体,可以识别对话中的常见或重复出现的参数。 实体可以是内置的或定制的。 实体的使用使聊天机器人更具通用性和灵活性。 单击**实体**标签时,您应该看到以下屏幕:
![](img/B15441_16_03.png)
图 3:DialogFlow chatbot 实体创建
图 3:DialogFlow 聊天机器人实体创建
让我们从仅使用意图的基本示例开始。 首先,我们将创建代理,然后通过 DialogFlow 接口定义一些意图。 可以通过编程方式创建这些意图,但是为了使示例保持简单,我们将使用图形化界面来创建意图。 首先,让我们设置后备意图。 如果没有其他意图被调用,则将被调用:
......@@ -263,11 +263,11 @@ DialogFlow 中的开发利用了我们之前讨论的两个主要概念-意向
* 通过小部件
* 使用 Python
我们将从访问第一种方法开始,这是更简单的方法。 此方法使用 *iframe* 将 DialogFlow 集成到网页中。 要使用此方法,请从左侧菜单中选择 **Integrations** ,并确保已启用 **Web Demo** 。 复制 HTML 代码并将其粘贴到网页中,这样就可以在您的网站上使用聊天机器人了:
我们将从访问第一种方法开始,这是更简单的方法。 此方法使用`iframe`将 DialogFlow 集成到网页中。 要使用此方法,请从左侧菜单中选择`Integrations`,并确保已启用`Web Demo`。 复制 HTML 代码并将其粘贴到网页中,这样就可以在您的网站上使用聊天机器人了:
![](img/B15441_16_05.png)
图 5:使用 iframe 将聊天机器人集成到网站中
图 5:使用`iframe`将聊天机器人集成到网站中
在下面的部分中,我们将考虑第二种方法-使用 Python。 如我们所见,集成聊天机器人的小部件方法非常简单。 但是,我们几乎无法控制机器人的实施方式。 使用 Python 将聊天机器人集成到站点中,可以在如何部署聊天机器人方面为开发人员提供更多的控制权和灵活性。
......
......@@ -585,7 +585,7 @@ ica.fit(faces['data'])
# 潜在 Dirichlet 分配的主题建模
# 潜在狄利克雷分布的主题建模
......@@ -798,7 +798,7 @@ Topic-mixtures for comp.sys.mac.hardware (left) and rec.autos (right)
* 用于 ML 因子分析的 *EM 算法**Rubin D.**和 Thayer D.**Psychometrika* ,47,1982
* *独立成分分析:算法和应用**Hyvarinen A.和 Oja E.**神经网络* 13,2000
* *信息论的数学基础**Khinchin A. I.**Dover 出版物*
* *潜在 Dirichlet 分配,机器学习研究杂志**Blei D.**Ng A.**和 Jordan M. [* ,3,(2003)993-1022
* *潜在狄利克雷分布,机器学习研究杂志**Blei D.**Ng A.**和 Jordan M. [* ,3,(2003)993-1022
* *机器学习算法第二版**Bonaccorso G.**Packt Publishing* ,2018 年
* *掌握机器学习算法**Bonaccorso G.**Packt Publishing* ,2018
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册