一个实现新型简单可解释文本分类模型的Python包
:sushi: 在线实时演示: http://tworld.io/ss3/ :icecream::ice_cream::cake:
SS3文本分类器是一种新颖且简单的监督机器学习模型,用于文本分类,具有可解释性,即能够自然地(自我)解释其原理。它最初在论文《一种用于社交媒体流的简单有效的早期抑郁症检测的文本分类框架》的第3节中提出(arXiv预印本)。 这个简单的模型在过去三届CLEF的eRisk实验室中连续获得了最佳和第二佳的结果,在所有参与模型中表现出色[Burdisso等人,2019; Loyola等人,2021]。 鉴于其白盒特性,它允许研究人员和从业者部署可解释(即自解释)的、因此更可靠的文本分类模型(这对那些从事可能影响人们生活的分类问题的人特别有用)。
注意: 该包还包含原始模型的不同变体,例如在《t-SS3:用于文本流早期风险检测的动态n-gram文本分类器》中介绍的变体(arXiv预印本),它允许SS3"即时"识别重要的可变长度词n-gram。
什么是PySS3?
PySS3是一个Python包,它允许您以非常直接、交互式和可视化的方式使用SS3。除了SS3分类器的实现,PySS3还附带了一套工具,帮助您以更清晰、更快速的方式开发机器学习模型。这些工具让您能够分析、监控和理解您的模型,让您看到它们实际学到了什么以及为什么。为此,PySS3为您提供了3个主要组件:SS3
类、Live_Test
类和Evaluation
类,如下所述。
:point_right: SS3
类
该类使用清晰的API实现分类器。例如,让我们首先加载教程之一的数据集:
from pyss3.util import Dataset
url = "https://github.com/sergioburdisso/pyss3/raw/master/examples/datasets/movie_review.zip"
x_train, y_train = Dataset.load_from_url(url, "train")
x_test, y_test = Dataset.load_from_url(url, "test")
现在让我们训练我们的第一个SS3模型!注意,API与sklearn
模型的API非常相似:
from pyss3 import SS3
clf = SS3()
clf.fit(x_train, y_train)
y_pred = clf.predict(x_test)
此外,这个类还提供了许多其他有用的方法,例如,extract_insight()
用于提取参与分类决策的文本片段(让您更好地理解模型预测背后的原理)或classify_multilabel()
提供多标签分类支持:
doc = "Liverpool CEO Peter Moore on Building a Global Fanbase"
# 标准"单标签"分类
label = clf.classify_label(doc) # 'business'
# 多标签分类
labels = clf.classify_multilabel(doc) # ['business', 'sports']
:point_right: Live_Test
类
该类允许您交互式地测试您的模型,并可视化地看到分类决策背后的原因,只需一行代码:
from pyss3.server import Live_Test
clf = SS3()
clf.fit(x_train, y_train)
Live_Test.run(clf, x_test, y_test) # <- 就是这一行!很酷吧?:)
如下图所示,这将在您的浏览器中本地打开一个交互式工具,您可以用它来(实时)测试您的模型,使用x_test
中给出的文档(或输入您自己的文档!)。这将让您可视化并理解您的模型实际学到了什么。
例如,我们已经在线上传了两个这样的实时测试供您尝试:"电影评论(情感分析)"和"主题分类",这两个都是按照教程得到的。
:point_right: 最后但同样重要的是,Evaluation
类
这可能是PySS3最有用的组件之一。顾名思义,这个类为用户提供了易于使用的模型评估和超参数优化方法,例如test
、kfold_cross_validation
、grid_search
和plot
方法,分别用于执行测试、分层k折交叉验证、网格搜索超参数优化和使用交互式3D图可视化评估结果。它最重要的特性之一可能是能够自动(并永久)记录您执行的评估历史。这将为您节省大量时间,并允许您交互式地可视化和分析分类器在不同超参数值下的性能(并根据您的需求选择最佳模型)。例如,让我们对三个超参数平滑度(s
)、重要性(l
)和惩罚(p
)进行4折交叉验证的网格搜索:
from pyss3.util import Evaluation
best_s, best_l, best_p, _ = Evaluation.grid_search(
clf, x_train, y_train,
s=[0.2, 0.32, 0.44, 0.56, 0.68, 0.8],
l=[0.1, 0.48, 0.86, 1.24, 1.62, 2],
p=[0.5, 0.8, 1.1, 1.4, 1.7, 2],
k_fold=4
)
在这个示例中,s
、l
和p
将各取6个不同的值,搜索结束后,此函数将返回(默认情况下)获得最佳准确率的超参数值。
现在,我们还可以使用plot
函数来分析网格搜索中获得的结果,使用交互式3D评估图:
Evaluation.plot()
在这个3D图中,每个点代表使用特定值组合(s
、l
和p
)执行的实验/评估。此外,这些点的颜色与所选指标的性能好坏成比例;当用户选择不同的评估指标(准确率、精确率、召回率、F1值等)时,图表将"实时"更新。此外,当光标移到数据点上时,会显示有用的信息(包括该实验中获得的混淆矩阵的"紧凑"表示)。最后值得一提的是,在显示3D图之前,PySS3会在您的项目文件夹中创建一个包含交互式图表的单一可移植HTML文件。这允许用户使用这个单一HTML文件存储、发送或上传图表到其他地方。例如,我们为您上传了两个这样的文件供您查看:"情感分析(电影评论)"和"主题分类",这两个评估图也是按照教程获得的。
想尝试PySS3吗?:eyeglasses: :coffee:
只需前往入门页面 :D
安装
只需使用:
pip install pyss3
想为这个开源项目做贡献吗?:sparkles::octocat::sparkles:
感谢您对项目的兴趣,您太!! 我们欢迎任何形式的帮助(代码、错误报告、内容、数据、文档、设计、示例、想法、反馈等),欢迎提出问题和/或拉取请求,无论是小到修复错别字还是大到添加新功能,帮助我们让PySS3变得更好 :+1:
请记住,您可以使用顶部的"编辑"按钮('铅笔'图标)直接在GitHub上编辑此仓库的任何文件。
最后,如果您计划创建一个新的拉取请求,我们遵循"如何写一个Git提交消息"中的"优秀Git提交消息的七条规则",所以请确保您的提交也遵循这些规则。
(如果您需要任何进一步的信息,请不要犹豫联系我 - sergio.burdisso@gmail.com)
贡献者 :muscle::sunglasses::+1:
感谢这些优秀的人(表情符号键):
本项目遵循all-contributors规范。欢迎任何形式的贡献!