聊城网站建设制作开发公司,做增员的保险网站,国外用什么做网站,软件工程师的工作内容文章目录 什么是NLP自然语言处理发展历程自然语言处理模型模型能识别单词的方法词向量分词 一个向量vector表示一个词词向量的表示-one-hot多维词嵌入word embeding词向量的训练方法 CBOW Skip-gram词嵌入的理论依据 一个vector#xff08;向量#xff09;表示短语或者文章ve… 文章目录 什么是NLP自然语言处理发展历程自然语言处理模型模型能识别单词的方法词向量分词 一个向量vector表示一个词词向量的表示-one-hot多维词嵌入word embeding词向量的训练方法 CBOW Skip-gram词嵌入的理论依据 一个vector向量表示短语或者文章vector space Modelbag-of-wordvector space Model bag-of-word 实现信息搜索改进版 bag-of-word 本文关注NLP自然语言处理中的基础词向量 什么是NLP自然语言处理
人工智能的重要突破点之一就是自然语言处理应用范围很广下游任务包括词性分析、情感分析、生成对话等等。
发展历程
自然语言的处理经历了多个阶段基于概率、统计等等但是很难满足复杂的语言体系直到最近基于深度学习模型的出现才更好的解决了这个问题。
自然语言处理模型
目前流行的模型都是基于transformer架构的大模型不去了解细节的话transfomer是编码器加解码器。 简单理解编码器用来处理输入解码器用来输出。 现在比较出名的三大模型分支里全部都是由transformer演化出来基于transformer的编码器BERT家族基于解码器的GPT一支还有一支是编码器和解码器都用了比如google的T5模型所以很多模型的简写里面都带了T是因为都是transformer的变体。
所谓的大模型****大是指参数大GPT-3就已经是1750亿的水平了这些参数的训练已经不是普通中小玩家可以训练起来的水平了 对于自然语言来说肯定是要处理句子和单词的那么问题就来了电脑或者说模型知道每个单词的意思么
模型能识别单词的方法 计算知道单词的意思就是需要知道 tree和flower相近 dog rabbit cat相近run jump相近这样一种联系那么模型可以做到么 答案是虽然不了解每个词的具体含义但是可以模拟出词之间的关系。
词向量
模型需要输入要么是一个词字或者是个短句或者整篇文章。比如翻译任务模型的输入是一句话如果文章摘要任务模型的输入就是一篇文章。 第一种一个vector表示一个词有两种方法第一种 one-hot也叫one-of-n-coding是一个稀疏矩阵第二种叫词嵌入是一个稠密矩阵。 第二种一个vector表示一个短句或者文章方法vecbag-of-word。 下面会逐步介绍无论那种方法基本都需要先分词。
分词
分词方法很多有现成的语料库可以实现分词英文的NTLK中文的结巴等等。你可能会觉得这个很简单不就是简单分一下嘛 实际上不然分词包含很多细节。举个例子 比如英文doing英文的词汇表里只有do那这种情况通常又会分为子词所以NLTK库分词后经常会被分成do和 ##ing 再比如说输入错误的英文又该怎么处理通常NLTK库也会留下部分词根比如输入一个错的词doning那么通常也会把部分词根分出来。 会分成do 和 ## ning。
所有的语料整理完毕后通常会形成一个语料库类似于一个词典,保存分词
序号词汇1a2do3apple……
但很多语言没办法穷举所有对的词所以一般词表中还会加一个特殊词Other 来表示一种特殊的不认识的词汇。 那转换后的分词如何表示呢分为One -hot 和 多维词嵌入两种办法
一个向量vector表示一个词
词向量的表示-one-hot
比如词汇表有5个词{apple, dog, do,this,cat} 那么apple的表示就是[1,0,0,0,0] dog的表示就是[0,1,0,0,0] do的表示就是[0,0,1,0,0] this的表示就是[0,0,0,1,0] cat的表示就是[0,0,0,0,1]
但这种表示方法浪费空间且无法表示出不同词之间的联系
多维词嵌入word embeding
考虑一个文本预测问题 比如输入“”这里有一只小 让模型预测下文 模型的输出是每个单词的概率大小词表的大小概率最大的那个就是预测的下一个单词。 实际上这这个模型输出不重要重要的是网络模型中的第一层隐藏层的权重z1,z2,…zn把这一层的权重z作为要预测词的w的向量观察向量z会发现相近的词距离更近。 比如上面图中确实表现出了tree和flower等相近的词距离更近所以 词向量能够表达词之间的逻辑关系 这种逻辑关系有什么用呢 当你问模型Rome的Italy 就相当于Berlin的 的时候电脑真正去做的事情是 而这个的输出的Germany的概率最大
这种表示方法就是词嵌入或者叫word vector
词向量的训练方法 CBOW Skip-gram
当然训练的方法除了下面的预测下一个词还有SKIP-Gram,Cbow等等这些不同的方法区别就是预测的方式不一样:
CBOW 上下文预测中心词Skip-gram是通过中心词预测两边的词 那么这种表示方法到底是巧合呢还是有理论依据呢
词嵌入的理论依据
一个人人品怎么样看他周围的朋友而一个词是什么意思可以看他经常跟什么词一起出现当然这个在模型上也是有理论依据的另外在语言学上也有理论依据。 放到深度模型中来看当我们有两个输入 李逍遥御剑飞行 酒剑仙御剑飞行 模型起初不知道李逍遥和酒剑仙是同一个东西但是模型最后的输出都是要输出 御剑飞行的概率最大因此这两个不同的输入对应的z1,z2,…zn 就必须是相似的。 经过词嵌入之后的模型不再是一个稀疏矩阵而是嵌入在多维空间里的一个稠密矩阵
下面再来说如何用一个vector表示句子或者一篇文章
一个vector向量表示短语或者文章
vector space Model
比如一个信息检索的任务我们通常是把每篇文章变成一堆vector也就是下图中的蓝色的点而要检索的信息也是一个vector当两个向量的夹角比较大的时候我们认为这两个向量就更相近。 那怎么把文档表示成一个vector呢
bag-of-word
比如文档中是this is an apple如果this这个单词在词表中有我们就将词表中对应位表示为1。 这样的表示方法显然没有考虑文本的顺序如果两个文档的单词一样但顺序不一致其实是完全不同的文档
vector space Model bag-of-word 实现信息搜索 这种表示方法就是将要搜索的信息座位查询q文档作为被检索的资料计算两个向量的夹角。 这种检索方法把词都是看做独立的个体没有考虑顺序也没有考虑不同的词其实是表达了同一个意思又或者不同的词在某种情景下其实是相同的意思。
改进版 bag-of-word
我们在上述基础上加入神经网络改进了句子的表示方法。 需要查询和检索的句子和文档都加入神经网络用神经网络的输出代表这个词向量可问题是这个神经网络如何训练呢如何获取这些training data这些的target又是什么呢 实际上是有方法获取这些标签数据的比如百度的时候我们输入的查询就是query但是它怎么知道结果是哪个呢就靠你点击的链接了 总之是有办法获取神经网络的输入和target从而训练一个网络。