一、语料的获取与处理
1、什么是语料库?
语料:即语言材料。语料是语言学研究的内容。语料是构成语料库的基本单元。
语料库:存放的是在语言实际使用中真实出现过的语言材料,是以计算机为载体承载语言知识的基础资源。真实语料需要经过加工(分析、处理),才能成为有用的资源。
2、语料库的种类
异质的:语料有多种分类
同质的:语料同类
系统的:如聊天机器人
专用的:如保险推销聊天机器人
3、语料的获取途径
1、开放性语料数据集:
(1)中科院自动化所的中英文新闻语料库
(2)搜狗的中文新闻语料库
(3)人工生成的机器阅读理解数据集
(4)一个开放问题与回答的挑战数据集
2、爬虫技术
3、自有平台
语料的处理
步骤一:获取语料
步骤二:格式化文本
步骤三:特征工程(在数据集中提取相关的特征用于训练和验证)
二、NLP中的语言模型
语言模型是NLP中的一大利器,是NLP领域一个基本却又重要的任务。
主要功能就是计算一个词语序列构成一个句子的概率,这可以用来判断一句话出现的概率高不高,符不符合表达习惯,是否通顺正确。
eg:我是NLP开发工程师、开发工程师我是NLP
语言模型分类
Unigram models(一元文法统计模型)
N-gram 语言模型(N元模型)
概率语言模型
预测字符串概率,动机,如何计算
1、一元文法统计模型
很简单,他只是用来求每一个字,或者说每一个词。他出现的概率是多少?再把这些概率相乘得到了他一个整体的概率。
这个式子成立的条件是有一个假设,就是条件无关假设,我们认为每个词都是条件无关的。
今天的天气非常睛朗。
p(今)=1/10,p(天)=1/10,一直算到后面的句号为1/10.
p(今天的天气非常晴朗)=p(今)×p(天)×p(的)×p(天)×p(气)×p(非)×p(常)×p(晴)×p(朗)×p(。)
我喝水
我吃水
p(我喝水)=p(我)×p(喝)×p(水)
p(我吃水)=p(我)×p(吃)×p(水)
我们可以看到,这样求出结果差距不大。因为我们这个所有的差别只是吃喝这两个字的差别。而这两个字的差别,他无法连系上下文,就没有一个非常大的区别。就会导致最后很有可能计算出来他们两个短语所得出的概率是相同的。虽然他概率差别不大,但他实际上的意思却不同。因为肯定是我喝水的概率要大一些,但实际上用一元文法统计模型。他求的概率差不多。这显然不是我们要的结果,因此呢,在这个基础上引出二元文法统计模型。
2、二元文法统计模型
这是一个二元模型,就是他把前面一个字和后面一个字进成关联。比如说我喝水,还是这三个字。把这三个字先作为一个字符串,然后做一个概率假设,
我在这个字符串中所占的概率有多少?喝在这里占的是多少等等,最后求出来我喝水的概率。那我吃水也是用同样的方法来求。通过这样,我们可以看水和吃和水和喝,那很容易的就可以判断出这个水和喝组和在一起的概率肯定会比水和吃组和在一起的概率要高得多。那么,最后求到的我喝水的这个概率的正确率比我吃水得到的正确率肯定是要高得多。也就是说,二元模型也能比一元模型有更好的能get到两个词语之间的关系信息。优点就在于我可以进行前后关联。那通过前后关联,就可以判断出前后文他们之间的联系。这样的话,比较容易求出来最后正确的概率。我们把一元模型和二元模型做一个拓展,把二变成三或者变成四变成五非常六,那就是接下来的n元模型。
3、N元模型
他可以关联更多的前后相关的词。对于N元模型来讲,我们只是把这个123换成了n。是不是n越大,它的效果越好呢?我们来想一下,一元模型他效果最不好,因为他跟前后的词没有什么关联。二元模型可以跟前面的相关联做一个推测,那三元模型呢?那也是可以跟前面后面的词组关联推测。那么我们是不是是认为到N元模型N越大那才推出的效果越好?按理来说没有什么问题,但是我们来想一想,如果说我们N非常大,那么有可能最后一个字,可能要和第一个字,比如说,我们就拿这句话来讲。N越大效果越好?这个好字,和这个越字,或者说和这个效字,或者和这个字母N要关联。实际上,他们两个没有任何关系的。因为他们没有任何关系,所以说当n大了的话,他并不一定是非常好的。也就是说,当n大于三的时候基本上就无法处理了,为什么无法处理?第一个是参数空间太大了,导致它的计算量非常复杂,第二个就是它不能表示词与词之间的关联性了。
所以说并不是越大越好,一般来讲,n=3刚好,他作为这种语言模型进行处理是最有效的。
三、词向量与Word2vec
在进行自然语言处理的相关任务中,我们所收集到的原始数据,一般是不能直接被计算机所识别的。通常需要将自然语言转换成计算机所识别,能够理解的一种表示方式,作为计算机语言,一般来讲就是一些数字符号,或者说相关的字符,二进制的一些相关的数据,一般是被计算机接受的。而词向量,实际上就是将原始的数据进行抽象处理,形成计算机能够识别的语言。然后,在作为计算机的一种输入进行模型的学习和训练。
词向量( Word embedding),又叫词嵌入是自然语言处理(NLP)中的组语言建模和特征学习技术的统称,其中来自词汇表的单词或短语被映射到实数的向量。就是说,把词汇表或者说词表,词典中的一些单词或短语给他映射到一个实数中,变成一个向量。
Word2vec,是为一群用来产生词向量的相关模型。这些模型为浅而双层的神经网络,用来训练以重新建构语言学之词文本。简单来说Word2vec是用来产生词向量的工具,其根本的目的就是像单词转换成一个词向量。他的基本思想实际上是通过训练,将每一个词映射成一个k维的实数向量。并通过这个词与词之间的距离来判断单词之间的相似程度。
他一般有两种模型,一种叫CBOW,一种叫Skip-gram模型
- CBOW模型由输入层、映射层、输出层共同构成
- CBOW所构建的模型结构实际上是一个二叉树结构
- 这种二叉树结构应用到Word2vec中被称之为Hierarchical Softmax
- Skip-Gram模型实际上和CBOW模型正好是相反的
- Skip-Gram模型与CBOW一样,也是由输入层、映射层和输出层构成
- Skip-Gram所构建的模型结构实际上也是一个二叉树结构这种二叉树结构。
文本处理方法
- 数据清洗(去掉无意义的标签、url、符号等)
- 分词、大小写转换、添加句首句尾、词性标注
- 统计词频、抽取文本特征、特征选择、计算特征权重,归一化
- 划分训练集、测试集