专栏首页香菜聊游戏震惊了,用Python这么简单实现了聊天系统的脏话,广告检测

震惊了,用Python这么简单实现了聊天系统的脏话,广告检测

在游戏中聊天功能几乎是必备的功能,这样的功能存在一定的问题那就是会导致世界频道很乱,经常会有一些敏感词,或者一些游戏厂商不愿意看到的聊天,之前我们游戏中也有这样的问题,我们公司做了举报和后台监控,今天就来实现下这种监控。

1、需求分析:

因为深度学习用的不咋样,虽然之前写过强化学习,但是看强化学习的结果不是特别满意,所以研究下简单一些的方法实现。

这种分类任务其实有现成的解决方案,比如垃圾邮件的分类是同样的问题,虽然有不同的解法,但是我还是选择了最简单的朴素贝叶斯分类。主要做一些探索,

因为我们的游戏大都是中文,所以我们需要对中文进行分词,比如我是帅哥,要拆分。

2、算法原理:

朴素贝叶斯算法,是一种通过根据新样本的已有特征在数据集中的条件概率来判断新样本所属类别的算法;它假设①每个特征之间相互独立、②每个特征同等重要。也可以理解为根据过往的概率判断当前特征同时满足时的概率。具体的数学公司可以自己百度,数据公式太鸡儿难写了,大概懂得就好。

在恰当的时候使用恰当的算法。

jieba 分词原理 :jieba分词属于概率语言模型分词。概率语言模型分词的任务是:在全切分所得的所有结果中求某个切分方案S,使得P(S)最大。

可以看到jieba 自带了一些词组,在切分时会从这些词组中为基础单位进行拆分。

注:以上两个技术的原理我只是简单的介绍,如果想彻底搞明白又得写一大篇文章,可以百度下,到处都是,找一篇能看懂的就可以了。如果能用就先用起来。

3、技术分析

中文分词的包最出名的分词包是jieba,至于是不是最好的我也不知道,我想火是有火的道理,先做起来。jieba的原理不用深究,优先解决问题,遇到了问题可以再以问题点进行学习,这样的学习模式才是最高效的。

因为最近在做语音相关的东西,有大佬推荐了库nltk,查阅了相关的资料,似乎是做语言处理方向很出名的库,很强大,功能很强大,我这里主要选择了他的分类算法,这样我就不用关注具体的实现,也不用重复造轮子了,况且还不如别人造的好,拿来用之就好。

python 是真不错,各种包,各种轮子。

安装命令:

pip install jieba
pip install nltk

分别输入以上两句代码,等运行完毕后,包就安装成功了,可以开心的测试了

"""
#Author: 香菜
@time: 2021/8/5 0005 下午 10:26
"""
import jieba

if __name__ == '__main__':
    result = " | ".join(jieba.cut("我爱北京天安门,very happy"))
    print(result)

看下分词结果,可以说非常好,果然专业就是专业。

4、源码

简单的测试做了,可以发现我们要完成的基本上都有了,现在开始直接搞代码。

1、加载初始的文本资源。

2、去除文本中的标点符号

3、对文本进行特征提取

4、训练数据集,训练出模型(也就是预测的模型)

5、开始测试新输入的词语

#!/usr/bin/env python
# encoding: utf-8
import re

import jieba
from nltk.classify import NaiveBayesClassifier

"""
#Author: 香菜
@time: 2021/8/5 0005 下午 9:29
"""
rule = re.compile(r"[^a-zA-Z0-9\u4e00-\u9fa5]")
def delComa(text):
    text = rule.sub('', text)
    return text
def loadData(fileName):
    text1 = open(fileName, "r", encoding='utf-8').read()
    text1 = delComa(text1)
    list1 = jieba.cut(text1)
    return " ".join(list1)

# 特征提取
def word_feats(words):
    return dict([(word, True) for word in words])

if __name__ == '__main__':
    adResult = loadData(r"ad.txt")
    yellowResult = loadData(r"yellow.txt")
    ad_features = [(word_feats(lb), 'ad') for lb in adResult]
    yellow_features = [(word_feats(df), 'ye') for df in yellowResult]
    train_set = ad_features + yellow_features
    # 训练决策
    classifier = NaiveBayesClassifier.train(train_set)

    # 分析测试
    sentence = input("请输入一句话:")
    sentence = delComa(sentence)
    print("\n")
    seg_list = jieba.cut(sentence)
    result1 = " ".join(seg_list)
    words = result1.split(" ")
    print(words)
    # 统计结果
    ad = 0
    yellow = 0
    for word in words:
     classResult = classifier.classify(word_feats(word))
     if classResult == 'ad':
        ad = ad + 1
     if classResult == 'ye':
        yellow = yellow + 1
    # 呈现比例
    x = float(str(float(ad) / len(words)))
    y = float(str(float(yellow) / len(words)))
    print('广告的可能性:%.2f%%' % (x * 100))
    print('脏话的可能性:%.2f%%' % (y * 100))

看下运行的结果

5、扩展

1、数据源可以修改,可以用已经监控的数据存储到数据库中进行加载

2、可以多一些数据分类,方便客服进行处理,比如分为广告,脏话,对官方的建议等等,根据业务需求进行定义

3、可以对概率比较高的数据衔接其他系统进行自动处理,提高处理问题的处理速度

4、可以使用玩家的举报,增加数据的积累

5、可以将这个思想用作敏感词的处理,提供敏感词字典,然后进行匹配,检测

6、可以做成web服务,进行回调游戏

7、可以把模型做成边学习边预测,比如有些案例需要客服手动处理,标记好之后直接加入到数据集中,这样数据模型可以一直学习s

6、遇到的问题

1、遇到的问题,标点符号问题,标点符号如果不去除会导致匹配的时候标点符号也算作匹配,不合理。

2、编码的问题,读出来的是二进制,搞了半天才解决

3、技术选型问题,在最初的时候想用深度学习解决,也看了一些解决方案,奈何自己的电脑训练实在太慢,先选择这样方式练习下

4、代码很简单,但是阐述技术很难,代码早都写好了,但是这篇文章还是过了一个周末才写好

7、总结:

遇到问题就去找技术方案,如果知道方案就去实现,遇到bug就去查,念念不忘必有回响,你的任何一次尝试都是学习的好机会。

本文分享自微信公众号 - 香菜聊游戏(gamWatcher),作者:香菜聊游戏

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-08-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 安恒信息提示:OpenSSL致命"心血"漏洞可能持续发酵,内网不保易造成“后院起火”

    4月8日公开OpenSSL“心脏出血”这一致命漏洞细节后引起了全球互联网的安全“地震”,国内外一些大型互联网企业的相关VPN、邮件服务、即时聊天、网络...

    安恒信息
  • Python Weekly 423

    链接: https://www.youtube.com/watch?v=P5nOGKVLIYo

    爱写bug
  • 希望因为VR的介入,心梗可以逐渐销声匿迹……

    (VRPinea 1月9日讯)2021年才刚刚开始,不好的消息就一个接一个地传来了。从上海白领体检异常率高达99%,到拼多多员工深夜加班后猝死,再到《巴啦啦小魔...

    VRPinea
  • 让弹幕文明一点的Python屏蔽功能小实验

    突然想到一个视频里面弹幕被和谐的一满屏的*号觉得很有趣,然后就想用python来试试写写看,结果还真玩出了点效果,思路是首先你得有一个脏话存放的仓库好到时候检测...

    小小科
  • 【机器学习】何谓机器学习 机器学习能做些什么?

    最近我和一对夫妇共进晚餐,他们问我从事什么职业,我回应道:“机器学习。”妻子回头问丈夫:“亲爱的,什么是机器学习?”她的丈夫答道:“T-800型终结者。”在《终...

    陆勤_数据人网
  • 耸人听闻还是真相?简要分析浑水资本发布的圣犹达公司心脏医疗设备安全报告

    知名做空机构浑水资本(Muddy Waters Capital)在MedSec的协助研究下,发布报告称,著名医疗器械公司圣犹达(St. Jude Medical...

    FB客服
  • 安全圈乱象杂谈

    技术命名,将一些旧知识赋予个新名词进行炒作,比如APT,还有可视化概念,一串串攻击流飞来飞去。

    泉哥
  • 每周分享第 21 期

    漫画家蔡志忠有一个演讲,题目叫做《努力是没有用的》。读完这份演讲稿,我觉得他说的有道理。

    ruanyf
  • Lottie表情 | Q弹超清,萌趣翻倍

    你发现了吗,最近有些小黄脸在悄悄地变大变清晰,然后惊艳了所有人。别担心,这既不是bug也不是魔法。这是QQ团队运用Lottie技术推出的超清表情。每秒60帧的...

    腾讯ISUX
  • 手机App都在偷听我说话?窃听疑云全球密布,科技公司连连喊冤

    用“Listen”(窃听)和“Phone”(手机)同时作为关键词在谷歌搜索,可以搜出6930万条相关报道。

    量子位
  • 如何用30行代码,打造一个微信群聊助手

    这是一位Python爱好者的投稿,业务时间自己编码了一个黑科技,让场主分享给大家~

    养码场
  • 科技骗局24:2018年安维萨学术造假心肌干细胞骗局

    人类科技史、金融史、战争史上不乏骗局,从古代到今天、估计未来一直都会有。虚假的证据、论文、技术、产品层出不穷,许多名人、学者、专家深陷“造假门”、“欺骗门”、“...

    秦陇纪
  • 提高效率,就是延长生命,这10个工具帮您再活500年

    腾讯大讲堂
  • 苹果道歉、Zoom持续发力硬件、甲骨文也要收购TikTok、微软将停用IE浏览器等| Decode the Week

    根据微软365的博客,从2021年8月17日起,微软的许多自有服务将不再支持 google Internet Explorer 11,包括 Outlook、 O...

    LiveVideoStack
  • 大数据和云计算技术周报(第96期)

    本文分享了eBay团队如何对这些Hadoop job进行优化,eBay由于每天产生PB量级的CAL日志,如何解决MapReducejob实践中存在的问题对其它行...

    大数据和云计算技术
  • 2019-02-06 如何从文本中抽取结构化信息

    原文地址:https://github.com/fighting41love/funNLP

    Albert陈凯
  • NLP的自白:我这么努力,就是为了懂你!

    1950年,艾伦·图灵(Alan Turing)发表了一篇题为“ 计算机机械与智能(Computing Machinery and Intelligence) ...

    披头
  • 自然语言处理实战--文末送书

    1950年,艾伦·图灵(Alan Turing)发表了一篇题为“ 计算机机械与智能(Computing Machinery and Intelligence) ...

    FunTester
  • 2017年 Web 开发趋势

    如今,Web开发以惊人的速度发展,2016非常热门的技术趋势,在今天已经被视为过时的东西了。用户拥有更多的支配权和选择权,公司正在根据用户的需迁移他们的服务,这...

    疯狂的技术宅

扫码关注云+社区

领取腾讯云代金券