一、自然语言表征与计算机表示

自然语言是指一种人类社会中自然地随文化演化的语言,聪明的人类经过万年的积累,并通过后天良久的学习才能理解语言的魅力和含义,机械的计算机当然不能如此容易地表达出来。

要了解自然语言的计算机表示,我们首先从发展、工业落地更加成熟的图像领域说起,图像使用非负数的矩阵表示像素点,是低层次的,连续的数据和特征。图像的任务,如分类,相似度,目标检测等,都是具体的,可轻易区分的。

相比于图像,自然语言无疑复杂得多。经过万年发展的语言是人类智慧高度凝结的结晶,语言语义很难通过数据来刻画。汉语2000多个常用字,2万多个字,成百上千万个词等语言基本单元就很难刻画,例如"喜欢"和"爱"是近义词,但是从字面上并不能反映这种信息。更别说复杂的任务:分词,分类,信息抽取......

下面简要介绍下自然语言表示的常用方法。

二、onehot独热编码

onehot独热编码是一种古老而又现代的编码方式,它通过给每个字符、词语或句子分配唯一id表示。这种做法是将要表示的字典中每个单元看成独立的唯一的单元,可以用正整数表示,不过通常构建字典大小的一维矩阵,设置一个数字为1,其他的位置全部为0等。

举个例子: "大漠帝国"可以表示为[0, 0, ,0, 0, 0, 1],或者是一个数字 32

现在单独只用one-hot作机器学习、深度学习、强化学习是比较少了的,因为效果不够好。不过倒是通常用one-hot作为唯一标识原始输入(也就是索index的作用)。

解决的问题:自然语言文本在计算机的表示,one-hot句子构建的词袋模型能够扩充特征

应用:索引表示字、词、句子等

优点: 简单可解释,线性可分

缺点: 无法表征编码单元(比如说字,词,句子)之间的关系,无法表示词序关系;

只是符号化,一维度单点的数字携带的信息和特征太少;

数据量大时会带来维数灾难。

三、传统统计方法bag of words, tf, idf, tf-idf, bm25

        3.1 TF-IDF

TF-IDF(英文名: term frequency-inverse document frequency),引用百度百科的说法: TF-IDF是一种用于信息检索与数据挖掘的常用加权技术。

TF意思是词频(Term Frequency),用在句子构成的语料中,就是字或者词在文本中出现的频率。

IDF意思是逆文本频率指数(Inverse Document Frequency),就是出现该字或者词的句子条数。一般计算是: IDF = Log ( 语料中句子总数 / (包含该词或字的句子数+1) );

而TF-IDF = TF * IDF。

         解决的问题:划分词语重要程度,引入外部语料库信息(即所谓的先验概率)

应用:用于信息检索与数据挖掘的常用加权技术,关键词,句子相似度等

优点:实现简单高效,给出一种表示字词句子重要性的方法;常见python工具包都会集成

缺点:词频等重合会导致表示冲突,严重依赖于语料库;

会偏向于文本中频率小的词;

不能刻画出词序信息;

3.2  词袋模型bag of words

        词袋模型,通俗的说,就是将句子、语料中的词语都丢到一个袋子里,构建一个词语集合-词频的一维矩阵,不考虑顺序,不考虑重要性,认为词语是独立的。例子sample:

"我爱帝国, 大漠帝国”; 词语有 "我", "爱", "帝国", "大漠"

“我爱帝国”的句向量为 [1, 1, 2, 1]

解决的问题

应用:可用于信息检索与数据挖掘的常用加权技术,关键词,句子相似度等

优点:实现简单高效,给出一种表示句子一维向量的方法;

缺点:无法展示不同词语的重要程度;

不能刻画相似词语,不能刻画一词多义;

不能刻画出词序信息,维度灾难;

四、基于矩阵的统计方法(共现矩阵,NMF, LSI, LDA等主题模型[分解派],Glove)

这种方法的关键在于构建矩阵,基于矩阵的统计方法主要有矩阵分解派(NMF, LSI, LDA等主题模型),以及共现矩阵,降维共现矩阵Glove等。

        4.1  基于统计的共现矩阵方法

共现矩阵方法主要通过K个窗口的词语的词频构建的向量表示词向量,具体做法就是构建N*N的矩阵(N为词典大小),矩阵中元素填充为训练语料中的共现词语频次。举个例子,

假设有语料: “我喜欢你”, “我爱你”, “我想你”,窗口为4,构建的共现矩阵如下图

那么"我"的词向量可以表示为: [0, 1, 1, 2, 1, 1]

         解决的问题:简单解决词向量不能计算相似度问题

应用:词向量,句向量构建

优点:实现简单高效,给出一种表示字词句子一维向量的表示方法

缺点:严重依赖于语料库;

不能刻画出词序信息;

数据稀疏与维度灾难;

         4.2  主题模型(NMF, LSI, LDA)

首先构建构建N*N的方矩(N为词典大小),矩阵中元素填充一般为训练语料中的TF-IDF,也可以是词频或BM25。

我们提出的假设是"词-主题,主题-句子",所以使用主题模型进行降维,得到的权重矩阵W,就是词语对应的词向量。

可以使用NMF矩阵分解方法提取词向量: V = W * H;也可以使用SVD奇异值分解提取词向量: A= U * E * V,或者是

更加复杂的LDA主题模型。

一般我们会获取W权重矩阵作为词向量模型,例如通常会得到如下结果:

# 权重矩阵
[[1.99561456 0.03769528 0.92768855][2.19064197 0.33915908 1.32014035][3.94014929 0.01328534 0.        ][2.35460586 0.44811399 1.68201657][0.72884099 2.33034829 0.        ]]

             解决的问题:词向量间隐藏的语义,如"孙悟空"和"唐僧"有关系。

 应用:词向量,句向量构建,潜在语义与主题

优点:算法简洁明了可解释;有严谨的假设和证明;使用全局特征;常见python工具包都会集成

缺点:严重依赖于语料库;

不能刻画出词序信息;

计算复杂维度灾难;

主题个数不好确定;

         4.3  相似度与共现矩阵(Glove)

从某种意义上说,Glove是一种神奇的脑洞,glove是一种生不逢时的词嵌入方法,为何如此说呢?1.glove效果与

word2vec相似,没有什么明显性能提升,但诞生于word2vec后面; 2.glove是一种传统统计学习方法而没有使用人工神经

网络;3.方法与计算相对复杂,并且没有什么好用的官方包,并且常见的python工具包也没有集成glove。

glove算法认为,A的词向量 / B的词向量  = Pac / Pbc;统计共现矩阵,共现矩阵为X,在整个语料库中,

Pac为单词A和单词C共同出现在一个窗口中的次数除以语料中单词A出现的个数;

同理,Pbc为单词B和单词C共同出现在一个窗口中的次数除以语料中单词B出现的个数。

化简为 A的词向量 * B的词向量 ∝ Freq ab,即 A的词向量 乘以 B的词向量 正比于 AB词出现的词频,

再加上一些偏置项,就是glove了,glove损失函数如下:

             解决的问题:词向量间上下文关系,部分解决词向量全局关系。

应用:一般性词向量,句向量构建,相似度计算,词嵌入等

优点:算法简单直观,只用了纯统计方法,综合了词语的全局信息和局部信息等

缺点:严重依赖于语料库;

不能刻画出词序信息;

不能解决一词多义问题;

常见python工具包不集成使得训练麻烦,应用较少;

五、基于语言模型的深度学习方法(NNLM、word2vec、Elmo、GPT、BERT)

        5.1  NNLM

nnlm是2003年bengio等提出的一种神经网络语言模型,他的主要思想是根据句子中的前N个词语序列预测下一个

单词(这点和现在流行的MLM任务有点类似),采用的是MLP+tanh+softmax模型,其中神经元W便是重要的副产品,

提供给下游任务的词向量。

从某种意义上而言,nnlm是随着word2vec的兴起和热度而被考古出来的,从其贡献本身来说或许意义并不是很大。

nnlm结构图如下:

             解决的问题:学习词语的分布式表示(从高维降到低维),词向量的隐含语义,一段话的句向量表示

应用:一般性词向量,句向量构建,相似度计算,词嵌入等

优点:使用神经网络模型训练词向量

缺点:模型优化不够,输出的类别较多导致训练过慢;

自回归语言模型,无法获取下文信息;

早期方案,应用较少,一般python工具不会集成;

        5.2  word2vec

word2vec来自2013年google的论文《Efficient Estimation of Word Representations in Vector Space》,是一种浅层神

经网络模型,其中cbow模式就是预测连续N个词与中抠出来那个。例子“我 不 喜欢 帝国 主义 的”,假设滑动窗口是5,那么

可以有用词袋模型[“我", "不", "喜欢",  ”主义“] 预测  ”帝国“。

skip-gram模型正好相反,用”帝国“去预测[“我", "不", "喜欢",  ”主义“]。

word2vec模型结构图如下:

             解决的问题:神经网络训练词向量速度慢的问题,

浅层词语意思抽取(语言模型),

预训练与下游任务微调问题

应用:词向量,句向量构建,词嵌入,相似度计算等

优点:算法简单直观,只用了浅层神经网络,

优化后训练速度快,能够获取相似词向量,

无论是word2vec还是其变种fastext都很好,很多包支持

缺点:不能解决一词多义问题;

不能区分和解决同义词反义词等深层次语义问题;

        5.3  ELMO

elmo(Embeddings from Language Models),deep contextualized word representation,是一种新的深层语境化的词汇表达方式,即动态变化的词向量,

这一点是和之前的静态词向量是迥异的。其具体做法是使用biLM语言任务,具体来说就是根据句话中的上下文预测当前

词语。例子:

假设有一句话"中国斗鱼又名叉尾斗鱼,广泛分布于华南地区。",elmo就是要预测"鱼"这个单词,那么就用前向LSTM

编码"中国斗鱼又名叉尾斗",得到编码h1,后向LSTM编码",广泛分布于华南地区。",得到编码h2,把h1和h2拼接起来,

即[h1, h2],去预测"鱼"的概率。

这样子训练,大规模语料中的通用信息,就存储到这个双层前向后向LSTM中了。

使用来做字,词,句子embedding,或者是做下游任务的时候,可以这么来理解,输入一个句子,elmo句子中的

词语的词向量受上下文词语影响,其上下文不同,则当前词语的词义不一样,如此,就能够解决一词多义的情况了。

ELMO网络结构如下:

             解决的问题:一词多义问题,

深层次句子语义问题

应用:词向量,句向量构建,NLP四大任务等下游任务

优点:预训练模型使用通用语料,引入外部语料;

使用bilstm特征抽取器抽取词语,句子,语义等各层次信息;

解决一词多义问题,序列依赖问题;

缺点:bilstm抽取特征能力不够强,训练速度慢,不能并行化处理;

输出拼接前向、后向融合特征的方式不够好;

没有一个比较好的通用训练好的中文elmo预训练模型,也没有比较好用的工具;

        5.3  Bert

Bert(Pre-training of Deep Bidirectional Transformers for Language Understanding),深层双向Transformer

预训练语言模型,是NNLM、Word2vec、ELMO和GPT等embedding技术的集大成者。

Bert采用更大规模(几十G)、更深层次网络(12,24)训练通用预训练模型,其训练任务有两个,一个是MLM(masked

Language Model)遮挡语言模型,而是NSP(Next Sentence Prediction)下一句子预测。

应该很好理解,MLM就是用句子中的其他词语预测被遮挡住的词语,

例子: "我爱语文"这句话,可以把["我", masked, "语", "文"]预测"爱"这个词。

NSP也很好理解,将连续的两句话拼接起来,用[SEP]间隔开,是连续句子就是True,否则为False,二分类任务。

这些任务,ELMO可以做,CBOW也可以做,不同的是,Bert在输入时候把token_segnment,position_embedding,

segnment_embedding一体化融合;两阶段模型(预训练,微调);Transformer编码层作特征抽取器;使用双向语言模型等

BERT网络结构如下图:

             解决的问题:一词多义问题;

并行化快速训练问题;

词语、句子语义层次问题;

transformer上下文信息获取;

应用:词向量,句向量构建,NLP四大任务等下游任务

优点:预训练模型使用通用语料,引入外部语料,便于下游任务微调;

使用transformer特征抽取器抽取词语,并行化获取句子,语义等各层次信息;

解决一词多义问题,双向语言模型;

缺点:相同句式的词语语义区分不明显;

训练、微调时候输入不一致;

多层transformer训练比较慢,耗时长,需要能耗高;

bert维度768,多层transformer网络参数大,占用空间,预测比较慢;

不大适合生成式任务,对于超长文本不太友好,对于只需要浅层语义的NLP任务不友好;

参考/感谢:

词向量表示方法梳理: 词向量表示方法梳理 - 知乎

从Word Embedding到Bert模型——自然语言处理预训练技术发展史:帐号已迁移

自然语言表示简史(BERT/ELMO/Word2vec/LDA/Bow/Ohehot,词向量、句向量、优缺点、应用与解决的问题)相关推荐

  1. 中文分词word2vec和doc2vec句向量的理解

    ** Doc2vec ** 1.Word2vec和Doc2vec做Word Embedding和Sentence/Document EMbedding. 2.NLP中最直观常用的一种词表示方法是one ...

  2. 2.自然语言处理NLP:词映射为向量——词嵌入(word embedding)

    1. 什么是词嵌入(word2vec) : 把词映射为向量(实数域)的技术 2. 为什么不采用one-hot向量: one-hot词向量无法准确表达不同词之间的相似度,eg:余弦相似度,表示夹角之间的 ...

  3. 自然语言处理(NLP): 13 The Illustrated BERT, ELMo, and co.

    原文:The Illustrated BERT, ELMo, and co. (How NLP Cracked Transfer Learning) 作者:Jay Alammar 原文连接: http ...

  4. NLP-词向量-发展:词袋模型【onehot、tf-idf】 -> 主题模型【LSA、LDA】 -> 词向量静态表征【Word2vec、GloVe、FastText】 -> 词向量动态表征【Bert】

    NLP-词向量-发展: 词袋模型[onehot.tf-idf] 主题模型[LSA.LDA] 基于词向量的静态表征[Word2vec.GloVe.FastText] 基于词向量的动态表征[Bert] 一 ...

  5. 【射雕英雄传】文本分析初步 第二弹【gensim word2vec lda roberta】

    我来填坑了,这学期五门数学课期末属实有点顶,废话不多说好吧,切入正题. 下面文中可能会时不时'引用前文',第一弹链接在这里 文章目录 内容概览 词云 gensim Word2Vec LDA 情感分析[ ...

  6. BERT, ELMo, GPT-2: 这些上下文相关的表示到底有多上下文化?

    2020-02-15 11:19:49 作者:Kawin Ethayarajh 编译:ronghuaiyang 导读 具有上下文信息的词表示到底有多大程度的上下文化?这里给出了定量的分析. 将上下文信 ...

  7. BERT, ELMo, GPT-2: 这些上下文相关的表示到底有多上下文化?

    作者:Kawin Ethayarajh      编译:ronghuaiyang 导读 具有上下文信息的词表示到底有多大程度的上下文化?这里给出了定量的分析. 将上下文信息放到词嵌入中 - 就像BER ...

  8. 自然语言处理NLP星空智能对话机器人系列:深入理解Transformer自然语言处理 基于BERT模型微调实现句子分类

    自然语言处理NLP星空智能对话机器人系列:深入理解Transformer自然语言处理 基于BERT模型微调实现句子分类 目录 基于BERT模型微调实现句子分类案例实战 Installing the H ...

  9. 自然语言处理自学笔记-02 Word2vec——基于神经网络学习单词表示

    自然语言处理自学笔记-02 Word2vec--基于神经网络学习单词表示 Word2vec 定义损失函数 skip-gram算法 从原始文本到结构化数据 制定实际的损失函数 近似损失函数 连续词带模型 ...

  10. 深度学习与自然语言处理第三次作业——LDA段落主题分布问题

    深度学习与自然语言处理第三次作业--LDA段落主题分布问题 利用LDA模型解决段落主体分布问题 文章目录 深度学习与自然语言处理第三次作业--LDA段落主题分布问题 一.解题背景 二.解题原理 1.L ...

最新文章

  1. python对英语和数学的帮助-文科女生学Python:学过初中数学和英语就能懂的编程逻辑...
  2. constructor of OfflineInterface.js
  3. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波8 - 直方图处理 - 直方图均衡化(全局直方图均衡化)
  4. Gitlab 从 12.1 版本开始将不再支持 MySQL !!!
  5. java处理获取到的Elasticsearch数据
  6. CCF NOI1056 表达式
  7. 【webservice】Axis2 客户端调用 设置超时时间
  8. android自定义popwindow,Android应用开发Android 自定义PopWindow的简单使用
  9. 绘画能力基础资料整理
  10. mysql like 原理_MySql原理
  11. 安全私人云储存时代 H3C Magic M2脱颖而出
  12. 联想小新 Pro 14、联想小新 Pro 16 2023 酷睿版 评测 怎么样值得买吗
  13. 四川大学计算机考研专业参考书目,四川大学计算机技术(专业学位)研究生考试科目和考研参考书目...
  14. Kotlin/DSL(Anko),原汁原味Kotlin开发Android---Activity Fragment与AnkoUI分离,强大的复用,更加便捷的开发
  15. 配置apache和nginx的tomcat负载均衡
  16. APT(Advanced Packaging Tool)
  17. VMWARE成功案例研究:康涅狄格大学商学院
  18. 牛客竞赛每日俩题 - Day2
  19. (转)程序员如何静下心来高效学习
  20. Discuz!X3.5大气论坛模板

热门文章

  1. http 报文格式、状态码
  2. 键鼠硬件模拟技术(转)
  3. php复姓怎么排序,按姓氏笔画排名怎么排列了
  4. TM1638数码管显示板(8数码管+16按键)单片机C语言驱动程序(显示功能)
  5. GET 请求参数过大导致HTTP错误码 414 / 500 的问题
  6. python如何逐行读取文件_python怎么逐行读写txt文件
  7. icode青少年编程比赛网站学生刷题进度爬虫
  8. 计算机excel函数试题,2014职称计算机考试Excel试题函数练习题
  9. 干货!Web 网页设计规范
  10. oracle10非正常删除卸载干净,win10系统下把Oracle卸载干净