借助分类和词向量做自然语言处理
欢迎来到由 DeepLearning.ai提供的自然语言处理专项的第一门课程。这门课由Younes Bensouda Mourri,Łukasz Kaiser和Eddy Shyu讲授。
目录
课程简介
第一门课程的内容简介
In Course 1 of the Natural Language Processing Specialization, offered by deeplearning.ai, you will:
a) Perform sentiment analysis of tweets using logistic regression and then naïve Bayes,
b) Use vector space models to discover relationships between words and use PCA to reduce the dimensionality of the vector space and visualize those relationships, and
c) Write a simple English to French translation algorithm using pre-computed word embeddings and locality sensitive hashing to relate words via approximate k-nearest neighbor search.
Please make sure that you’re comfortable programming in Python and have a basic knowledge of machine learning, matrix multiplications, and conditional probability.
By the end of this Specialization, you will have designed NLP applications that perform question-answering and sentiment analysis, created tools to translate languages and summarize text, and even built a chatbot!
This Specialization is designed and taught by two experts in NLP, machine learning, and deep learning. Younes Bensouda Mourri is an Instructor of AI at Stanford University who also helped build the Deep Learning Specialization. Łukasz Kaiser is a Staff Research Scientist at Google Brain and the co-author of Tensorflow, the Tensor2Tensor and Trax libraries, and the Transformer paper.
逻辑回归
有监督学习 & 情感分析
-
在有监督机器学习中,你需要有输入特征以及特征的标签
-
目标是尽可能地减小损失值
-
将特征输入给,将实现特征输出为预测标签
-
当标签和预测值差异值较小时,可以实现从特征到标签的最佳映射
-
损失函数计算和之间的差异
-
通过计算的损失值来更新参数,迭代重复至损失值为一个较理想的值
-
逻辑回归的函数为函数
-
情感分析的有监督机器学习分类问题例子:
目的是辨别文本中的语句是积极的还是消极的情感
- 建立逻辑回归分类器模型,我们分为3个步骤:提取特征, 训练,预测:
- 处理原文本为训练数据集并且提取有用的特征
- 文本中带有积极正面情感标记为1,带有消极负面情感标记为0
- 训练逻辑回归分类器模型并减小损失值
- 预测
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0invH1yu-1598175380213)(Images/02.png)]
特征提取
- 稀疏矩阵表示
-
为了将一个文本转化为向量表示,我们需要建立一个词汇表,然后能够将任何文本或则转化为数组矩阵
-
词汇表将会以列表形式存储中的不同单词
-
利用稀疏矩阵存储,在中出现的单词词汇表将会赋予,而未出现的单词赋予
-
-
稀疏矩阵存在的问题:
-
逻辑回归模型将会学习个参数,是词汇表的大小
-
耗费巨大的训练时间
-
耗费巨大的预测时间
-
- 分别统计消极负面和积极正面的频率
-
从语料库中不同的单词建立词汇库
-
建立两个类别,一个类别是消极负面情感,另一个类别是积极正面情感
-
在词汇表中计算积极单词的频率,需要统计它在积极正面的文本中出现的次数,计算消极单词的频率一致
-
实际上在编码时,此表是一个字典,将单词及其对应的类别映射到频率,例如单词,
-
使用字典提取有用的特征以进行情感分析,使用维度的向量表示
- 即:[偏置,中不同单词的正频率总和, 中不同单词的负频率总和]
预处理
- 使用词干化以及停顿词对文本进行预处理
- 首先,我们移除在中不会带有重要含义的单词或则符号,例如停顿词,标点符号
- 在某些情况下,不必移除标点符号。因此,需要仔细考虑标点符号是否会为你的NLP任务添加重要信息
- NLP中的词干化只是简单的把单词转化为其基本的单词
训练逻辑回归模型
- 训练逻辑回归分类器,迭代至损失值小于阈值时得到的参数
- 训练的算法叫梯度下降
测试逻辑回归模型
- 你需要和,即验证集数据
- 首先,利用和,即,函数
- 其次,评估是否大于等于阈值,通常阈值设置为
- 最后在验证集上评估模型的准确率
损失函数
- 变量,代表了训练集中的训练样本数量,表示每次训练样本的总花费
- 该方程有两个相加的项:
- 左侧是逻辑回归函数应用到每一次训练样本
- 如果 我们想要 最大 最大值为1
- 如果 我们想要 最大 尽可能小,因为它只能取
朴素贝叶斯
条件概率
-
在语料库中的句子可以被标记为正面或负面的情感,其中有些单词有时被标记为正面的,有时别标记为负面的
-
-
假如被标记为正样本,的概率为,计算概率的方法为正样本的数目与语料库中所有的样本的比值
-
将概率视为事件发生的频率
-
表达负面情绪的概率等于减去正面情绪的概率
-
-
条件概率是指发生条件下发生的概率,即
贝叶斯法则
-
贝叶斯法则是指发生条件下发生的概率,即,等价于发生条件下发生的概率乘以和概率的比值,即
-
-
朴素贝叶斯的第一步是计算每个单词的条件概率,即
-
拉普拉斯平滑
-
拉普拉斯平滑处理,一种用于避免出现概率为的技巧
-
-
在上表应用此公式,概率总仍然为,并且不会出现概率为的情况
-
概率比值
- 基于上一个表,概率比值被定义为正样本的条件概率除以负样本的条件概率,即
Likelihood times prior
- Likelihood times prior
Log Likelihood + log prior
-
为了避免数值下溢(因为我们连乘了许多小数),我们转化为对数似然,即将乘法转化为加法
-
-
如果对数似然+对数先验大于,那么带有积极含义,否则带有消极含义
训练朴素贝叶斯模型
- 训练朴素贝叶斯模型,我们需要做以下几件事情:
- 得到带有标记的正面和负面样本的训练集
- 预处理训练集
- 字母小写化
- 去除标点符号,网页链接,姓名
- 去除停顿词
- 词干化处理:将单词处理为词根形式
- 向量化语句:将每个句子拆分为不重复的单词
- 计算词汇表中每个单词和每个类别的频率:
- 使用拉普拉斯平滑处理计算给定类别单词的频率,$ P(w|pos),P(w|neg)$
- Compute, log of the ratio of your conditional probabilities
- 计算,对数条件概率比值,即
- 计算$ logprior=log(\frac{P(Pos)}{P(Neg)})$
测试朴素贝叶斯模型
-
为了测试经过训练的贝叶斯模型,我们需要条件概率并且使用它们来预测未训练过的的情感
-
为了评估模型,我们将使用标注情感的的测试集
-
给出测试集和,我们评估分数,即的函数,预测为分数
-
准确率为:
-
在训练集中没有训练过的单词被认为是中性,因此在分数上加上0
朴素贝叶斯模型的应用
-
朴素贝叶斯有许多应用
-
情感分析
-
作者识别
-
垃圾邮件过滤
-
信息检索
-
单词歧义
- 例如,我们无法确定银行**(bank)是指河流(river)还是金融机构(financial institution)**,计算比率
-
-
朴素贝叶斯的假设:
- 条件独立 : 在中不成立
- 训练集类别的相对频率影响着模型并且不能代表现实中的分布
朴素贝叶斯错误的来源
- 朴素贝叶斯错误可能发生在:
- 预处理
- 移除标点符号(例如 ‘????’ )
- 移除停顿词
- 单词顺序(不是句子中的单词顺序)
- 例如 : I am happy because I did not go 和 I am not happy because I did go
- 反义的话语 (容易被人理解但是算法不行…)
- 讽刺,讽刺,委婉语等
- 例如: This is a ridiculously powerful movie. The plot was gripping and I cried right through until the ending
- 预处理
词嵌入
向量空间模型
-
Vector space models repesent words and documents as Vectors that captures relative meaning by identifying the context around
each word in the text -
向量空间模型将单词和文本存储为向量,通过识别周围的单词来获取相对的含义
-
向量空间模型的主要用途是识别相似度和独立性
-
基本概念: “You shall know a word by the company it keeps.” Firth,1957
-
应用包括:
- 信息提取
- 机器翻译
- 聊天机器人
统计单词
- 计算在一定距离内两个单词出现的次数
统计文本
- 计算单词在某种类别中出现的次数
欧式距离
-
欧氏距离是点之间的直线长度
-
对于两个向量,公式在中是:
-
当语料库大小不同时,欧氏距离可能会产生误差
余弦相似度
-
对于两个向量,它们的夹角的余弦由下面公式给出:
-
余弦相似度的值介于0到1之间
向量空间中操作单词
- 如果向量空间代表某种含义,那么我们可以进行如下操作
-
的首都是,我们想要得到的首都,即在向量空间中我们可以这样计算:
主成分分析
-
可视化单词向量空间,可以将向量空间(在较高维度中)转换为2或3维空间,以便可以查看单词之间的关系
-
在于将向量投影至低维度空间,并且尽可能的保留信息
-
算法 :
-
特征向量给出不相关特征的方向
-
特征值给出每个特征保留的信息,即新特征的方差:
-
均值归一化数据,即每个特征进行归一化
-
计算协方差矩阵
-
执行奇异值分解,得到3个矩阵即
-
点积运算将不相关的特征数据,投影至维度
-
计算保留方差的百分比:
-
-
特征值应按降序排序
单词翻译
搜索文本
- 文本可以被表示为与单词具有相同维度的向量矩阵
- 单词向量矩阵相加由下图所示
转化单词向量
-
为了将一种语言的单词向量转化为另一种单词向量的,我们建立矩阵,例如:
-
为了求解,我们利用梯度下降:
K-近邻算法
- 使用将翻译为,不对应中的任何特别的向量
- 可以搜寻矩阵中最邻近的个值
- 在整个空间中搜寻会十分缓慢,使用哈希表可以大幅度减少搜索的空间
- 哈希表可能会忽略一些邻近计算出的向量的值
哈希表和哈希函数
-
哈希函数将对象映射到哈希表中的桶中
-
一个简单的哈希函数:哈希值 = 向量 % 哈希表中桶的个数
-
这个哈希函数不会将相似的对象存储于用一个桶中 ⇒ 局部哈希敏感
局部哈希敏感
-
使用超平面分割空间
-
对于每个向量,在超平面上与法线向量进行运算
-
运算决定了向量在哪一个方向
-
如果点积为正,,否则
-
哈希值为:
接近最近邻搜索
-
使用多组随机平面划分空间
-
每个划分将在计算向量的相同存储桶中给出(可能)不同向量
-
那些不同的向量(来自多个划分)是成为个最近邻居的良好候选者
-
接近最近邻搜索不是最好的但是比单纯的搜索要快得多