赞
踩
阅读理解
文本摘要
文本生成…
如何把人话(自然语言)转换为数值呢?
首先需要注意一点:说到数值,大家可能本能的想到int, double, float……
但如果将一个语言要素对应成一个标量的话,太容易出现两个原本相差甚远的概念经过简单运算相等的情况。
假设“苹果“被转化为2,而”香蕉“被转化为4,难道说两个苹果等于一个香蕉吗?
因此,一般在处理时会将自然语言的单位语素转化成n维向量。
只要转化方式合理,规避向量之间因为简单运算而引起歧义的情况还是比较容易的。
此处需要一个步骤,把原始文字形式的训练数据转化为数值形式。为了做到这一点,我们需要构建一个向量空间模型(Vector Space Model/VSM)。
VSM负责将一个个自然语言文档转化为一个个向量。说到具体的转化方法,我们之后再介绍。
假设这个训练集中包含N个文档,你要把这N个文档转换成N个与之一一对应的向量。再假设每个向量包含M维。
那么最终,当全部转换完之后,你把所有N个M维向量放在一起,就构成了一个NxM的矩阵(Matrix)。
这个矩阵就是你的训练集所构建的向量空间模型(Vector Space Model,VSM)
向量空间模型的构建方式大致可以分为两类:
当n2时的n-gram又叫做bigram。n1时叫unigram,n==3时叫trigram。
假设我们的N个文档中有一个是下面这个样子(为简单起见,假设整个文档就一句话):
张继科在比赛中露出了碎花内裤。
那么我们首先把这个文档切分成unigram:
{张,继,科,在,比,赛,中,露,出,了,碎,花,内,裤}
然后再将其切分成bigram:
{张继,继科,科在,在比,比赛,赛中,中露,露出,出了,了碎,碎花,花内,内裤}
注意到bigram是怎么切分的没有?对了,就是取长度为2的窗口,从头到尾连续切分文档,每次后移长度为1。
上面切分出来的这些字段,我们将其称为Term。我们将unigram和bigram的所有Term合并起来,就是基于bigram的全部Term,总共27个:
{张,继,科,在,比,赛,中,露,出,了,碎,花,内,裤,张继,继科,科在,在比,比赛,赛中,中露,露出,出了,了碎,碎花,花内,内裤}。
这是一个文档,所有文档,都按如此方法切分成若干的Term。
NOTE:如果是基于trigram的,则取全部unigram,bigram和trigram的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。
自然语言已经转化为了数值形式,那么下一步,究竟进行怎样的计算呢?
这就要看你具体要做什么事情了。在自然语言理解(NLU)中,负责来进行具体计算的那个部分,叫做:模型!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。