非平均概率的随机选择工具

71 views
Skip to first unread message

刘鑫

unread,
Apr 1, 2023, 3:07:04 AM4/1/23
to Python.cn@google
最近这段时间在做一些跟推荐相关的东西,因为大量用到“从一个集合中随机选择若干元素,越靠前的元素有更大的概率被选中”这样的逻辑,于是整理了这些年遇到的各种类似的场景,做了 Scala 和 Java 8的实现。这些代码我放到了 jaskell core/ jaskell dotty 和 jaskell java8 项目中。
不过我们组主要还是用 python,考虑了一下,我昨晚写了一个 python版本的随机选择工具 https://pypi.org/project/pycroupier/ 。这个工具比 java 和 scala 的版本更简单,契合 python 的语法风格和 python 用户的编程习惯。

 Python 的标准库比 Java 在这方面功能更全面一些,Random 有针对 collection 的 choice 和 shuffle,不过这些算法仍然是基于平均概率的,并且功能比较简单。 PyCroupier 提供一个可扩展的操作接口,可以随机的从集合中选择随机的索引、单个或若干元素,也可以在选择的元素的同时将它从原有集合中删除(抽取操作)。详细的介绍在 http://marchliu.github.io/2023/04/01/croupier


--

……

刘鑫 Mars LIu

Zoom.Quiet

unread,
Apr 1, 2023, 4:18:33 AM4/1/23
to pyth...@googlegroups.com
欢迎分享各自领域成果,
嘦不涉及专利什么的...

不过, 这种算法有什么原理? 随机选择就值得推荐?

刘鑫 <marc...@gmail.com> 于2023年4月1日周六 15:06写道:
> --
> 邮件来自: `CPyUG`华蟒用户组(中文Python技术邮件列表)
> 规则: http://code.google.com/p/cpyug/wiki/PythonCn
> 详情: http://code.google.com/p/cpyug/wiki/CpyUg
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
> ---
> 您收到此邮件是因为您订阅了Google网上论坛上的“python-cn(华蟒用户组,CPyUG 邮件列表)”群组。
> 要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到python-cn+...@googlegroups.com
> 要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/python-cn/CACGJLu6-LOkL70_%3D%3Du%3DM%3DE1XZ98N3R586Runm8LqTo%2BiOm%3DPug%40mail.gmail.com



--
----------------
life is pathetic, go Pythonic. 人生苦短, Python当歌 ;-)
课: https://py.101.camp/
怼: https://du.101.camp/
俺: http://zoomquiet.io
许: http://creativecommons.org/licenses/by-sa/2.5/cn/
怒: 冗余不做,日子甭过!备份不做,十恶不赦.
KM keep growing environment culture which promoting organization learning ;-)

刘鑫

unread,
Apr 1, 2023, 4:29:20 AM4/1/23
to pyth...@googlegroups.com
重点是非平均概率。这样推荐系统可以生成一个在变化的,有喜好倾向的信息流。
这是很常规的技术,二十几年前我就在这样用,你要是搜索,说不定还能找到十几年前赖总也写过一个加权随机算法。

Zoom.Quiet <zoom....@gmail.com> 于2023年4月1日周六 16:18写道:
您收到此邮件是因为您订阅了 Google 网上论坛的“python-cn(华蟒用户组,CPyUG 邮件列表)”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到python-cn+...@googlegroups.com
要在网络上查看此讨论,请访问 https://groups.google.com/d/msgid/python-cn/CAAFijReuOSVg79QPbgR0j8UasyrEQ8ma0vcCLKJ7CrTWKf1H6Q%40mail.gmail.com


--

……

刘鑫 Mars LIu

Shell Xu

unread,
Apr 2, 2023, 12:33:48 AM4/2/23
to pyth...@googlegroups.com
很常规的算法了。你要多次重复,就能反向拼凑出每个选项的概率。正向是加权概率选择,反向是蒙特卡洛。
随机选择是因为需要引入不确定推荐。如果每次都推荐相同内容,那么推荐本身就会强化浏览数据,而浏览数据会反过来强化推荐。最后推荐可能就固化了。



--
彼節者有間,而刀刃者無厚;以無厚入有間,恢恢乎其於游刃必有餘地矣。
blog: http://shell909090.org/

刘鑫

unread,
Apr 2, 2023, 2:50:11 AM4/2/23
to pyth...@googlegroups.com
这个在游戏里也经常用,几级的地图,几级的怪物,什么种类,会有多大几率掉落什么样的装备,有概率范围,但是一般不会固定掉落。
而且实现方式也有很多,我在最近这个工作项目里用的,就跟 Croupier的几个算法都不一样,虽然也是damping,但是数值公式是完全另一套。
那天写完我很感慨的在同学群说,你们还记得师兄们说他们那年考高等代数,老师把卷面分开平方乘十么?我今天把这个算法拿去用在推荐系统了……

Shell Xu <shell...@gmail.com> 于2023年4月2日周日 12:33写道:


--

……

刘鑫 Mars LIu

twinsant

unread,
Apr 2, 2023, 9:52:13 PM4/2/23
to pyth...@googlegroups.com
Cool,能按时间形成分布么,比如某种装备每个月掉落概率不一样

yingyi...@gmail.com

unread,
Apr 2, 2023, 10:06:59 PM4/2/23
to python-cn
我现在的博士课题就是强化学习推荐算法,实质上用户选择是服从纳金斯强化理论的。随着某种商品的被推荐次数增多,整个消费者群体会被强化这一个商品的认知。也就是在讨论的“排序越靠前的元素越容易被选中”,因为这个社群有了这个认知。

当然,为了推荐的公平性和腰部尾部商品的流量,华为、美团一些公司也提出了位置消偏的算法,也叫做“position debias”。

最终,排序算法如何选择还是看在三边市场中“用户-商家-平台”,哪一方的利益为主。



------------------ 原始邮件 ------------------
发件人: 刘鑫 <marc...@gmail.com>
发送时间: 2023年4月1日 15:06
收件人: Python.cn@google <pyth...@googlegroups.com>
主题: Re: [CPyUG] 非平均概率的随机选择工具
--

Shell Xu

unread,
Apr 2, 2023, 10:07:20 PM4/2/23
to pyth...@googlegroups.com
这不是随机选择的问题,而是你怎么安排概率的问题。

18818...@163.com

unread,
Apr 2, 2023, 10:18:16 PM4/2/23
to python-cn
  麻烦小组管理员把我移出邮件接收组


 
发件人: Shell Xu
发送时间: 2023-04-03 10:06
收件人: python-cn
主题: Re: [CPyUG] 非平均概率的随机选择工具

Terry Guo

unread,
Apr 2, 2023, 10:25:52 PM4/2/23
to pyth...@googlegroups.com
麻烦小组管理员把我移出邮件接收组

18818...@163.com <18818...@163.com> 于2023年4月3日周一 10:18写道:

刘鑫

unread,
Apr 3, 2023, 1:58:03 AM4/3/23
to pyth...@googlegroups.com
这种其实也不难,在 poker 里引入更丰富的外部因素就可以。

twinsant <twin...@gmail.com> 于2023年4月3日周一 09:52写道:


--

……

刘鑫 Mars LIu
Reply all
Reply to author
Forward
0 new messages