本节课主要讨论如何构建人工智能,以处理语言
语法和语义 Syntax and Semantics
为了解析并理解人类的语言,AI 需要了解句子结构和语义
上下文无关法 Context-Free Grammar
形式语法(Formal Grammar)是生成语言句子的规则系统,在无关法中,我们把文本从语义重抽离,用形式语法表示句子的结构
句子表示
其中,句子(S)、名词(N)、动词(N)、短语(P)、冠词(D)

nltk 自然语言处理包
这是一个库,其中包含一些自然语言处理的常用工具
这里定义了一个上下文无关法,记为 grammar
然后调用语法,创建了一个图表解析器
进行输入,然后分词,并用树状图画出

n-grams
这是指文本中连续 n 项的序列,用于解析文本
比如:
• 词n-grams:以词为单位,例如在句子 “The quick brown fox” 中,2-grams(也叫bigrams)的序列是 [“The quick”, “quick brown”, “brown fox”]。
• 字符n-grams:以字符为单位,例如单词 “hello” 的3-grams 是 [“hel”, “ell”, “llo”]。
分词 Tokenization
这是指将字符序列分割成片段的任务
马尔可夫模型 Markov Models
马尔可夫模型由节点组成,每个节点的值基于有限的前几个节点具有概率分布。马尔可夫模型可用于生成文本。
这里通过前几个词来判断下一个词生成的概率
最终,使用马尔可夫模型,我们能够生成通常语法正确且表面上听起来与人类语言输出相似的文本。然而,这些句子缺乏实际的意义和目的。
词袋模型 Bag-of-Words Model
一种将文本表示为无序词集合的模型
忽略语法,只考虑句子中单词的意义,适用于情感分析等方向
朴素贝叶斯 Naive Bayes
一种可以用于基于词袋模型的情感分析的技术

这里主要是运用公式求: P(sentiment | text)
一个例子
“my grandson loved it”
分词
P(positive | “my”, “grandson”, “loved”, “it”)
运用贝叶斯定理
词表示 Word Representation
独热表示 one-hot representation
每个单词都由一个向量表示,该向量的值数量与我们拥有的单词数量相同。除了向量中的一个值等于 1 之外,所有其他值都等于 0
分布式表示 distributed representation
独热编码在应对大量的单词时会十分低效(向量的维度太高)
因此我们需要考虑降低维度,把其意义分布在向量的多个值中
这样一来,可以使用较小的向量为每个单词生成唯一的值;还可以通过向量的差异来表示单词间的相似性
词向量 word2vec
word2vec 是一种生成词语分布式表示的算法。它通过 Skip-Gram 架构来实现,这是一种神经网络架构,用于根据目标词预测上下文
在这个架构中,神经网络为每个目标词都有一个输入单元。一个较小的单层隐藏层将生成词语分布式表示的值。
在处理结束时,每个单词最终都变成一个向量,或者一系列数字
我们可以运行一个函数,生成与单词“book”最相似的单词。在这个网络中,这些单词将是:book,books,essay,memoir,essays,novella,anthology,blurb,autobiography,audiobook。这对计算机来说已经很不错了!通过一串没有具体意义的数字,人工智能能够生成与“book”在意义上有真正相似性的单词!我们还可以根据单词向量之间的差异来计算单词之间的差异。例如,king 和 man 之间的差异与 queen 和 woman 之间的差异相似。也就是说,如果我们把 king 和 man 之间的差异加到 woman 的向量上,最接近的结果向量是 queen!同样地,如果我们把 ramen 和 japan 之间的差异加到 america 上,我们得到 burritos。
通过使用神经网络和词语的分布式表示,我们让我们的 AI 理解语言中词语之间的语义相似性,使我们更接近能够理解和生成人类语言的 AI
神经网络
循环神经网络 RNN
循环神经网络的隐藏层需要接受输入以及上一步的隐藏状态,并输出一个新的隐藏状态
一直循环,直到得到最后一个单词和结束标记
然而,我们必须将输入阶段的所有信息存储到最终状态中,如果遇到长系列,将十分棘手
因此,我们可以着重处理一些关键字词,提升效率
注意力 Attention
注意力使神经网络能够决定在生成输出句子的每个阶段关注哪些值
我们需要通过某些方式来计算注意力分数,用来表示某个字词的权重、及重要性
然而,针对长序列,依然面临着计算资源占用大、时间长等弊端
Transformer
这是一种新的训练架构