【2023华中杯数学建模】B 题 小学数学应用题相似性度量及难度评估详细建模方案及实现代码

简介: 本文提供了2023年华中杯数学建模B题的详细建模方案和实现代码,包括设计小学数学应用题相似性度量方法、建立题目难度评估数学模型、对题库进行相似性或难度分类,以及使用TF-IDF和K-Means聚类算法进行题目难度分析和相似题目推荐。

请添加图片描述

更新时间:2023-5-1 14:00

相关链接

【2023华中杯】B题 小学教学应用题 相似性度量及难度评估 29页论文及MATLAB代码

1 题目

B 题 小学数学应用题相似性度量及难度评估

某 MOOC 在线教育平台希望能够进行个性化教学,实现用户自主学习。在用户学习时,系统从题库中随机抽取若干道与例题同步的随堂测试题,记录、分析学生的学习和答题信息,并且课后会自动生成作业题(或练习题)。此外,系统还能够定期回溯学生的易错题所涉及的内容,自动推荐题型相似、难度有层次的其他题目供用户进行拓展练习。为实现这样的功能,如何度量题目之间的相似性,如何评估题目的难度,是该产品要解决的关键问题。以小学数学应用题 1 为例,度量题目之间相似性的依据主要有以下两种:

  1. 题干文字。这种方法一般只能找到与题干文字相近的题目作为相似题目。但是,有些题目的题干文字相似,而关键字词不同,题意差异较大;有些问题的背景可能毫无关联,题干文字也几乎不同,而题目的解题思路与方法技巧却完全相同。因此,这种方法效果有限。
  2. 事先标注题目的知识点等信息。这种方法的推荐效果取决于知识点的划分方式和粒度。知识点划分太粗,推荐结果可能与例题或用户的易错题差别太大;知识点划分太细, 推荐结果可能太单一。两种情况下都无法真正达到拓展练习的目的。

评估题目难度的常见做法主要有以下两种:

  1. 根据考试的类型确定。比如,数学竞赛的试题一般比某个小学期末考试题目难。

  2. 教师根据经验主观判断。

上述判断题目相似性和评估难度的做法都有明显的局限性。该公司聘请你们团队尝试解决这些问题。以小学数学应用题为例,具体任务如下:

  1. 设计刻画两道小学数学应用题之间相似性的度量方法。

  2. 建立评估小学数学应用题难度的数学模型。

  3. 附件1是一个示例题库,包含 100 道应用题。请将附件1中的题目,按相似性或难度分类(不限制某一道题目只能属于一个分类)。如果某道题目没有相似题目,可以单独成一类。评估算法的复杂度,能否适用于更大规模的题库。

  4. 附件2中包含10道题目,请使用上述模型或方法分析这些题目的难度,并对于其中的 每一道题目,在附件 1 中找出最相似的一道或若干道题目(没有相似题目可写“无)”。评估算法的复杂度,能否适用于更大规模的题库。

注 1:题目所述小学数学应用题,是指以四则运算为主要求解方法,有一定实际背景的问题。
注 2:教学中还有一种确定题目难度的常见做法,即根据题目的实际得分率来定义题目的难度。但是,题目的实际得分率不仅与学生考前的学习情况有关,还与很多“非技术”因素有关,比如题目所用的词语、句型、语态,甚至是题目在试卷中出现的先后顺序等等;实际的得分率也只能通过采集真实的试卷信息获得,工作量大。因此,本题所关心的是题目的“技术”难度,不考虑实际的得分率。附件说明:

  1. 附件 1 为 CSV 格式文件,无标题行,共 2 列 100 行。第一列为题目编号,形如“P001”、“P002”等。第二列为题目内容。

  2. 附件 2 为 CSV 格式文件,无标题行,共 2 列 10 行。第一列为题目编号,形如“Q001”、“Q002”等。第二列为题目内容。

附件2.csv部分内容,

P001 将一批糖果分给幼儿园大班小朋友,如果每人分3颗,就余下21颗;如果每人分4颗,就余下6颗。幼儿园大班有小朋友多少人?这批糖果共有几粒?
P002 姐妹俩从家出发去上学,姐姐每分钟走50米,妹妹每分钟走45米。如果妹妹比姐姐早走5分钟,那么姐妹俩可同时到达学校。问:家到学校有多远?
P003 钢铁厂用两辆运输车从距工厂90千米的矿山运矿石回来。现有甲、乙两辆运输车,甲车自矿山、乙车自钢铁厂同时出发,相向而行,速度分别为每小时40千米和50千米,到达目的地后立即返回,如此反复进行多次。如果不计装卸时间,且两车不作任何停留,则两车在第三次相遇时,距矿山多少千米?

附件2.csv部分内容,

Q001 一列客车长150米,每秒行30米;一列货车长200米,每秒行20米。两车相向而行。当错车而过时,客车司机多久可以看到货车通过?货车司机多久能看到客车通过?
Q002 一批旅客决定分乘几辆大巴车,要使每辆车乘坐同样的人数。起先,每辆车坐22人,发现有一人坐不上车;若是开走一辆空车,那么所有的旅客刚好平均分乘余下的车。已知每辆车的容量不多于32人,问原有多少辆汽车?这些旅客有多少人?

2 数学模型

2.1 问题一

根据题目描述,我们需要设计一个算法来度量题目之间的相似性,并评估题目的难度。

首先,我们可以将每道题目转化为一个向量形式,该向量包含每个题目的关键信息(例如题目中的数字、关键词等),然后我们可以使用略。请下载完整文档来度量两个向量之间的相似性。具体地,设题目 a 和 b 分别对应的向量是 a = ( a 1 , a 2 , … , a n )和 b = ( b 1 , b 2 , … , b n ) ,则两个题目的相似性可以表示为:

。。。。略,请下载完整文档

其中a⋅b 表示向量a 和 b 的内积,$\|\boldsymbol{a}\|$和$\|\boldsymbol{b}\|$分别表示向量 a 和 b 的范数。

但是,直接使用题目中的所有关键信息作为向量可能会导致相似度计算的误差。因此,我们需要对题目的关键信息进行筛选和加权,以提高相似性度量的准确性。具体实现步骤如下

。。。略

2.2 问题二

将题目将采用KMeans聚类算法分为三类,困难、中等、简单。先聚类,再对每个类别进行数据分析,分析出哪个类别具体属于哪个难度。
TF-IDF模型用于将每个题目描述表示为一个向量,向量中的每个元素表示该单词在该题目描述中的权重,以此来表示不同描述的相似度。K-Means聚类模型用于将题目描述向量进行聚类,将相似的题目归为同一类别。聚类模型的数量可以设置为需要进行分类的类别数目。每个题目将会被分为不同的类别。
因此,可以将以上Python代码用数学模型表示为:
设题目集合为 Q Q Q,其中题目数目为 N N N。
TF-IDF模型:
定义词频矩阵$\mathbf{X} \in \mathbb{R}^{N \times M}$,其中第 i 行第 j列的元素xi,j​ 表示题目 i中单词 j 的词频。
定义倒排文档频率(IDF)向量$\mathbf{idf} \in \mathbb{R}^{M}$,其中第 j 个元素 $idf_j = \log \frac{N}{df_j}$ ​,其中dfj表示单词 j 在总题目数中出现的次数。
定义TF-IDF矩阵 $\mathbf{W} \in \mathbb{R}^{N \times M} $,其中第 i 行第 j列的元素 wi,j​ 表示通过TF-IDF模型计算的题目 i 中单词 j 的权重,即$w_{i,j} = x_{i,j} \times idf_j$。
K-Means聚类模型:
定义聚类结果向量 $\mathbf{c} \in \mathbb{R}^{N}$,其中第 i 个元素 ci​ 表示题目 i所属的类别编号,范围为[ 1 , k ],其中 k 表示聚类的类别数目。
定义聚类簇质心向量$\mathbf{\mu} \in \mathbb{R}^{k \times M}$,其中第 i行 μi​ 表示聚类中心向量,即属于第 i 类的题目描述向量的平均值。
定义样本距离度量 $ \mathrm{dist}(x_i,\mu_j)$,其中 xi​ 表示第 i 个题目描述向量, μj​ 表示第 j个聚类中心向量。可以使用欧几里得距离(Euclidean distance)或余弦相似度(Cosine similarity)作为样本距离度量。
定义损失函数$ \mathrm{J}(\{\mathbf{\mu}_j\}_1^k,\mathbf{c},\mathbf{W})$,用于衡量聚类的准确性,可以使用误差平方和(SSE)或其它聚类指标。
聚类模型的目标是最小化损失函数J,并得到最优的聚类结果 c 和聚类簇质心向量 μ。

Kmeans聚类效果的评价指标一般有轮廓系数(Silhouette Coefficient)、Calinski-Harabasz Index和Davies-Bouldin Index等。其中轮廓系数是最常用的评价指标,计算公式为:

$s(i)=\frac{b(i)-a(i)}{max\{a(i),b(i)\}}$

其中, a(i)表示第 i个样本与同一簇内其他样本的平均距离, b(i)表示第 i 个样本与距离最近的另一簇内所有样本的平均距离。

轮廓系数 s 的取值范围在[−1,1]之间,值越大代表聚类效果越好。若某个样本的 s值为负数,说明该样本更应该划分到其他簇。

2.3 问题三

采用问题二的聚类算法,或者其他聚类算法。不指定聚类数量的聚类算法有以下几种:

  1. DBSCAN(Density-Based Spatial Clustering of Applications with Noise)
  2. OPTICS(Ordering Points To Identify the Clustering Structure)
  3. HDBSCAN(Hierarchical Density-Based Spatial Clustering of Applications with Noise)

其中,DBSCAN 比较常用,其主要思想是根据局部密度定义簇,具有对噪声数据点不敏感的特点。

注意,对于Kmeans算法,离散点对算法的影响巨大,可以首先对离散点剔除出来,单独做一个类别,或者采用DBSCAN算法。

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
from pyecharts import Scatter

# 读取csv文件
df = pd.read_csv('附件1.csv',header=None)
# 将题目描述作为特征
tfidf = TfidfVectorizer()
features = tfidf.fit_transform(df[1])
# 聚类模型训练
kmeans = KMeans(n_clusters=3, random_state=0).fit(features)

# 评价聚类效果
score = silhouette_score(features, kmeans.labels_)
print('聚类效果评价指标(Silhouette Score):', score)

# 可视化聚类效果
。。。。略
# 打印聚类结果
for i in range(len(kmeans.labels_)):
    print('题目ID:{}, 题目描述:{}'.format(df[0][i], df[1][i]))
    print('题目类别:{}'.format(kmeans.labels_[i]))
    print('---------------------------')

在这里插入图片描述

可以看到聚类效果不是特别理想,还需要进一步改进。

在这里插入图片描述

2.4 问题四

用问题一的相似度计算方法。遍历附件1和附件2,依次去计算两个问题的相似度。

import pandas as pd
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

# 读取csv文件
data = pd.read_csv('附件1.csv')
questions = data['题目']

# 定义一个处理题目的函数,该函数将题目转换为关键词列表,并对不同关键词进行加权,最终返回一个向量:

def process_question(question):
   。。。略
    return ' '.join(key_words)  # 返回空格分隔的关键字字符串

# 将所有题目转换为关键词向量:
vectorizer = TfidfVectorizer()
vectors = vectorizer.fit_transform([process_question(question) for question in questions])
# 最后,计算任意两个题目之间的相似度并输出结果:
for i in range(len(questions)):
    for j in range(i+1, len(questions)):
        similarity = cosine_similarity(vectors[i], vectors[j])[0][0]
        print(f"题目{i+1} 和 题目{j+1} 的相似度为: {similarity:.4f}")

在这里插入图片描述

3 完整下载

请添加图片描述

目录
相关文章
|
存储 数据采集 数据可视化
用Python分析西安景点,告诉你哪些景点性价比高
清明马上就要到了,难得的三天假期,祭祖的同时,踏青游玩也是少不了的,但是去哪里玩是一个问题。于是,志斌用Python爬取了去哪儿网上西安景点的相关数据,包括景点名称、城区、热度、价格、月销量等数据,对数据进行可视化并作简单分析,用以找到性价比较高的景点。
888 1
用Python分析西安景点,告诉你哪些景点性价比高
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的迁移学习:从理论到实践
科技进步不断推动人工智能的发展,其中深度学习已成为最炙手可热的领域。然而,训练深度学习模型通常需要大量的数据和计算资源,这对于许多实际应用来说是一个显著的障碍。迁移学习作为一种有效的方法,通过利用已有模型在新任务上的再训练,大大减少了数据和计算资源的需求。本文将详细探讨迁移学习的理论基础、各种实现方法以及其在实际应用中的优势和挑战。
|
3月前
|
人工智能 缓存 安全
阿里云发布《AI 原生应用架构白皮书》!
阿里云联合爱橙科技发布《AI原生应用架构白皮书》,系统解析AI应用在架构设计、开发运维中的关键挑战与解决方案,涵盖大模型、Agent、RAG、安全等11大核心要素,助力企业构建稳定、高效、可控的AI应用体系。
阿里云发布《AI 原生应用架构白皮书》!
|
机器学习/深度学习 算法 自动驾驶
深度学习中的图像识别技术
【10月更文挑战第37天】本文将深入探讨深度学习在图像识别领域的应用,通过解析神经网络模型的构建、训练和优化过程,揭示深度学习如何赋能计算机视觉。文章还将展示代码示例,帮助读者理解并实现自己的图像识别项目。
|
Cloud Native API 云计算
云原生架构的深度探索与实践####
本文深入探讨了云原生架构的核心概念、技术特点及其在现代软件开发中的应用实践。通过分析云原生架构如何促进企业数字化转型,提升业务敏捷性与可扩展性,本文旨在为读者提供一个全面而深入的理解框架。我们将从云原生的定义出发,逐步深入到其关键技术组件、最佳实践案例及面临的挑战与解决方案,为开发者和企业决策者提供宝贵的参考与启示。 ####
|
测试技术 开发工具 Swift
Liger kernel训练加速,一行代码训练吞吐量提高 20%,显存使用量降低 60%
在LLM的训练/微调过程中,开发者通常会遇到一些瓶颈,包括GPU显存不够,经常遇到OOM,GPU使用率100%而且非常慢等。
Liger kernel训练加速,一行代码训练吞吐量提高 20%,显存使用量降低 60%
|
数据采集 前端开发 JavaScript
捕捉页面的关键元素:用CSS选择器与Puppeteer自动抓取
本文介绍了如何使用 Puppeteer 结合 CSS 选择器抓取动态网页中的关键元素,以亚航网站的特价机票信息为例,通过设置代理 IP、User-Agent 和 Cookie 等技术手段,有效提升爬虫策略,实现高效、稳定的爬取。
386 5
捕捉页面的关键元素:用CSS选择器与Puppeteer自动抓取
|
存储 自然语言处理 算法
整合文本和知识图谱嵌入提升RAG的性能
本文介绍了如何结合文本嵌入和知识图谱嵌入来提升RAG(检索式生成模型)的性能。文本嵌入利用Word2Vec、GloVe或BERT等预训练模型捕捉单词的语义和上下文,而知识图谱嵌入则表示实体和关系,以便更好地理解结构化信息。通过结合这两种嵌入,RAG模型能更全面地理解输入文本和知识,从而提高答案检索和生成的准确性。文章通过代码示例展示了如何生成和整合这两种嵌入,强调了它们在增强模型对模糊性和可变性处理能力上的作用。
687 7
|
开发框架 前端开发 JavaScript
探索现代Web开发中的框架选择:Blazor、Angular和React的全面比较与分析
【8月更文挑战第31天】随着Web开发技术的发展,选择合适的框架对项目成功至关重要。本文对比了三大前端框架:Blazor、Angular和React。Blazor是微软推出的.NET Web客户端开发框架,支持C#编写前端代码;Angular由Google支持,基于TypeScript,适用于大型应用;React是由Facebook维护的高效JavaScript库。
487 0