# 分词

为什么需要分词?

  • 在自然语言处理领域,信息处理的最小单位一般是词
  • 在中文里,词和词之间没有天然的分隔,比如空格,因此在进行其他任务之前,通常需要分词

# 分词算法

  • 查词典法
    • 最大匹配法
    • 最大概率法
  • 序列标注法
  • N - 最短路径法

# 新词发现

为什么需要新词发现?

  • 基于词典的分词方法对于没在词典的词(新词)没办法处理
  • 新词也称为未登录词
  • 人名、地名、机构名、品牌名、专业名词、缩略语、网络新词

新词发现的思路:

  • 根据语料(文本数据)中词的一些特征,将语料中可能的词提取出来
  • 再把所有提取出来的词和词典里的词进行比较
  • 不在词典里的词就是新词

新词特征:频率、内部凝固度(互信息)、外部自由度(信息熵)

# 词向量

# 名词解释

分词:将句子、段落、文章这种长文本,分解为以字词为单位的数据结构,方便后续的处理分析工作

词向量:用来表示词的向量,也可被认为是词的特征向量或表征。词向量本质是将一些低维、离散、不带任何意义的序号映射成带有特定任务性质的高维特征。

# 语言模型

语言模型:计算一个词出现的概率,极大似然估计;计算一段文字出现的概率

n 元语法模型:一个词出现的概率只和它前面 n-1 个词相关

数据平滑的基本思想:调整概率值,使零概率增值,使非零概率下调,改进模型的整体性能(加 1 法,Good-Turing 平滑)

Good-Turing 平滑:将已经出现的词的概率进行打折,打折后分出一部分概率给没有出现的词

# 神经语言模型

独热向量:每个词对应一维;向量的总维数为词表大小

例如:Wuhan University is located in Hubei,则 University 的 one-hot 为:0 1 0 0 0 0 0

输入层:n-1 个词的词向量串接

隐层:y = f (Wx+b)

  • x 输入向量
  • W 参数矩阵
  • b 偏置向量
  • f 激励函数(sigmoid, tanh)
  • y 输出向量

输出层:softmax

# Word2Vec

Word embedding: 把词表示成一个固定维数的向量

向量的每一维都是参数,是从大规模的文本中训练出来

  • Word2Vec 的参数一个是 C,一个是 W,其中 C 就是词向量的查找表,其中每一行(或每一列)就是我们常说的词向量
  • 模型训练好后,我们可以把 C 保存下来
  • Word2Vec 的主要计算量在输出层
  • 因为词表 | V | 很大,所以 softmax 的计算量很大
  • Word2Vec 提出两种加快训练速度的方式,思想都是减少 softmax 计算

Word2Vec 和 Glove 均可以训练词向量

# 文本分类

# 文本分类任务介绍

任务定义:输入一个句子或一段文本,输出句子或者文本的类别(情感分类、关系分类)。

常用方法:

  • 统计机器学习:支持向量机 SVM、最大熵模型
  • 深度学习:卷积神经网络 CNN、循环神经网络 RNN

# 基于 CNN 的文本分类

卷积:用卷积核在序列上进行重复的类似的计算。

卷积目的:单个词表达的意义是有限的,让词和它的上下文互相感知,从而丰富词的语义

池化:将多个向量变成一个向量

基于 CNN 的文本分类总结:

  • 利用卷积学习词和词的上下文特征
  • 利用池化将一个变长的句子转化为一个定长的特征向量
  • 特征向量用于输出层做文本分类
    • softmax

TextCNN:定义了 6 个卷积核(4x5,3x5,2x5 各两个)

TextCNN 总结:

  • CNN 可以有多个核,每个核的窗口大小不一样
  • 便于捕捉 n 元特征(2 元,3 元,4 元,...)
  • 多个核产生的特征,通过串接组合在一起,生成特征向量
  • 特征向量用于输出层做文本分类

# 基于 CNN 的关系分类

# 关系分类的任务介绍

给定两个实体 (人名、地名、组织结构名等等),判断两个实体之间的关系(分类),例如:小李出生在中国(出生在就是关系)

基于 CNN:

  • 句子
  • 词表示
  • 卷积
  • 池化
  • 输出层

加入 Attention 机制后:

  • 句子
  • 词表示
  • 注意力 Attention
  • 卷积
  • Attention
  • 输出层

CNN 可以和其他神经网络,如前馈神经网络、循环神经网络、Attention 网络进行组合使用

分类模型的要素:

  • 输入
  • 隐层
  • 输出层
  • 损失函数

# 注意力机制

目的:学习每个词对于任务的贡献率

  • 输入:一个向量序列
  • “something” attention on 向量序列 ,计算 attention score
  • 通过 softmax 归一化 attention score

Attention score 的用途:

  • 可以用来衡量每个词的贡献
  • 可以用来进行加权平均,得到特征

# 词性标注

# 任务介绍

词性标注,就是给每个词一个词性

HMM(隐马尔可夫模型)可用于词性标注:

  • 训练数据
  • 计算马尔可夫模型的参数
    • 利用极大似然估计
  • 预测一个句子中,每个词的词性
    • Viterbi 算法(词性预测)

HMM 参数:

  • 隐状态
  • 观察值
  • 转移概率
  • 发射概率

# 实体识别

# 任务介绍

实体识别(NER)定义:识别出文本中实体(人名、机构名、地名、时间、日期等)

两个子任务:

  • 实体边界识别
  • 确定实体类别

方法:把实体识别看成序列标注任务,为句子中的每一个词打标签

基于 Bi-directional LSTM CRF 的实体识别:

  • 词向量层
  • 双向 LSTM 层
  • CRF 层

# 循环神经网络

变体:LSTM、GRU

# LSTM

LSTM:全名为 Long Shoort Term 网络,是一种 RNN 特殊的类型,可以学习长期依赖信息。LSTM 通过刻意的设计来避免长期依赖问题。记住长期的信息在实践中是 LSTM 的默认行为,而非需要付出很大代价才能获得的能力。

LSTM 的核心概念在于细胞状态以及 “门” 结构。

细胞状态相当于信息传输的路径,让信息能在序列连中传递下去。理论上讲,细胞状态能够将序列处理过程中的相关信息一直传递下去。因此,即使是较早时间步长的信息也能携带到较后时间步长的细胞中来,这克服了短时记忆的影响。

信息的添加和移除我们通过 “门” 结构来实现,“门” 结构在训练过程中会去学习该保存或遗忘哪些信息。

遗忘门:决定应丢弃或保留哪些信息。来自前一个隐藏状态的信息和当前输入的信息同时传递到 sigmoid 函数中去,输出值介于 0 和 1 之间,越接近 0 意味着越应该丢弃,越接近 1 意味着越应该保留。

输入门:用于更新细胞状态。首先将前一层隐藏状态的信息和当前输入的信息传递到 sigmoid 函数中去。将值调整到 01 之间来决定要更新哪些信息。0 表示不重要,1 表示重要。其次还要将前一层隐藏状态的信息和当前输入的信息传递到 tanh 函数中去,创造一个新的侯选值向量。最后将 sigmoid 的输出值与 tanh 的输出值相乘,sigmoid 的输出值将决定 tanh 的输出值中哪些信息是重要且需要保留下来的。

细胞状态:更新旧细胞状态。我们把旧状态与遗忘门输出值相乘,丢弃掉我们确定需要丢弃的信息。接着加上输入门输出的值(sigmoid 的输出值与 tanh 的输出值相乘),这就是新的候选值,根据我们决定更新每个状态的程度进行变化。

输出门:用来确定下一个隐藏状态的值,隐藏状态包含了先前输入的信息。首先,我们将前一个隐藏状态和当前输入传递到 sigmoid 函数中,然后将新得到的细胞状态传递给 tanh 函数。最后将 tanh 的输出与 sigmoid 的输出相乘,以确定隐藏状态应携带的信息。再将隐藏状态作为当前细胞的输出,把新的细胞状态和新的隐藏状态传递到下一个时间步长中去。

LSTM 和 GRU 的比较:

  • LSTM:输入门,输出门,遗忘门,cell state
  • GRU:更新门,重置门,输出门

循环神经网络可用于特征抽取

# 条件随机场 CRF

输入:句子
输出:标签序列

总结:

  • 利用神经网络进行文本特征抽取
  • 不仅考虑标签本身,也考虑标签的转移得分(对比 softmax)
  • CRF 可以选择更丰富的特征

# 不规则命名实体识别方法比较

# 句法分析

概率上下文无关句法 PCFG

# 依存分析

定义:基于依存文法的句法分析。分析结果为句子中词语间依存关系组成的依存树。

每个依存关系由一个中心词 (Head) 和一个依赖词 (Dependent) 组成

基于转换的 (transition-based) 依存句法分析:

  • 将依存分析转化为操作序列生成的问题
  • 训练模型
    • 给一些训练数据(依存树库)
    • 训练一个分类器,能够生成如下操作组成的序列
      • Shift
      • Left arc
      • Right arc
  • 预测时
    • 输入:一个句子
    • 输出:操作序列
    • 解码:使用操作序列将句子转化为依存树

# 预训练

训练指为了某个特定任务,使用人工标注的数据,训练模型(比如实体识别)

预训练也是训练模型,不过是使用大规模无人工标注的数据,进行训练

  • 标注是数据里自带的,也叫做自监督训练
  • 可以看成无监督学习的一种

word2vec 中也用过预训练

与训练模型:ELMo、GPT、BERT

  • BERT 本质上是一个基于 Transformer 的预训练语言模型,只有 Transformer 的 Encoder
  • GPT 也一个基于 Transformer 的预训练语言模型,只有 Transformer 的 Decoder
  • ELMo 是一个基于 LSTM 的语言模型,由 forward 和 backward LSTM 组成

# GPT 和 BERT 比较

GPT (Generative Pre-Training) 和 BERT (Bidirectional Encoder Representation from Transformers) 都是以 Transformer 为主题架构的预训练语言模型,都是通过 “预训练 + fine tuning” 的模式下完成下游任务的搭建

  • GPT 是单向模型,无法利用上下文信息,只能利用上文;而 BERT 是双向模型
  • GPT 是基于自回归模型,可以应用在 NLU 和 NLG 两大任务,而原生的 BERT 采用的基于自编码模型,只能完成 NLU 任务,无法直接应用在文本生成上面
  • 同等参数规模下,BERT 的效果要好于 GPT

# 词汇处理

词义排岐:给定一个词及其上下文,如果其义项出现在训练集中,则确定其义项

词义学习:给定一个词及其上下文,如果其义项不在训练集中,则学习其新义项,并抽取上下文特征作为该义项的标记

# 结构分析

语言结构:一个语言单位的组成部分及其关系组成的结构体
语言单位:短语、句子、段落、篇章
组成部分:字、词、短语、句子、段落、篇章

句法关系:反映句子组成层面的关系,回答句子是否合法的问题

语义关系:反映组成部分深层的关系

句法和语义:句法关心一个语言单位是否满足语法,语义关心一个语言单位所表达的意义

句法结构:语言成分及其句法关系组成的结构
依存结构:词汇间的依存关系组成的结构
块结构:句法块及其句法关系组成的结构

结构预测模型:

  • 基于转移的模型:有限自动机
  • 基于图的模型:图空间

# 篇章分析

回指:语法描写中用来指一个语言单位从先前某个已表达的单位或意义(先行词)得出自身释义的过程或结果

零形回指(zero anaphora)是小句中有指称前文语段的意义,但没有借助语音或者词汇形式的回指现象

# 情感分析

情感分析定义:社交媒体针对特定对象的主观反应或自身的情绪状态,前者包括极性、立场、意见、态度等;后者包括情绪表达 / 诱因抽取和分类

社交媒体文本挖掘:

  • 数据层:数据采集
  • 资源层:知识图谱 标注数据
  • 技术层:知识挖掘 情感分析
  • 功能层:情报生成 预警预测

# 语义分析

语义结构:自然语言所描述的语义要素及其关系

# 实验

文本分类任务基本流程:
安装并导入相关的深度学习库、数据获取和预处理、定义神经网络、定义损失函数 (loss function) 和优化器 (optimizer)、训练网络和测试网络

一个常规的序列标注任务代码开发流程是:安装并导入相关的深度学习库、定义标签集合 (Label set)、数据获取和预处理、定义神经网络、定义损失函数 (loss function) 和优化器 (optimizer)、训练网络和测试网络。