首页 > 其他分享 >4-《从零开始构建企业级推荐系统》读书笔记

4-《从零开始构建企业级推荐系统》读书笔记

时间:2022-09-03 19:11:46浏览次数:63  
标签:读书笔记 推荐 用户 企业级 算法 从零开始 相关性 融合 物品

第1章 推荐系统的时代背景

  • 为什么需要推荐系统
    • 流量利用
    • 长尾挖掘
    • 用户体验
    • 技术储备
  • 推荐什么东西
    • 只要是具有非普适性特点的东西,就可以用来做推荐,将其个性化
  • 推荐场景
    • 适合
      • 当前场景存在流量浪费或潜在用户流失的可能性较大
      • 当前场景中的用户处于选择过程中,需要信息引导
      • 用户在当前场景中具有较强的不确定性
    • 不适合
      • 支付过程页面
      • 搜索页和分类列表页
      • 功能性页面

第2章 推荐系统的核心技术概述

  • 核心逻辑拆解
    • 将用户与物品的相关性拆解为用户与兴趣的相关性和兴趣与物品的相关性的乘积
    • 将这种思路加以具象化,就有了“用户兴趣+相关性召回+融合排序”这种三段式逻辑,并从此逻辑产生出了对应的具体实现架构

\[P(item|user)=\sum_{interest}(P(item|interest)×P(interest|user)) \]

  • 整体流程概述

    • 首先需要根据一些线索找到用户可能会喜欢的物品,这一步骤通常称为“召回”,根据不同的策略来召回的方法称为召回算法
    • 排序阶段以点击率/转化率为目的进行一次排序(召回阶段算法考虑的相关性和CTR并不完全一致)
    • 业务干预阶段
  • 召回算法

    • 召回层是整个推荐系统架构中唯一能决定哪些物品可能被展现给用户的部分,召回算法所召回的物品集合,就决定了最终展现给用户的候选集
    • 召回层主要包括:
      • 相关性:相关性是召回算法的核心
      • 多样性:物品类别的多样性、物品标签的多样性、召回维度的多样性
      • 覆盖率:对于单个召回算法,覆盖率指的是这个算法能为多少用户/物品计算出相关物品,而对整个系统来讲,就是指所有的召回算法加在一起,能够为多少用户/物品计算出相关物品
      • 实时性
    • 召回算法分类
      • 基于行为的召回算法
      • 基于用户画像的算法
  • 评价指标

    • 结果指标、过程指标
    • 短期指标、长期指标
  • 架构设计

    推荐系统的架构设计,可粗略分为在线、离线和近线三部分。在线服务架构设计的核心要点,是保证系统的稳定运行、算法策略的足量生效,以及对策略快速迭代的支持等;而离线数据生产架构的关注点,更偏向于如何生产出准确率高、覆盖率高的商品和用户相关数据;近线层架构的作用是快速处理用户和物品行为与信息变动,为在线架构提供实时性高的数据服务

第3章 基础推荐算法

  • 推荐逻辑流程架构

    1. 相关性召回

      • 基于行为
        • 行为+行为相似度
        • 行为+内容相似度
      • 基于画像
        • 人口统计学类的画像
        • 用户偏好类的画像
    2. 候选集融合

      候选集融合阶段,将对来自多个召回算法的候选物品进行融合,产生一个待排序的候选集。这一阶段关注的重点是多样性和相关性的均衡、召回算法的优先等级等问题,总结起来,这一步要通过一些算法和规则,使得最终的候选集在相关性和多样性之间取得一个合理的平衡

    3. 结果排序

    4. 业务干预

  • 召回算法的基本逻辑

    • 直接计算物品与用户的相关性
    • 两阶段相关性计算
      • 用户与物品的相关性+物品与物品的相关性 => 用户与物品的相关性
      • 用户与用户的相关性+用户到物品的行为权重 => 用户与物品的相关性
      • 用户与标签的相关性+标签与物品的相关性 => 用户与物品的相关性
  • 常用的基础召回算法

    • 用户与物品的相关性

      有一类算法特别适合用于直接计算用户与物品之间的相关性,那就是基于矩阵分解的算法,也可称为隐语义模型(Latent Factor Model,LFM)。该算法的特点是将用户与物品之间的关系建模为“用户到隐特征+隐特征到物品”这样一个链条,然后通过求解其中的隐特征信息来求解整个链条。

      这样做的缺点是牺牲了一定的直观解释能力,但是也带来了一些优点:

      • 能够发现一些人工没有找出的类别
      • 能够更好地适应数据变化
      • 将用户、物品与隐类别之间的关系进行了量化

      我们使用LFM的思路就是:先得到用户和物品的原始行为矩阵,然后借助矩阵中有值(有行为)的元素来求解两个隐变量矩阵的值,再用隐变量反过来求解缺失值(无行为)的元素的值,从而得到推荐结果。

    • 物品与物品的相关性

      在计算物品与物品的相关性方面,从根本逻辑上来划分算法,可以氛围两类:其中一类是基于行为的算法;另一类是基于内容的算法。在基于行为的算法中,最经典也最常用的是以余弦相似度为代表的相似度算法和以Apriori与FP-Growth为代表的关联规则算法。

      综合来讲,相似度算法比关联规则算法更加具有普适性,可近似认为是一种广义的关联规则算法。

      \[cosine(X,Y)=\frac{XY}{\rVert X \rVert\rVert Y \rVert}=\frac{\sum_{i=1}^{N}X_iY_i}{\sqrt{\sum_{i=1}^{N}X^{2}_i}\sqrt{\sum_{i=1}^{N}Y^{2}_i}} \]

    • 用户与用户的相关性

      • 参照计算物品与物品的相关性,将物品与用户位置互换即可
      • 一个网站的用户数以及变化频率通常远大于物品数,因此计算复杂度更高
      • 物品间的相似度在通用性方面要优于用户间的相似度
    • 用户与标签的相关性

      • 第一种标签是根据行为分析而来的,例如用户喜欢的商品类别、新闻类别、语义主题等
        • 可以直接使用行为权重+时间衰减的方法来计算
      • 第二种标签是根据行为分析+相关性而来的
        • 在第一种标签的基础上再考虑标签之间的相关性
      • 第三种标签是不直接依赖用户行为的,例如用户的年龄、性别、职业等
    • 标签与物品的相关性

      这里需要注意的是,不同的计算方法得到的相关性分数在量纲上最好一致,例如都在0-1之间,这样方便后面的融合等其他步骤的计算。

      • 类别到物品
        • 召回热品、新品或质量高的物品
      • 语义主题到物品
        • LDA
      • 搜索词到物品
  • 冷启动场景下的推荐

    • 所谓冷启动,是指推荐系统所处的一种状态,在该状态下,行为数据存在缺失或不足,导致无法使用基于行为的算法给出推荐

    • 分类

      • 用户维度的冷启动和物品维度的冷启动
      • 全局冷启动和局部冷启动

      对于冷启动问题,解决办法通常是使用不依赖行为的推荐算法,典型的如基于内容的算法,或者直接推荐一些畅销热品或新品。冷启动时推荐系统的责任不仅是给出推荐结果,更重要的是要对用户进行引导,使用各种方法探测用户的兴趣,使用户和物品尽快脱离冷启动状态。物品层面的冷启动也是一样的,也需要尽快从“冷”变“热”,这类问题在推荐系统中称为EE问题,即探索与利用问题。

第4章 算法融合与数据血统

推荐算法融合的作用在于,每种推荐算法都只考虑了一部分维度的数据,例如,某个维度的行为数据,或者某个维度的内容数据,但是在实际的推荐模块中,单一维度的算法往往是不能满足需求的。与推荐算法融合相伴随的,是推荐数据血统的话题。数据血统指的是对数据的来源进行记录与分析的相关数据和过程,通过数据血统我们可以追根溯源,在最终融合结果中找到每个推荐结果的来源,并对其进行相应的分析,这些分析的结果对于推荐服务的问题排查和后面的效果改进都有着重要的作用。

  • 线性加权融合

    线性加权融合是一种实现简单、解释直观的融合方法,同时也具有比较强的干预调优能力。要想使用线性加权融合,对于候选集中的每一个物品,都需要有两个值:w,代表对该推荐物品使用的推荐算法的权重;score,代表在该推荐算法下该物品的得分。在有了这两个值之后,每个推荐物品i的综合得分为:

    \[score_i=\sum_j(w_j×score_{j,i}) \]

    有一些算法并不能直接给出得分,例如新品推荐、基于搜索系统的推荐,这些推荐算法可能只会给出推荐结果的排序,在这种情况下,可以选择拟合一个简单的公式,将排序变换为分数,具体来讲,可以选择平均点击率为拟合目标,即:

    \[ctr_i=w_i×order_i+b \]

    其中,ctri 为该算法下在该位置的平均点击率,orderi为位置编号,b是偏置项,拟合这个公式的目的是为了从编号得到对应的平均点击率,再将平均点击率作为该算法下该物品的分数。

    无论使用那种方法来进行算法的配比,背后其实都有一个基本的假设,那就是算法之间是线性加和的关系,这是最朴素简单的一种假设,但很多时候并不能反映数据的真实关系,这也是这种方法的缺点之一。

  • 优先级融合

    优先级融合有时也称作交叉融合,其本质思想是使用一组规则将来自不同推荐算法的结果进行融合,这组规则的核心包含两个要素:推荐算法之间的相对优先级,以及每种算法要占到的比例。举例来说,现在有三种推荐算法A,B,C,根据经验得知,在当前场景下,算法的优先级是A>B>C,同时,为了加强结果的多样性,避免结果全部来自同一种算法,约定这三种算法在最终结果中的占比为5:3:2,上面这段描述就构成了一组优先级的融合规则,如果最终要产生10个推荐结果,那么会先从算法A中取出5个候选结果,从算法B中取出3个,从算法C中取出2个,构成最终的结果列表。

    • 准确率高
    • 覆盖率低
    • 实时性好
  • 基于机器学习的排序融合

    上面的两种融合方法都会粗粒度的算法级融合,而不是细粒度的物品级融合;其次,上述融合方法的模型结构简单,优化空间小;最后,这些融合方法都没有充分结合用户反馈。

    基于以上原因,使用基于机器学习的模型排序融合的方法是最合适的,这种融合方法包含两个部分:一是模型的训练,二个是模型的使用,这种融合方法具有融合粒度细、模型复杂度高、充分结合用户反馈等特点。这使得融合从算法级进化到了物品级,每个物品都有了一次公平竞争的机会。

  • 融合策略的选择

    • 优先级融合方法的适用场景

      • 使用者对算法的效果、覆盖率等方面相对熟悉,并且不同算法之间有着相对明确的效果差异
      • 系统建立初期
    • 线性加权融合的场景

      • 几种推荐算法之间没有那么大的效果差异
      • 算法融合的目的更多的是使用不同的算法来提高整体的覆盖率和多样性
    • 机器学习模型排序方法适用场景

      • 系统中已经存在一些推荐算法,这些算法加起来已经有了一定比例的优质覆盖率
      • 具有数量足够准确的样本数据
    • 混合的融合方法

      可以将某算法在不同数据源上的计算结果进行线性加权融合,然后再不同的算法之间使用优先级融合;再如,在使用机器学习模型排序之前,也可以对候选集根据效果或业务的需求划分层级,如将效果最好的算法生成的候选集放在第一层级,略差的放在第二层级,托底算法生成的数据放在第三层级,然后在每个层级进行模型排序,最后把排序后的结果按照优先级合并起来。

  • 融合时机的选择

    • 融合时机的选择主要取决于几个关键因素:时效性要求、计算和架构能力以及数据量大小
    • 实时融合
    • 离线融合
      • 在离线端进行数据融合,例如,用定时任务每隔一段时间进行一次融合,这种方法适用于数据量大,但是时效敏感性较低的场景
    • 近实时融合
      • 近实时方法的中心思想是只在必要的时候进行融合,并且将融合的触发时机与用户的请求解耦合,使用护具缓存作为中间层,将对线上服务的性能影响降到最低
  • 数据血统

    • 每个推荐物品来源于哪种算法(算法id)
    • 每个推荐物品在该算法中的得分和排序
    • 系统效果监控指标
      • 不同策略在请求、曝光、点击等多个维度上的绝对数量和数量占比
      • 分策略的点击率、转化率
      • 分策略的平均排序位置

第5章 机器学习技术的应用

  • 机器学习技术在推荐系统中的应用场景

    • 推荐结果排序
    • 用户兴趣建模
    • 候选集召回
  • 机器学习技术的实施方法

    • 老系统与数据准备

      • 收集训练样本

      老系统中已有的样本数据的一个很大的优点就是曝光偏差比较小,所谓曝光偏差,指的是系统是否会倾向于曝光某一类型的物品,从而导致其他类型的物品曝光不足,在整体数据上产生曝光偏差问题。

    • 收集业务规则

    • 确定系统目标

  • 问题分析与目标定义

    • 问题现状分析
    • 问题归因拆解

    所谓问题归因拆解,指的是将最终的待达成目标拆解为多个可执行的具体工作,通过完成这些具体工作来达成最终目标。

    • 设计指标体系

    实施机器学习系统需要的指标体系包括两方面,一方面是监控机器学习系统本身好坏的指标,例如AUC等离线评估指标和点击率等线上监控指标;另一方面是对机器学习系统所服务和影响的大系统的各方面指标,例如在推荐系统中除机器学习以外的一些指标,包括用户平均停留时长、平均跳出率、平均分享率等。第一种类型指标,其作用是衡量机器学习系统本身效果的好坏,是否符合预期;第二种类型的指标,其作用是衡量机器学习系统上线之后,对系统其他方面的影响,以防某一指标提升之后,导致其他关键指标的下降。

  • 样本处理

    在典型的点击率模型场景下,一般逻辑上会存在三份日志:请求日志、曝光日志、点击日志。通常需要曝光和点击两份数据,才能确定点击率模型所需的正负样本

    • 爬虫、作弊和异常数据的去除
    • 使用统计数据验证样本的准确性
    • 移动端数据收集机制的设计
    • 尽量多地保留上下文信息
    • 常用处理方法:样本随机打散、正负样本采样、负样本划分模型组合、样本可信度处理
  • 特征处理

    特征在模型中的作用,可以被理解为该特征对最终输出的预测值的指征能力

    • 用户 ID类特征

      个性化程度最高的是用户ID特征,这类特征承担的是学习全局偏置的功能,或者可以将用户ID与物品侧非ID类特征进行交叉组合。

    • 行为ID类特征

      将用户行为 ID与物品ID交叉,得到交叉特征,因为行为ID可跨用户发挥作用,在历史数据上训练后可用于预测数据,从而使得基于行为ID的特征具有更好的扩展性,而用户ID类特征只能记忆这个用户本身,因此不具有扩展性。

    • ID类特征的降维

      样本量要求大,一般至少需要样本量是特征量的10倍才能把模型训练得比较好;数量庞大,工程实现要求高;难以应对数据稀疏性问题;特征泛华能力差,模型信息总结提炼难度大。

    • 交叉特征的优选

      在构造交叉特征时,通常有两种做法:一种是笛卡尔积方式;另一种是交集方式。

    • 常用的特征工程方法

      快速构建基线版本特征(MVP);业务规则特征化;数值特征缩放(单位长度缩放、标准化、最大最小缩放、百分位化);特征离散化;组合特征的使用;特征稀疏性的处理;处理位置偏差(以点击率特征为例,常用的一种做法是计算出每个位置i上的平均点击次数ctri,然后统计点击数时,将原本会被计算为1的每次点击统计为1/ctri)

  • 特征工程的实现

    特征系统首先要保证的一点,就是能够同时服务于探索开发、例行训练和线上预测,而不是只能服务于某一个阶段;其次,这套特征系统无论服务于哪个阶段,都需要保证的一点,也是特征系统中最容易忽略的一点,就是一定要解决特征和样本的时间对齐问题;在实验开发和例行训练流程中,使用同一套特征服务,或者叫特征生成器,以此达到线上线下特征统一的目的。

  • 模型选择与训练

    搭建机器学习系统的工程师会面临一个非常难以抗拒的诱惑,即复杂模型、深度模型的诱惑,这个 诱惑会让工程师希望能在自己搭建的系统中使用到一些高级的模型。

    第一,最重要的是搞清楚在整个系统中当前投入产出比最高的事情是什么,这个问题的答案在很大程度上决定了模型选择的大方向;第二,需要考虑系统的预期承载压力和性能要求,对于一个典型的推荐系统来讲,实时处理的性能要求通常都在100ms以下,也就是说,留给处理一个推荐请求的时间是小于100ms的,而这其中包括了候选集召回、结果排序、物品信息获取等环节,真正留给机器学习系统用来做模型预测的时间会更少,例如可以只有30ms左右;第三,需要评估模型可解释的重要性;第四,需要评估可用的训练数据量和可承载的特征量。

  • 模型效果评估

    这里的评估包括两个方面:一是对模型本身的评估;二是对模型对系统所产生的影响的评估;所谓对模型本身的评估,指的是从分类预测模型的角度来看,训练出的模型在各指标下表现如何,常用的指标有精度、召回率、F值、AUC、NE(归一化熵)、校准度等;精度和召回率是信息检索领域两个常用的指标,F值是二者的融合,但这几个指标在推荐系统中使用得越来越少,推荐的核心目标是对结果进行排序,而不仅仅是检索出相关的物品,所以在这种情况下,精度和召回率已经不能很好地反映模型效果的好坏了,AUC即ROC曲线下的面积,是在排序问题中更常用的一个指标,这个值越大,代表模型的效果越好,更适用于推荐排序这样的问题,衡量AUC的高低也要结合业务所在领域进行判断,例如电商推荐的AUC可以做到0.7到0.8的水平,而一些外卖或团购类的业务,由于用户兴趣更加明确,AUC可以做到0.9以上。

    AUC是从模型预测结果的排序能力对模型进行评估的,而NE则是从损失函数优化本身对模型进行评估的,越小越好。

    校准度衡量的是模型预测值和真实值之间在整体数值规模上的差异,它关注的是模型预测结果的数值规模是否与真实一致,而不只是排序位置对不对,这在需要将多个模型结果进行融合的时候尤为重要。

  • 预测阶段效果监控

    监控点击率的稳定性;监控预测AUC的稳定性;监控特征覆盖的稳定性。

第6章 用户画像系统

  • 用户画像的概念和作用

    用户画像的核心作用是对系统中的用户进行多维度的信息刻画,其深层次含义是通过对用户多维度的刻画,将不同的用户映射到产品所提供的不同服务上,或者映射到同一服务的不同具体形态上。

  • 用户画像的价值准则

    第一个准则是用户画像数据需要能够建立起用户和物品之间的有效连接;第二个准则是细致刻画,一种简单而好用的方法是根据用户画像数据中每个取值平均能够覆盖的用户或物品的多少来判断,平均覆盖的用户或物品越少,说明画像刻画得越细致;第三个准则是覆盖率;第四个准则是差异化能力。

  • 用户画像的构成要素

    • 物品侧画像

      物品侧画像可粗分为两种类型:一种是对物品基础属性的客观描述;另一种是基于基础属性进行进一步计算得到的深层次特征;

    • 用户侧画像

      刻画用户的客观属性,或者通过分析计算用户对物品所产生的行为,得到基于物品维度的用户维度画像。

    • 画像扩展

      通过不同的逻辑和算法,将用户侧画像进行有效扩展,增加在应用场景中的覆盖率,提升用户体验。

第7章 系统效果评测与监控

  • 常用指标

    点击率;覆盖率;多样性;新颖性;排序评测指标:NDCG和MAP;

  • 离线效果评测方法

    简单的离线评测方法一般来说是有偏的(雅虎无偏离线评测算法),在更广泛的推荐算法离线评测方面,我们需要对无偏性做出一定的妥协,来满足海量推荐评测的实际需求。

  • 在线效果评测方法

    • AB实验

      ID => MD5 => 取模

    • 交叉实验

      AB实验和交叉实验的核心差异在于:在AB实验中每个用户都会被固定划分到一个组,只接受某一种固定的策略;在交叉实验中对每个用户都会同时呈现多种策略的结果,这里面最核心的部分就是如何保证每个用户结果列表中策略分布的公平性=>选秀式方法。

  • 系统监控

    整体维度、分策略、分群体、分位置。

第8章 推荐效果优化

  • 准确率优化的一般思路

    使用垃圾更少、更干净的数据;使用含义更加准确的数据;时效性优化思路(及时反馈);对不同行为数据的质量进行区分;对特定领域的垂直优化。

  • 覆盖率优化的一般思路

    提升某一类算法的覆盖率;使用多种算法来实现整体覆盖率的提升。

  • 行为类相关性算法优化

    热度惩罚=>时间衰减;时效性优化索与利用问题;随机游走;嵌入表示;

  • 内容类相关性算法优化

    非结构化算法=>向量化表示;结构化算法=>知识抽取。

第9章 自然语言处理技术的应用

  • 使用文本数据完成的任务

    候选商品召回、相关性计算、作为特征参与模型排序。

  • 主要模型

    词袋模型(BOW) => 权重计算(TF-IDF)和向量空间模型(VSM) => 隐语义模型(LSA) => 概率隐语义模型(pLSA) => 生成式概率模型(LDA,主要使用) => 神经概率语言模型(word2vec)。

第10章 探索与利用问题

  • 多臂Bandit(中文敏感词)问题(MAB)

    EE问题的核心在于如何分配T次机会,让我们可以在探索和利用这两个方面取得比较好的平衡,从而最大化收益,最小化遗憾。

  • 推荐系统中的EE问题

    Bandit:待推荐物品;拉Bandit的拉杆:展示物品;奖励:用户反馈。

  • 解决方案

    ε-Greedy算法;UCB(Upper Confidence Bound);汤普森采样;LinUCB。

第11章 推荐系统架构设计

  • 离线层架构

    使用大量数据以及较为复杂的算法进行计算和挖掘;在具体实践中,经常放在离线层执行的任务主要包括:协同过滤等行为类相关性算法计算、用户标签挖掘、物品标签挖掘、用户长期兴趣挖掘、机器学习模型排序等。

  • 近线层架构

    特征的实施更新;用户实时兴趣的计算;物品实时标签的计算;算法模型的在线更新;推荐结果的去重;实时相关性算法计算。

  • 在线层架构

    AB实验分流;获取用户画像;相关性候选集召回;候选集融合排序;业务逻辑干预;拼接展示信息。

标签:读书笔记,推荐,用户,企业级,算法,从零开始,相关性,融合,物品
From: https://www.cnblogs.com/lotuslaw/p/16653341.html

相关文章

  • DevOps企业级
    DevOps计划部署编码<-----DevOps------>运维......
  • 《Java编程思想》读书笔记(三)
    前言:三年之前就买了《Java编程思想》这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第十一章到第十......
  • 项目实战——企业级Zabbix监控实战(一)
    项目实战——企业级Zabbix监控实战实验一:Zabbix监控的搭建1、实验准备centos系统服务器3台、一台作为监控服务器,两台台作为被监控节点,配置好yum源、防火墙关闭......
  • 从零开始配置vim(20)——模糊查询
    在讲解vim的基础功能的时候,介绍过了vim的各种查询技巧,在同一个文件中进行搜索的话,那些技巧很有用。在多个文件中我们介绍了使用vim自带的:grep命令进行搜索,使用quickfix......
  • 从零开始的全连接神经网络中的反向传播
    从零开始的全连接神经网络中的反向传播使用Python和NumPy构建您自己的全连接神经网络的指南。Adog.Imagefrom今日医学新闻温柔的介绍在巴甫洛夫进行的一项著......
  • 从零开始配置vim(19)——终端配置
    在上一篇文章中,我们熟悉了终端模式,并且配置了终端模式的一些操作。但是它总是有那么一点不符合我们的使用习惯。这篇我们将通过强大的插件来完善终端操作的体验。在介绍插......
  • JAVA入门基础_从零开始的培训_MYSQL基础
    目录1、数据库概述与MYSQL5.7、MYSQL8.0安装篇(基于Windows)MYSQL是什么,为什么要使用MYSQLMYSQL的四个版本MYSQL环境搭建MYSQL的安装与卸载Windows10下安装MYSQL8.26版......
  • JAVA入门基础_从零开始的培训_MYSQL高级
    目录第1章Linux下MySQL的安装与使用Linux下MYSQL的卸载安装MYSQL之前的准备步骤正式安装检查/tmp临时目录权限安装前检查依赖并卸载mariadb按照顺序依次安装MYSQL服务的初......
  • 性能调优读书笔记(下篇)
    一、并行程序开发优化1、Future设计模式publicclassClient{publicDatarequest(finalStringqueryStr){finalFutureDatafuture=newFutureData(......
  • 《伯恩斯焦虑自助疗法》读书笔记3
      对于轻微焦虑的人,基于幽默的治疗法也是一种不错的治疗方法,值得尝试!基于幽默的治疗法有害羞暴露练习法,悖论放大法,幽默想象法!  每个人都有自己的使命!每个人都有自......