一个快速、健壮的库,用于检查字符串中的攻击性语言。

profanity-check的Python项目详细描述


亵渎检查

Build Statusrelease

一个快速、健壮的python库,用于检查字符串中的亵渎或攻击性语言。阅读更多关于profanity-check如何以及为什么在this blog post中构建的信息。您还可以测试profanity-checkin your browser

工作原理

profanity-check使用了一个线性支持向量机模型,该模型对200k个人类标记的干净和亵渎文本字符串样本进行训练。它的模型很简单,但却出人意料地有效,这意味着profanity-check既健壮又性能卓越。

为什么要用亵渎支票?

没有明确的黑名单

许多亵渎检测库使用硬编码的坏单词列表来检测和过滤亵渎。例如,profanity使用this wordlist,甚至better-profanity仍然使用a wordlist。显然,这种方法存在明显的问题,尽管它们可能是性能的,这些库根本不准确

一个简单的例子,其中profanity-check更好的是短语“you cocksucker”-profanity认为这是干净的,因为它的单词表中没有“cocksucker”

性能

profanity-filter这样的其他库使用更复杂的方法,这些方法更精确,但会牺牲性能。使用a Kaggle dataset of Wikipedia comments的基准测试(于2018年12月在新的2018 MacBook Pro上执行)大致得出以下结果:

Package1 Prediction (ms)10 Predictions (ms)100 Predictions (ms)
profanity-check0.20.53.5
profanity-filter60120013000
profanity0.31.224

profanity-check比这个基准中的profanity-filter快300-4000倍!

准确度

这张桌子说明了一切:

PackageTest AccuracyBalanced Test AccuracyPrecisionRecallF1 Score
profanity-check95.0%93.0%86.1%89.6%0.88
profanity-filter91.8%83.6%85.4%70.2%0.77
profanity85.6%65.1%91.7%30.8%0.46

有关用于这些结果的数据集的更多详细信息,请参阅下面的“如何”部分。

安装

$ pip install profanity-check

用法

fromprofanity_checkimportpredict,predict_probpredict(['predict() takes an array and returns a 1 for each string if it is offensive, else 0.'])# [0]predict(['fuck you'])# [1]predict_prob(['predict_prob() takes an array and returns the probability each string is offensive'])# [0.08686173]predict_prob(['go to hell, you scum'])# [0.7618861]

注意,predict()predict_prob都返回^{}数组。

有关其工作原理的详细信息

如何

特别感谢在这个项目中使用的数据集的作者。profanity-check是在两个来源的组合数据集上训练的:

profanity-check在很大程度上依赖于优秀的^{}库。它主要由scikit-learn^{}^{}^{}驱动。它使用Bag-of-words model对输入字符串进行矢量化,然后将其输入到线性分类器。

为什么

思考profanity-check工作原理的一种简化方法是:在训练过程中,模型学习哪些单词是“坏”的,以及它们是如何“坏”的,因为这些单词将更经常出现在攻击性文本中。因此,这就好像训练过程是从所有可能的单词中挑出“不好”的单词,并用它们来做未来的预测。这比仅仅依靠人类选择的任意单词黑名单要好!

注意事项

这个图书馆远不完美。例如,很难找到不太常见的咒语变体,比如“f4ck you”“you b1tch”,因为它们在训练语料库中出现的频率不够。永远不要将此库中的任何预测视为毫无疑问的事实,因为它确实会出错。相反,请将此库用作启发式。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用哪个地图/集合?   bluej Java:计算税   由于性能问题,java双精度字符串替代方案   java Eclipse CDT生成设置因重新启动而丢失   如何在java控制台中显示字节流值   java获取url地址,其中是包含我的页面的iframe   java 403禁止的spring启动API调用错误?   如果一个方法返回true,java将停止计时器   使用JavaNIO获取文件创建日期   在Java中从整数转换为二进制时保留整个字节的字符串   java AspectJ&Maven警告:“未应用……中定义的建议?”   java为什么我得到3,我不应该得到+7   java当一个方法包含多个返回的if语句时,如何从该方法中获取返回值?   在运行时循环java(scan.nextLine()!="$")   java配置休眠。cfg。春天的xml   java使用HtmlUnit模拟用户,错误   java CLI如何持续检查更改   java最大素因子(返回)