当前位置: 首页 > news >正文

NLP基础

导论

自然语言与编程语言

词汇量

结构化

歧义性

容错性

易变性

简略性

层次

输入

文本、语音转文本、OCR

词法分析

中文分词

词性标注

实体识别

下游

句法分析

语义分析

词义消歧
语义角色标注 
语义依存分析 
指代消解等 

篇章分析

信息抽取

关键词、实体、关系

分类

情感分类、垃圾邮件

聚类

相似文档归档

高级

自动问答

自动摘要

机器翻译

流派

基于规则

基础研究1950

图灵测试、乔姆斯基预发、句法分析器

规则系统1980

第一个自动问答系统、手写规则“NLU”系统、面向逻辑推理的编程语言

基于统计1990

以举例子的方式让机器自动学习语言规律

深度学习2010

语料库

中文分词语料库

由人工正确切分后的句子集合

词性标注语料库

切分并为每个词语指定一个词性

命名实体识别语料库

 人工标注文本内部制作者关心的实体名词以及实体类别

句法分析语料库

文本分类语料库

开源工具
open source initiative

NLTK

词法分析、句法分析、语义分析、文本分类等

CoreNLP

词法分析、句法分析、语义分析、关系抽取、指代消解、文本分类等

LTP

词法分析、句法分析、语义分析

HanLP

词法分析、句法分析、关键词句提取、文本分类等

语言模型

对语言现象的数学抽象

计算句子的出现概率𝑝(𝒘)的模型

传统方法

最大似然估计(MLE)

缺点

数据稀疏

实际遇到的句子大部分都在语料库之外(概率为0)

计算代价大

二元语法bigram

马尔可夫假设

每个事件的发生概率只取决于前一个事件

事件构成的因果链被称作马尔可夫链

平滑策略

利用低阶n元语法平滑高阶n元语法

n元语法

每个单词的概率仅取决于该单词之前的𝑛个单词

n一般不大于3

中文分词语料库

《人民日报》语料库PKU

微软亚洲研究院语料库MSR

繁体中文分词语料库

港城市大学提供的CITYU

台湾中央研究院提供的AS

构建词网

所有一元语法构成的网状结构

寻找最短路径

维特比算法

前向遍历节点找到最小花费以及前驱指针

后向回溯前驱指针得到最短路径

调整模型

用户词典

增加二元语法及频次

词典分词

具备独立意义的最小单位

词典

词典中的字符串就是词

常用

搜狗的互联网词库(SogouW,15万个词条)

清华大学开放中文词库(THUOCL)

码农场千万级巨型汉语词库(千万级词条)

HanLP词典

CoreNatureDictionary.txt

 以空格分隔的表格形式

第一列是单词本身

之后每两列分别表示词性与相应的词频

切分算法

基于字符串匹配

完全切分

找出一段文本中的所有单词

排列组合

正向最长匹配

[商品, 和服, 务]

逆向最长匹配

[商品, 和, 服务]

双向最长匹配

同时执行正向和逆向最长匹配,若词数不同,则返回词数更少的

否则,返回两者中单字更少的

当单字数也相同时,优先返回逆向最长匹配的结果

基于理解

在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象

分词子系统+句法语义子系统+总控部分

基于统计

N元文法模型(N-gram)

隐马尔可夫模型(HMM)

最大熵模型(ME)

条件随机场模型(CRF)

字典树

判断集合(词典)中是否含有字符串

树中每条边都对应一个字,根节点往下的路径构成一个个字符串

工具

jieba

四种模式

精确模式

适合文本分析

全模式

不能解决歧义

搜索引擎模式

在精确模式的基础上,对长词再次切分,提高召回率

paddle模式

利用PaddlePaddle深度框架,训练序列标注(双向GRU)模型实现分词,同时支持词性标注

功能

分词

jieba.cut

四个参数: 需要分词的字符串;cut_all 是否采用全模式;HMM 是否使用 HMM 模型;use_paddle 是否使用paddle模式下的分词模式

jieba.cut_for_search搜索引擎模式

两个参数:需要分词的字符串;是否使用 HMM 模型

自定义词典

自行添加新词

jieba.load_userdict(file_name)

一个词占一行:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒

关键词抽取

jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())

基于TF-IDF

topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20

withWeight 为是否一并返回关键词权重值,默认值为 False

allowPOS 仅包括指定词性的词,默认值为空,即不筛选

词性标注

jieba.posseg.cut( )

SnowNLP

处理中文文本内容

中文分词、词性标注、情感分析、文本分类、转换成拼音、繁简转换、文本关键词和文本摘要提取、计算文档词频(TF)和逆向文档频率(IDF)、Tokenization(分割成句子)、文本相似度计算

 THULAC

中文分词和词性标注

NLPIR

对原始文本集进行处理和加工

中间件处理效果的可视化

中文分词,词性标注,命名实体识别,用户词典、新词发现与关键词提取等

HanLP

支持2档用户词典优先级

低优先级

由统计模型预测分词结果,再按用户词典合并

高优先级

优先考虑用户词典,具体实现由分词器自行决定

词向量

词袋模型统计指标

布尔词频

词频非零的话截取为1,否则为0

TF

词频

我、你、的等不具特征的词

TF-IDF

TF(𝑡, 𝑑)代表𝑡在𝑑中的出现频次

DF(𝑡)代表有多少篇文档包含t

静态词向量

独热编码

数据缺失、语义缺失

word2vec

连接传统机器学习与深度学习的桥梁,通过一个单词的上下文可以得到它的意思

模型

CBOW

输入上下文,输出中间词

简单三层神经网络

输入为4个上下文单词的独热向量

输入层到隐藏层的权重矩阵记作𝓥 ∈ ℝ|𝑉|×k

从隐藏层到输出层的权重矩阵记作𝓤 ∈ ℝ𝑘×|𝑉|

基于窗口(以中心词为界,左右k个长度)的语言模型

Skip-gram

输入中间词,输出上下文

实操gensim

模型model

model = Word2Vec(PathLineSentences(input_dir), vector_size=100, window=5, min_count=1, worker=4) 

min_count:对内部词典进行剪枝,忽略只出现一两次的单词

vector_size:词向量维度

model.save(" ") 
model.load(" ")
model.train(" ")

词向量wv

model.wv.save(“ ”)

相似度计算

gensim.models.KeyedVectors.load(" ")

wv.similar_by_word(word)

最相似的n个词

wv.n_similarity([' ', ' '], [' ', ' '])

字符串相似度

GloVe

利用“词-上下文”共现信息

Word2vec:局部共现,只考虑当前样本中是否共现

GloVe:利用全局统计信息,即共现频次

保留了局部窗口共现信息,语义效果略好于word2vec

动态词向量

解决静态词向量无法处理的一词多义

词向量根据其所处的上下文的不同而发生改变

模型

GPT

单向Transformer

ELMo词向量

双向LSTM

Bert

双向 Transformer

词向量的作用

从大规模非结构化数据中预先学习到许多结构

可用于单词相似性计算、文本相似性计算、词语类比等

多模态:文本+图像

由过去的特征工程转变为结构工程

RNN

使用带自反馈的神经元

作用

输入-输出映射

机器学习模型(常用)

序列到类别

分类

序列到序列

同步

序列标注

信息抽取

语音识别

异步

机器翻译

存储器

联想记忆模型

简单循环神经网络SRN

只有一个隐藏层

增加了从隐藏层到隐藏层的反馈连接

长短期记忆网络LSTM

解决RNN无法处理长距离的依赖

三个门

双向长短期记忆网络BiLSTM

Tree-LSTM

Sentence-LSTM

门控循环单元网络(GRU)

与LSTM相当,更容易训练

重置门、更新门

应用

语言模型

一个句子的可能性/合理性

作词机、作诗

机器翻译

看图说话

对话系统

Transformer

完全基于自注意力机制

结构

Encoders编码

6个串联,每个编码器的输入是前一个编码器的输出

结构

自注意力机制

单头

输入:词向量

将词向量乘上三个不同矩阵,得到三个新的向量Q、K、V

计算注意力得分

Q向量与各个单词的K向量的点积

将得分分别除以一个特定数值8(K向量的维度的平方根,通常K向量的维度是64),以使梯度更稳定

softmax运算结果乘上Vi = Zi

各个Vi向量累加得到新的Z(逐元素,维度不变)

多头 8

扩展了模型关注不同位置的能力

给自注意力层多个“表示子空间”

8个矩阵拼接起来再用一个额外的权重矩阵与之相乘

前馈神经网络

Decoders解码

6个串联,每个解码器的输入是前一个解码器的输出+整个编码的输出

位置编码

Transformer中确实没有考虑顺序信息

把词向量输入变成携带位置信息的输入

给每个词向量加上一个有顺序特征的向量

预训练模型

概述

三要素

大数据(无标注)、大模型、大算力

计算设备

GPU、TPU

模型

自回归模型GPT

无监督预训练

从左至右对输入文本进行建模

给定文本序列计算最大似然估计

使用了12层Transformer作为模型的基本结构

有监督任务精调

利用下游任务的有标注数据进行精调

利用GPT最后一层的表示来完成相关预测任务

某些情况下,添加额外的预训练损失可以进一步提升性能

根据任务特点,设置不同的输入输出形式

分类、文本蕴含(因果)、相似度、阅读理解(概率分布)

自编码模型BERT

双向预训练语言模型,两个无监督预训练任务

整体结构

base:12层,参数量110M

large:24层,参数量330M

输入

原始:[CLS] xi [SEP] xi [SEP]

累加

词向量:通过词向量矩阵将输入文本转换为实值向量表示

块向量:编码当前词属于哪一个块

位置向量:编码当前词的绝对位置

预训练任务

掩码语言模型(MLM) 

将输入序列中的部分token进行掩码,并且要求模型将它们进行还原

将15%的输入文本进行mask

80% 的概率替换为 [MASK] 标记

以 10% 的概率替换为词表中的任意一个随机词

防止模型偷懒记住mask词

10% 的概率保持原词不变,即不替换

适应下游任务(下游没有mask)且学习语义信息

拓展:N-gram掩码

对一个连续的N-gram单元进行掩码

难度:N-gram Masking > Whole Word Masking > MLM

下一个句子预测(NSP)

学习两段文本之间的关系(上下文信息)

预测Sentence B是否是Sentence A的下一个句子

正样本:文本中相邻的两个句子“句子 A”和“句子 B”

负样本:将“句子 B”替换为语料库中任意一个句子

应用

特征提取和模型精调

特征提取

仅利用BERT提取输入文本特征,生成对应的上下文语义表示

BERT部分只进行解码(无梯度回传),不参与目标任务训练

模型精调(常用)

利用BERT作为下游任务模型基底,生成文本对应的上下文语义表示

参与下游任务训练,对自身参数进行更新

单句文本分类

将输入文本分成不同类别

多分类:在finetune的标签中确定具体分类

句对文本分类

将一对文本分成不同类别

二分类:文本蕴含或冲突

阅读理解

在阅读篇章和问题后给出相应答案

输出为答案的开始位置和结束位置

序列标注

命名实体识别任务(NER)

对给定输入文本的每个词输出一个标签

改进

RoBERTa

舍弃NSP可以得到微弱提升

使用更大的批次大小

MacBERT

评测了主流预训练模型在中文下的表现

DistilBERT

蒸馏,相比BERT-base,小40%、快60%,在NLU任务上可达到原模型的97%
 

相关文章:

  • 公众号查题系统平台
  • 129、LeetCode-392.判断子序列
  • Python面向对象编程
  • java计算机毕业设计霍山石斛网站源码+数据库+系统+lw文档+mybatis+运行部署
  • Python文件处理与垃圾回收机制
  • java计算机毕业设计基于MVC框架的在线书店设计源码+数据库+系统+lw文档+mybatis+运行部署
  • 计算机毕业设计springboot+vue基本微信小程序的外卖点餐订餐平台
  • 文件用手机拍照片打印时,打印出来总是有黑阴影,如何去掉黑色阴影打印清晰的图片
  • okhttp3与旧版本okhttp的区别分析
  • 学习C++第二课
  • Java连接池详解
  • 面向对象编程——类与对象(C#)(未写完)
  • 军品研制过程参考标准
  • 开学季,学长带你认识新生活
  • R语言data.table导入数据实战:data.table数据列索引
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • .pyc 想到的一些问题
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【译】理解JavaScript:new 关键字
  • Android Volley源码解析
  • IOS评论框不贴底(ios12新bug)
  • js 实现textarea输入字数提示
  • Less 日常用法
  • STAR法则
  • Theano - 导数
  • windows下如何用phpstorm同步测试服务器
  • 从0实现一个tiny react(三)生命周期
  • 关于Java中分层中遇到的一些问题
  • 区块链共识机制优缺点对比都是什么
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 双管齐下,VMware的容器新战略
  • 赢得Docker挑战最佳实践
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • (4)(4.6) Triducer
  • (6)设计一个TimeMap
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (BFS)hdoj2377-Bus Pass
  • (day6) 319. 灯泡开关
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二)windows配置JDK环境
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (十八)SpringBoot之发送QQ邮件
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .net打印*三角形
  • .net反混淆脱壳工具de4dot的使用
  • .NET中统一的存储过程调用方法(收藏)
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @WebServiceClient注解,wsdlLocation 可配置
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell