在Cython上实现的搜索引擎的ClickModels。

pyClickModels的Python项目详细描述


pyClickModelsBuild StatusCoverage StatusPyPI versionPyversionsGitHub license

ClickModels的Cython实现,它使用概率图形模型来推断用户在与搜索页面结果(排名)交互时的行为。在

工作原理

ClickModels使用Probabilistic Graphical Models的概念对组件进行建模,这些组件描述了用户和按一组检索规则排列的项目列表之间的交互。在

当需要了解给定的文档是否与给定的搜索查询匹配时,这些模型往往很有用,这在文献中也称为judgets等级。这是可能的,通过评估过去观察到的点击和文档在每个查询的结果页面上出现的位置。在

有几个proposed approaches来处理这个问题。此存储库实现了一个动态贝叶斯网络,类似于previous works也是在Python中完成的:

dbn

主要区别在于:

  1. ^{str1}$实现在Cython之上:已经公开的解决方案依赖于CPython与pypypy集成以获得额外的加速。不幸的是,就性能而言,这可能还不够好。为了实现这一点,这个实现依赖于C/C++的100%,以进一步优化速度。尽管没有正式的基准测试,但预计在CPython之上^{str1}$15x~^{str1}$18x(相同的数据导致使用PyPy时增加~3倍)。在
  2. Memory-Friendly:要求输入数据遵循JSON格式,并且每行的clickstream的所有会话都已表示。这样可以节省内存并允许库处理更大的数据量。在
  3. Purchase variable:由于像电子商务这样的企业可以从更好地理解他们的搜索引擎中受益匪浅,这个存储库添加了变量Purchase来进一步描述客户的行为。在

文件notebooks/DBN.ipynb完整地描述了模型是如何实现的,以及所涉及的所有数学问题。在

安装

由于这个项目依赖于Cython编译的二进制文件,目前只支持Linux(manylinux)平台。它可以安装在:

pip install pyClickModels

入门

输入数据

pyClickModels希望输入数据存储在同一文件夹中的一组压缩gz文件中。它们都应该以字符串“judgements”开头,例如,judgments0.gz。 每个文件都应该包含行分隔的json。以下是每个JSON行的示例:

^{pr2}$

search_keys设置搜索的上下文。在上面的示例中,给定的客户(或具有相同上下文的客户集群)搜索blue shoes。他们的区域是south(可以是任何选择的值),最喜欢的品牌是super brand等等。在

这些键设置搜索的上下文。当pyClickModels运行其优化时,它将同时考虑所有上下文。这意味着所获得的判断也是在整个语境下进行的。在

如果不需要上下文,只需使用{"search_keys": {"search_term": "user search"}}。在

这里没有必需的模式,这意味着库循环使用search_keys中可用的所有键,并构建将整个上下文视为单个查询的优化过程。在

对于judgment_keys,这是一个会话列表。密钥session是必需的。每个会话都包含用户的单击流(如果不需要变量purchase,则将其设置为0)。在

对于从pyClickModels运行DBN,下面是一个简单的示例:

frompyClickModels.DBNimportDBNmodel=DBN()model.fit(input_folder="/tmp/clicks_data/",iters=10)model.export_judgments("/tmp/output.gz")

对于每个文件,每个查询的输出都将包含一个JSON

{"search_term:blue shoes|region:south|brand:super brand":{"doc0":0.2,"doc1":0.3,"doc2":0.4}}{"search_term:query|region:north|brand:other_brand":{"doc0":0.0,"doc1":0.0,"doc2":0.1}}

这里的判断在0和1之间变化。有些库要求它的范围在整数0到4之间。在这种情况下,选择一个更适合您的数据的适当转换。在

警告

^{结构1}$这个图书馆还是阿尔法!小心使用。它已经进行了全面的单元测试,但仍有部分使用纯C,其异常可能尚未得到充分考虑。在生产环境中使用此库之前,建议使用不同的数据集和大小对其进行全面测试,以评估其性能。在

贡献

欢迎投稿!另外,如果发现错误,请报告:)。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用prepared语句在oracle中插入日期   对点具有双重值的java   使用多个通配符的java请求映射   java Springboot为什么要设置springbootstartertomcat   除了对JavaBean的请求之外,还使用servletContext的servlet   java如何清除OCSID。返回到池的连接时的CLIENTID JDBC客户端信息属性   将整型数组转换为光栅Java   java使用对象引用作为互斥锁   java为什么在编程语言中使用sin函数返回奇怪的sin值不像计算器   java如何将JButton链接到对象并调用相关方法   php用Java发送POST数据   导航属性的java模拟加载   java多个活动错误Android试图对空对象引用调用虚拟方法“”   java Android更改ActionBar文本颜色   如何使用带有java反射且不带开关的parant引用创建子类