技术支持业务的机器学习算法实践

业务背景:

    随着技术业务的产品化,用户对技术产品的使用过程中存在很多疑问,我们组织应运而生,主要负责技术产品日常过程中的答疑;在答疑过程中会遇到很多对产品有抱怨的用户,这些用户比较大的特征是在会话语料、咨询频次、满意度方面;其他数据层还好,在语料层机器比较难识别,在我所处的案例过程中,我一开始用的是开源的NLP包,snownlp,但是snownlp的切词不够强大,而我们业务过程中又会存在很多的专有名词,仅凭市场上的词典无法很好的做切词处理,需要自己建立词典,所以我这边整合了jieba的切词,和snownlp所用到的贝叶斯分类器对文本进行分类。


数据链路:

    文本切词 -> 去stop word -> 用bag of word模型映射成为词向量 -> 基于朴素贝叶斯的句子分类计算


原理似乎很简单。。。但是在此之前我干了啥。。。因为我是冷场王,发起语料收集之后没人鸟我。。。

    1.不断地从语料里找专有名词

    2.不断地在语料里找各个分类的句子,直到形成每个库都有上千行的语料。。。


成果:

有点小成绩,之前没白干,耶~(以防你们认为我不开心)


技术点:

    · 切词 ---- 一个反复而又繁琐的过程

    这个基本是调用jieba的接口就ok,jieba库支持自己定制词语,然后程序启动的时候load进来就好。

    词典有三列,自己定义的名词,权重,词性

    然后调用jieba的cut方法即可

mvn 100 n

git 100 n


    · 训练贝叶斯分类器

        这个训练过程干了什么事情:1.生成词语图谱向量 2.把切好的词映射成词向量 3.生成分类向量和各个大类的概率 p0V, p1V, pAb(这三个东西组成了分类器的核心)

    解释一下这三个变量背后所代表的意义:

        p1V、p0V(词典里的每个词属于某个类的概率向量)

        pAb(词典里某个类出现的概率)        

    · 朴素贝叶斯分类预测

        有了各个分类向量和分类概率,在加上词典,就可以进行分类预测了嘿嘿

        基于贝叶斯条件概率,加上朴素假设(每个词都是独立变量,这个是简化计算)

def classifyNB(self, vec2Classify):

    if sum(vec2Classify) < 2: # 这里我基于业务做了过滤,因为用户如果只说了一句话,一般不足以构成abusive,当然也会出现用户爆粗的时候只说了一句话,这样的话他前后也会提供了一些abusive的词,所以也不影响预测,这个只是经验处理

        return 0

# 这两行就是基于条件概率的预测,取log是对概率预测做了平滑处理,以防概率为0和概率太小导致的算法预测失效的情况

    p1 = sum(vec2Classify * self.p1Vec) + log(self.pClass1)

    p0 = sum(vec2Classify * self.p0Vec) + log(1.0 - self.pClass1)

    if p1 > p0:

        return 1

    else:

        return 0

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容