Task02

论坛 期权论坛 脚本     
匿名技术用户   2021-1-7 11:07   27   0

感谢伯禹提供的机会

文本预处理

文本是一类序列数据,一篇文章可以看作是字符或单词的序列,本节将介绍文本数据的常见预处理步骤,预处理通常包括四个步骤:

我们可以通过引入更复杂的规则来解决这些问题,但是事实上,有一些现有的工具可以很好地进行分词,我们在这里简单介绍其中的两个:spaCyNLTK

  1. 读入文本
  2. 分词
  3. 建立字典,将每个词映射到一个唯一的索引(index)
  4. 将文本从词的序列转换为索引的序列,方便输入模型

    读入文本

    我们用一部英文小说,即H. G. Well的Time Machine,作为示例,展示文本预处理的具体过程。

    分词

    我们对每个句子进行分词,也就是将一个句子划分成若干个词(token),转换为一个词的序列。

    建立字典

    为了方便模型处理,我们需要将字符串转换为数字。因此我们需要先构建一个字典(vocabulary),将每个词映射到一个唯一的索引编号。

    tokens = [tk for st in sentences for tk in st] return collections.Counter(tokens) # 返回一个字典,记录每个词的出现次数

    我们看一个例子,这里我们尝试用Time Machine作为语料构建字典

    将词转为索引

    使用字典,我们可以将原文本中的句子从单词序列转换为索引序列

    用现有工具进行分词

    我们前面介绍的分词方式非常简单,它至少有以下几个缺点:

  5. 标点符号通常可以提供语义信息,但是我们的方法直接将其丢弃了
  6. 类似“shouldn't", "doesn't"这样的词会被错误地处理
  7. 类似"Mr.", "Dr."这样的词会被错误地处理

语言模型

一段自然语言文本可以看作是一个离散时间序列,给定一个长度为TT的词的序列w1,w2,…,wTw1,w2,…,wT,语言模型的目标就是评估该序列是否合理,即计算该序列的概率:

P(w1,w2,…,wT).P(w1,w2,…,wT).

本节我们介绍基于统计的语言模型,主要是nn元语法(nn-gram)。在后续内容中,我们将会介绍基于神经网络的语言模型。

语言模型

假设序列w1,w2,…,wTw1,w2,…,wT中的每个词是依次生成的,我们有

P(w1,w2,…,wT)=∏t=1TP(wt∣w1,…,wt1)=P(w1)P(w2∣w1)P(wT∣w1w2wT1)P(w1,w2,…,wT)=∏t=1TP(wt∣w1,…,wt1)=P(w1)P(w2∣w1)P(wT∣w1w2wT1)

例如,一段含有4个词的文本序列的概率

P(w1,w2,w3,w4)=P(w1)P(w2∣w1)P(w3∣w1,w2)P(w4∣w1,w2,w3).P(w1,w2,w3,w4)=P(w1)P(w2∣w1)P(w3∣w1,w2)P(w4∣w1,w2,w3).

语言模型的参数就是词的概率以及给定前几个词情况下的条件概率。设训练数据集为一个大型文本语料库,如维基百科的所有条目,词的概率可以通过该词在训练数据集中的相对词频来计算,例如,w1w1的概率可以计算为:

P^(w1)=n(w1)nP^(w1)=n(w1)n

其中n(w1)n(w1)为语料库中以w1w1作为第一个词的文本的数量,nn为语料库中文本的总数量。

类似的,给定w1w1情况下,w2w2的条件概率可以计算为:

P^(w2∣w1)=n(w1,w2)n(w1)P^(w2∣w1)=n(w1,w2)n(w1)

其中n(w1,w2)n(w1,w2)为语料库中以w1w1作为第一个词,w2w2作为第二个词的文本的数量。

循环神经网络

本节介绍循环神经网络,下图展示了如何基于循环神经网络实现语言模型。我们的目的是基于当前的输入与过去的输入序列,预测序列的下一个字符。循环神经网络引入一个隐藏变量HH,用HtHt表示HH在时间步tt的值。HtHt的计算基于XtXt和Ht1Ht1,可以认为HtHt记录了到当前字符为止的序列信息,利用HtHt对序列的下一个字符进行预测。Image Name

循环神经网络的构造

我们先看循环神经网络的具体构造。假设Xt∈Rn×dXt∈Rn×d是时间步tt的小批量输入,Ht∈Rn×hHt∈Rn×h是该时间步的隐藏变量,则:

Ht=(XtWxh+Ht1Whh+bh).Ht=(XtWxh+Ht1Whh+bh).

其中,Wxh∈Rd×hWxh∈Rd×h,Whh∈Rh×hWhh∈Rh×h,bh∈R1×hbh∈R1×h,函数是非线性激活函数。由于引入了Ht1WhhHt1Whh,HtHt能够捕捉截至当前时间步的序列的历史信息,就像是神经网络当前时间步的状态或记忆一样。由于HtHt的计算基于Ht1Ht1,上式的计算是循环的,使用循环计算的网络即循环神经网络(recurrent neural network)。

在时间步tt,输出层的输出为:

Ot=HtWhq+bq.Ot=HtWhq+bq.

其中Whq∈Rh×qWhq∈Rh×q,bq∈R1×qbq∈R1×q。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP