导图社区 自然语言处理NLP
自然语言技术框架,处理流程,算法,及相关概念。
编辑于2021-08-09 09:25:15自然语言处理 Natural Language Processing
NLP概述
存在问题
【词汇粒度间题】中华人民共和国|共和国|中国
【指代归属间题】本次活动 该条款 我校 他
【指代归属间题】本次活动 该条款 我校 他
【同义近义间题】络易威登 LV 球鞋 运动鞋 跑步鞋
【局部转义间题】巧克力囊肿 鸡翅U盘
【一词多义间题】方候 意思 杯具
【上下文依赖问题】101空降师 101路 101号 101次
层级
字 -> 词 -> 篇章
文本处理流程
分词 Segmentation
清洗 Cleaning
去除非文本
去掉停用词
英文转成小写
标点符号转换
英文单词提取词干和词形还原
标准化 Normalization
特征提取 Feature Extraction
见“相关算法”-> 表征模型
建模 modeling
参考文献
http://c7dc37a0.wiz03.com/share/s/37T3uw1nhQ4I2kYrHh3yoh0J3byssu12V4UG2e_2603BtVAU
经典算法
DeepFM
SVD
奇异值分解
http://redstonewill.com/1529/
CRF
条件随机场
LDA
HMM
深度学习
RNN
原理
概念
[训练样本][时间步长数][每时间步长的维度]
时间步长数:表示有多少个隐藏神经元
St = np.tanh(np.dot(U,Xt) + np.dot(W,St−1)) ot = np.dot(V,St) h 隐藏神经元 o 输出 V,U,W权重
模型结构
n-gram
重要参数
隐藏层的数量
每层的隐藏单元数
学习率
迭代次数
缺点
梯度爆炸和梯度消失
参考文献
https://blog.csdn.net/qq_39422642/article/details/78676567
LSTM
概述
Long Short Term Memory是一种特殊的循环神经网络
Hochreiter & Schmidhuber (1997)提出
特性
循环块结构
门结构
输入门
遗忘门
输出门
记忆大约30个时间步长
图例
缺点
网络复杂度增加、速度慢
参考文献
http://c7dc37a0.wiz03.com/share/s/37T3uw1nhQ4I2kYrHh3yoh0J0cl4YD20pkbn2gZFrB0L85-8
https://www.ctolib.com/topics-135880.html
https://www.leiphone.com/news/201704/5F6DpoQUpNk8Pbzs.html
https://blog.csdn.net/zchang81/article/details/75513087?utm_source=blogxgwz7
GRU
LSTM的一种特例
更新门
Transformer
Transformer 起源自注意力机制(Attention),使用堆叠的自注意力(self-attention)、逐点(point-wise)、全连接层(fully connected layers)
优点
并行计算,提高训练速度
这是相比 LSTM 很大的突破,LSTM 在训练的时候 ,当前步的计算要依赖于上一步的隐状态,这是一个连续过程,每次计算都需要等之前的计算完成才能展开,限制模型并行能力。而 Transformer 不用LSTM结构,Attention 机制的每一步计算只是依赖上一层的输出,并不依赖上一词的信息,因而词与词之间是可以并行的,从而训练时可以并行计算, 提高训练速度。
一步到位的全局联系捕捉
顺序计算的过程中信息会丢失,尽管 LSTM 等门机制的结构一定程度上缓解了长期依赖的问题,但是对于特别长期的依赖现象,LSTM 依旧无能为力。Transformer 使用了 Attention 机制,从而将序列中的任意两个位置之间的距离是缩小为1,这对解决 NLP 中棘手的长期依赖问题是非常有效的。
局限性
注意力只能处理固定长度的文本字符串。在输入系统之前,文本必须被分割成一定数量的段或块。
这种文本块会导致 上下文碎片化。例如,如果一个句子从中间分隔,那么大量的上下文就会丢失。换言之,在不考虑句子或任何其他语义边界的情况下对文本进行分隔。
Transformer-XL
Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context
https://paperswithcode.com/paper/transformer-xl-attentive-language-models
图例
seq2seq
概述
Encoder–Decoder 结构的网络
RNN最重要的一个变种
特性
利用注意力机制,可以记忆最长约50个时间长度
应用
机器翻译
文本摘要
输入是一段文本序列,输出是这段文本序列的摘要序列。
阅读理解
将输入的文章和问题分别编码,再对其进行解码得到问题的答案。
语音识别
参考文献
https://spaces.ac.cn/archives/5861/comment-page-1
TextCNN
表征模型
OneHot、 TF-IDF、 bag-of-words
优缺点
优点
方法简单
缺点
1、无法处理同义词、近义词,如 开心、高兴
2、维度庞大,数据稀疏, 信息量少(一般50万-100万维来表示)
TF-IDF
词频(TF)=某个词在文章中的出现次数/文章的总词数
逆文档频率(IDF)=log(语料库的文档总数/包含该词的文档数+1)
文献
https://www.jianshu.com/p/edf666d3995f
Word2Vec
1、以向量空间模型在N维向量空间中来表示词汇; 2、内部使用一个单层的简单神经网络,并捕获隐藏层的权重; 3、word2vec只是一个工具,模型是CBPW和Skip-gram 4、理论基础的,1954 年 Harris 提出分布假说(distributional hypothesis),这一假说认为:上下文相似的词,其语义也相似,1957 年 Firth 对分布假说进行了进一步阐述和明确:词的语义由其上下文决定(a word is characterized by the company it keeps),30 年后,深度学习的祖师爷 Hinton 也于 1986 年尝试过词的分布式表示。
概述
谷歌Mikolov进行开源
论文
《Efficient estimation of word representations in vector space》
《Distributed Representations of Words and Phrases and their Compositionality》
模型
CBOW
Continuous Bag-of-Words利用上下文或周边的单词来预测中心词
方法
输入:词的初始化OneHot编码
隐藏层:神经元的个数为Enbadding的维度数,将输入词的编码拼接
梯度更新隐藏层编码,根据更新率更新输入编码向量
输出:Softmax分类器,训练所有单词的分类数(个数)
Skip-gram
使用中心词来预测上下文词
优化
Hierarchical Softmax
哈夫曼树
Negative Sampling
负采样
其他方法
GloVe
坦福大学
fastText
图示
自编码器
优缺点
优点
和OneHot比可以减少编码空间大小,并将单词压缩到需要的向量长度(一般200-300维)
训练大量语料,解决同义词、反义词、语义概念相近的单词问题
可通过向量距离衡量词语相似度
缺点
无法解决一词多义问题、如苹果(水果、手机) (静态词向量)
文本分词引入误差
ELMO、GPT
ELMo
全称
Embeddings from Language Models
特征抽取能力弱、LSTM层拼接融合能力差
图例
论文
《Deep contextualized word representations》
GPT
语言模型为单向,本质上输入都是词向量
图例
Bert
概述
超多层 Transformer + 双任务预训练 + 后期微调的训练策略
改进
1、直接输入中文单个汉字、无需要分词,减少误差引入
2、根据词语上下文修正词向量(动态词向量)、解决各语境下词语不同意义
问题
模型极度复
BERT base: L=12, H=768, A=12, Total Parameters=110M
BERTLARGE: L=24, H=1024, A=16, 总参数=340M
(即 Transformer 块个数)表示为 L,将隐藏尺寸表示为 H、自注意力头数表示为 A
固定长度
原理
Input
Token Embedding
每个字的序号,相当于做了字的One-Hot
Segment Embeddings
Position Embedding
图例
多层双向 Transformer 编码器
Multi-Head Attention
图例
全连接层
图例
目标函数
Masked Language Model, MLM
BERT 具体训练方法为:随机遮住15%的单词作为训练样本。 其中80%用 masked token 来代替。 10%用随机的一个词来替换。 10%保持这个词不变。 直观上来说,只有15%的词被遮盖的原因是性能开销,双向编码器比单向编码器训练要慢;选80% mask,20%具体单词的原因是在 pretrain 的时候做了 mask,在特定任务微调如分类任务的时候,并不对输入序列做 mask,会产生 gap,任务不一致;10%用随机的一个词来替换,10%保持这个词不变的原因是让编码器不知道哪些词需要预测的,哪些词是错误的,因此被迫需要学习每一个 token 的表示向量,做了一个折中。
Next Sentence Prediction
预训练一个二分类的模型,来学习句子之间的关系。预测下一个句子的方法对学习句子之间关系很有帮助。 训练方法:正样本和负样本比例是1:1,50%的句子是正样本,即给定句子A和B,B是A的实际语境下一句;负样本:在语料库中随机选择的句子作为B。通过两个特定的 token[CLS]和[SEP]来串接两个句子,该任务在[CLS]位置输出预测。
结果
BERT layer 的层数与时耗基本成线性关系,多头数目增加对时耗增加不明显;
针对短文本 query 的意图理解,更多依赖浅层语法语义特征,因而 BERT 层数对模型准召影响较小;
attention 多头决定了可以从多少个角度理解 query,在我们的实验里降低多头数比降低层数对准召的影响略大,而时耗无明显降低。
图例
bert-as-service
https://github.com/hanxiao/bert-as-service
https://mp.weixin.qq.com/s?__biz=MzIwMTc4ODE0Mw==&mid=2247493033&idx=1&sn=1ae1cd347126b10d6a857cd9bba7b601&chksm=96ea3a29a19db33f3c07723ed6e5ecbb8d2ff1b1617f1cf0d39cb3cc1e6e9c325cc29147d58d&scene=21#wechat_redirect
论文
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
https://github.com/google-research/bert
NLP任务
分词&NER
“词向量+LSTM+CRF”
文本分类聚类
信息抽取
标签提取
主题模型
情感分析
相关框架
jieba
NLTK
Gensim
SpaCy
SKlearn
吸引力
不错,就是看不清楚