产品经理也能动手实践的AI(五)- IMDB电影评论NLP,协同过滤

上一节讲了多标签识别,图像分割和data block,这之前讲的都是图像识别的方法,今天一节课把剩下的3种核心领域都讲了:自然语言处理,表格数据处理,协同过滤,并且把神经网络层与层之间的微观活动也都详细的描述了一遍,可谓是干货满满。

产品经理也能动手实践的AI(五)- IMDB电影评论NLP,协同过滤

1.概览

  • 首先是自然语言处理 NLP(Natural Language Processing ),主要讲解通过迁移学习来实现IMDB评论的正负面情绪分辨;
  • 然后是根据个人信息的数据,预测哪些人可以获得高薪;
  • 最后是协同过滤,在用户喜欢了一些电影之后,可以预测某个他没看过的电影是否会喜欢。

2.1核心流程

NLP - IMDB情绪分析大概需要3步,建立宏观的语言模型,利用的是Wikipedia的数据训练的模型;然后是根据IMDB的数据训练定向的电影行业语言模型;最后是用训练好的语言模型,训练一个正负面情绪的分类器。

产品经理也能动手实践的AI(五)- IMDB电影评论NLP,协同过滤

表格数据处理-薪资预测:主要是把类别变量转化成连续变量,比如职业、婚姻情况等……会转化成0,1,2这样的数字;然后通过processor进行预处理,然后就可以训练了。

协同过滤-推荐喜欢的电影:流程都一样,只不过使用特殊类型的CollabDataBunch,以及特殊的collab_learner。

2.2核心机器学习概念

  • 参数 weights/parameters:用于计算的参数/权重矩阵
  • 激活 activations:计算后的结果,包含矩阵运算后的结果和激活函数运算后的结果
  • 激活函数 activation functions:一般是ReLU函数,只改变内容不改变size
产品经理也能动手实践的AI(五)- IMDB电影评论NLP,协同过滤

3.1实例详细分析(NLP)

建立宏观的语言模型,利用的是Wikipedia的数据训练的模型(Wikitext 103);

  • "I'd like to eat a hot ___":
  • Obviously, "dog", right?
  • "It was a hot ___":
  • Probably "day"
  • 不需要label,因为每个next word都是一个label,这种方式叫自监督学习;

然后是根据IMDB的数据训练定向的电影行业语言模型;

  • 准备数据:read from csv
  • token化:把一句话拆成一个个词,不常用的词会用xxunk,xxpad之类的统一代替,成为vocab词汇表
  • 数字化:把一个个词,转化成一个个数字,像这样array([ 43, 44, 40, 34, 171, 62, 6, 352, 3, 47])
  • 创建databunch
  • 创建learner:会用到dropout和regularization参数,之后会讲
  • 训练:得到的模型叫encoder
  • 调整

最后是用训练好的语言模型,训练一个正负面情绪的分类器;

  • text_classifier_learner
  • learn.load_encoder
  • freeze_to:解冻后几层,而不是全部解冻,这样可以训练处更高的准确率

3.2实例详细分析(tabular & collab)

流程上没什么新东西,就不展开来说了

3.3原理详细分析(神经网络训练过程)

整个过程如下图,先输入一个[10,20,30]的vector,然后和一个3*N的矩阵相乘,得到一个结果,再把结果用激活函数处理成更剧本特征量的结果,在进行矩阵乘积,直到最后的输出。

输出结果一般会使用sigmoid函数将其转化成0,1区间内的额值,然后再和验证组的数据进行比对,求loss,然后进行SGD,最后得到了一个93%准确度的拟合出的函数。

产品经理也能动手实践的AI(五)- IMDB电影评论NLP,协同过滤

Jeremy还用excel演示了一下这个过程,真的是对大神佩服的五体投地,用excel训练神经网络,对就是这样。

首先这里是用于训练的数据,14号用户对27号电影的评价是3颗星,满分5颗星。

产品经理也能动手实践的AI(五)- IMDB电影评论NLP,协同过滤

然后随机生成了2组矩阵,分别给用户和电影,相当于weights

产品经理也能动手实践的AI(五)- IMDB电影评论NLP,协同过滤

实验的目标是要预测空白处的值,比如293号用户对49号电影的评价是几颗星?

产品经理也能动手实践的AI(五)- IMDB电影评论NLP,协同过滤

下面开始初始运算,运用点积运算,将每个空格填上,其实就是2个矩阵的矩阵乘积的结果

产品经理也能动手实践的AI(五)- IMDB电影评论NLP,协同过滤

这时候就可以看第一次运算的结果和实际结果的偏差,计算出的loss是2.81,接下来去调整weights然后降低loss,即SGD的过程,就可以得到一个好的模型了。

产品经理也能动手实践的AI(五)- IMDB电影评论NLP,协同过滤

4.最后

这一期可能需要多看两遍,反正我是2-3遍之后才能基本吃透里面的概念,因为一开始真的没那么好懂。


分享到:


相關文章: