TensorflowSimilarity学习笔记11

2021SC@SDUSC

代码地址:similarity/precision.py at master · tensorflow/similarity · GitHub

学习内容:搜索准确率、召回率

class Precision(ClassificationMetric):
    """Calculates the precision of the query classification.
    Computes the precision given the query classification counts.
    $$
    Precision = \frac{\textrm{true_positives}}{\textrm{true_positives} + \textrm{false_positives}}
    $$
    args:
        name: Name associated with a specific metric object, e.g.,
        precision@0.1
    Usage with `tf.similarity.models.SimilarityModel()`:
    ```python
    model.calibrate(x=query_examples,
                    y=query_labels,
                    calibration_metric='precision')
    ```
    """

    def __init__(self, name: str = 'precision') -> None:
        super().__init__(name=name, canonical_name='precision')

    def compute(self,
                tp: FloatTensor,
                fp: FloatTensor,
                tn: FloatTensor,
                fn: FloatTensor,
                count: int) -> FloatTensor:
        """Compute the classification metric.
        The `compute()` method supports computing the metric for a set of
        values, where each value represents the counts at a specific distance
        threshold.
        Args:
            tp: A 1D FloatTensor containing the count of True Positives at each
            distance threshold.
            fp: A 1D FloatTensor containing the count of False Positives at
            each distance threshold.
            tn: A 1D FloatTensor containing the count of True Negatives at each
            distance threshold.
            fn: A 1D FloatTensor containing the count of False Negatives at
            each distance threshold.
            count: The total number of queries
        Returns:
            A 1D FloatTensor containing the metric at each distance threshold.
        """
        p: FloatTensor = tf.math.divide_no_nan(tp, tp + fp)

        # If all queries return empty result sets we have a recall of zero. In
        # this case the precision should be 1.0 (see
        # https://nlp.stanford.edu/IR-book/html/htmledition/evaluation-of-ranked-retrieval-results-1.html#fig:precision-recall).
        # The following accounts for the and sets the first precision value to
        # 1.0 if the first recall and precision are both zero.
        if (tp + fp)[0] == 0.0 and len(p) > 1:
            initial_precision = tf.constant(
                    [tf.constant([1.0]), tf.zeros(len(p)-1)],
                    axis=0
            )
            p = p + initial_precision

        return p

 提供有效的搜索从定义如何衡量有效性开始。
信息检索社区几十年来一直在评估搜索。既定的衡量标准包括精度(相关返回结果的一部分)和召回率(检索到的相关结果的一部分),以及分级和位置偏差的变化,例如贴现累积增益 (DCG)。
这些评估措施应该是每个搜索从业者工具包的一部分,但它们还不够。搜索本身并不是目的:它是一种能够实现信息搜索过程的工具。搜索有效性度量还需要考虑搜索对这一过程的支持程度。
这篇文章探讨了评估搜索有效性的几种方法,可以超越传统的信息检索评估措施来考虑会话、用户和整体影响。
查询与会话
传统评估措施的一项挑战是它们专注于单个搜索查询。用户通过会话与搜索引擎交互,会话通常包含多个搜索查询。因此,评估搜索会话往往比评估搜索查询更有意义。
不幸的是,会话评估的学术工作不如查询评估的工作成熟。已经努力将 DCG 等度量推广到会话,但建模会话很棘手。会话中的不同查询可能不会表达相同的意图。此外,会话中的查询并不是相互独立的,因为搜索者会根据查询调整他们的行为。当前的研究建议根据会话中的最后一个和性能最差的查询来评估会话。
会话评估的另一个方面是现代搜索引擎在返回结果排名列表方面做得更多。现代搜索体验包括适合上下文的导航选项,例如类别和方面的优化。搜索引擎应该识别搜索者在搜索过程中的位置并相应地调整搜索体验,引导搜索者进行更好地表达搜索者意图的查询。
一般来说,会话​​评估是一个考虑搜索引擎为用户的努力投资提供的回报的机会。点击和转化(例如购买)往往是衡量回报的好指标,而查询、击键和在搜索结果页面上花费的时间往往是衡量投资的好指标。通过根据这些或类似因素对回报和投资进行建模,可以估计用户的会话 ROI。
会话与用户
评估会话提供了一个更全面的视角,而不是只评估查询,但有时搜索过程会跨越多个会话。购物者可能要花费数天或数周的时间才能决定购买昂贵的商品。或者研究人员可能会多次返回站点以访问内容,通常使用搜索引擎重新查找以前发现的结果。
评估多会话旅程的一种流行方法是将一些搜索参与归因于之前的会话,并相应地调整会话 ROI 度量。例如,在电子商务网站上的购买可以归因于发现该产品的先前会话中的搜索。虽然没有完美的归因模型,但跨会话扩展归因可以减轻有会话模型倾向于低考虑决策而非高考虑决策的趋势。当然,这种方法需要能够跨会话跟踪用户。
一个更微妙的考虑是,随着用户从与搜索引擎的交互中学习,用户行为会随着会话而变化。特别是,当搜索者有积极的体验时,他们往往会更频繁地返回搜索引擎,这意味着会话评估表现出幸存者偏差。同样,搜索者从经验中学习更多地进行某些类型的搜索而不是其他类型的搜索,因此他们的行为不再代表他们意图的公正表达。
检测和纠正这种幸存者偏差是很困难的,因为搜索引擎不知道它不知道什么。但是,可以将重点放在尚未有机会从与搜索引擎交互中学习的新用户上。这些用户的行为 - 以及该行为的变化 - 提供了用户对搜索引擎的期望以及搜索引擎成功解决哪些期望的强烈信号。
组件与整体影响
搜索引擎由许多相互关联的组件组成。这些组件在搜索堆栈的不同级别运行,确定如何对内容进行索引、检索、排名、组织和呈现。一些最重要的组件有助于理解查询。
独立评估每个组件很重要。例如,如果索引包括一个为每个文档分配一个类别的文档分类器,那么这个分类器应该被评估为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值