首页
学习
活动
专区
圈层
工具
发布

NLP中对困惑度感到困惑?

炼丹笔记干货 作者:时晴 困惑度(Perplexity)在NLP中是个最流行的评估指标,它用于评估语言模型学的到底有多好.但是很多炼丹师可能至今对"困惑度"依然感到困惑,这篇就把这个讲清楚.假设我们要做个对话机器人...那就是困惑度了,它衡量了模型对自己预估结果的不确定性.低困惑度说明模型对自己很自信,但是不一定准确,但是又和最后任务的表现紧密相关.然后它又计算起来非常简单,用概率分布就可以计算. 困惑度如何算?...低困惑度不能保证模型更好.首先,正如我们在计算部分所看到的,模型最糟糕的困惑度是由语言的词汇量决定的。...第二,也是更重要的一点,困惑和所有内部评估一样,不提供任何形式的理智检查,同困惑度的模型也是有好有坏的。...困惑度应用 当使用“困惑”来评估在真实世界数据集(如one billion word benchmark)上训练的模型时,可以看到类似的问题。

1.4K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    UnPeek-LiveData

    UnPeek-LiveData:解决 LiveData 数据倒灌问题的完美替代方案 在 Android Jetpack 架构中,LiveData 是一个非常强大的组件,用于观察数据变化并与生命周期感知组件协作...UnPeek-LiveData 是一个基于 Jetpack 架构的 LiveData 扩展库,专注于解决 LiveData 数据倒灌问题。它提供了一种可靠的方式来处理事件分发,同时支持多个观察者。...观察事件 在 Activity 或 Fragment 中订阅数据变化: 1234 myViewModel.message.observe(this, message -> { // 确保该消息只被消费一次...结语 UnPeek-LiveData 是一个功能强大、轻量且易用的 LiveData 扩展库,专为解决数据倒灌和事件重复消费问题设计。...如果你正在使用 Jetpack 架构并对 LiveData 的行为感到困扰,不妨试试 UnPeek-LiveData!它不仅能提升代码的可维护性,还能帮助你实现更清晰的事件分发逻辑。

    22200

    LiveData的用法

    我们在示例代码中定义了接口,当数据发生变化的时候,采用接口的方式实现对页面的通知。...()方法对LiveData所包装的数据进行观察,当该数据发生变化的时候,就可以得到更新后的数据,并在onChanged()方法中做出处理。...四.LiveData的原理   为了更好地理解LiveData,我们可以深入LiveData.observe()方法的源码一探究竟。...五.LiveData.observeForever()方法   LiveData还提供了一个名为observeForever()的方法,它的用法和observe方法相似,主要的区别在于,当LiveData...因此,在用完之后,一定要记得调用removeObserver()方法来停止对LiveData的观察,否则LiveData会一直处于激活状态,Activity则永远不会被系统自动回收,这就造成了内存泄漏。

    77320

    Jetpack之LiveData详解

    (this, observer) observe 方法中的 this 是实现了LifecycleOwner 接口的对象,比如 support 里的 AppCompatActivity 等 当我们对 simpleLiveData...() 创建观察者对象:new Observer() 绑定观察者对象:LiveData.observe 更新 LiveData 数据:LiveData.setValue 详细介绍 1、Api 介绍 LiveData...它新增了两个方法 addSource 、removeSource 用于添加和删除 LiveData 源 Observer: 观察者接口,通过该接口对 LiveData 数据进行观察 2、详细使用 MutableLiveData...变换操作 Transformations 上面介绍了 LiveData 的基础使用,我们还可以使用 Transformations 对 LiveData 进行变换操作,它提供了两个操作符 map 和 switchMap...在 onActive 里注册消息监听,onInactive 里移除监听,这样我们就可以使用 MessageLiveData 对最新消息进行观察。

    2K20

    由浅入深,详解 LiveData 的那些事

    而要说清上述问题,即正是对LiveData的设计思想做一个阐述。...上述思路看着很繁琐,但其实比较简单,也即是 LiveData 的整个设计思路,但如果你理解 Lifecycle ,上述的理解我想对你来说,就是 so easy。...observe() 用于订阅LiveData的数据更新,源码如下: @MainThread public void observe(@NonNull LifecycleOwner owner, @NonNull...具体我们看一眼官方对其的描述: ---- 但既然 LiveData 这么安全好用,所以就会有开发者想着使用 LiveData 用于事件通知,此时它的设计在某种程度上就成了问题,虽然在官方的建议里,非常不建议直接这么用...因为在不谈的背景的情况下,没有绝对的标准与统一的准则,那就更别提对与错。但至少对于 LiveData 而言,了解完本篇的你,我相信再也不会再有相关疑问。

    1.7K20

    LiveData 还有学习的必要吗?—— Jetpack 系列(2)

    3、Room:ORM 数据库访问框架 4、WindowManager:加强对多窗口模式的支持 5、WorkManager:加强对后台任务的支持 6、Compose:新一代视图开发方案 ---- 1....注意: LiveData 内部会禁止一个观察者同时使用 observe() 和 observeForever() 两种注册方式。...但同一个 LiveData 可以接收 observe() 和 observeForever() 两种观察者。...return liveData; } } } 3.5 Kotlin Flow Google 对 Flow 的定位是 Kotlin 环境下对 LiveData 的替代品,使用 SharedFlow...无论是 EventBus 还是 LiveDataBus,它们本质上都是 “多对多的广播”,它们仅适合作为全局的事件通信,而页面内的事件通信应该继续采用 ViewModel + LiveData 等方案。

    3.9K10

    LiveData 非粘性消息的探索和尝试

    LiveData 值的方法,重置之后,observer 中条件判断为 fasle,因此可以达到不更新 UI 的目的 示例代码 moneyReceivedViewModel.billLiveData.observe... = _billLiveData // 在 observe 之前和 show Toast 之后重置一下 LiveData fun reset() { _billLiveData.value...() 时机也不一样) 在 observe 之前发送的事件还是会被接收到,没有解决问题 姿势三:LiveData 包裹一个 Event open class Event(private val...但是笔者并不推荐使用这样的方式来绕过 LiveData 的限制,去打破 LiveData 原本的设计,这会让 LiveData 变得更让人难以理解 我们并不是非要用 LiveData 不可,LiveData...LiveData was designed to allow the View observe the ViewModel. Definitely use it for this!

    1.2K30

    Jetpack:在数据变化时如何优雅更新Views数据

    通过使用observe()方法,将上述的LiveData对象和Observer对象关联在一起。...三个步骤就定义了使用LiveData的方式,从步骤可以看出,使用了观察者模式,当LiveData对象持有数据发生变化,会通知对它订阅的所有处于活跃状态的订阅者。...nameTextView.text = newName } // Observe the LiveData, passing in this activity as the...model.currentName.observe(this, nameObserver) } } 在讲nameObserver对象传给observe()方法后,存储在LiveData最近的值以参数的形式立即传递到...光看文档,都可以感觉到Android 对设计模式,和MVP模式、MVVM模式设计理念使用得淋漓尽致。所以建议各位同学在代码方面的编写一定要有大局观念,代码规范的还是要有,方便别人就是方便自己。

    3.2K30

    Jetpack—LiveData组件的缺陷以及应对策略

    我们创建了一个Livedata,然后对这个Livedata Observe了10次,每次都是new出不同的Observer对象,看上去我们对一个数据源做了10个观察者的绑定。...这里一定要注意这个细节,否则在很多时候,会影响我们对问题的判断。再回到我们之前没有添加hashCode的代码,再仔细看看也就明白了:只是Log打印了两条而已,但是通知是收到了10次的,为啥打印两条?...{ liveData.observe(this, { t -> Log.v("ttt", "t:$t") }) } liveData.value...liveData.observe(this, { t -> Log.v("ttt", "t:$t $test") }) } liveData.value = 3...二、LiveData为何会收到Observe之前的消息 2.1 分析源码找原因 我们来看一个例子: fun test1() { val liveData = MutableLiveData

    1.3K20

    LiveData的前世今生

    View订阅LiveData中的变化,并对其做出反应。这对于在屏幕上连续显示并可能会修改的数据来说是非常有效的手段。...另外,从不同的线程设置值可能会导致竞赛条件,只产生一个对观察者的调用。 但前面这种解决方法的主要问题是,它很难理解,而且很难看,同时,我们如何确保在导航事件发生后值能被正确的重置?...OK: Use SingleLiveEvent SingleLiveEvent类是为一个样本创建的,作为对该特定场景有效的、推荐的解决方案。它是一个LiveData,但只发送一次更新。...LiveData对象与系统服务连接一次,然后任何需要该资源的观察者就可以观察LiveData对象。欲了解更多信息,请参见扩展LiveData。...Jose的解决方案缺乏对多个观察者的支持,而这正是LiveData以 "共享资源 "为名的承诺之一。 它不是线程安全的。 我还可以补充一个问题。

    1.4K10

    【AAC 系列三】深入理解架构组件:LiveData

    同时提前看下我整理的 LiveData UML 图,对 LiveData 有个整体的了解,后续的涉及到的类都在这里了,有助于理解。 ?...2.1 LiveData.observe() LiveData 的使用流程从 observe() 开始,咱们尝试从 observe() 方法 开始分析: @MainThread public void...这里需要注意的是,当我们调用 observe() 注册后,由于绑定了 owner,所以在 active 的情况下,LiveData 如果有数据,则 Observer 会立马接受到该数据修改的通知。...注意:LiveData 对同时多次修改数据做了处理,如果同时多次修改,只会修改为最新的数据。 3. 图解 LiveData 3.1 LiveData 类图 再看一遍类图,回顾一下: ?...这时候需要使用 AlwaysActiveObserver ,改调用 observe 方法为调用 LiveData.observeForever(Observer) 方法即可。

    1K20

    带你了解LiveData重放污染的前世今生

    View订阅LiveData中的变化,并对其做出反应。这对于在屏幕上连续显示并可能会修改的数据来说是非常有效的手段。...另外,从不同的线程设置值可能会导致竞赛条件,只产生一个对观察者的调用。 但前面这种解决方法的主要问题是,它很难理解,而且很难看,同时,我们如何确保在导航事件发生后值能被正确的重置?...✔️ OK: Use SingleLiveEvent SingleLiveEvent类是为一个样本创建的,作为对该特定场景有效的、推荐的解决方案。它是一个LiveData,但只发送一次更新。...Jose的解决方案缺乏对多个观察者的支持,而这正是LiveData以 "共享资源 "为名的承诺之一。 它不是线程安全的。 我还可以补充一个问题。...最后,我非常乐意看到你对它的反馈。

    1.5K10
    领券