📢 转载信息
原文链接:https://machinelearningmastery.com/7-readability-features-for-your-next-machine-learning-model/
原文作者:Iván Palomares Carrascosa
在本文中,您将学习如何使用Textstat Python库从原始文本中提取七种有用的可读性和文本复杂度特征。
我们将涵盖的主题包括:
- Textstat 如何量化可读性和文本复杂度以用于下游机器学习任务。
- 如何在Python中计算七种常用的可读性指标。
- 在使用这些指标作为分类或回归模型的特征时,如何进行解释。
让我们开始吧。
7种机器学习模型可读性特征
图片由编辑提供
引言
与完全结构化的表格数据不同,为机器学习模型准备文本数据通常需要分词、词嵌入或情感分析等任务。虽然这些无疑是有用的特征,但文本的结构复杂性(或可读性)也可以构成区分分类或回归预测任务的极其丰富的信息特征。
Textstat,正如其名,是一个轻量级且直观的Python库,可以帮助您从原始文本中获取统计数据。通过可读性分数,它为模型提供了输入特征,这些特征有助于区分休闲社交媒体帖子、儿童童话故事或哲学手稿等不同类型的文本。
本文介绍了使用Textstat库可以轻松进行的七个富有洞察力的文本分析示例。
在开始之前,请确保您已安装Textstat:
pip install textstat
虽然这里描述的分析可以扩展到大型文本语料库,但我们将使用一个包含少量标记文本的玩具数据集来说明它们。请注意,对于下游机器学习模型的训练和推理,您需要一个足够大的数据集来进行训练。
import pandas as pd
import textstat
# Create a toy dataset with three markedly different texts
data = {
'Category': ['Simple', 'Standard', 'Complex'],
'Text': [
"The cat sat on the mat. It was a sunny day. The dog played outside.",
"Machine learning algorithms build a model based on sample data, known as training data, to make predictions.",
"The thermodynamic properties of the system dictate the spontaneous progression of the chemical reaction, contingent upon the activation energy threshold."
]
}
df = pd.DataFrame(data)
print("Environment set up and dataset ready!")
1. 应用Flesch阅读易读性公式
我们将探索的第一个文本分析指标是Flesch阅读易读性公式,它是量化文本可读性最早且最广泛使用的指标之一。它根据平均句子长度和每词平均音节数来评估文本。虽然它概念上 meant to take values in the 0 – 100 range — 0 表示难以阅读,100 表示非常容易阅读 — 但它的公式并不严格受限,如下例所示:
df['Flesch_Ease'] = df['Text'].apply(textstat.flesch_reading_ease)
print("Flesch Reading Ease Scores:")
print(df[['Category', 'Flesch_Ease']])
输出:
Flesch Reading Ease Scores:
Category Flesch_Ease
0 Simple 105.880000
1 Standard 45.262353
2 Complex -8.045000
实际公式如下:
$$ 206.835 – 1.015 \left( \frac{\text{total words}}{\text{total sentences}} \right) – 84.6 \left( \frac{\text{total syllables}}{\text{total words}} \right) $$
像Flesch阅读易读性这样的无界公式可能会阻碍机器学习模型的正确训练,这是在后续特征工程任务中需要考虑的事项。
2. 计算Flesch-Kincaid年级水平
与提供单一可读性值的阅读易读性分数不同,Flesch-Kincaid年级水平使用类似于美国学校年级水平的量表来评估文本复杂度。在这种情况下,值越高表示复杂度越高。但请注意:此指标也与Flesch阅读易读性分数类似,极度简单或复杂的文本可能分别产生低于零或任意高的分数。
df['Flesch_Grade'] = df['Text'].apply(textstat.flesch_kincaid_grade)
print("Flesch-Kincaid Grade Levels:")
print(df[['Category', 'Flesch_Grade']])
输出:
Flesch-Kincaid Grade Levels:
Category Flesch_Grade
0 Simple -0.266667
1 Standard 11.169412
2 Complex 19.350000
3. 计算SMOG指数
另一个用于评估文本复杂度的衡量标准是SMOG指数,它估计理解文本所需的正式教育年限。该公式的界限比其他公式要严格一些,因为它有一个略高于3的严格数学下限。我们三个示例文本中最简单的文本在此指标上达到了复杂度的绝对最小值。它考虑了多音节词(即三个或更多音节的单词)的数量等因素。
df['SMOG_Index'] = df['Text'].apply(textstat.smog_index)
print("SMOG Index Scores:")
print(df[['Category', 'SMOG_Index']])
输出:
SMOG Index Scores:
Category SMOG_Index
0 Simple 3.129100
1 Standard 11.208143
2 Complex 20.267339
4. 计算Gunning Fog指数
与SMOG指数类似,Gunning Fog指数也有一个严格的下限,在本例中为零。原因很简单:它量化了复杂词的百分比以及平均句子长度。它是分析商业文本并确保技术或领域特定内容能够被更广泛的受众理解的流行指标。
df['Gunning_Fog'] = df['Text'].apply(textstat.gunning_fog)
print("Gunning Fog Index:")
print(df[['Category', 'Gunning_Fog']])
输出:
Gunning Fog Index:
Category Gunning_Fog
0 Simple 2.000000
1 Standard 11.505882
2 Complex 26.000000
5. 计算自动可读性指数
前面看到的公式考虑了单词的音节数。相比之下,自动可读性指数(ARI)根据每词字符数来计算年级水平。这使得它在计算上更快,因此,在处理海量文本数据集或实时分析流数据时,它是一个更好的选择。它是无界的,因此在计算它之后,通常建议进行特征缩放。
# Calculate Automated Readability Index
df['ARI'] = df['Text'].apply(textstat.automated_readability_index)
print("Automated Readability Index:")
print(df[['Category', 'ARI']])
输出:
Automated Readability Index:
Category ARI
0 Simple -2.288000
1 Standard 12.559412
2 Complex 20.127000
6. 计算Dale-Chall可读性分数
与Gunning Fog指数类似,Dale-Chall可读性分数也具有零的严格下限,因为该指标也依赖于比率和百分比。此指标的独特之处在于其基于词汇的方法,因为它通过将整个文本与一个包含数千个四年级学生熟悉的单词的预构建查找列表进行交叉引用来工作。不在该列表中的任何单词都被标记为复杂。如果您想分析面向儿童或广大受众的文本,此指标可能是一个不错的参考点。
df['Dale_Chall'] = df['Text'].apply(textstat.dale_chall_readability_score)
print("Dale-Chall Scores:")
print(df[['Category', 'Dale_Chall']])
输出:
Dale-Chall Scores:
Category Dale_Chall
0 Simple 4.937167
1 Standard 12.839112
2 Complex 14.102500
7. 使用Text Standard作为共识指标
如果您不确定使用哪种特定公式,会发生什么?textstat提供了一个可解释的共识指标,它将多种方法结合起来。通过text_standard()函数,将多种可读性方法应用于文本,并返回一个共识年级水平。与大多数指标一样,值越高,可读性越低。这是为您的下游建模任务整合一个快速、平衡的摘要特征的绝佳选择。
df['Consensus_Grade'] = df['Text'].apply(lambda x: textstat.text_standard(x, float_output=True))
print("Consensus Grade Levels:")
print(df[['Category', 'Consensus_Grade']])
输出:
Consensus Grade Levels:
Category Consensus_Grade
0 Simple 2.0
1 Standard 11.0
2 Complex 18.0
总结
我们使用Textstat Python库探索了七种分析文本可读性或复杂性的指标。虽然这些方法中的大多数行为相似,但了解它们细微的特征和独特的行为是为您的分析或后续的机器学习建模用例选择正确方法Thus.
🚀 想要体验更好更全面的AI调用?
欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。
评论区