NLP

word2vec

Word2vec是一种词嵌入模型

句子需要先进行分词,而后将每词表示成一个固定长度的向量。假设词库大小为N,词向量长度为L,则通过语料库学习到这个W=N*L矩阵的内容,也就是该预料库下每个词的向量表示。

Word2vec考虑词之间共出现的概率,但是未考虑语义信息。有了词的向量表示,后续就可以衔接其他分类模型,解决文本分类或其他问题了。

BERT衍生模型

结合网络大牛的总结(致谢大牛!),目前存在一些针对BERT进行优化的衍生模型。

主要优化方向:

性能(ALBERT)

增加图谱实体(ERINE, K-BERT)

多样的Attention方式(XLNet, UNILM)

新增训练任务(MT-DNN)

兼容生成式任务(MASS, UNILM)等

隐语义模型

LSA

LSA即潜语义分析(或主题模型,主题即为潜在的语义信息),认为“一篇文章是通过一定的概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到的。

目标是:通过对“文档-单词”矩阵进行分解,得到“文档-主题”和“主题-单词”两个概率分布,即根据给定的一篇文档,推测其主题分布。

主要有2种主要方法:奇异值分解SVD、非负矩阵分解NMF

单词集合W={w1, w2, …, wm}

文档集合D={d1, d2, …, dn}

单词向量空间Xm*n:单词-文本矩阵,每个单词在文档中出现的频率(行-单词,列-文档)

话题向量空间Tm*k:单词-话题矩阵,每个单词在话题中出现的频率(行-单词,列-话题),T是X的一个子集

文本在话题空间的向量表示Yk*n: Xmn = Tmk * Ykn,Ykn 就是我们需要求得的隐变量,即每个文本对应每个话题的权重,可将每个文本标记为权重较大的话题上。

TextCNN

用途:一般用于文本分类,主要包括输入层、卷积层、max-pooling层、全连接+softmax层

输入:文本向量矩阵(行:每个词、列:每个词的向量表示-word2vec or glove),如果输入有多个channel,则针对每个词使用了多个不同的向量化表示

卷积核:卷积核的“宽度”通常与输入矩阵的宽度相同,高度或区域大小可以变化,一般为2-5个单词的窗口

BERT源码解析

源码整体框架

地址:https://github.com/google-research/bert

BERT原理和使用

最近NLP领域发生了一件大事,一个叫BERT的预训练模型掀起了一场革命式的风波。基于这段时间参读大牛们精细的解析,简单总结下BERT的原理(What)和怎么应用到自己的数据中(How)。

BERT简介

BERT

BERT(Bidirectional Encoder Representation from Transformers),是谷歌AI团队新发布的应用于NLP领域的模型,在11项NLP任务均获得了相当不错的结果,文章于2018年10月发表,并提供了开源地址( https://github.com/google-research/bert ),致谢👏👏👏。

语料库

Corpus: BooksCorpus (800M words) + English Wikipedia (2,500M words).

预训练模型及参数

可参考GitHub详细文档。

BERT的主要特点

Ø 使用Transformer作为特征提取器

Ø 双向语言模型

由于BERT是基于Transformer模型的,而Transformer模型主要基于Attention机制,因此先需要了解下Attention机制。

自然语言处理

根据这一阵子对文本分析的研究,做了一些整理,可供参考。
有不对之处,恳请大家指正。

预料库

1)直接下载现成的语料库
2)爬虫方法获取语料库
3)当前分析的所有文本形成语料库

文本预处理

主要包括:
1)文本删除(文本去重复、机械压缩去词、短句删除、去除无效标签等)
2)编码转换
3)拼写检查(针对英文)
4)大小写统一(针对英文)
5)分词
6)去停用词(网上提供1208个停用词:https://pan.baidu.com/s/1gfMXMl9)