信息检索中的语言模型

2023-12-25

我在 IR 工作。

任何人都可以指导我,我该如何实现语言模型Whoosh。 我已经应用了TD-IDF和BM25。我是红外新手。

例如,最简单形式的语言模型只是丢弃所有条件上下文,并独立估计每个术语。这样的模型称为一元语言模型:

P_{uni}(t_1t_2t_3t_4) = P(t_1)P(t_2)P(t_3)P(t_4)

有许多更复杂的语言模型,例如二元语言模型,它以前一项为条件,

P_{bi}(t_1t_2t_3t_4) = P(t_1)P(t_2\vert t_1)P(t_3\vert t_2)P(t_4\vert t_3)

看一眼Whoosh的评分模块 https://github.com/whoosh-community/whoosh/blob/master/src/whoosh/scoring.py并使用 BM25F(第 276 至 332 行)作为构建您自己的加权和评分模型的参考。您需要创建一个加权模型和一个评分器。假设你想调用你的模型Unigram,主要步骤是:

  1. 实施你自己的Unigram加权模型类并继承自scoring.WeightingModel:

    class Unigram(WeightingModel)

    实现基类所需的方法,主要是scorer(),它返回对您的引用Scorer类(下一个)。当你创建你的类时会调用这个类searcher并定义搜索者将使用的加权模型。

  2. 实施一个UnigramScorer类并继承自scoring.WeightLengthScorer:

    class UnigramScorer(WeightLengthScorer)

    实施__init__ and _score方法。__init__ 获取字段名称和值,并在调用时为查询中的每个术语调用一次searcher.search(). _score为结果中的每个匹配文档调用。这需要一个weight and length并返回给定字段的分数。

  3. 当您在搜索时创建搜索器时,请使用weighting范围:

    ix.searcher(weighting = Unigram)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

信息检索中的语言模型 的相关文章

随机推荐

  • Python发送UDP数据包

    我正在尝试编写一个程序来发送 UDP 数据包 如https wiki python org moin UdpCommunication https wiki python org moin UdpCommunication该代码似乎是 Py
  • 使用 boost Spirit (longest_d) 解析 int 或 double

    我正在寻找一种将字符串解析为 int 或 double 的方法 解析器应该尝试两种选择 并选择与输入流的最长部分匹配的一个 有一个已弃用的指令 longest d 正是我正在寻找的 number longest d integer real
  • RavenDB:Raven 查询未返回文档授权的正确计数

    public class EngineInfo public int Id get set public int AircraftId get set public string SerialNumber get set public in
  • VSTS 登录失败,出现 401 未授权 - [用户] 有多个与其关联的帐户

    我尝试让域中的新用户访问我们的 VSTS 我们通过 MPN 订阅 MSDN 企业版 如果用户使用其工作帐户登录 my visualstudio com 则订阅已分配且对用户可见 如果用户尝试访问 ourprojects visualstud
  • Clojure 单元测试。如何测试函数是否抛出异常?

    我看到有一种方法可以测试函数是否抛出类 C 的异常 但是有没有一种方法可以测试函数是否抛出任何异常 或者断言它不应该抛出异常 对于预计不会出现异常的测试 请按正常方式编写测试 任何抛出的异常都会导致测试失败 对于可能引发任何异常的测试 请使
  • Android 资源 ID 突然不是最终的,字段无法解析

    我正在开发一个新旧项目 我正在为不同的国家 地区市场制作它 当我从旧项目复制代码时 它显示一些错误 例如迁移 ANDROID 代码 从 ADT 14 开始 资源字段不能用作 switch case 这种情况发生在 strings xml 文
  • 如何在 Ruby 中创建 OpenGL 3.x 或 4.x 上下文?

    我到处都找过了 但没有任何 ruby 绑定可以允许创建 OpenGL 3 4 上下文 它不必是完整的 OpenGL 绑定库 只需创建 OpenGL 上下文的部分即可 更新 如果我足够绝望 我会用 ruby ffi 进行部分 glfw rub
  • 位置:固定边距:IE9/10 中自动

    我为响应式网站制作了一个粘性标题 其中标题也以margin 0 auto 它适用于 Chrome Firefox Safari IE8 但不适用于 IE9 最小标记 div class viewport div
  • 如何在微控制器上运行opencv?

    我对电子领域和控制器了解很多 但我想知道如何将opencv程序与红色交通灯结合起来 我知道答案是微控制器 但我只知道有一个编译器AVR 它可以将C编译为十六进制 然后与微控制器一起工作 但 OpenCV 我想我不会在 C 上运行 是高级别的
  • 动画选择器/状态转换

    我的 ListView 有一个简单的选择器
  • 将 Visual Studio 项目文件解析为 XML

    使用动态 xml 解析器 我尝试将 VS 项目文件作为 XElement 加载 这是项目文件的精简版本
  • 如何将数据从blob存储复制到VM?

    是否可以将 Azure Blob 存储中存在的文件复制到 Azure 虚拟机 在浏览了 Azure 数据工厂文档后 数据管理网关似乎提供 文件系统 作为数据接收器 但我无法找到任何相关文档 教程 谁能告诉我这是否可能吗 如果可以的话 可以怎
  • 将 HTML 画布裁剪为其可见像素(内容)的宽度/高度?

    可以 HTMLcanvas元素被内部裁剪以适应其内容 例如 如果我有一个 500x500 像素的画布 其中的随机位置只有一个 10x10 像素的正方形 是否有一个函数可以通过扫描可见像素和裁剪将整个画布裁剪为 10x10 Edit 这被标记
  • 如何在黑莓应用程序中显示饼图[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何使用 rim api 在黑莓应用程序中显示饼图 rim api 中是否有可用的控件或者如何实现 有人可以通过分享代码片段来帮助我吗 Go
  • 旋转后找到矩形的顶点

    所以我承认我真的不知道如何表达这个问题 但完整的解释应该有助于阐明一些情况 这是我所知道的 我在 HTML5 Canvas 上绘制了一个矩形 我知道所有 4 个角的点以及宽度和高度 由此我可以计算出中点 我想知道的是 如果我将矩形旋转 n
  • iptables 阻止本地连接到 mongodb

    我有一个带有 mongodb 2 0 4 的虚拟机 Ubuntu 12 04 4 LTS 我想用 iptables 限制它只接受 SSH 输入 输出 而不接受其他任何东西 这就是我的设置脚本设置规则的方式 bin sh DROP every
  • 使用区间来分配分类值

    获取以下通用数据 A lt c 5 7 11 10 23 30 24 6 B lt c 1 2 3 1 2 3 1 2 C lt data frame A B 以及以下间隔 library intervals interval1 lt In
  • 一列中的多个图表区域

    I have a chart with multiple chart areas When I press a button a new chart area is being created etc My problem is that
  • 当一列中的单元格与另一列中的单元格不匹配时更改它们的颜色

    我想检查一列中的值是否与另一列中的值相同 每当值不相同时 我想更改这些单元格的颜色 例如 I 栏 AA 栏 两者的值都是从 1318 年到 1500 年的第一个月 阿拉伯历 但我想检查其中哪些值不匹配 例如用黄色将它们着色 在这种情况下 第
  • 信息检索中的语言模型

    我在 IR 工作 任何人都可以指导我 我该如何实现语言模型Whoosh 我已经应用了TD IDF和BM25 我是红外新手 例如 最简单形式的语言模型只是丢弃所有条件上下文 并独立估计每个术语 这样的模型称为一元语言模型 P uni t 1t