首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Scala 高阶(九):Scala中的模式匹配

Scala 高阶(九):Scala中的模式匹配

作者头像
百思不得小赵
发布于 2022-12-01 06:47:58
发布于 2022-12-01 06:47:58
2.1K00
代码可运行
举报
文章被收录于专栏:小赵Java总结小赵Java总结
运行总次数:0
代码可运行

大家好,我是百思不得小赵。

创作时间:2022 年 7 月 21 日 博客主页: 🔍点此进入博客主页 —— 新时代的农民工 🙊 —— 换一种思维逻辑去看待这个世界 👀


文章目录


本次主要分享Scala中关于模式匹配的内容,Scala中的模式匹配类似于Java中的switch语法,但是Scala在基于Java的思想上补充了特有的功能。

一、概述

基本语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
value match {
    case caseVal1 => returnVal1
    case caseVal2 => returnVal2
    ...
    case _ => defaultVal
}

模式匹配语法中,采用 match 关键字声明,每个分支采用 case 关键字进行声明,当需 要匹配时,会从第一个 case 分支开始,如果匹配成功,那么执行对应的逻辑代码,如果匹 配不成功,继续执行下一个分支进行判断。如果所有 case 都不匹配,那么会执行 case _分支,类似于 Java 中 default 语句。

举个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  val x: Int = 2
    val y: String = x match {
      case 1 => "one"
      case 2 => "two"
      case 3 => "three"
      case _ => "other"
    }

第二个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // 示例:使用模式匹配实现简单的二元运算
    val a = 25
    val b = 21

    def matchOualop(op: Char) = op match {
      case '+' => a + b
      case '-' => a - b
      case '*' => a * b
      case '/' => a / b
      case _ => "非法运算"
    }

    println(matchOualop('+'))
    println(matchOualop('-'))
    println(matchOualop('\\'))
  • 如果所有 case 都不匹配,那么会执行 case _ 分支,类似于 Java 中 default 语句,若此时没有 case _ 分支,那么会抛出 MatchError
  • 每个 case 中,不需要使用 break 语句,自动中断 case
  • match case 语句可以匹配任何类型,而不只是字面量。
  • => 后面的代码块,直到下一个 case 语句之前的代码是作为一个整体执行,可以使用{}括起来,也可以不括。

二、模式守卫

需要进行匹配某个范围的数据内容的时候,可以在模式匹配中进行模式守卫的操作,类似于for推倒式中的循环守卫。

举个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
object Test01_PatternMatchBase {
  def main(args: Array[String]): Unit = {
    // 模式守卫
    // 求一个整数的绝对值
    def abs(num: Int) = num match {
      case i if i >= 0 => i
      case i if i < 0 => -i
    }

    println(abs(11))
    println(abs(-11))
  }
}

三、模式匹配类型

Scala 中,模式匹配可以匹配所有的字面量,包括字符串,字符,数字,布尔值等等。

常量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // 匹配常量
    def describeConst(s: Any): String = s match {
      case 1 => "number 1"
      case "hello" => "String hello"
      case '+' => "+"
      case 's' => "Char s"
      case _ => ""
    }
    
    println(describeConst(1))
    println(describeConst('s'))
    println(describeConst(11))

类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	// 匹配类型
	 def deprecateType(x: Any): String = x match {
	      case i: Int => "int" + i
	      case s: String => "String" + s
	      case list: List[String] => "list" + list
	      case array: Array[Int] => "Array[Int]" + array.mkString("-")
	      case a => "Something type"
	    }

    println(deprecateType(23))
    println(deprecateType("12"))
    println(deprecateType(List("mi", "hao")))
    println(deprecateType(List(12, 21)))

数组

对于数组可以定义多种匹配形式,可以定义模糊的元素类型匹配、元素数量匹配或者精确的某个数组元素值匹配

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	// 匹配数组
    for (arr <- List(
      Array(0),
      Array(1, 0),
      Array(0, 1, 0),
      Array(1, 1, 0),
      Array(12, 21, 34, 32),
      Array("hello", 34, 32),
    )) {
      val result = arr match {
        case Array(0) => "0"
        case Array(1, 0) => "Array(1,0)"
        case Array(x, y) => "Array:" + x + ", " + y
        case Array(0, _*) => "以0开头的数组"
        case Array(x, 1, y) => "中间为1 的三元数组"
        case _ => "something else"
      }
    }

列表

使用::运算符匹配first :: second :: rest,将一个列表拆成三份,第一个第二个元素和剩余元素构成的列表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // 匹配列表 方式一
    for (list <- List(
      List(0),
      List(1, 0),
      List(0, 0, 0),
      List(1, 1, 0),
      List(999)
    )) {
      val result = list match {
        case List(0) => "0"
        case List(x, y) => "list:" + x + ", " + y
        case List(0, _*) => "以0开头的list"
        case List(a) => "list(a)" + a
        case _ => "something else"
      }
    }

    // 方式二
    val list = List(1, 34, 3, 2, 3, 2, 3, 6)
    list match {
      case first :: second :: rest => println(s"first:$first second: $second rest: $rest")
      case _ => "something else"
    }

元组

可以匹配n元组、匹配元素类型、匹配元素值。如果只关心某个元素,其他就可以用通配符或变量。元组大小固定,所以不能用_*

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // 元组类型
    for (tuple <- List(
      (0, 1),
      (0, 1),
      (0, 1, 0),
      (0, 1, 1),
      ("hello", true, 0.5)
    )) {
      val result = tuple match {
        case (a,b) => " "+ a + ", " +b
        case (0,_) => "(0,_)"
        case (a,1,_) => "(a,1,_)" + a
        case (x,y,z) => "(x,y,z)"
        case _ => "something else"
      }
    }

对象及样例类

匹配对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
object Test04_MathObject {
  def main(args: Array[String]): Unit = {
    val student = new Student("alice", 15)

    //针对对象的实例进行匹配
    val result = student match {
      case Student("alice", 15) => "alice, 15"
      case _ => "else"
    }
  }
}

class Student(val name: String, val age: Int)

object Student {
  def apply(name: String, age: Int): Student = new Student(name, age)

  // 实现unapply
  def unapply(student: Student): Option[(String, Int)] = {
    if (student == null){
      None
    } else{
      Some(student.name,student.age)
    }
  }
}
  • 当将 Student("alice", 15))写在 case 后时 case Student("alice", 15) => "alice, 20",会默认调用 unapply 方法(对象提取器),student 作为 unapply 方法的参数,unapply 方法将 student 对象的 nameage 属性提取出来,与 Student("alice", 15)) 中的属性值进行匹配
  • case 中对象的 unapply 方法(提取器)返回 Some,且所有属性均一致,才算匹配成功, 属性不一致,或返回 None,则匹配失败。
  • 若只提取对象的一个属性,则提取器为 unapply(obj:Obj):Option[T]
  • 若提取对象的多个属性,则提取器为 unapply(obj:Obj):Option[(T1,T2,T3…)]
  • 若提取对象的可变个属性,则提取器为 unapplySeq(obj:Obj):Option[Seq[T]]

样例类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
case class 类名 (参数1,参数2......)
  • 样例类仍然是类,和普通类相比,只是其自动生成了伴生对象,并且伴生对象中自动提供了一些常用的方法,如 apply、unapply、toString、equals、hashCodecopy
  • 样例类是为模式匹配而优化的类,因为其默认提供了 unapply 方法,因此,样例类可以直接使用模式匹配,而无需自己实现 unapply 方法。
  • 构造器中的每一个参数都成为 val修饰的变量
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
object Test_MatchCaseClass {
  def main(args: Array[String]): Unit = {
    val student = Student("alice", 15)

    val result = student1 match {
      case Student("alice", 15) => "alice, 20"
      case _ => "else"
    }
    println(result)
  }
}

case class Student(name: String, age: Int)

四、声明变量中的模式匹配

变量声明也可以是一个模式匹配的过程。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
object Test_MathTupleExtend {
  def main(args: Array[String]): Unit = {
    // 1.在变量声明时匹配
    val (x,y) = (10,"hello")
    println(s"$x $y")
    val List(first,second,_*) = List(12,21,21,21,34)
    println(s"$first $second ")

    val fir :: sec :: res =List(12,21,34)
    println(s"$fir $sec $res")
  }
}

五、for表达式模式匹配

  • 元组中取元素时,必须用_1 _2 …,可以用元组赋值将元素赋给变量
  • 指定特定元素的值,可以实现类似于循环守卫的功能
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
object TestMatchFor {
	 def main(args: Array[String]): Unit = {
		 val map = Map("A" -> 1, "B" -> 0, "C" -> 3)
		 // //直接将 map 中的 k-v 遍历出来
		 for ((k, v) <- map) { 
		 	println(k + " -> " + v) //3 个
		 }

		 //遍历 value=0 的 k-v ,如果 v 不是 0,过滤
		 for ((k, 0) <- map) {
			 println(k + " --> " + 0) // B->0
		 }

		 //if v == 0 是一个过滤的条件
		 for ((k, v) <- map if v >= 1) {
			 println(k + " ---> " + v) // A->1 和 c->33
		 }
	 } 
 }

六、偏函数模式匹配

  • 偏函数也是函数的一种,通过偏函数我们可以方便的对输入参数做更精确的检查。例如该偏函数的输入类型为List[Int],、需要的是第一个元素是 0 的集合,这就是通过模式匹配实现的。

偏函数定义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val second: PartialFunction[List[Int], Option[Int]] = {
 case x :: y :: _ => Some(y)
}
  • second:偏函数名称
  • PartialFunction[List[Int], Option[Int]]: 偏函数类型
  • 该偏函数的功能是返回输入的 List 集合的第二个元素

举个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
object Test_PartialFunction {
  def main(args: Array[String]): Unit = {
    val list = List(("a,", 12), ("b", 34), ("c", 45))

    // map转换 key不变 value两倍
    val newList = list.map(tuple => (tuple._1, tuple._2 * 2))

    // 模式匹配 对元素元素赋值
    val newList2 = list.map(
      tuple => {
        tuple match {
          case (word, count) => (word, count * 2)
        }
      }
    )

    // 省略lambda表达式 表示偏函数
    val newList3 = list.map {
      case (word, count) => (word, count * 2)
    }

    // 函数应用 求绝对值
    val positiveAbs: PartialFunction[Int, Int] = {
      case x if x >= 0 => x
    }

    val pnegativeAbs: PartialFunction[Int, Int] = {
      case x if x < 0 => -x
    }

    def abs(x: Int): Int= (positiveAbs orElse pnegativeAbs)(x)

    println(abs(21))
  }
}

本次Scala中的模式匹配部分到这里就结束了,知识点较为简单但是使用起来特别的灵活,希望对大家有所帮助!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一个1024的MLP,击败了几乎所有的GNN模型
每天给你送来NLP技术干货! ---- 整理:图神经网络与推荐系统 近些年,一些NLP研究者尝试利用GNN来做一些NLP相关的任务。但是,ACL2022一篇论文的实验结果:一个1024的MLP,击败了几乎所有的GNN模型。 上述结论来自"Bag-of-Words vs. Graph vs. Sequence in Text Classification: Questioning the Necessity of Text-Graphs and the Surprising Strength of a Wid
zenRRan
2022/09/06
5180
一个1024的MLP,击败了几乎所有的GNN模型
COLING2022 | 少样本NER:分散分布原型增强的实体级原型网络
每天给你送来NLP技术干货! ---- 来自:AI Station 论文标题: Few-shot Named Entity Recognition with Entity-level Prototypical Network Enhanced by Dispersedly Distributed Prototypes 作者单位:国防科技大学 论文链接:https://arxiv.org/abs/2208.08023 01 — 方法介绍 Few-shot NER的三阶段:Train、Adapt、Recog
zenRRan
2022/08/26
3890
COLING2022 | 少样本NER:分散分布原型增强的实体级原型网络
NAACL2022 | 具有元重加权的鲁棒自增强命名实体识别技术
每天给你送来NLP技术干货! ---- ©作者 | 回亭风 单位 | 北京邮电大学 研究方向 | 自然语言理解 编辑 | PaperWeekly 自增强(self-augmentation)最近在提升低资源场景下的 NER 问题中得到了越来越多的关注,token 替换和表征混合是对于 NER 这类 token 级别的任务很有效的两种自增强方法。值得注意的是,自增强的方法得到的增强数据有潜在的噪声,先前的研究是对于特定的自增强方法设计特定的基于规则的约束来降低噪声。 本文提出了一个联合的 meta-rewe
zenRRan
2022/08/26
5450
NAACL2022 | 具有元重加权的鲁棒自增强命名实体识别技术
NAACL22 | 引入多模态对比学习来增强句子特征学习
知乎:李加贝 方向:跨模态检索 论文:MCSE: Multimodal Contrastive Learning of Sentence Embeddings 链接:https://aclanthology.org/2022.naacl-main.436.pdf 代码:https://github.com/uds-lsv/MCSE 视觉作为人类感知体验的核心部分,已被证明在建立语言模型和提高各种NLP任务的性能方面是有效的。作者认为视觉作为辅助语义信息可以进一步促进句子表征学习。在这篇论文中,为了同时利用
zenRRan
2022/08/26
1.1K0
NAACL22 | 引入多模态对比学习来增强句子特征学习
深度学习刷SOTA有哪些trick?
每天给你送来NLP技术干货! ---- 作者:Gordon Lee (转载请联系作者) 链接:https://www.zhihu.com/people/gordon-lee 1. R-Drop:两次前向+KL loss约束 2. Post Training: 在领域语料上用mlm进一步预训练 3. EFL: 少样本下,把分类问题转为匹配问题,把输入构造为NSP任务形式. 4. 混合精度fp16: 加快训练速度,提高训练精度 5. 多卡ddp训练的时候,用到梯度累积时,可以使用no_sync减少不必要的梯度
zenRRan
2022/06/29
6760
深度学习刷SOTA有哪些trick?
生成式预训练模型之BART
每天给你送来NLP技术干货! ---- 写在前面 在文本理解任务(Natural Language Understanding)上,预训练模型已经取得了质的飞跃,语言模型预训练+下游任务fine-tune基本上已经成为标配。 很多人曾经尝试将 BERT 等预训练语言模型应用于文本生成任务(Natural Language Generation),然而结果并不理想。究其原因,是在于预训练阶段和下游任务阶段的差异。 BART这篇文章提出的是一种符合生成任务的预训练方法,BART的全称是Bidirectional
zenRRan
2022/08/31
3.1K0
生成式预训练模型之BART
ACL2022 | 序列标注的小样本NER:融合标签语义的双塔BERT模型
每天给你送来NLP技术干货! ---- 作者 | SinGaln 来自 | PaperWeekly 这是一篇来自于 ACL 2022 的文章,总体思想就是在 meta-learning 的基础上,采用双塔 BERT 模型分别来对文本字符和对应的label进行编码,并且将二者进行 Dot Product(点乘)得到的输出做一个分类的事情。文章总体也不复杂,涉及到的公式也很少,比较容易理解作者的思路。对于采用序列标注的方式做 NER 是个不错的思路。 论文标题: Label Semantics for Few
zenRRan
2022/07/12
8640
ACL2022 | 序列标注的小样本NER:融合标签语义的双塔BERT模型
天池竞赛 | 中医药领域的问题生成冠军方案
每天给你送来NLP技术干货! ----  排版:炼丹笔记 来源:数据派THU 问题生成任务需要我们根据篇章及对应的答案自动生成相应的问题,即“篇章+答案→问题”这样的流程。 训练集由三个字段(篇章、问题、答案)构成,测试集由两个字段(篇章、答案)构成,其中的问题字段需要我们生成。 根据以上分析,我们可以采用Seq2Seq模型来端到端地实现问题生成,而模型的输入为篇章和答案,输出为问题。 文本长度分布 篇章文本长度在100以下的数据较少,长度区间400-500的数据占比较大。 问题文本长度主要集中
zenRRan
2022/07/12
5770
天池竞赛 | 中医药领域的问题生成冠军方案
ACL2022 关系抽取相关论文泛读
每天给你送来NLP技术干货! ---- 写在前面 今天给大家分享的是是ACL 2022上与实体关系抽取相关的部门论文范读笔记。其中有一些小喵自己也在学习,后续会推出精读笔记。 1. DocRE 论文名称:《Document-Level Relation Extraction with Adaptive Focal Loss and Knowledge Distillation》 论文链接:https://aclanthology.org/2022.findings-acl.132.pdf 代码地址:htt
zenRRan
2022/08/31
2.4K0
ACL2022 关系抽取相关论文泛读
DiffCSE: 将Equivariant Contrastive Learning应用于句子特征学习
知乎:李加贝 方向:跨模态检索 来自:深度学习自然语言处理公众号 虽然不同的数据增强(随机裁剪、颜色抖动、旋转等)被发现对预训练视觉模型至关重要,但这种增强在应用于句子嵌入的对比学习时通常不成功。 之前的工作发现,通过简单的基于dropout的增强来构建正对,比基于同义词或掩码语言模型的单词删除或替换等更复杂的增强效果要好得多。虽然对比学习的训练目标鼓励特征对增强变换是不变的,但对输入的直接增强(如删除、替换)经常会改变句子的意义。也就是说,理想的句子嵌入不应该对这种转换保持不变。 以前的工作只是简单地将
zenRRan
2022/09/02
8450
DiffCSE: 将Equivariant Contrastive Learning应用于句子特征学习
为什么回归问题不能用Dropout?
知乎: Lukan 来源: https://zhuanlan.zhihu.com/p/561124500 最近在做一个nlp的回归任务,所以直接套用之前做分类问题的的代码,仅仅修改了下损失函数而已,结果发现验证损失一直在震荡,不收敛,但是别人的代码loss却能够稳定下降,最终下降到0.1左右,而我的只能却一直飘,最终只下降到0.14,如下图: 最后通过对比别人的代码,我发现其实就两行代码的差异: 这边把bert内部的dropout全部关掉了,于是我也尝试了这种做法,最终得到这样的一个loss,对比一下
zenRRan
2022/09/06
1.4K0
为什么回归问题不能用Dropout?
VLN: 基于全局对比训练的视觉-语言导航方法
每天给你送来NLP技术干货! ---- 来自:CAAI认知系统与信息处理专委会 视觉-语言导航任务(Vision-Language Navigation, VLN)是指在陌生环境中,无人系统依据语言指示和观测图像之间的跨模态匹配信息,进行自主智能路径导航的方法。不同于前进、后退等简单操控指令,VLN采用类似人人交互的语言指示,比如“走出右侧大门,穿过卧室和客厅,在绿色地毯上的餐桌旁停下”。VLN是一种新型的跨模态智能人机交互方法,能够极大地提升无人系统的自主能力,能够为无人系统走向实用提供关键技术支撑。 序
zenRRan
2022/07/18
1.7K0
VLN: 基于全局对比训练的视觉-语言导航方法
一篇非常好的transformer年度总结
每天给你送来NLP技术干货! ---- 作者:Xavier Amatriain 翻译: 炼丹小生(炼丹笔记) 很多人的“记忆”并没那么好,特别是对名字.这些年各种各样的transformer涌现出来,各有各的优势,但是他们的名字却不能直白的看出该版本的transformer到底做了什么.这篇的目的就是把所有流行的transformer进行清晰简单的分类,以便大家对transformer家族快速梳理 简介 Transformer是什么就不用多说了,2017年开始至今引用量将近4w的论文<Attention
zenRRan
2022/03/31
4720
一篇非常好的transformer年度总结
中文保险小样本多任务竞赛 - SmellSong团队方案
每天给你送来NLP技术干货! ---- 来自:世界AI创新大赛 2022年AIWIN世界人工智能创新大赛春季赛与太平洋保险、国泰君安、SMG技术中心(上海东方传媒技术有限公司)三家出题方联合举办了中文保险小样本多任务竞赛、发债企业的违约风险预警竞赛、文本语音驱动数字人表情口型竞赛三场AI算法技术赛事。目前中文保险小样本多任务竞赛、发债企业的违约风险预警竞赛已完成竞赛,为了让小伙伴们更好的通过赛事交流学习,在7-8月之间每周二,我们将陆续邀请优秀的赛事团队分享赛事方案,大家敬请期待。 今天分享的是“中文保
zenRRan
2022/09/06
7080
中文保险小样本多任务竞赛 - SmellSong团队方案
ACL2022 | 跨模态离散化表示学习:让不同的模态共享相同的词表
每天给你送来NLP技术干货! ---- 作者 | 朱耀明 单位 | 字节跳动人工智能实验室 研究方向 | 机器翻译 排版 | PaperWeekly 本文提出了一种自监督学习方法,让不同模态的数据可以被建模到同一个离散的细粒度表征中——即用一个类似词表的东西来建模跨模态的数据。作者认为用这种离散化的“词”可以提升跨模态检索的精度、并且让模型有更好的解释性。 论文标题: Cross-Modal Discrete Representation Learning 作者单位: MIT麻省理工学院 论文链接: h
zenRRan
2022/07/18
1.1K0
ACL2022 | 跨模态离散化表示学习:让不同的模态共享相同的词表
浅析 Softmax 与 LogSumExp
每天给你送来NLP技术干货! ---- 来自:AI算法小喵 写在前面 在神经网络中,假设网络模型的最后一层是使用 softmax 去得到一个概率分布,且损失函数使用的是 cross entropy loss (交叉熵损失),那我们就会遇到 LogSumExp(之后简称 LSE )。本文将对 LSE 的相关知识进行简要介绍。 1. 由来 假设我们有  个值的数据集 ,我们想要求  的值,应该如何计算?看上去这个问题可能比较奇怪,但实际上我们在神经网络中经常能碰到这个问题。 在神经网络中,假设我们的最后一层是使
zenRRan
2022/07/04
7750
浅析 Softmax 与 LogSumExp
ACL2022 | 分解的元学习小样本命名实体识别
每天给你送来NLP技术干货! ---- ©作者 | 回亭风 单位 | 北京邮电大学 研究方向 | 自然语言理解 来自 | PaperWeekly 论文标题: Decomposed Meta-Learning for Few-Shot Named Entity Recognition 论文链接: https://arxiv.org/abs/2204.05751 代码链接: https://github.com/microsoft/vert-papers/tree/master/papers/Decompos
zenRRan
2022/07/06
1.5K0
ACL2022 | 分解的元学习小样本命名实体识别
影响高端AI炼丹!英伟达、AMD断供高端GPU!
每天给你送来NLP技术干货! ---- 今天看到一条热搜:英伟达。 我以为是 RTX 40 系显卡的预热内容,想着距离把我饱经风霜的 2060 换掉又近了一步。 结果看到的是: 8月31日,全球两大 GPU 厂商 NVIDIA 和 AMD 均证实,已收到美国政府通知,即刻停止向中国出口旗下高端 AI 芯片。 图:英伟达向SEC提交的文件 NVIDIA(英伟达)8 月 31 日向美国证券交易委员会(SEC)提交的一份文件披露,美国政府于 8 月 26 日通知该公司,未来若要出口 A100 和 H100 芯片
zenRRan
2022/09/02
1.1K0
影响高端AI炼丹!英伟达、AMD断供高端GPU!
招聘 | 刘知远老师博士生涂存超博士创办的「幂律智能」招NLP算法工程师啦
每天给你送来NLP技术干货! ---- NLP算法工程师 职位描述 【岗位职责】 - 参与面向法律合同文本的NLP相关算法实现及代码框架搭建,如文本分类、序列标注、语义匹配等 - 在法律文本及相关数据上进行模型训练和测试,应用于相关产品,提升产品性能 - 跟进和调研学术界、业界新进展新技术,优化已有算法效果 职位要求 【岗位要求】 1. 拥有计算机专业本科及以上学历,在顶级NLP或AI相关会议或期刊发表论文者优先; 2. 有NLP、机器学习领域的理论基础和实践经验,掌握常见机器学习和深度学习基本算法;
zenRRan
2022/03/24
6170
未婚夫捐5亿美元给女PI,让她不用申请项目,招150位科学家,安心做科研!
每天给你送来NLP技术干货! ---- 内容来源:学之策(仅转载,不代表本号任何观点) 昨日,杜克大学电子与计算机工程系教授、ACM/IEEE Fellow 陈怡然在社交媒体上发布了一则消息,在各大科研微信群中广泛传播: 他表示,刚才听了一个八卦:某名校女PI的Billionaire未婚夫给她捐了五亿美元,让她可以以后再也不必担心申请项目,招150个科学家专心搞科研! 看到这则消息,正在对国基会评两眼一抹黑,焦急难耐等待8月开奖的我,先是震惊,然后不争气地流下了贫穷的泪水。 消息一出,引发了科研人(吃瓜
zenRRan
2022/07/06
5600
未婚夫捐5亿美元给女PI,让她不用申请项目,招150位科学家,安心做科研!
推荐阅读
相关推荐
一个1024的MLP,击败了几乎所有的GNN模型
更多 >
交个朋友
加入[腾讯云] DeepSeek开发者交流群
前沿技术深度讨论 发展开发者人脉圈
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档