一、前言

NLP区别与CV的一个重要特征之一,在于模型的输入需要预先处理,从CV转行NLP的炼丹者一开始定会对模型的输入形式感到疑惑。不像CV中模型的输入就是图像的RGB值,本来就是数值型,且像素值可以认为是连续型变量,不需要再做什么处理,最多就是做一下归一化,或者翻转、裁剪等数据增强处理。而NLP输入的是文字,非数值型变量,要如何将文字更加合理地映射成某种数值型变量,是NLP要解决的一个重要问题。

在NLP中数值型变量一般是以向量的形式展现出来,本文接下来将阐述NLP中出现过的多种词向量表示方式,并阐述词向量好坏的评判标准。

二、表示方式

文本特征的的表示方式有两大类共六种。

1、离散型表示方式(离散)

i. one-hot独热编码

将词(或字)表示成一个向量,该向量的维度是词典(或字典)的长度(该词典是通过语料库生成的),该向量中,该单词索引的位置值为1,其余的位置为0。one-hot是一种极为稀疏的表示形式。

缺点:

  1. 不同词的向量表示互相正交,无法衡量不同词之间的关系;
  2. 该编码只能反映某个词是否在句中出现,无法衡量不同词的重要程度;
  3. 使用One-Hot 对文本进行编码后得到的是高维稀疏矩阵,会浪费计算和存储资源;

ii. 词袋模型(Bag Of Word, BOW)

在词袋模型中不考虑语序和词法的信息,每个单词都是相互独立的,将词语放入一个“袋子”里,统计每个单词出现的频率。

和one-hot独热编码不同,词袋模型是对文本进行编码而不是对字、词进行编码,编码的后向量是表示整篇文档的特征,而不是单一个词。向量中每个元素表示的是某个单词在文档中的出现次数,可想而知,向量的长度等于词典的长度。在sklearn库中可以直接调用CunterVectorizer实现词袋模型。

缺点

  1. 词袋模型丢失了词的位置信息,位置信息在文本中是一个很重要信息,词的位置不一样语义会有很大的差别;
  2. 该编码方式虽然统计了词在文本中出现的次数,但是单靠这个指标无法衡量每个词的重要程度,文中大量出现的词汇比如“你”、“我”以及一些介词等对于区分文本类别意义不大。

iii. 词频-逆文档频率(TF-IDF)

这是一种词袋模型的升级版,为的是解决词袋模型无法区分常用词(如:“是”、“的”等)和专有名词(如:“自然语言处理”、“NLP ”等)对文本的重要性的问题。跟词袋模型一样,它也是对文档编码,编码后词向量的长度就是词典的长度。

  • 统计的方式主要是计算词的词频(TF)和逆向文件频率(IDF):

    • TFTerm Frequency

      1. 某个词在当前文本中出现的频率,频率高的词语或者是重要的词
      2. TF=某单词在文章中出现的总次数文章包含的总词数TF=\frac{某单词在文章中出现的总次数}{文章包含的总词数}TF=
    • **IDFInverse Document frequency )**逆文本频率。
      1. 文本频率是指:含有某个词的文本在整个语料库中所占的比例。逆文本频率是文本频率的倒数,所以分子分母看起来颠倒了过来。
      2. IDF=log(语料库的文本总数包含某词的文本数量+1)IDF = log({\frac{语料库的文本总数}{包含某词的文本数量+1}})IDF=log(+1)
  • 最终词频-逆文档频率TF−IDF=TF∗IDfTF-IDF=TF*IDfTFIDF=TFIDf(注意“-“不是减号而是连接符)
  • 还需要提一点,在sklearn的TF-IDF实现中,对一篇文本算完tf-idf后还会进行一次欧式距离归一化,所以特征向量中的每次位置都是[0,1)之间的数值,这也省去了后续调用SVM等分类方法时对输入进行归一化的步骤。而TF在sklearn就是单词在文章中出现的总词数,不用再除以文章包含的总词数。

缺点

  1. 和词袋模型一样,依然不能反映词的位置信息。
  2. IDF 是一种试图抑制噪声的加权,本身倾向于文本中频率比较小的词,这使得IDF 的精度不高;
  3. TF-IDF 严重依赖于语料库(尤其在训练同类语料库时,往往会掩盖一些同类型的关键词;如:在进行TF-IDF 训练时,语料库中的娱乐新闻较多,则与娱乐相关的关键词的权重就会偏低 ),因此需要选取质量高的语料库进行训练;

2、分布型表示方式(连续)

前面提到的词向量表示为离散型,另一种是分布型表示,区别两种表示的最重要区别是分布型表示需要建立统计语言模型,那么什么是统计语言模型?统计语言模型就是用来计算一个句子的概率的模型,通常是基于语料库来构建,一个句子的概率可以表示为:

p(W)=p(w1T)=p(w1,w2,...,wT)=p(w1)⋅p(w2∣w1)⋅p(w3∣w12)…p(wT∣w1T−1)p(W)=p(w_1^T)=p(w_1,w_2,...,w_T)=p(w_1) \cdot p(w_2|w_1) \cdot p(w_3|w_1^2) \dots p(w_T|w_1^{T-1})p(W)=p(w1T)=p(w1,w2,...,wT)=p(w1)p(w2w1)p(w3w12)p(wTw1T1)

上面这条公式中,W表示一个句话,它是由单词w1,w2,...,wTw_1,w_2,...,w_Tw1,w2,...,wT按顺序排列而构成的,三个括号里的符号内容是等价的,见到w1Tw_1^Tw1T不要往幂次想,它就是表示首单词为w1w_1w1,长度为T,末尾单词为wTw_TwT的一句话。

统计语言模型描述的是一段词序列的概率,通俗点说,就是计算一个句子属于正常人类所说的话的概率。那么统计语言模型和词向量有何关系,这里需要提及统计语言模型的一个重要观点:词的语意可以通过一系列句子来传达,一个中心词如果能存在与某句子中而不违和,那么其上下文所出现的词就可以用来解析中心所蕴含的意义。句子违不违和应该怎么评判?就是通过统计语言模型,如果一段词序列的概率越大P(W),说明这段话越不违和。现在问题的关键就是,如何用词向量来构造统计语言模型。

i. n-gram

n-gram 是简单地基于统计语言模型的词向量表示,词向量可以认为是共现矩阵中每一行或者每一列,但是共现矩阵是通过统计得到的,所以n-gram是完全基于词频统计的模型,没有需要学习的参数或词向量。

注意区分n-gram和词袋模型,虽然都是在计算词频,但是他们有两个区别:

  • 词袋模型就是简单地计算整篇文档中各个单词出现的频率,而n-gram计算两个词在一个窗口下出现的频率,它强调的是词与词间的关系。
  • 词袋模型目的是对一篇文章编码,而n-gram是对词编码,颗粒度有巨大差异。

同理由于TF-IDF是词袋模型的改进版,它和n-gram有一样的差异

关于n-gram的详细解释,请点击另一篇文章:

n-gram原理

优点

  1. 相比起词袋模型和TF-IDF,n-gram考虑了句子中词的顺序;

缺点

  1. 词典的长度很大,导致词的向量长度也很大;
  2. 共现矩阵会随着词典的增大而增大
  3. 共现矩阵也是稀疏矩阵(可以使用 SVDPCA 等算法进行降维,但是计算量很大);

ii. word2vec

两种形式,CBOW利用上下文的词预测中心词,SKIP-GRAM利用中心词预测上下文的词。

关于word2vec的详细解释,请点击另一篇文章:

word2vec

优点

  1. 考虑到词语的上下文,学习到了语义和语法的信息;
  2. 得到的词向量维度小,节省存储和计算资源;
  3. 通用性强,可以应用到各种NLP 任务中;

缺点

  1. 词和向量是一对一的关系,无法解决多义词的问题;
  2. word2vec是一种静态的模型,虽然通用性强,但无法针对特定的任务做动态优化;

iii. GloVe

GloVe 是斯坦福大学Jeffrey、Richard 等提供的一种词向量表示算法,GloVe 的全称是Global Vectors for Word Representation,是一个基于全局词频统计(count-based & overall staticstics)的词表征(word representation)算法。该算法综合了global matrix factorization(全局矩阵分解) 和 local context window(局部上下文窗口) 两种方法的优点。

关于Glove的详细解释,请点击另一篇文章:

Glove

iv. ELMO

word2vec 和 glove 算法得到的词向量都是静态词向量(静态词向量会把多义词的语义进行融合,训练结束之后不会根据上下文进行改变),静态词向量无法解决多义词的问题(如:“我今天买了7斤苹果” 和 “我今天买了苹果7” 中的 苹果 就是一个多义词)。而ELMO模型进行训练的词向量可以解决多义词的问题。

该算法的精髓是:用语言模型训练神经网络,在使用word embedding 时,单词已经具备上下文信息,这个时候神经网络可以根据上下文信息对word embedding 进行调整,这样经过调整之后的word embedding 更能表达在这个上下文中的具体含义,这就解决了静态词向量无法表示多义词的问题。

三、词向量的评判标准

词向量的评判标准可以分为内部标准(intrinsic criteria or intrinsic evaluation)和外部标准(external criteria or external evaluation)。

1. 内部标准

所谓的内部标准,就是不考虑下游任务,仅从词向量本身是否能够准确地表征语义来评判词向量的好坏,比如词向量间的距离是不是能够很好地表示语义上的联系,这里举CS224N上在讲解word2vec时很爱说的一个例子:

考虑man、woman、king三个词,我们可以计算woman和man在向量空间上的差diff=wwoman−wmandiff = w_{woman}-w_{man}diff=wwomanwman,来表示woman和man间的差异性,如果king在向量空间上加上这个差,wking+diffw_{king}+diffwking+diff,那么直觉上应该得到queue的向量wqueuew_{queue}wqueue,因为男人对女人、国王对女王。我们希望最终训练出来的词向量能够很好地表示这种词之间的联系,这样的词向量才是好的词向量。

在讲解glove时也有这种类似的分析:各种词从原型变换到比较级再变换到最高级,在向量空间上如果具有相同的变换方向,那么这样的词向量是好的词向量。像上述这种评价方式也叫做类比评估(analogy evaluation),它对词向量好坏的评价仅仅在向量空间倒来倒去,因此算是一种内部标准

另外一种内部标准的评价方式就要借用人手工的评判了:给定两个词,让多个人去给这两个词的相似性打分,然后同样是计算这两个词的向量距离,看看它跟人类打的分是不是比较吻合。

2.外部标准

外部标准就是通过词向量在下游任务表现的优劣来评价词向量的好坏了,常见的任务有:

  1. 命名实体识别(named entity recogniton,简称NER),判断一个词是不是某种实体的名字比如人名(PER)、组织名(ORG)、地点名(LOC)、歌名(MISC)等。
  2. 词义消歧,判断近义词、多义词
  3. 文本分类

四、参考文献

  1. https://blog.csdn.net/zwqjoy/article/details/103546648
  2. CS224N Lecture 1~2 slides

NLP入门:文本特征的表示方式相关推荐

  1. 深度学习保姆级别之NLP入门文本分类之情感分析

    缘起 作为一个菜鸟小硕,无师自通入门NLP已经一年多了,想着自己的第一个项目就是情感分析,以及第一篇CCF B类中文期刊也是情感分析,决定开一个关于文本分类的专栏,提供保姆级别的模型训练过程.很多同学 ...

  2. Task01——零基础入门NLP - 新闻文本分类之赛题理解

    本篇目标 首先本篇文章会对赛题进行介绍以及个人对赛题的理解,带大家接触NLP的预处理.模型构建和模型训练等知识点. 赛题介绍 赛题名称:零基础入门NLP - 新闻文本分类 赛题任务:赛题以自然语言处理 ...

  3. 文本数据处理的终极指南-[NLP入门]

    上海站 | 高性能计算之GPU CUDA培训 4月13-15日 三天密集式学习  快速带你晋级 阅读全文 > 正文共10202个字,13张图,预计阅读时间26分钟. 简介 实现任何程度或者级别的 ...

  4. NLP学习笔记6--Lecture/语言模型/预处理/独热编码/word2vec/文本特征工程

    语言模型用来判断:是否一句话从语法上通顺 先分词  然后算出联合概率 怎么算? chain rule 条件很长的时候 会遇到一个问题 sparsity 数据的稀疏性 用马尔科夫假设  最简单的假设 之 ...

  5. 零基础入门NLP - 新闻文本分类

    本文是对阿里云新人竞赛中的"零基础入门NLP - 新闻文本分类"解体过程进行的记录,目前仅使用了textCNN模型进行预测,后续还会考虑使用LSTM进行对比. 赛题数据 赛题以新闻 ...

  6. 零基础入门NLP - 新闻文本分类,正式赛第一名方案分享

    零基础入门NLP - 新闻文本分类,正式赛第一名方案分享:https://mp.weixin.qq.com/s/7WpZUqdlItBToLYuRLm44g

  7. NLP:自然语言处理领域常见的文本特征表示/文本特征抽取(本质都是“数字化”)的简介、四大类方法(基于规则/基于统计,离散式【one-hot、BOW、TF-IDF】/分布式)之详细攻略

    NLP:自然语言处理领域常见的文本特征表示/文本特征抽取(本质都是"数字化")的简介.四大类方法(基于规则/基于统计,离散式[one-hot.BOW.TF-IDF]/分布式[CO- ...

  8. NLP:自然语言处理技术中常用的文本特征表示方法(整数编码、one-hot编码法、BOW法、TF-IDF法、N-Gram法等)及其代码案例实现

    NLP:自然语言处理技术中常用的文本特征表示方法(整数编码.one-hot编码法.BOW法.TF-IDF法.N-Gram法等)及其代码案例实现 目录 自然语言处理技术中常用的文本特征表示方法(整数编码 ...

  9. 【初学者入门】零基础入门NLP - 新闻文本分类

    序言 从今天开始入门学习NLP,虽然有点晚,但是我觉得任何时候都值得开始,尤其是面对你去感兴趣的事情.今天的任务是 [零基础入门NLP - 新闻文本分类],这是天池大赛中的入门级算法比赛,入口链接请自 ...

最新文章

  1. html 打印时隐藏,html 打印相关操作与实现详解
  2. jmeter csv参数化_运用Jmeter参数化来实现接口自动化测试
  3. c语言编一个dll 用message box 弹出一个对话框,Qt学习之路(17): Qt标准对话框之QMessageBox...
  4. List------Linked 链表
  5. 【深入Java虚拟机JVM 05】HotSpot对象探秘
  6. (*长期更新)软考网络工程师学习笔记——Section 4 物理层的其它知识
  7. mac磨皮插件_Adobe Pr 黑科技插件合集,一键安装,Mac+Win
  8. 马斯克说,特斯拉卡车有Mad Max狂野模式,危险的变道操作?
  9. DAS Tool 介绍
  10. 安装Keil uVision5 破解失败
  11. m4s格式转换mp3_AnyMP4 MP3 Converter for Mac(音视频mp3格式转换工具)
  12. Rocket MQ系列四 - 消息发送流程
  13. 音频和视频标签 与其他标签
  14. CLion设置默认显示汇编指令的格式
  15. 数字电路硬件设计系列(八)之LED电路设计
  16. 利用python进行数据分析学习笔记
  17. word 设置标题前分页
  18. 1024,程序员节!快乐!
  19. The ES9038Q2M SABRE DAC
  20. Flutter fish redux入门

热门文章

  1. 华科计算机考研分数分布,华科计算机考研分数线
  2. Java逆向工具汇总
  3. 【转帖】中国的软件业为什么失败?!
  4. Endnote导入毕业大论文参考文献时可能出现的诸多问题及解决
  5. 帕拉迪统一安全管理与综合审计系统解决方案
  6. 微软操作系统(winXP、Windows7、Windows8、Windows8.1和Windows10等若干版本)纯净版资源汇总
  7. 合肥计算机职高排名榜,安徽十大职高学校排行榜
  8. 高仿蓝奏云下载页源码
  9. 敏捷转型行动笔记:价值流分析
  10. Kong安装教程(docker-compose)