NLP基础系列

1. 浅论语言与认知的关系

2. 为什么要处理自然语言

3. 计算机是如何理解自然语言的

4. 文本标注十要点



把自然语言文本转换为向量

文本分析

文本分析指从文本中抽取出的特征来量化来表示文本信息,并在此基础上对其进行基于数学模型的处理。它是文本挖掘、信息检索的一个基本问题。

在“大数据”盛行的今天,对于非结构化信息的处理已经成了许多工作的必选项,而自然语言书写的文本,就是最典型的一种非结构化信息。

文本分析已经从学院派象牙塔中的研究课题逐步渗入到各个应用领域。对于正在做或者有志于做数据分析的人,掌握基本的文本分析知识和技法,已经成为必要。

向量空间模型

针对文本的具体操作很多,最典型的就是分类和聚类。引入机器学习的办法,让程序自己“学会”如何去区分不同类型的文本,是当前业界通行的办法。

而如此做的前提,是要把一个个自然语言文档(Document),转换为一个个可以用来进行数学运算的向量(Vector)。

当你用某种机器学习算法对某些文本进行分析的时候,你首先需要一个训练集(Training Set)。

假设这个训练集中包含N个文档,你要把这N个文档转换成N个与之一一对应的向量。再假设每个向量包含M维。

那么最终,当全部转换完之后,你把所有N个M维向量放在一起,就构成了一个NxM的矩阵(Matrix)。

这个矩阵就是你的训练集所构建的向量空间模型(Vector Space Model,VSM)。

之后的算法,就是运行在这个NxM的矩阵之上的。

向量空间模型的构建方式大致可以分为两类:

  1. 非深度学习的手工特征工程方法,由特征提取的人员手工设置一些转换规则,将文本转换为向量;

  2. 基于深度学习的文本数据表征方法,简答说就是专门训练一个深度学习模型,对应的输入是自然语言文本,而输出是一个表示该文本的向量。

今天我们要讲的是第一种方式。

需要说明的是,第一种方式中有许多具体的方法,整个构建过程又可以分成若干步骤。具体的方法步骤是可以有多种组合的,在一篇文章里不可能穷尽所有。

因此,我们就先来看一个构建VSM的实例——

构建向量空间模型

N是文档数,那么M是什麽数呢?M是你的全部训练集文本(所有N个文档)中包含的Term数。

这个Term可以是字,也可以是词,还可以是若干连续出现的字的组合,具体是什么,可以由你自己来确定。

在此,我们介绍一种最简单,最方便,效果总体而言还不错的,确定Term的方法:基于n-gram的文本特征提取方法。

基于n-gram的文档特征提取

n-gram中的n和文档个数的N无关(此处特别用大小写来区分他们),这个n是一个由你确定的值,它指的是最长Term中包含的汉字的个数。

一般情况下,我们选n=2就好了。当n==2时的n-gram又叫做bigram。n==1时叫unigram,n==3时叫trigram。

假设我们的N个文档中有一个是下面这个样子(为简单起见,假设整个文档就一句话):

张继科在比赛中露出了碎花内裤

那么我们首先把这个文档切分成unigram:

{张,继,科,在,比,赛,中,露,出,了,碎,花,内,裤}

然后再将其切分成bigram:

{张继,继科,科在,在比,比赛,赛中,中露,露出,出了,了碎,碎花,花内,内裤}

注意到bigram是怎么切分的没有?对了,就是取长度为2的窗口,从头到尾连续切分文档,每次后移长度为1。

上面切分出来的这些字段,我们将其称为Term。我们将unigram和bigram的所有Term合并起来,就是基于bigram的全部Term,总共27个:

{张,继,科,在,比,赛,中,露,出,了,碎,花,内,裤,张继,继科,科在,在比,比赛,赛中,中露,露出,出了,了碎,碎花,花内,内裤}。

这是一个文档,所有文档,都按如此方法切分成若干的Term。

NOTE:如果是基于trigram的,则取全部unigram,bigram和trigram的Term的集合。

针对Term计算TF-IDF

N个文档,设其中第i个文档的Term为ci个(i 取值区间为[1, N])。那么这N个文档分别有:c1,c2...cn个Term。

这些Term中肯定有些是重复的。我们对所有这些Term做一个去重操作,最后得出的uni-Term的个数就是M。

换言之,在这N个文档中,基于bigram抽取的文本特征共有M个。

那么针对具体的一个文档,我们就可以构建一个M维的向量,其中每一维对应这M个Term中的一个。

每一个维度的值,都是一个实数(一般在计算机处理中是float或者double类型)。

这个实数值,通常的情况下,取这一维度所对应Term在全部训练文档中的TF-IDF(请自行百度TF-IDF)。

VSM成型

假设我们一共处理了1万个文档(N == 10000),总共得出了2万个Term (M == 20000)。

上面那个例子,“张继科比赛中露出了碎花内裤” 这一文档共包含27个Term。对应这个文档的向量就会是一个2万维的向量,其中27个维度有大于零的值,其他维度的值都是0——很稀疏啊!

最后这1万个文档就组成了一个10000 x 20000的矩阵。

缩减VSM

如果在一个10000 x 20000的矩阵里,每个Vector都只有20多个维度有非零值,那它也太稀疏了。这样稀疏的矩阵恐怕也不会有太好的运算效果。

而且,一些区分度过大的Term(例如某一个Term仅仅只在一个或者极少的文档中出现),在经过运算之后往往会拥有过大的权重,导致之后只要一个文档包含这个Term就会被归到某一个类。这种情况显然是我们要避免的。

因此,我们最好先对所有的Term做一个过滤。此处讲两个特别简单和常见的Term筛选方法:

1. 设定DFDocumentFrequency的下限

设定一个Threshold (e.g. DF_Threshold = 2),若一个Term的DF小于该Threshold,则将该Term弃之不用。

2. 当对文本进行分类运算时,可以根据每个Term的信息熵对其进行筛选

在这里,我们要介绍一个概念:熵(Etropy)

熵是由德国物理学家克劳修斯于1865年提出的一个概念。克氏用它来测量在动力学方面不能做功的能量总数——当总体的熵增加,其做功能力也下降,反之,能力上升。

因此,熵也被用于计算一个系统中的失序现象,也就是计算该系统混乱的程度。

在1948年,克劳德·艾尔伍德·香农将熵的概念引入到信息论,用来描述不确定性。在信息世界,熵越高,则能传输越多的信息,熵越低,则意味着传输的信息越少。

信息熵(Information Entropy)实际是对随机变量的比特量和顺次发生概率相乘再总和的数学期望。

香农给出了它的计算公式,假设某一信息可能出现的状态有c个,每个状态i对应出现的概率为pi,则该信息的熵为:

比如,在掷硬币这件事情里,一个硬币可能出现的状态只有两个:正面和反面,得到任何一面的概率都是1/2。

则掷一枚硬币的熵为- 1/2 * log2(1/2)  - 1/2 * log2(1/2) = log2(2)。

假设一次抛掷N枚硬币,则这一次抛掷的熵为log2(2^N),下面是一个N=2时的例子:

一个Term的信息熵表现了该Term在不同类别中的分布情况。

一般而言,一个Term的Entropy越大,则说明它在各个类中均匀出现的概率越大,因此区分度就越小;反之,Entropy越小也就说明该Term的类别区分度越大。

我们当然要选用Entropy尽量小的Term。具体选用多少,可以自己定义一个Threshold。

Entropy_Threshold可以是一个数字(例如8000),也可以是一个百分比(例如40%)。

计算了所有Term的Entropy之后,按Entropy从小到大排序,选取不大于

Entropy_Threshold的前若干个,作为最终构建VSM的Term。

假设所有的训练样本一共被分为K类,则Entropy的计算方法如下(设tx表示某个具体的Term):

Entropy(tx) = Sigma[i] ((-P(ci) *log(P(ci)))) -- i取值范围为[1,K]

其中,P(ci) 表示tx在第i个列别中的出现概率,具体计算方法采用softmax算法,如下:

P(ci)= exp(y(ci)) /Sigma[j](exp(y(cj))) -- j取值范围为[1,K]

其中y(ci) 为tx在类别j中出现的次数。

来看一个简单的例子,假设我们的样本空间一共被分为5个类别,则C == 5。

假设tx在5个列别中出现的次数依次为{1,3,0,0,4}。则:

p(c1) = exp(1) / (exp(1) + exp(3) +exp(0) + exp(0) + exp(4))

p(c2) = exp(3) / (exp(1) + exp(3) + exp(0) + exp(0) + exp(4))

p(c3)= exp(0) / (exp(1) + exp(3) + exp(0)+ exp(0) + exp(4))

p(c4)= exp(0) / (exp(1) + exp(3) + exp(0)+ exp(0) + exp(4))

p(c5)= exp(4) / (exp(1) + exp(3) + exp(0) +exp(0) + exp(4))

entropy(tx) = -p(c1)*log(p(c1)) -p(c2)*log(p(c2)) -p(c3)*log(p(c3))-p(c4)*log(p(c4)) -p(c5)*log(p(c5))

就这样计算!

经过筛选,M个Term缩减为M' 个,我们NxM' 矩阵变得更加精炼有效了。现在,把它扔给算法库去做训练吧!

基于VSM的运算

如果要做聚类,则我们将这个矩阵作为输入传给某个算法,例如:KMeansClustering,我们设K = 5。

该算法经过运算之后,会给每一个向量赋一个[0,4]区间内的值,这个值就表示了该向量对应文档最终被聚类的结果。

如果要做分类操作,则需要对训练集中的文档进行人工标注,给每一个文档标注一个指定的类别。

然后,除了将文档本身转化成一个向量之外,还需要将这个类别转化成一个数值,一般直接将类名排序,然后把排序的index作为类别数值即可。

然后同样是把这个VSM输入给一个具体算法,例如:基于Logistic Regression的Multiclassification。经过运算后,会得到一个专门的分类模型。

我们再将一个新的,不属于训练集的文档根据上面的VSM进行转换,转换成一个向量。把这个向量输入给分类模型,分类模型会根据每一个预定的类,给出一个该向量被分到该类的可能性数值,可能性取值区间(0, 1)。

这几类中可能性最高的那个,就是分类模型预测的这个文档的最终分类。

小白深度学习入门系列

1. 直观理解深度学习基本概念

2. 白话详解ROC和AUC

3. 什么是交叉熵

4. 神经网络的构成、训练和算法

5. 深度学习的兴起:从NN到DNN

6. 异军突起的激活函数:ReLU

7. CNN,RNN,LSTM都是什么?

8. 什么是Transformer

9. 什么是生成对抗网络(GAN)

10. 什么是胶囊网络

“众智汇”愿景

尽职尽才,允公允能 —— 本社群不定期举行线上分享,组织群友分享知识、经验、资源,以达到让我们每个人的职业生涯得到最大程度的发展的目的

欢迎扫面下列二维码关注“悦思悦读”公众微信号

把自然语言文本转换为向量 | NLP基础相关推荐

  1. 向量数据库入坑指南:初识 Faiss,如何将数据转换为向量(一)

    我们日常使用的各种 APP 中的许多功能,都离不开相似度检索技术.比如一个接一个的新闻和视频推荐.各种常见的对话机器人.保护我们日常账号安全的风控系统.能够用哼唱来找到歌曲的听歌识曲,甚至就连外卖配送 ...

  2. 视频教程-自然语言处理--词向量视频教学(word embedding)-NLP

    自然语言处理--词向量视频教学(word embedding) 长期从事机器学习深度学习研究,在自然语言处理领域有一定认知 杨帅 ¥208.00 立即订阅 扫码下载「CSDN程序员学院APP」,100 ...

  3. 【深度学习】NLP基础--词向量(从One-hot到Word2Vec)

    1.什么是词向量 在自然语言处理中,面临的首要问题是如何让模型认识我们的文本信息,比如向模型中输入'我爱北京天安门',那模型是如何认识文本的?词,是自然语言处理中基本单位,将数据输入到模型中,尽可能的 ...

  4. NLP基础--文本特征提取中文分词word2vec原理

    文章目录 1. 文本特征提取 1.1 词集模型 1.2 BOW(Bag of Words)词袋模型 1.3 TF-IDF 2. 中文分词 2.1 基于词典匹配的分词方法 2.1.1 正向最大匹配(MM ...

  5. 文本标注十要点 | NLP基础

    NLP基础系列 1. 浅论语言与认知的关系 2. 为什么要处理自然语言 3. 计算机是如何理解自然语言的 文本标注十要点 实验 vs 应用 自然语言处理(NLP)是机器学习领域非常有挑战的一个分支. ...

  6. NLP基础 - 计算文本的相似度

    NLP基础 - 计算文本的相似度 一.计算文本的相似度简介 二.举例 一.计算文本的相似度简介 计算两个文本间的相似度在NLP领域中的应用非常广,包括:搜索引擎.问答系统.聊天机器人.文本分类等. 计 ...

  7. MATLAB 基础知识 数据类型 数据类型转换 将文本转换为数值

    本文说明如何将文本转换为它所表示的数值.通常,当有表示要绘制或在计算中使用的数字的文本时,需要执行这种转换.例如,文本可能来自文本文件或电子表格.如果在将其导入 MATLAB 时,您尚未将其转换为数值 ...

  8. 自然语言处理技术(NLP)在推荐系统中的应用 原2017.06.29人工智能头条 作者: 张相於,58集团算法架构师,转转搜索推荐部负责人,负责搜索、推荐以及算法相关工作。多年来主要从事推荐系统以及机

    自然语言处理技术(NLP)在推荐系统中的应用 原2017.06.29人工智能头条 作者: 张相於,58集团算法架构师,转转搜索推荐部负责人,负责搜索.推荐以及算法相关工作.多年来主要从事推荐系统以及机 ...

  9. 腾讯云大学大咖分享 | 自然语言处理技术(NLP)究竟能做些什么?

    自然语言处理(Natural Language Processing,缩写作 NLP)是人工智能(AI)领域的一个重要分支,被广泛应用于聊天机器人.机器翻译和搜索引擎等场景.为帮助大家更好地理解NLP ...

  10. NLP基础知识(三)-AI应用篇

    文本间的推理关系,又称为文本蕴含关系 (TextualEntailment),作为一种基本的文本间语义联系,广泛存在于自然语言文本中. 简单的来说文本蕴含关系描述的是两个文本之间的推理关系,其中一个文 ...

最新文章

  1. pandas使用rename函数重命名dataframe中数据列的名称、从而创建一个包含重复列名称的dataframe数据集
  2. 《LeetCode力扣练习》剑指 Offer 15. 二进制中1的个数 Java
  3. JWT 应该保存在哪里?
  4. Python那些优雅的写法:switch-case
  5. Linux无法解析hosts里面绑定域名的排查方法
  6. 二叉树的先序、中序、后续遍历【Java】
  7. Step By Step (zz from UESTC)
  8. SSM之Mybatis框架高级
  9. informix利用dbaccess倒出数据
  10. 贺利坚老师汇编课程54笔记:OF溢出标志OVERFLOW FLAG
  11. android图片加水印,文字
  12. java值传递人体自_请大家帮帮我这个初学者
  13. 微信H5分享钉钉分享设置方法
  14. 国际象棋渲染测试软件,多线程运算效能Fritz国际象棋测试_CPUCPU评测-中关村在线...
  15. Consolidation Mappings
  16. 惠普总裁关于职业规划的讲座
  17. 机器学习实战---读书笔记: 第11章 使用Apriori算法进行关联分析---2---从频繁项集中挖掘关联规则
  18. [从头学数学] 第208节 带着计算机去高考(序)
  19. 【云原生之Docker实战】使用Docker部署Alist网盘直链程序
  20. 基于STM32,TB6612,TCRT5000的简易红外循迹小车

热门文章

  1. TypeScript keyof 用法
  2. 判断单链表是否中心对称算法
  3. ios 加速计效果实现
  4. IOS开发之——硬件开发-加速计传感器(03)
  5. P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G
  6. 基站安全监控管理系统方案
  7. QT windows ICO图标制作方法
  8. 0xc0000225无法进系统_0xc0000225无法进系统 - 卡饭网
  9. 密西根州立大学计算机qs分数,密歇根州立大学商科排名怎么样?2021年密歇根州立大学QS商科硕士排名商业分析硕士专业排名第20...
  10. linux centos无线网卡驱动安装,CentOS 6.5 安装无线网卡驱动实现无线上网