首发于 自然语言处理
从零开始学NLP(五)文本表示

从零开始学NLP(五)文本表示

​前言

上一章已经介绍完自然语言处理任务的第一个流程——文本处理,接下来就是如何用计算机明白的语言向量表示文本了,里面包括如何更好的表示单词和句子。

一、文本表示基础

对于自然语言处理各类应用,最基础的任务就是文本表示。因为我们都知道一个文本是不能直接作为模型的输入的,所以我们必须要先把文本转换成向量的形式之后,再导入到模型中训练。所谓文本的表示,其实就是研究如何把文本表示成向量或者矩阵的形式。

1.单词的表示

如何表示一个单词,最直观的理解就是用One-hot编码来实现。

One-hot表示很容易理解。在一个语料库中,给每个字/词编码一个索引,根据索引进行one-hot表示。

词典:[我们,去,爬山,今天,你们,昨天,跑步]

其中的每个单词都可以用one-hot方法表示:

我们:[1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
爬山:[0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
跑步:[0, 0, 0, 0, 0, 0, 0, 0, 1, 0]

当语料库非常大时,需要建立一个很大的字典对所有单词进行索引编码。比如100W个单词,每个单词就需要表示成100W维的向量,而且这个向量是很稀疏的,只有一个地方为1其他全为0。还有很重要的一点,这种表示方法无法表达单词与单词之间的相似程度,如爬山和登山可以表达相似的意思但是One-hot法无法将之表示出来。

2.句子的表示

知道了如何表示一个单词之后,我们很自然地就可以得到如何表示一个句子了。一个句子由多个单词来组成,那实际上记录一下哪些单词出现,哪些单词没有出现就可以了。当然,很多时候我们也需要记录一个单词所出现的次数。

这里包括两种方法:boolean vector、counter vector。区别只在于前者不统计出现的次数,后者统计出现的次数。

词典:[我们,又,去,爬山,今天,你们,昨天,跑步]
boolean vector
你们又去爬山又去跑步:[0,1,1,1,0,1,0,1]
counter vector
你们又去爬山又去跑步:[0,2,2,1,0,1,0,1]

3.tf-idf向量

但是上述统计方法存在一个问题,就是单词并不是在一个句子里出现越多就越重要,越少就越不重要,自然语言处理任务的区分更重要的是某一些独特的单词而不是大部分文档都存在的词汇。

所以,如果只记录单词的个数也是不够的,我们还需要考虑单词的权重,也可以认为是质量。这有点类似于,一个人有很多朋友不代表这个人有多厉害,还需要社交的质量,其实是同一个道理。 那如何把这种所谓的“质量”引入到表示中呢?答案是tf-idf。

TF-IDF的应用非常广泛,即便放在当前,也是表示文本的最核心的技术之一。 之前我们讲过什么是基准,那TF-IDF是文本表示领域的最有效的基准。很多时候,基于深度学习的文本表示也未必要优于TF-IDF的表示。

下面简要介绍下TF-IDF,TF-IDF的分数代表了词语在当前文档和整个语料库中的相对重要性。TF-IDF 分数由两部分组成:第一部分是词语频率,第二部分是逆文档频率,如下表示:

tfidf(w)=tf(d,w)*idf(w)\\

tf(d,w)= 中包含的是文档总数 / 出现该词语的文档总数。
idf(w)=log\frac{N}{N(w)} ,中包含的是文档总数 / 出现该词语的文档总数。

TF-IDF算法的优点是简单快速,结果比较符合实际情况。缺点是,单纯以"词频"衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多。而且,这种算法无法体现词的位置信息,出现位置靠前的词与出现位置靠后的词,都被视为重要性相同,这是不正确的。

二、文本相似度

如何计算两个文本之间的相似度?这个问题实际上可以认为是计算两个向量之间的相似度。上一节已经将文本转换成向量,那么可以采用两种常见的相似度计算方法来衡量算两个文本之间的相似度,一个是基于欧式距离的计算,另外一种方式为基于余弦相似度的计算。

1.计算欧式距离

欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式,如下所示:

d_{E}=|s1-s2|=\sqrt{\sum_{k=1}^{n}(x_{1k}-x_{2k})^2}\\

向量之间的相似度实际上要考虑到向量的方向,因为向量最重要的特性为它的方向性。如果两个向量相似,那也需要它俩的方向也比较相似。然而,计算欧式距离的过程并没有把方向考虑进去,这是欧式距离的最大的问题。

2.计算余弦距离

为了弥补欧式距离所存在的问题,需要提出另外一种相似度计算方法——余弦相似度。通过余弦相似度,实际计算的是两个向量之间的夹角大小。两个向量的方向上越一致就说明它俩的相似度就越高,表达式如下所示:

d_{cos}=\frac{s1.s2}{(|s1|*|s2|)}\\

所以余弦相似度有以下四点特征:

三、词向量基础

上一节为止,我们一直在讨论如何计算两个文本之间的相似度,但至今还没有讨论过如何计算两个单词之间的相似度。单词作为文本的最基本的要素,如何表示单词的含义以及两个单词之间的相似度也极其重要。

1.计算单词之间的相似度

可以发现通过One-hot编码得到的单词向量,是无法通过欧式距离或者余弦相似度计算出单词之间的相似度,因为不管如何计算,俩俩之间的结果都是一样的。因此我们需要考虑另外一种单词的表示法,这就自然引出词向量的概念。而且 除了不能计算相似度,独热编码也存在稀疏性的问题。

2.词向量基础

我们可以在分布式表示方法下计算出两个单词之间的相似度。当然,效果取决于词向量的质量。所以,如何得出这些词向量?

由于具体的训练词向量方法需要涉及其他知识,在后续文章会说明。在这一节中,仅需要知道当我们将语料库输入到某个模型中,通过训练出可以将单词转化成具有某些特征的词向量,比如语义相似度高的单词转化的词向量相似度也高。

3. 句子向量

假如我们手里已经有了训练好的词向量,那如何通过这些词向量来表示一个完整的文本呢,或者一个句子呢?有一种最简单且常用的方法,就是做平均。

有了文本表示之后,我们就可以开始对文本做建模了,比如计算两个文本之间的相似度,或者对某个文本做分类。在这里我们来做个简单的小结:

总结

本章主要是研究如何表示文本,包括单词和句子。对单词可以采用One-hot编码和分布式编码,对于句子可以取向量平均。而衡量文本相似度的方法主要是欧氏距离和余弦距离,更通常使用余弦距离,因为其考虑了向量的方向。

参考:

贪心学院nlp

NLP中的文本表示方法

代做工资流水公司湛江企业对私流水多少钱岳阳代开银行对公流水西宁企业对公流水查询扬州企业对公流水绵阳代开签证工资流水南宁企业对公流水多少钱岳阳背调银行流水代办临沂办理工资流水信阳企业流水打印多少钱舟山制作车贷银行流水阜阳工作收入证明代做北京代开对公流水烟台公司流水图片上海银行流水报价江门查询自存流水大连背调银行流水图片保定工资流水芜湖代做离职证明洛阳对公账户流水报价肇庆代开签证银行流水温州银行流水单样本广州企业银行流水样本广州贷款流水图片包头查对公流水西宁查询转账流水唐山薪资银行流水价格莆田在职证明打印荆州消费贷流水费用中山查询贷款工资流水扬州签证流水图片香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化