首页/文章/ 详情

毕设训练(4): 岩石边坡工程大数据系统设计

2年前浏览687

1 引言

句子和段落的相似度检查是机器学习和自然语言处理中一个非常重要的研究课题。

论文的查重其实就是检查句子和段落之间的相似度,不过我们的目的与查重的目的正好相反,我们是想得到重复或相似的东西。通过对特定数据的不断聚合,凝练出新的主题,这种类似“头脑风暴法”的操作,对于论文的选题和各种研究项目的写作以及论文生成具有很大的参考价值。在这个聚合过程中,一方面可以明白其它作者如何表述这一topic,另一方面也能够在这个聚类中发展出自己新的研究思路。这种聚类过程的本质是寻找句子和段落之间的相似度。

这个毕设训练的目的是为了让学生初步掌握前沿的机器学习与传统的采矿工程学科相互交叉的基本原理(概率论和矢量分析),了解新的人工智能技术对采矿工程学科的影响,培养和提高学生综合分析专业文献的能力。


首先我们把主题限定在岩石边坡工程,这是露天采矿长久不衰的研究课题,让学生通过查阅各种文献数据库或者爬虫建立一个小型的“大数据集”,并对数据进行分类和聚合。其次,建立一个简单的用户界面,使用不同的查询方法对数据集进行查询。公平地来说,这对于采矿工程专业的学生,而且受过系统算机课程学习,要在三个月的时间内完成这样一个毕设训练具有非常大的挑战。


2 过去的工作

在过去一年里,已经尝试使用不同的方法和途径对GeotechSet数据集进行了数据挖掘,这些工作大部分包括在下面的公共号文章中。主要查询方法概括如下

Data Mining---岩土工程的数据挖掘

基于文档名称的相似度查询---以电影数据库为例

使用WMD Similarity确定句子之间的相似度

使用Transformers确定句子之间的相似度

利用文本相似度聚类产生能够再学习的新文档

一个快速的句子和段落相似查询方法

基于附加信息cast和genres的相似电影查询

通过Euclidean距离计算向量值来对句子相似度排序

矿柱强度(Pillar Strength and Design)文献聚合

煤矿矿柱强度(Coal Pillar Strength)综述---实实在在的软文


2.1 Doc2Vec相似查询

Doc2Vec使用了单词移动距离(WMD, Word Moving Distance)方法对整个数据集进行相似查询(geotech-wmd-doc2vec.py),依赖的软件包是Gensim 3.8.3. 核心算法如下所示。

(1) 读入数据集。在这里我使用了一个判断语句,把那些字符长度小于50的句子排除掉。

(2) 训练Doc2Vec

(3) WMD相似度计算 


2.2 Flashtext相似查询

Flashtext算法是一种非结构化的全文搜索查询(geotech-words-flashtext-combination.py.py),这种方法把查询的关键词与数据集中的每个句子进行比较,只要句子中包含所要查询的词,不管句子有多长,都算一个相似的句子。当然在实际写作中,没有人整篇文章都使用逗号而不使用句号。在我们大量的测试中,这种方法比Doc2Vec得到的有用信息更多。这种方法首先把一个句子分词,然后对分词进行组合使用C(n,3)对数据集(.txt)进行查询,能够把数据集中所有包含关键词组合的句子提取出来。下面简要描述这种方法的步骤:

(1)首先需要对查询句子进行分词处理,去掉无用的stopwords,当然我们也可以直接输入关键词。例如我们需要查询“PFC2D的边坡稳定性分析 slope stability"。

(2) 分词之后,从这四个分开的词组中组合其中的3个作为一个查询集 合。使用下面的代码进行组合计算。这样我们可以得到如下的组合:





[('PFC2D', '边坡稳定性', 'slope'), ('PFC2D', '边坡稳定性', 'stability'), ('PFC2D', 'slope', 'stability'), ('边坡稳定性', 'slope', 'stability')]

(3) 对其中每一个组合分别查询整个数据集,最后得出如下结果。

2.3 Sklearn相似查询

最初,我们使用euclidean_distances进行相似查询,即通过Euclidean距离计算向量值来对句子相似度排序,结果发现这种方法计算文本相似有缺陷,特别是处理非结构化的文本时经常返回空值,因此抛弃了这种算法,改用余弦相似计算(geotech-sklearn-similarity-query.py) , 这种方法对于短句子效果较好,对于长句子效果差一些。

首先导入模块:





from sklearn.feature_extraction.text import CountVectorizerfrom sklearn.metrics.pairwise import cosine_similarityimport codecsimport os

然后进行矢量化运算,



vectorizer = CountVectorizer()features = vectorizer.fit_transform(corpus).todense()

最后进行余弦相似计算,这里使用了一个判断语句if (round(each[1],2)) >= 0.3,用来获得相似度大于等于0.3的那些句子。我们把这个用法扩展到整个目录下,用来查找与query句子最相似的句子。使用下面的代码:







databases = []directory = ".\\temp"for fpathe,dirs,fs in os.walk(directory):    for f in fs:        flname = os.path.join(fpathe,f)           databases.append(flname)

单个数据文件的尺寸不能太大,初步估计超过2M就会出现错误:“Unable to allocate 9.04 GiB for an array with shape (53973, 22490) and data type float64”,这是因为内存不够,试着把虚拟内存调到了最大值,也不起作用。目前还没有找到好的解决方法,只能把大的文件分割成小文件。


2.4 Transformers相似查询

Transformers首先需要建立model(transformers-similarity.py), 与WMD不同的是,这个model不是依靠自身的corpus来训练的,而是基于一些预训练的模型。目前我们有两个预训练的model,一个是纯英语的model, 另一个是多语言的model,为了能精确捕捉更多的中英文信息,我们设计在同一次运行中同时使用这两个model, 于是把这两个model组成一个list。这种方法可以实现中英文混合查询。Transformers得出的结果优于WMD得出的结果,同时,Transformers的聚类能帮助我们集中关注某一类论题。



models = [SentenceTransformer('roberta-large-nli-stsb-mean-tokens'), \          SentenceTransformer('distiluse-base-multilingual-cased')]

然后对这两个model进行循环:



for each_model in models:     do something ;进行计算


3 原型系统设计

依据上述算法,学生已经设计了一个初步的原型系统。这个系统可以选择其中一种方法查询,也可以进行综合查询。对于大规模的数据集来说,上述这些方法结合起来使用效果会好一些。通过这种相似查询,能够帮助我们快速凝练出topic的粘合度。目前一方面继续扩展数据集和聚类主题,另一方面发展更先进合理的查询方法。


相关文章,在仿真秀官网搜索:

毕设训练(1):岩石崩落分析与防护(Rockfall Analysis and Protection)

毕设训练(2):尾矿库的设计与尾矿坝稳定性分析

毕设训练(3): 岩石边坡稳定性概率分析


来源:计算岩土力学
岩土PFC人工智能
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2022-11-19
最近编辑:2年前
计算岩土力学
传播岩土工程教育理念、工程分析...
获赞 147粉丝 1055文章 1776课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈