阅读更多
引用

作者:张夏天,TalkingData首席数据科学家。12年大规模机器学习和数据挖掘经验,对推荐系统、计算广告、大规模机器学习算法并行化、流式机器学习算法有很深的造诣;在国际顶级会议和期刊上发表论文12篇,申请专利9项;前IBM CRL、腾讯、华为诺亚方舟实验室数据科学家;KDD2015、DSS2016国际会议主题演讲;机器学习开源项目Dice创始人。
欢迎技术投稿、约稿、给文章纠错,请发送邮件至heyc@csdn.net

大规模机器学习的挑战
随着互联网,移动互联网的兴起,可以获取的数据变得越来越多,也越来越丰富。数据资源的丰富,给机器学习带来了越来越多,越来越大创造价值的机会。 机器学习在计算广告,推荐系统这些价值上千亿美元的应用中起到的作用越来越大,创造的价值也越来越大。但是越来越大的数据规模也给机器学习带来了很多挑战。

最大的挑战就是庞大的数据量使得对计算资源的需求也急剧增长。首先经典的机器学习算法其计算量基本上都是与训练数据条数或者特征数量呈二次方甚至是三次方关系的[1]。即是说数据量或者特征数每翻一倍,则计算量就要增加到原来的四倍,甚至是八倍。这样的计算量增长是十分可怕的,即使是采用可扩展的计算机集群一难以满足这样的计算量增长。好在对于很多依赖于凸优化方法的算法,可以采用随机梯度下降方法,将计算量的增长降到基本与数据量和特征数呈线性关系。但是,大规模机器学习在计算上依然有三个比较大的困难

第一,因为几乎所有的机器学习算法都需要多次扫描数据,对于大规模数据无论在什么平台上,如果不能全部存储在内存中,就需要反复从磁盘存储系统中读取数据,带来巨大的IO开销。在很多情况下,IO开销占到整个训练时间的90%以上。

第二,即使有足够的资源将所有数据都放到内存中处理,对于分布式的计算系统,模型训练过程中对模型更新需要大量的网络通信开销。无论是同步更新还是异步更新,庞大的数据量和特征数都足以使得通信量爆炸,这是大规模机器学习的另外一个瓶颈。

第三,大规模的模型使得无法在一个节点上存储整个模型,如何将模型进行分布式的管理也是一个比较大的挑战。



图 1

目前的主流大数据处理技术都是以Map Reduce计算模式为核心的(包括Hadoop和Spark)。而Map Reduce计算模式下对第一个问题只能通过增加内存,SSD存储来解决或者缓解,但同时也需要付出高昂的成本。对于第二,和第三个个问题,Map Reduce模式的局限是很难克服这两个问题的。

而Parameter Server[2]作为目前最新的大规模机器学习系统设计模式,主要解决的其实是第三个问题,通过参数服务器以及模型参数的分布式管理来实现对超大规模模型的支持。同时在模型更新过程中的通信模式可以采用异步更新模式,来减小数据同步的开销,提高通信效率,但是Parameter Server模式下模型的更新量计算和模型的更新是分离的,其庞大的通信开销在原理上就是不可避免的。幸运的是,常见的大规模机器学习问题,都是高维稀疏问题,在很大程度上缓解了通信开销的问题,而Parameter Server突破了模型规模限制的优点是Map Reduce模式无法取代的,所以Parameter Server成为了目前大规模机器学习最先进,最受认可的模式。



图 2

虽然Parameter Server解决了模型分布式管理的瓶颈,异步通信模式和问题本身的稀疏性大大降低了通信的压力。 但是机器学习算法本身对数据的多次扫描带来的计算和通信开销依然是大规模机器学习效率的很大瓶颈。

除此之外还有一个很大的挑战就是算法的调参工作, 一般机器学习算法都会依赖一个或者多个参数,对于同一问题,不同的参数设定对模型精度的影响是很大的,而同一参数设定在不同的问题上的效果也有很大的不同。对于从事机器学习工作的人来说,调参始终是一个令人的头疼的问题。知乎上有个问题是“调参这事儿,为什么越干越觉得像老中医看病?”[3],里面有不少关于机器学习调参的经验,心得,吐槽和抖机灵。

对于大规模机器学习问题,调参的难度显然是更大的:

首先,一次训练和测试过程的时间和计算资源开销都是庞大的,不管采用什么调参方法,多次实验都会带来很大的时间和计算资源消耗。

其次,大规模机器学习问题通常都是数据变化很快的问题,如计算广告和推荐系统,之前确定好的参数在随着数据的变化,也有劣化的风险。

目前来说大规模机器学习存在的主要挑战是两个:第一是计算资源的消耗比较大,训练时间较长的问题,第二是调参比较困难,效率较低。TalkingData在大规模机器学习的实践中也深受这两个问题的困然,特别是公司在早起阶段硬件资源十分有限,这两个问题特别突出。我们为了解决这个问题,做了很多努力和尝试。TalkingData最近开源的Fregata项目[4],就是我们在这方面取得的一些成果的总结。

Fregata的优点
Fregata是TalkingData开源的大规模机器学习算法库,基于Spark,目前支持Spark 1.6.x, 很快会支持Spark 2.0。目前Fregata包括了Logistic Regression, Softmax, 和Random Decision Trees三中算法。

三种算法中Logistic Regression, Softmax可以看作一类广义线性的参数方法,其训练过程都依赖于凸优化方法。我们提出了Greedy Step Averaging[5]优化方法,在SGD优化方法基础上实现了学习率的自动调整,免去了调参的困扰,大量的实验证明采用GSA 优化方法的Logstic Regression和Softmax算法的收敛速度和稳定性都是非常不错的,在不同数据规模,不同维度规模和不同稀疏度的问题上都能取得很好的精度和收敛速度。

基于GSA优化方法,我们在Spark上实现了并行的Logistic Regression和Softmax算法,我们测试了很多公开数据集和我们自己的数据,发现在绝大部分数据上都能够扫描一遍数据即收敛。这就大大降低了IO开销和通信开销。

其中Logsitic Regression算法还有一个支持多组特征交叉的变种版本,其不同点是在训练过程中完成维度交叉,这样就不需要在数据准备过程中将多组特征维度预先交叉准备好,通常这意味着数据量级上的数据量膨胀,给数据存储和IO带来极大压力。而这种多组特征交叉的需求在计算广告和推荐系统中又是非常常见的,因此我们对此做了特别的支持。

而Random Decision Trees[6][7]算法是高效的非参数学习方法,可以处理分类,多标签分类,回归和多目标回归等问题。而且调参相对也是比较简单的。但是由于树结构本身比较复杂而庞大,使得并行比较困难,我们采用了一些Hash Trick使得对于二值特征的数据可以做到扫描一遍即完成训练,并且在训练过程中对内存消耗很少。

总结起来,Fregata的优点就两个,第一是速度快,第二是算法无需调参或者调参相对简单。这两个优点降低了减少了计算资源的消耗,提高了效率,同时也降低了对机器学习工程师的要求,提高了他们的工作效率。

GSA算法介绍
GSA算法是我们最近提出的梯度型随机优化算法,是Fregata采用的核心优化方法。它是基于随机梯度下降法(SGD)的一种改进:保持了SGD易于实现,内存开销小,便于处理大规模训练样本的优势,同时免去了SGD不得不人为调整学习率参数的麻烦。

事实上,最近几年关于SGD算法的步长选取问题也有一些相关工作,像Adagrad, Adadelta, Adam等。但这些方法所声称的自适应步长策略其实是把算法对学习率的敏感转移到了其他参数上面,并未从本质上解决调参的问题,而且他们也引入了额外的存储开销。GSA和这些算法相比更加轻量级,易于实现且易于并行,比起SGD没有额外的内存开销,而且真正做到了不依赖任何参数。



我们把GSA算法应用于Logistic回归和Softmax回归,对libsvm上16个不同类型规模不等的数据集,和SGD,Adadelta,SCSG(SVRG的变种)这些目前流行的随机优化算法做了对比实验。结果显示,GSA算法在无需调任何参数的情况下,和其他算法做参数调优后的最佳表现不相上下。此外,GSA比起这些流行的方法在计算速度和内存开销方面也有一定的优势。

GSA算法的核心原理非常简单:在迭代的每一步对单个样本的损失函数做线搜索。具体来说,我们对逻辑回归和softmax回归的交叉熵损失函数,推导出了一套仅用当前样本点的梯度信息来计算精确线搜索步长的近似公式。我们把利用这套近似公式得到的步长做时间平均来计算当前迭代步的学习率。这样做有两方面的好处:基于精确线搜索得到的步长包含了当前迭代点到全局极小的距离信息——接近收敛时步长比较小,反之则更大,因而保证收敛速度;另一方面平均策略使算法对离群点更鲁棒,损失下降曲线不至剧烈抖动,为算法带来了额外的稳定性。

GSA算法Spark上的并行化实现
GSA算法是基本的优化方法,在Spark上还需要考虑算法并行化的问题。机器学习算法的并行化有两种方式,一种是数据并行,另一种是模型并行。但是Spark只能支持数据并行,因为模型并行会产生大量细粒度的节点间通信开销,这是Spark采用的BSP同步模式无法高效处理的。

数据并行模式下进行机器学习算法的并行化又有三种方法,分别是梯度平均,模型平均,以及结果平均。梯度平均是在各个数据分片上计算当前的梯度更新量然后汇总平均各分片上的梯度更新量总体更新模型。模型平均是各分片训练自己的模型,然后再将模型汇总平均获得一个总体的模型。而结果平均实际上就是Ensemble Learning, 在大规模问题上因为模型规模的问题,并不是一个好的选择。

实际上是目前采用得最多的是梯度平均,当前Parameter Server各种实现上主要还是用来支持这种方式,Spark MLLib的算法实现也是采用的该方式。但是在Spark上采用梯度平均在效率上也有比较大的瓶颈,因该方法计算当前的梯度更新量是要依赖于当前的最新模型的,这就带来了在各数据分片之间频繁的模型同步开销,这对Map Reuce计算模式的压力是较大的。

模型平均一直被认为其收敛性在理论上是没有保证的,但是最近Rosenblatt[8]等人证明了模型平均的收敛性。而我们在大量的测试中,也发现模型平均通常能取得非常好的模型精度。考虑到模型平均的计算模式更适合Map Reduce计算模型,我们在Fregata中对于GSA算法的并行方法采用的就是模型平均方法。模型平均的并行方法中,每个数据分片在Map阶段训练自己的模型,最后通过Reduce操作对各个分片上的模型进行平均,扫描一次数据仅需要做一次模型同步。而且在大量的实验中,该方法在扫描一次数据后,模型的精度就可达到很高的水平,基本接近于更多次迭代后的最好结果。

Fregata与MLLib对比
Fregata是基于Spark的机器学习算法库,因此与Spark内置算法库MLLib具有很高的可比性。我们这里简要介绍了三个数据集,两种算法(Logistic Regression和Softmax)上的精度和训练时间对比。精度指标我们采用的是测试集的AUC。对于精度和训练时间,算法每扫描完一次数据记录一次。

Fregata的算法不需要调参,因此我们都只做了一次实验。而对于MLLib上的算法,我们在各种参数组合(包括优化方法的选择)中进行了网格搜索,选取了测试集AUC能达到最高的那组参数作为对比结果。

Lookalike是一个基于Fregata平台运用比较成熟的服务,其目标在于根据种子人群进行人群放大以寻找潜在客户。我们将Lookalike作为二分类问题来处理,因此可以采用Logistic Regression算法来处理。在训练模型时以种子人群为正样本,其他为负样本,通常种子人群的数量不会很多,因此Lookalike通常是正样本比例非常少的class imblance问题。 在一个大规模数据集(4亿样本,2千万个特征)上的Lookalike问题的模型训练中,我们对比了Fregata LR和MLLib LR的性能。



从图4中可以看到Fregata的LR算法扫描一次数据即收敛达到AUC(测试集上)的最高值0.93。在这个数据样本中 而MLLib的LR算法,即使我们通过调参选取了最好的AUC结果,其AUC也仅为0.55左右。模型预测精度差别非常大。另外,MLLib的训练时间(达到最高精度的时间)也是Fregata大的6倍以上。

在公开数据集eplison[9]上(40万训练集,2000特征), Fregata LR无论从收敛速度还是模型效果与MLLib LR相比也有较大的优势。从图5中可以看到,在这个数据集上Fregata LR在迭代一次以后就在测试集上非常接近最好的结果了,而MLLib LR需要5次迭代而且最高的精度比Fregata LR相差很大,而训练时间MLLib LR也是Fregata LR的5倍以上。



图 6

另外图6展示了Fregata LR与MLLib LR在6个不同问题上的测试集AUC曲线,可以看到Fregata LR算法在不同问题上收敛速度和稳定性相较于MLLib LR都是有较大的优势。Fregata LR在第一次迭代后,AUC就已经基本收敛,即使与最高值还有一些差距,但是也是非常接近了。

我们也在公开数据集MNIST上测试了Softmax算法。 从图7中可以看到, Fregata Softmax也是一次扫描数据后在测试集上的AUC就非常接近最好的结果, 而MLLib Softmax需要扫描数据多达40多次以后才接近Fregata Softmax一次扫描数据的结果。对比两个算法在达到各自最优结果所花的时间,MLLib Softmax是Fregata Softmax的50倍以上。



Fregata的使用简介
前面简要介绍了Fregata算法库涉及到的一些技术原理和性能对比,我们再来看看Fregata的使用方式。可以通过3种不同的方式来获取Fregata如果使用Maven来管理工程,则可以通过添加如下代码在pom.xml中进行引入
  <dependency>
       <groupId>com.talkingdata.fregata</groupId>
        <artifactId>core</artifactId>
        <version>0.0.1</version>
    </dependency>
    <dependency>
        <groupId>com.talkingdata.fregata</groupId>
        <artifactId>spark</artifactId>
        <version>0.0.1</version>
    </dependency>

如果使用SBT来管理工程,则可以通过如下代码在build.sbt中进行引入,
// 如果手动部署到本地maven仓库,请将下行注释打开
    // resolvers += Resolver.mavenLocal
    libraryDependencies += "com.talkingdata.fregata" % "core" % "0.0.1"
    libraryDependencies += "com.talkingdata.fregata" % "spark" % "0.0.1"

如果希望手动部署到本地maven仓库,可以通过在命令中执行如下命令来完成:
git clone https://github.com/TalkingData/Fregata.git
cd Fregata
mvn clean package install

接下来,让我们以Logistic Regression为例来看看如何快速使用Fregata完成分类任务:

1.引入所需包
import fregata.spark.data.LibSvmReader
import fregata.spark.metrics.classification.{AreaUnderRoc, Accuracy}
import fregata.spark.model.classification.LogisticRegression
import org.apache.spark.{SparkConf, SparkContext}

2.通过Fregata的LibSvmReader接口加载训练及测试数据集,训练及测试数据集为标准LibSvm格式,可参照[10]
val (_, trainData)  = LibSvmReader.read(sc, trainPath, numFeatures.toInt)
    val (_, testData)  = LibSvmReader.read(sc, testPath, numFeatures.toInt)

3.针对训练样本训练Logsitic Regression 模型
val model = LogisticRegression.run(trainData)

4.基于已经训练完毕的模型对测试样本进行预测
val pd = model.classPredict(testData)

5.通过Fregata内置指标评价模型效果
val auc = AreaUnderRoc.of( pd.map{
      case ((x,l),(p,c)) =>
        p -> l
    })

在Fregata中,使用breeze.linalg.Vector[Double]来存储一个样本的特征,如果数据格式已经是LibSvm,则只需通过Fregata内部的接口LibSvmReader.read(…)来加载即可。否则,可以采用如下的方法将代表实例的一组数据封装成breeze.linalg.Vector[Double]即可放入模型中进行训练及测试。
// indices  Array类型,下标从0开始,保存不为0的数据下标
// values  Array类型, 保存相应于indices中对应下标的数据值
// length  Int类型,为样本总特征数
// label   Double类型,为样本的标签。如果是测试数据,则不需该字段
sc.textFile(input).map{
val indicies  = ...
val values   = ...
val label    = ...
...
(new SparseVector(indices, values, length).asInstanceOf[Vector], asNum(label))
}

Freagata的发展目标
Fregata目前集成的算法还不多,未来还会继续扩充更多的高效的大规模机器学习算法。Fregata项目追求的目标有3个:轻量级,高性能,易使用。

轻量级是指Fregata将尽可能在标准Spark版本上实现算法,不另外搭建计算系统,使得Fregata能够非常容易的在标准Spark版本上使用。虽然Spark有一些固有的限制,比如对模型规模的限制,但是作为目前大数据处理的基础工具,Fregata对其的支持能够大大降低大规模机器学习的应用门槛。毕竟另外搭建一套专用大规模机器学习计算平台,并整合到整个大数据处理平台和流程中,其成本和复杂性也是不可忽视的。

高性能就是坚持高精度和高效率并举的目标,尽可能从算法上和工程实现上将算法的精度和效率推到极致,使得大规模机器学习算法从笨重的牛刀变成轻快的匕首。目前对Fregata一个比较大的限制就是模型规模的问题,这是基于Spark天生带来的劣势。未来会采用一些模型压缩的方法来缓解这个问题。

易使用也是Fregata追求的一个目标,其中最重要的一点就是降低调参的难度。目前的三个算法中有两个是免调参的,另一个也是相对来说调参比较友好的算法。降低了调参的难度,甚至是免去了调参的问题,将大大降低模型应用的难度和成本,提高工作效率。

另一方面我们也会考虑某些常用场景下的特殊需求,比如LR算法的特征交叉需求。虽然通用的LR算法效率已经很高,但是对于特征交叉这种常见需求,如果不把特征交叉这个过程耦合到算法中去,就需要预先将特征交叉好,这会带来巨大的IO开销。而算法实现了对特征交叉的支持,就规避了这个效率瓶颈。未来在集成更多的算法的同时,也会考虑各种常用的场景需要特殊处理的方式。

Fregata项目名称的中文是军舰鸟,TalkingData的开源项目命名都是用的鸟名,而军舰鸟是世界上飞得最快的鸟,最高时速达到418km/小时,体重最大1.5公斤,而翼展能够达到2.3米,在全球分布也很广泛。我们希望Fregata项目能够像军舰鸟一样,体量轻盈,但是能够支持大规模,高效的机器学习,而且具有很强的适用性。目前Fregata还是只雏鸟, 期望未来能够成长为一只展翅翱翔的猛禽。

引用
[1] Cheng T. Chu, Sang K. Kim, Yi A. Lin, Yuanyuan Yu, Gary R. Bradski, Andrew Y. Ng, Kunle Olukotun, Map-Reduce for Machine Learning on Multicore, NIPS, 2006.
[2] https://www.zhihu.com/question/48282030
[3] https://github.com/TalkingData/Fregata
[4] http://arxiv.org/abs/1611.03608
[5] http://www.ibm.com/developerworks/cn/analytics/library/ba-1603-random-decisiontree-algorithm-1/index.html
[6] http://www.ibm.com/developerworks/cn/analytics/library/ba-1603-random-decisiontree-algorithm-2/index.html
[7] Rosenblatt J D, Nadler B. On the optimality of averaging in distributed statistical learning[J]. Information and Inference, 2016: iaw013 MLA
[8] https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary.html#epsilon
[9] https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/
  • 大小: 16 KB
  • 大小: 23.9 KB
  • 大小: 35.8 KB
  • 大小: 24 KB
  • 大小: 25.3 KB
  • 大小: 14.9 KB
0
1
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 轻量级大规模机器学习算法库Fregata.zip

    Fregata 是一个基于 Apache Spark 的轻量级、超快速、大规模的机器学习库,并在 Scala 中提供了高级 API。特性更准确:对于各种问题,Fregata 可以实现比 MLLib 更高的精度。更快速:对于广义线性模型,Fregata 在绝...

  • mllib调参 spark_轻量级大规模机器学习算法库Fregata开源:快速,无需调参

    轻量级大规模机器学习算法库Fregata.zipFregata 是一个基于 Apache Spark 的轻量级、超快速、大规模的机器学习库,并在 Scala 中提供了高级 API。特性更准确:对于各种问题,Fregata 可以实现比 MLLib 更【CSDN AI ...

  • [转]轻量级大规模机器学习算法库Fregata开源

    轻量级大规模机器学习算法库Fregata开源:快速,无需调参 http://geek.csdn.net/news/detail/129806作者:张夏天,TalkingData首席数据科学家。12年大规模机器学习和数据挖掘经验,对推荐系统、计算广告、大规模...

  • Fregata 机器学习算法库开源:快速,无需调参

    大规模机器学习的挑战 随着互联网,移动互联网的兴起,可以获取的数据变得越来越多,也越来越丰富。数据资源的丰富,给机器学习带来了越来越多,越来越大创造价值的机会。 机器学习在计算广告,推荐系统这些价值上...

  • 【CSDN AI 周刊】No. 004 | 2017年深度学习十大趋势预测

    若您有希望与业界分享的AI实施案例、资料整理、学习笔记、趣闻妙谈,请发送邮件至wangyi@csdn.net,期待您的声音。2017年深度学习十大趋势预测本文作者曾经多次预测了技术发展的趋势,最近的一次预测是“2011年软件...

  • 2016年大数据80篇爆款文章:这一年你追过的那些技术

    回过头来我们看看这一年的脚印,这里我按照文章内容做了一次汇总,分为:流处理、机器学习、用户画像、数据驱动、Hadoop、Apache Spark、Apache Kylin、Druid、推荐系统和大数据平台架构。 流处理 2016年流式...

  • 开源大数据周刊-第34期

    摘要: 阿里云E-MapReduce实践 使用E-MapReduce服务处理阿里云文件存储(NAS)的数据 文件存储是阿里云今年新推出的存储服务,因为它提供标准的文件访问协议,用户无需对现有应用做任何修改,即可使用具备无限容量...

  • 2017年深度学习十大趋势预测

    2017年深度学习十大趋势预测 本文作者曾经多次预测了技术发展的趋势,最近的一次预测是“2011年软件发展的趋势与预测”。10项预言中,准确地命中了6项,比如JavaScript VM、NoSQL、大数据分析、私有云、Scala...

  • ArchSummit2016干货分享+美团:即时物流调度平台实践+一点资讯:兴趣引擎-深度融合搜索和推荐+阿里-智能问答系统的实践

    ThinkData:Fregata- Spark上的轻量级大规模机器学习算法库 已开源: https://github.com/TalkingData/Fregata 基于Spark实现的分布式机器学习算法库,目前只有几个基础的模型(LR、softmax、RDT),声称相比MLlib...

  • go 生成基于 graphql 服务器库.zip

    格奇尔根 首页 > 文件 > gqlgen是什么?gqlgen是一个 Go 库,用于轻松构建 GraphQL 服务器。gqlgen 基于 Schema 优先方法— 您可以使用 GraphQL Schema 定义语言来定义您的 API 。gqlgen 优先考虑类型安全— 您永远不应该看到map[string]interface{}这里。gqlgen 启用 Codegen — 我们生成无聊的部分,以便您可以专注于快速构建您的应用程序。还不太确定如何使用gqlgen?将gqlgen与其他 Go graphql实现进行比较快速启动初始化一个新的 go 模块mkdir examplecd examplego mod init example添加github.com/99designs/gqlgen到项目的 tools.goprintf '//go:build tools\npackage tools\nimport (_ "github.com/99designs/gqlgen"\n _ "github.com/99designs/gqlgen

  • 基于JAVA+SpringBoot+Vue+MySQL的社区物资交易互助平台 源码+数据库+论文(高分毕业设计).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:maven 数据库工具:navicat

  • 法研杯2021类案检索赛道三等奖方案源码+项目说明+数据.zip

    法研杯2021类案检索赛道三等奖方案源码+项目说明+数据.zip是一个专为计算机相关专业(如计科、信息安全、数据科学与大数据技术等)学生设计的宝贵学习资源。该压缩包包含了完整的项目源码、详细的项目说明文档以及用于训练和测试的数据集,旨在帮助参赛者深入理解并掌握类案检索的相关技术和方法。该项目通过实际案例,展示了如何运用自然语言处理和机器学习技术对法律案件进行智能检索和匹配。项目内容涵盖了从数据预处理、特征提取到模型训练和评估的全过程,为学习和研究类案检索技术提供了全面的参考。本项目不仅适合作为课程设计、期末大作业或毕设项目的参考,也是企业员工提升技能、进行实践操作的优质学习资料。通过实际操作和学习该项目,用户可以加深对类案检索技术的理解,并在实践中不断提升自己的技能水平。请注意,由于该资源包含完整的项目源码和数据集,下载和使用时请确保遵守相关法律法规和道德规范,尊重知识产权和隐私权。同时,建议用户在使用前仔细阅读项目说明文档,了解项目的整体架构和使用方法,以便更好地利用该资源进行学习和研究。

  • 基于Cesium实现的对倾斜摄影模型的单体化分层方案源码.zip

    本资源提供了基于Cesium实现的倾斜摄影模型单体化分层方案的完整源码,旨在帮助开发者深入理解并实践三维地理空间数据的处理与展示。通过Cesium平台,用户能够将倾斜摄影获取的高精度三维模型进行单体化和分层处理,实现对模型中每个独立元素的精细管理和交互操作。该资源适合具备一定计算机编程基础的学习者,特别是对Cesium感兴趣的学生、研究人员及GIS行业从业者。通过下载并学习这些源码,用户可以掌握倾斜摄影模型在Cesium中的加载、单体化以及分层显示等关键技术,进而提升自己在三维地理信息系统开发领域的技能水平。

  • Go 的 PostgreSQL 驱动程序和工具包.zip

    Go 的 PostgreSQL 驱动程序和工具包 pgx - PostgreSQL 驱动程序和工具包pgx 是 PostgreSQL 的纯 Go 驱动程序和工具包。pgx 驱动程序是一个低级、高性能接口,它公开了 PostgreSQL 特定的功能,例如LISTEN/ NOTIFY和COPY。它还包括一个标准database/sql接口的适配器。工具包组件是一组相关的软件包,用于实现 PostgreSQL 功能,例如解析线路协议以及 PostgreSQL 与 Go 之间的类型映射。这些底层软件包可用于实现替代驱动程序、代理、负载均衡器、逻辑复制客户端等。示例用法package mainimport ( "context" "fmt" "os" "github.com/jackc/pgx/v5")func main() { // urlExample := "postgres://username:password@localhost:5432/database_name" conn, err := pgx.Connect(context.B

  • C#ASP.NET中小型超市管理系统源码数据库 SQL2012源码类型 WinForm

    ASP.NET中小型超市管理系统源码 超市管理系统是专门为中小型超市打造的管理系统,可以方便管理时更加准确清晰的查看商品信息, 仓库出售与进货的信息,还有每一个部门员工的信息,也更加直观的体现出每一阶段的商品销售情况; 从而提高项目管理水平,实现了工作的协同化、提高了工作效率 二、功能介绍 1.1 UI Requirements界面要求 (1)界面美观,给用户一种很舒心的感觉。 (2)界面所体现出的功能清晰明了,让用户一目了然。 (3)界面的背景颜色搭配符合超市管理系统界面的设计理念。 1.2 UI Requirements界面要求 (1) 使用ADO.NET与数据库交互制作 (2) 使用Visual Studio设计窗体布局 (3) 使用提供的用控件快速开发 1.3 Development Environment 开发环境 (1) 开发工具:Visua

  • 毕设&课程作业_基于C#的易知仓库管理系统.zip

    计算机系毕业设计

  • Go 编程教程的主列表、其撰写、其源代码以及其当前构建状态!.zip

    教程边缘TutorialEdge.net Go 教程 ‍‍欢迎来到 TutorialEdge Go 存储库!此 repo 的目标是能够跟踪所有 Go 教程及其各自的 github repo 位置和构建状态。这些将在 Go 最新版本发布时更新和运行。目录初学者教程中级教程高级教程DevOps项目数据格式并发教程挑战初学者教程这些教程主要针对那些希望提高对 Go 语言工作原理的基本理解的语言新手!教程标题 教程边缘 Github 构建状态 更新日期01 - Go 入门 阅读教程 TutorialEdge/getting-started-with-go 不适用02 - Go 基本类型教程 阅读教程 TutorialEdge/go-basic-types-tutorial 不适用03 - Go 复合类型教程 阅读教程 TutorialEdge/go-complex-types-tutorial 不适用04 - Go 函数教程 阅读教程 TutorialEdge/go-functions-tutorial 2019 年 3 月 27 日

  • 基于JAVA+SpringBoot+Vue+MySQL的敬老院管理系统 源码+数据库(高分毕业设计).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:maven 数据库工具:navicat

  • 基于LSB实现对水印图片,文字等信息的隐藏隐写和提取的DEMO源码(功能包括嵌入水印,提取水印等).zip

    本资源是一个基于LSB(最低有效位)算法实现的水印图片和文字信息隐藏与提取的DEMO源码。该源码展示了如何将水印图片或文字信息嵌入到宿主图像中,以及如何从宿主图像中提取出隐藏的信息。功能包括嵌入水印和提取水印等操作。通过使用LSB算法,该源码实现了对水印图片和文字信息的隐写和提取。LSB算法是一种常用的图像处理技术,通过修改图像的最低有效位来嵌入额外的信息。在嵌入过程中,源码将水印图片或文字信息转换为二进制数据,并将其嵌入到宿主图像的像素值中。在提取过程中,源码从宿主图像中读取嵌入的二进制数据,并将其转换回原始的水印图片或文字信息。本资源适用于学习和研究图像隐写术的相关领域。通过阅读和运行该源码,用户可以了解LSB算法的原理和应用,掌握如何在图像中隐藏和提取水印图片和文字信息的方法。请注意,本资源仅供学习使用,不得用于任何非法用途。

  • 毕设&课程作业_基于C#的和SQLServer2014的学生成绩管理系统 .zip

    计算机系毕业设计

Global site tag (gtag.js) - Google Analytics