0%

ToadOCR分布式神经网络服务体系

文档站点:http://vjp.suvvm.work/

Toad OCR概述

ToadOCR基于OCR设计领域的基本思路进行设计与编码,本项目意为对国内外关于深度学习发展历程和最新的研究成果进行整理和总结,以此学习与理解人工神经网络及经典的卷积神经网络所涉及到的概念和算法。

ToadOCR当前已经完成了对前馈型脉冲神经网络与卷积神经网络的支持。

ToadOCR在完成训练后,提供由全球多个国家5台服务器搭建分布式集群部署产物。负载均衡control center使用etcd,并开放gRPC接口

涵盖仓库

各个仓库描述:http://vjp.suvvm.work/about/service-description/

实现理论

研究方法:(具体详见ToadOCR如何运作

  • OPENCV提取图像内待识别文字区域

    使用Canny算法进行多轮边缘查找,再将其查找结果(阈化图像)进行像素邻域计算以得到分布在图像内大大小小多个像素连通区域,然后将这些以矩形标识的分散区域根据识别对象字符横向等距分布的特性进行多次区域兼并运算,之后将多轮处理后得到的多个兼并对象作整体布局上的比较分析,从而淘汰不良结果。最后根据最优兼并结果内字符单元区域集合提取图像内待识别文字。

    理论基于论文

    1
    Satoshi Suzuki and others. Topological structural analysis of digitized binary images by border following. Computer Vision, Graphics, and Image Processing, 30(1):32–46, 1985.
  • 预处理

    处理包含目标字符的图像,进行基本处理(降噪、ZCA灰度化、像素缩放、二值化、归一化),最终将图像处理为规格相同的图像(28 * 28),并作为张量读取至内存,以便后续得以顺利进行特征提取以及应用统一算法进行学习。

  • 设计分类器

    使用脉冲神经网络与卷积神经网络设计并训练分类器(监督学习)对提取的字符进行识别。

  • 分类结果优化

    处理分类器得出的结果,通过语言模型对识别的字符进行矫正(尽力排除近形字),并将最终的识别结果进行格式化。

  • 训练权限开放

    ​ 训练集数据在ToadOCR北京数据中心挂靠为静态资源,构建二进制产物时会一并获取至本机,最终开放训练命令与更新权重矩阵的逻辑,便于开发者构建属于自己的服务体系。

  • 分布式集群部署

    ​ etcd作为强一致分布式存储系统控制服务注册服务发现与kv存储,使得全球各大洲多个服务节点统一为一个分布式集群进行管理。

  • 服务模块分解

    ​ 将整个OCR手写体识别服务设计为由多个服务模块组成的RPC服务调用链路,允许开发者可以通过规定的鉴权方式,在服务客户端宿主机不再集群中的情况下,连接至ToadOCR分布式集群调用进行服务发现并与目标模块服务端建立连接。

  • 身份验证与对称加密鉴权

    RPC分布式服务体系身份验证采取AppID - AppKey - AppSecret模式,由于当前开放服务原因,内部模块无需进行进一步鉴权,故为方便数据持久化与集群缓存,省略AppKey采取AppID- AppSecret模式进行鉴权。

  • Http service

    http service提供用于信息推送(邮件、短信)控制身份信息、与调用RPC服务的接口,供给Client与不便于接入rpc服务的开发者使用。

  • Client

    Client用于非开发者用户直接调用OCR服务与开发者申请鉴权所需验证信息,Client使用独立的用户-时效token模式进行鉴权。

训练集合

手写体训练数据分为两部分

  • 数字数据使用使MNIST(Mixed National Institute of Standards and Technology database)数据集
  • 字母与数字混合数据集使用EMNIST(Extension Mixed National Institute of Standards and Technology database)数据集byClass部分。

服务限制与缺陷

  • ToadOCR图像解码处理体系限制采用jpeg
  • ToadOCR图像文字区域提取采用OpenCV且在过程有多次腐蚀与膨胀操作,故要求图像分辨率尽可能高且字符间距尽可能不要过小。
  • 神经网络采用ByClass进行分类,故相似字符如 i I l 1 可能预测不够准确

潜在迭代方向

  • 进一步训练提升神经网络准确度
  • 减缓cnn(结构修改自LeNet-5)输出层下降速度添加缓冲层
  • 扩充支持神经网络类型
  • 取消输入张量与输出张量的硬编码,使得ToadOCR脱离OCR的限制成为通用型神经网络服务。

主成分分析法PCA

一、PCA解决的问题

从一个简单的数据集开始

1、当只有属性1时

SampleA SampleB SampleC SampleD SampleE SampleF
Attr1 10 11 8 3 2 1

可以将数据绘制在一个一维的坐标轴上

img

这里可以发现针对属性1样本A、B、C有相对较高的值,样本D、E、F有相对较低的值。通过上图可以发现,样本A、B、C彼此之间的相似性要比它们与D、E、F高。

2、如果测量两个属性

SampleA SampleB SampleC SampleD SampleE SampleF
Attr1 10 11 8 3 2 1
Attr2 6 4 5 3 2.8 1

可以将数据绘制在一个二维的坐标轴上

img

在张图中,属性1是x轴,属性2是y轴。通过观察上图依旧可以得出,样本A、B、C在右上侧聚集,样本D、E、F在左下侧聚集。

3、如果测量三个属性

SampleA SampleB SampleC SampleD SampleE SampleF
Attr1 10 11 8 3 2 1
Attr2 6 4 5 3 2.8 1
Attr3 12 9 10 2.5 1.3 2

则需要在上图的基础上添加z轴,使之成为三维坐标轴

img

4、如果要测量四个属性

SampleA SampleB SampleC SampleD SampleE SampleF
Attr1 10 11 8 3 2 1
Attr2 6 4 5 3 2.8 1
Attr3 12 9 10 2.5 1.3 2
Attr4 5 7 6 2 4 7

则无法再绘制数据。

​ 四个属性需要四个维度,而PCA则是为了解决上述问题而出现的,使用PCA可以将三维、四维及其以上的更多数据降维绘制二维的PCA图,并告知使用者哪个属性对数据聚类最有价值。

img

二、PCA原理解析

​ 如果要了解PCA功能以及工作原理,需要先回归只有两个属性的数据集。

SampleA SampleB SampleC SampleD SampleE SampleF
Attr1 10 11 8 3 2 1
Attr2 6 4 5 3 2.8 1

1、计算中心点

​ 首先,计算样本绘制的二维图像的中心点$ G(m_x,m_y) $ ,即针对对应坐标轴所代表的每个样本的属性值求和后除以样本数量。

可以得到G(5.83,3.63)

img

移动数据,使得中心点G落在坐标轴原点上。

img

SampleA SampleB SampleC SampleD SampleE SampleF
Attr1 4.17 5.17 2.17 -2.83 -3.83 -4.83
Attr2 2.37 0.37 1.37 -0.63 -0.83 -2.63

2、计算PC1

​ 绘制一条穿过原点的随机直线,并旋转这条直线,使其在仍然穿过原点的情况下尽可能的拟合数据。

img

判定拟合度高低,为了量化穿过原点的直线拟合数据的程度,首先将所有数据投影到目标直线上

img

​ 之后便可以测量各个样本点到目标直线的距离,并尝试找到使所有样本点到直线距离之和最小的直线,或者也可以尝试寻找所有投影点到原点的距离最之和大的直线,原因是当直线与数据更加拟合的时候,样本点到直线距离整体上会减小,而投影点到原点的整体距离则会增加。

​ 针对每个单独的样本点来说,可以以原点、样本点、投影点,三点组成一个直角三角形,通过勾股定理可以得知,样本点到直线距离(边a)和投影点到原点的距离(边b)是逆相关的且。样本点到原点的距离(边c)是不变的。所以PCA可以选择最小化样本与直线的距离或最大化投影到原点的距离。

​ 不过显然投影点到原点更加方便计算,所以可以采用最大化投影点到原点的距离(d)的平方和($ SS_d $)。

​ 这条线可以看作一条特殊的拟合直线。

PCA拟合直线

我们将输入数据 $ \left( \begin{array} {ccc} 4.17 & 5.17 & 2.17 & -2.83 & -3.83 & -4.83 \ 2.37 & 0.37 & 1.37 & -0.63 & -0.83 & -2.63 \end{array} \right) $ 记为矩阵P

因为直线过原点只需考虑计算直线斜率,那么如果知道了直线的单位法向量 $ \vec n(n_1, n_2) $ ,对于任意样本点 $ (x_s, y_s) $ 该点的坐标向量与直线法向量 $ \vec n $ 的内积正好等于该点到直线的距离(同向为正, 反向为负),即

将距离带入距离公式 $ SSd = \sum{s=1}^nd_s^2 $

得到新的公式

其中 $ \sum_{s=1}^n \left( \begin{array} {ccc} x_s \ y_s \end{array} \right) (\begin{array} {ccc} x_s & y_s \end{array})= PP^T $ 所以 $ SS_d = \vec n^TPP^T\vec n $ 而 $ \frac{1}{n - 1} PP^T $ 就是原始数据的协方差矩阵。

对矩阵P进行SVD奇异值分解

$ PP^T $的特征向量

所以

所以

直线的法向方向应该为$ PP^T $ 最小特征值对应的特征方向。

得到了直线的法向量,便可以获得直线的斜率

所以斜率为0.264

最小二乘数法无法计算PCA拟合直线

​ 使用截距式表示上述直线,直线为ax + by = 0,由于上方直线过原点,所以截距b为0

​ 我们要使表达式 $ \sum{s=1}^n[\frac{|ax_s + by_s|}{\sqrt {a^2 + b^2}}]^2 = \sum{s=1}^n\frac{(ax_s + by_s)^2}{a^2 + b^2} $ 的值最小

​ 首先对a和b求偏导:

得到下方方程组

xy共轭,无法根据将上述方程组得到a与b的表达式,所以无法继续解得拟合直线。

​ 最终得到的这条直线被称为主成份1(PC1) y = 0.264x,斜率为0.264

img

​ 可以通过PC1的斜率得知属性1和属性2的线性组合为2.64:1,可以根据勾股定理求的属性1为3.1,属性2位1的样本点在PC1上,其到原点距离为,使用SVD计算PCA时将上述PC1方向样本缩放做标准化,使3.1作为单位长度等于1。最终得到属性1为$ 2.64 \div 2.82 = 0.94 $ 属性2为$ 1 \div 2.82 = 0.35 $ 最终得到PC1的特征向量$ \vec a = (0.94, 0.35) $,0.94与0.35则作为属性1与属性2的荷载得分。而上方的$ SS_d $ 也就是PC1的特征值。

3、计算PC2

​ 经过原点做一条垂直于PC1的直线

img

​ 同样适用SVD计算得到PC2的特征向量$ \vec b = (-0.35, 0.94) $ -0.35与0.94则作为属性1与属性2的荷载得分。

4、获得最终PCA图

​ 将PC1与PC2旋转至水平与垂直,作为新的坐标系

img

得到新的一组样本点

SampleA’ SampleB’ SampleC’ SampleD’ SampleE’ SampleF’
Attr1 4.74 4.97 2.51 -2.87 -3.88 -5.45
Attr2 0.74 -1.49 0.51 0.41 0.58 -0.75

可以用上方的平方和除以样本点数量减一获得PC1与PC2围绕原点的的差异

最终通过计算得到碎石图所需数值

img

可以发现PC1可以96.2%的表示特征数据,可以使用PC1作为主轴将上述数据降低为一维矩阵 $ X_{PCA} $

三、ZCA白化

​ ZCA白化必须先进行PCA首先将目标n维特征映射到k维上,但此时得到的数据已经被降为k纬度,但是对于图像处理来说,输入的特征矩阵就是像素矩阵,我们希望原图像维度不变,这时则需要对PCA处理完的数据进行旋转,将维度旋转回原先的n维,使得最终得到的数据尽可能的接近原始数据。

​ 即 $ X{ZCA} = UX{PCA} $

LFM(Latent Factor Model)

​ LFM有监督的降维,其思想是尽可能使偷饮后同类型数据的方差尽可能小,不同类型数据距离近可能大。

矩阵因子分解

​ 假设存在$m\times n$的矩阵R,假如想要发现k个隐类(隐藏特征),则需要找到两个矩阵P(m特征矩阵)和Q(n调整矩阵),使这两个矩阵乘积等于R,即将R分解为两个低纬矩阵相乘。

预测位置数值计算

​ 假如$R{m\times n}$代表m个用户对n个物品的评分矩阵它是一个稀疏矩阵,则$P{m\times k}$代表用户受k个隐藏特征的影响,$Q_{k\times n}$。代表物品受这k个隐藏特征的影响。

所以以u代表某个用户,以i代表某个物品,预测用户u对i的评分。

​ 最终通过每一个$r_{ui}$计算得到预测评分矩阵$\widehat R$就不是稀疏矩阵了,而如果$\widehat R$在对应位置的值与R相近则认为预测位置的值也是近似的。

损失函数

​ 继续上面的例子矩阵分解得到的预测评分矩阵$\widehat R$与原评分矩阵R在已知的评分项上可能存在误差,需要找到一个最优的分解方式,让分解后的预测评分矩阵总误差最小。这是可以使用损失函数

  • 平方损失函数

    使用平方损失函数加入正则化项可以防止过拟合

    每一个预测评分都和原始评分做一个差值,之后平方求和后加正则化项(对$P_u$和$Q_i$做惩罚因为隐藏特征k越大PQ就会越复杂,越拟合)

    其中$\lambda \sum_u ||P_u||^2+\lambda \sum_i||Q_i||^2$是正则化项,$\lambda$一般通过交叉验证得到

隐语义模型(Latent Factor Model,LFM)

隐语义模型处理的对象

​ 隐语义模型是为了提取一些隐藏的特征来解释用户的某些行为,这类特征可能是无法直接用语言进行描述的,但这些类似“玄学”的特征我吗只需要知道它存在和影响的目标,而不需要知道它的具体含义。(啤酒和尿布)

使用矩阵分解进行降维分析

​ 在进行协同过滤运算时,非常依赖历史偏好数据,而这些偏好数据往往是稀疏的,所以需要对原始数据进行降维。降维分解后的矩阵,就代表了用户和物品的隐藏特性。

隐语义模型的实例

  • 给予概率的隐语义分析(pLSA)
  • 隐式迪利克雷模型(LDA)
  • 矩阵因子分解模型(基于奇异值分解的模型,SVD)

推荐系统

​ 推荐系统是一个子类信息过滤系统,旨在根据目标角色过去的行为以及其他角色所做出的类似决策来构建模型,并使用该模型推荐具有相似属性的项目。当前推荐系统大多是组合了多种推荐算法的混合系统。

一、推荐系统目的

​ 一个出色的推荐系统最终要实现的是用户、内容(目标项目)、使用推荐系统的平台三方共赢,而不,7777是成为资本家推送产品的帮凶。

  1. 让用户更快速的获取到所需的目标内容
  2. 让内容更快推送到具有特定偏好的用户中
  3. 让使用推荐系统的平台更有效的保留用户资源

二、推荐算法

1、协同过滤(Collaborative Filtering)

​ 协同过滤的理论基于一种假设:用户过去的决策与未来的决策不会发生变动,过去认同的属性在将来也会得到认同。推荐算法使用不同用户对目标项目的评级历史集来生成建议,通过在历史集中查找与当前用户有相似评级的用户,使用邻域(测试用户相似性与项目相似性如k-NN)生成推荐。

分类

  • 具于近邻的协同过滤
    • 基于用户(User-CF)
    • 基于物品(Item-CF)
  • 给予模型的协同过滤
    • 奇异值分解(SVD)
    • 潜在语义分析(LSA)
    • 支撑向量机(SVM)
基于临近的推荐
大香蕉 臭粑粑 泥猴桃 臭卤虾 小汉堡
老八 1 5 2 5 5
肥豪 5 1 2 2
郭一 2 3 5 4
房V 4 3 5 3
基于用户的协同过滤
  • 基于用户对物品的偏好发现口味相似的用户“邻居”群体
  • 计算中采取类似knn获取k个临近用户根据临近用户的喜好对当前用户进行推荐
  • User-CF与基于人口投机学推荐的差异在User-CF所需的数据是用户操作历史而不是用户本身特征
  • 一般用于处理物品数量远大于用户数量的情况(新闻)
基于物品的协同过滤
  • 基于用户对物品的评价发现类似物品群体
  • 计算方式与基于用户类似,筛选临近物品
  • 一般用于处理用户数量远大于物品数量的情况(电影、音乐)
基于模型的推荐

​ 抽象出模型使用机器学习算法训练模型进行推荐,与基于统计学的区别在于模型的建立相当于在用户行为数据中提取用户和物品特征而无需提前知道用户特征。

​ 特征分为显性特征(用户标签、物品分类标签)和隐性特征,显性特征可以直接匹配推荐,隐形特征则需要根据已有偏好通过隐语义模型(Latent Factor Model,LFM)发觉隐藏特征。

  • 用户有一定特征决定选择偏好(郭一喜欢NTR)
  • 物品有一定特征决定用户是否选择它(NTR的本子)
  • 用户选择物品的原因是因为用户特征与物品特征匹配(郭一选择NTR本子)

优点

  • 不依赖于机器可分析内容
  • 可以准确推荐复杂项目
  • 无需了解被推荐项目本身属性

缺点

  • 对于历史集中未给出的新项目,没有足够数据来给出准确建议(冷启动)
  • 若历史集项目和用户数量巨大,则每次推荐都需要大量的计算能力(可伸缩性)
  • 大部分用户不会对全部项目进行评级,只会对一小部分项目进行评级(稀疏性)
  • 很难顾及口味特殊的“重口味”用户的喜好

2、基于内容的过滤(Content-based Filtering)

​ 基于内容的过滤使用项目属性和用户偏好通过机器学习的方法来进行推荐,一般适用于在项目有已知属性(名称、位置、描述等等)但用户没有已知数据的情况。基于内容的过滤最关键问题就是针对用户偏好的建模与通过抽取项目内在或外在的特征值,实现相似度计算。

物品特征提取

  • 物品特征打标签(tag)
    • 专家标签(PGC)
    • 用户自定义标签(UGC)
    • 降维分析数据,提取隐语义标签(LFM)
  • 文本信息提取关键词
    • 分词、语义处理、情感分析(NLP)
    • 潜在语义分析(LSA)

相似度计算

​ 相似度的评判一般用距离表示,最常使用的是余弦相似度

img

  • 欧式距离

    差向量模长

  • 余弦相似度

    两个向量的点积除以两个向量模长的乘积

优点

  • 只需要用户对特征属性的偏好,而不需要用户对项目的评价(可以分析新项目)
  • 可以通过控制项目特征属性的维度来控制推荐精度

缺点

  • 物品属性最大纬度有限切提取属性困难
  • 可分析内容有限,推荐内容僵化

3、多标准推荐系统(Multi-criteria recommender systems)

​ 可以将多标准推荐系统(MCRS)定义为在多个标准上包含首选项信息的推荐系统。多标准推荐系统是基于对影响用户对项目总体偏好的多个标准来预测用户对新新项目的评级。

4、有风险意识的推荐系统(Risk-aware recommender systems)

​ 有风险意识的推荐系统不止根据上下文信息而产出推荐内容,而且考虑了某些情况下产出推荐的风险。多采用DRARS,将上下文感知建通过多臂老虎机算法进行建模。

5、移动推荐系统(Mobile recommender systems)

​ 移动推荐系统通过可以访问互联网等我移动设备提供个性化推荐(如驾驶路线推荐)其需要处理的数据异构而嘈杂。一般存在四个关键因素:上下文、推荐方法、隐私和地方政策。

6、基于会话的推荐系统(Session-based recommender systems)

​ 基于会话的推荐系统使用会话中与用户的交互,在无需用户行为历史记录的情况下,根据最近会话交互顺序使用例如递归神经网络之类的深度学习算法生成顺序模型。

7、强化学习推荐系统(Reinforcement learning for recommender systems)

​ 强化学习推荐系统通过直接训练用户参与度对用户兴趣模型进行优化(如有奖调查💪👴👉爪巴)通过向被推荐对象提供奖励来学习模型或策略。

8、混合推荐系统(Hybrid recommender systems)

​ 混合推荐系统是当前大多数推荐系统使用的方法,其主要策略是将协作过滤、基于内容过滤等和其他方法结合在一起,对不同技术进行杂交混合。

​ 混合方法:

  • 加权(Weighted):将不同推荐成分加权进行组合
  • 变换(Switching):推荐时在不同推荐算法组件中进行切换
  • 混合(Mixed):将来自不同算法的结果混合显示给用户
  • 特征组合(Feature Combination):将不同知识来源的特征进行组合,提供给单个推荐算法
  • 特征增强(Feature Augmentation):将一种算法产生的附加的特征信息嵌入另一种推荐算法的特征输入中
  • 级联(Cascade):一个算法的结果作为另一个算法的输入
  • 元级别(Meta-Ievel)):用一种推荐方法产生的模型作为另一种推荐方法的输入

TF-IDF算法

一、TF-IDF概念

​ 词频-逆文档频率(Term Frequency-Inverse Document Frequency,TD-IDF)是一种用于文本挖掘与信息检索的常用自然语言处理技术。

​ TF-IDF属于统计方法,用于评估一个word对于一个文件集或语料库中的其中一份文件的重要程度(提取文档关键词)。word的重要性随着其在文件中出现的次数成正比增加,但同时会随着其在语料库中出现的频率成反比下降。

二、TF-IDF主要思想

​ TD-IDF的主要思想是如果某个词语或短语在一片文章中出现的的频率TF高,并且在其他文章中很少出现(IDF低),则认为该词或短语有很好的类别区分能力,适合用来分类。

​ 例如,我们用狗屁不通文章生成器以“郭一”为主题生成一篇文章。

1
2
3
4
这是不可避免的。我们高兴地发现,郭一是一个好消息。高汀说过一句著名的话,习惯,我们每个人或多或少都是它的奴隶。这不禁令我深思。别林斯基曾经提到过,好的书籍是最贵重的珍宝。这句话语虽然很短,但令我浮想联翩。 这些事实也清楚地表明我们应该郭一。一般来讲,我们都必须务必慎重地考虑考虑。那么,郭沫若说过一句著名的话,形成天才的决定因素应该是勤奋。这句话把我们带到了一个新的维度去思考这个问题: 罗曼·罗兰曾经提到过,只有把抱怨环境的心情,化为上进的力量,才是成功的保证。我希望诸位也能好好地体会这句话。 郭一的发生,到底需要如何做到,不郭一的发生,又会如何产生。本人也是经过了深思熟虑,在每个日日夜夜思考这个问题。我强烈建议郭一,既然如此,我希望大家本着知无不言、言无不尽、言者无罪、闻者足戒的精神,认真看待郭一这个重要问题。 
总而言之,整个社会应该密切关注郭一这个问题。
莎士比亚曾经提到过,时间会刺破青春表面的彩饰,会在美人的额上掘深沟浅槽;会吃掉稀世之珍!天生丽质,什么都逃不过他那横扫的镰刀。这句话语虽然很短,但令我浮想联翩。 从这个角度来看,既然如此,我们要统一思想,统一步骤地,为了根本解决郭一的问题而努力。我们都知道,只要有意义,那么就必须慎重考虑。这些事实也清楚地表明我们应该郭一。我们一般认为,抓住了问题的关键,其他一切就会迎刃而解。问题的关键究竟为何?尽管不同问题人们有着不同观点,但是郭一正愈来愈成为人们的共识。可是,即使是这样,郭一的出现仍然代表了一定的意义。
郭一似乎是一种巧合,但如果我们从一个更大的角度看待问题,这似乎是一种不可避免的事实。鲁迅曾经说过,单是说不行,要紧的是做。这不禁令我深思。随着社会的发展变化,对我个人而言,郭一不仅仅是一个重大的事件,还可能会改变我的人生。尽管不同问题人们有着不同观点,但是郭一正愈来愈成为人们的共识。总之,我认为,对我个人而言,郭一不仅仅是一个重大的事件,还可能会改变我的人生。郭一,到底应该如何实现。一般来说,首先,也许是最重要的是郭一。而这些并不是完全重要,更加重要的问题是,可是,即使是这样,郭一的出现仍然代表了一定的意义。要想清楚,郭一,到底是一种怎么样的存在。郭一因何而发生?首先,也许是最重要的是郭一。带着这些问题,我们来审视一下郭一。从这个角度来看,每个人都不得不面对这些问题。在面对这种问题时,歌德在不经意间这样说过,谁要游戏人生,他就一事无成,谁不能主宰自己,永远是一个奴隶。这句话语虽然很短,但令我浮想联翩。

​ 我们很清楚,这篇文章中的主题是“郭一”,但若单靠词频提取,可能“的”“了”之类的词出现的频率更高,这时便要给它们一个惩罚,这就是TF-IDF的主要思想。

三、TF与IDF的计算

1、词频(TF)

​ 词频指的是给定的一个词语在该文档中出现的频率。这个数字是对词数的归一化,以防止计算结果偏向词书多的长文件。

​ 其中$TF{i,j}$表示词语i在文档j中出现的频率,$n{i,j}$表示词语i在文档j中出现的次数,$n_{*,j}$表示文档j的总词数。

2、逆向文件频率(IDF)

​ 逆向文件频率是一个词语普遍重要性的度量,某一特定词语的IDF可以由总文档数目处以包含该词语之文档的数目,再将其得到的商取对数获得。

​ 其中$IDF_i$表示词语i在文档集中的逆文档频率,N表示文档集中的文档总数,$N_i$表示文档集中包含了词语I的文档数量。

四、算法实现

​ 这里我使用了TF-IDF算法简单实现了一个狗屁不通文章解码器,通过TF-IDF算法确定文章主题并推测最初关键词。

类别型特征处理

​ 类别型数据本身没有大小关系,需要将它们编码为数字,但它们之间不能有预先设定的大小关系,比如lsp看妹子,妹子国籍为美国、苏联、勃艮第不能简单的标识为1、2、3,因此既要做到公平,又要区分开它们。

One-Hot 编码/哑变量

One-Hot 编码/哑变量所做的就是将类别型数据平行地展开,也就是经过One-Hot 编码/哑变量处理后,这条特征空间会膨胀。

国家_苏联 国家_美国 国家_勃艮第
苏联 1 0 0
美国 0 1 0
勃艮第 0 0 1

推荐系统反馈数据

显示反馈数据

  • 评分(整数量化偏好)

    通过用户评分可以精确地道用户偏好

  • 投票(布尔量化偏好)

    通过用户投票可以较为精确的得到用户的相对偏好

  • 转发(布尔量化偏好)

    通过转发行为可以精确的得到用户偏好(转发人被转发人)

  • 保存/收藏(布尔量化偏好)

    收藏行为可以精确的暴露用户偏好

  • 打标签(词汇表明偏好)

    用户的标签多为有意义的特性短语,可以得到用户对项目的理解从而获得用户偏好

  • 评论(段落文字表明偏好)

    通过分析用户评论,可以得到用户情感:对项目喜爱或厌恶,从而得到用户偏好

隐式数据反馈

  • 点击浏览(通过分析一组用户点击的项目获得偏好)

    用户点击一定程度上反映了用户的注意点,可以在一定程度上表明用户偏好

  • 目标项目停留时间(分析一组时间数据获得用户偏好)

    用户停留时间一定程度反映了用户的偏好,但噪声较大不好利用

  • 处理决定(布尔量化偏好)

    如购买或其他决定性用户行为可以明确的说明用户偏好

时间型特征处理

​ 时间类型特征即可以看做连续值,又可以看作离散值。

连续值

  • 持续时间
  • 间隔时间

离散值

  • 具体的时间点/时间段
  • 特定的时间类型(节假日/工作日/周末/摸鱼日)

统计型特征处理

  • 加减平均(价格高于平均多少)
  • 分位线(商品处于出售商品价格分位线处)
  • 次序性(商品处于热门商品第几位)
  • 比例类(好/中/差评比例)