<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Julie Tibshirani - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Julie Tibshirani - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/cn/search-labs/author/julie-tibshirani</link>
    </image>
    <link>https://www.elastic.co/cn/search-labs/author/julie-tibshirani</link>
    <atom:link href="https://www.elastic.co/cn/search-labs/rss/author/julie-tibshirani.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[cn]]></language>
    <lastBuildDate>Tue, 29 Sep 2026 09:34:30 GMT</lastBuildDate>
  <item>
    <title><![CDATA[使用向量场进行文本相似性搜索]]></title>
    <description><![CDATA[这篇文章探讨了如何利用文本嵌入和 Elasticsearch 的新 dense_vector 类型来支持相似性搜索。]]></description>
    <content:encoded><![CDATA[<p>Elasticsearch 最初是一个<a href="https://www.elastic.co/about/history-of-elasticsearch">菜谱搜索引擎</a>，旨在提供快速、强大的全文搜索功能。有鉴于此，改进文本搜索一直是我们在矢量方面持续开展工作的重要动力。在 Elasticsearch 7.0 中，我们为高维向量引入了实验性字段类型，现在 7.3 版本支持在文档评分中使用这些向量。</p><p>本篇文章主要介绍一种名为文本相似性搜索的特殊技术。在这类搜索中，用户输入一个简短的自由文本查询，然后根据文档与查询的相似度进行排序。文本相似性可用于多种用途：</p><ul><li><p><strong>问题解答：</strong>给定一系列常见问题，找出与用户输入的问题相似的问题。</p></li><li><p><strong>文章搜索：</strong>在研究文章集中，返回标题与用户查询密切相关的文章。</p></li><li><p><strong>图像搜索：</strong>在有标题的图片数据集中，查找标题与用户描述相似的图片。</p></li></ul><p>相似性搜索的一种直接方法是根据文档与查询共享的单词数量进行排序。但是，即使一个文档与查询的共同点很少，它们也可能是相似的--一个更稳健的相似性概念应同时考虑其句法和<a href="https://en.wikipedia.org/wiki/Semantic_similarity">语义</a>内容。</p><p>自然语言处理（NLP）界开发了一种名为文本嵌入的技术，可将单词和句子编码为数字向量。这些向量表示旨在捕捉文本的语言内容，可用于评估查询和文档之间的相似性。</p><p>本文章将探讨如何利用文本嵌入和 Elasticsearch 的 dense_vector 类型来支持相似性搜索。我们将首先概述嵌入技术，然后使用 Elasticsearch 演示一个简单的相似性搜索原型。</p><strong>注：</strong>在搜索中使用文本嵌入是一个复杂且不断发展的领域。本博客并非对特定架构或实施方案的推荐。从这里开始了解如何利用<a href="https://www.elastic.co/what-is/vector-search">矢量搜索</a>的强大功能提升搜索体验。<h2>什么是文本嵌入？</h2><p>让我们仔细看看不同类型的文本嵌入，以及它们与传统搜索方法的比较。</p><h3>词语嵌入</h3><p><a href="https://en.wikipedia.org/wiki/Word_embedding">单词嵌入</a>模型将单词表示为一个密集的数字向量。这些向量旨在捕捉词语的语义属性--向量相近的词语在语义上应该是相似的。在一个好的嵌入中，向量空间中的方向与词义的不同方面相关联。例如，"加拿大" 的向量可能在一个方向上接近"法国" ，在另一个方向上接近"多伦多" 。</p><p>一段时间以来，NLP 和搜索界一直对单词的向量表示法很感兴趣。在过去的几年里，人们对单词嵌入的兴趣再次升温，许多传统的任务都在使用神经网络进行重新研究。一些成功的词嵌入算法被开发出来，包括<a href="https://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf">word2vec</a>和<a href="https://nlp.stanford.edu/pubs/glove.pdf">GloVe</a>。这些方法利用大量文本集合，并检查每个单词出现的上下文，以确定其向量表示：</p><ul><li><p>word2vec Skip-gram 模型训练一个神经网络，以预测句子中某个单词周围的上下文单词。网络的内部权重给出了单词嵌入。</p></li><li><p>在 GloVe 中，单词的相似度取决于它们与其他上下文单词出现的频率。该算法根据词的共现计数训练一个简单的线性模型。</p></li></ul><p>许多研究小组分发的模型都是在维基百科或 Common Crawl 等大型文本语料库上预先训练过的，方便下载并用于下游任务。虽然有时会直接使用预训练版本，但调整模型以适应特定的目标数据集和任务可能会有所帮助。这通常是通过在预训练模型上运行 "微调 "步骤来实现的。</p><p>词嵌入已被证明是相当稳健和有效的，在机器翻译和情感分类等 NLP 任务中，使用词嵌入来代替单个词块已成为一种普遍做法。</p><h3>句子嵌入</h3><p>最近，研究人员开始关注不仅能表示单词，还能表示较长文本部分的嵌入技术。目前的大多数方法都基于复杂的神经网络架构，有时还会在训练过程中加入标记数据，以帮助捕捉语义信息。</p><p>训练完成后，这些模型就能处理一个句子，为上下文中的每个单词生成一个向量，并为整个句子生成一个向量。与词嵌入类似，许多模型都有预训练版本，用户可以跳过昂贵的训练过程。虽然训练过程可能非常耗费资源，但调用模型却要轻便得多--句子嵌入模型的速度通常很快，足以作为实时应用的一部分。</p><p>一些常见的句子嵌入技术包括<a href="https://arxiv.org/abs/1705.02364">InferSent</a>、<a href="https://arxiv.org/abs/1803.11175">Universal Sentence Encoder</a>、<a href="https://arxiv.org/abs/1802.05365">ELMo</a> 和<a href="https://arxiv.org/abs/1810.04805">BERT</a>。改进单词和句子嵌入是一个活跃的研究领域，很可能会引入更多强大的模型。</p><h3>与传统搜索方法的比较</h3><p>在传统的信息检索中，将文本表示为数字向量的常见方法是为词汇表中的每个单词分配一个维度。然后，根据词汇中每个术语出现的次数来确定文本的向量。这种表示文本的方式通常被称为"bag of words，" ，因为我们只计算单词出现次数，而不考虑句子结构。</p><p>文本嵌入在某些重要方面有别于传统的向量表示法：</p><ul><li><p>编码矢量密度高，维数相对较低，通常在 100 到 1000 维之间。相比之下，词袋向量比较稀疏，可以包含 50,000 多个维度。作为语义建模的一部分，嵌入算法将文本编码到低维空间中。理想情况下，同义词和短语最终会在新的向量空间中得到相似的表示。</p></li><li><p>在确定向量表示时，句子嵌入可以考虑单词的顺序。例如，"tune in" 与"in tune" 可能会被映射为截然不同的向量。</p></li><li><p>实际上，句子嵌入通常不能很好地概括大段文本。它们通常不用于表示长度超过一小段的文本。</p></li></ul><h2>使用嵌入式进行相似性搜索</h2><p>假设我们有一大堆问题和答案。用户可以提出一个问题，我们希望在问题集中检索出最相似的问题，以帮助他们找到答案。</p><p>我们可以使用文本嵌入来检索类似的问题：</p><ul><li><p>在索引编制过程中，每个问题都会通过句子嵌入模型生成一个数字向量。</p></li><li><p>当用户输入一个查询时，它会通过相同的句子嵌入模型产生一个向量。为了对回复进行排序，我们计算每个问题与查询向量之间的向量相似度。在比较嵌入向量时，通常使用<a href="https://en.wikipedia.org/wiki/Cosine_similarity">余弦相似度</a>。</p></li></ul><p><a href="https://github.com/jtibshirani/text-embeddings">该版本库</a>提供了一个简单的示例，说明如何在 Elasticsearch 中实现这一功能。主脚本从<a href="https://github.com/elastic/rally-tracks/tree/master/so">StackOverflow 数据集中</a>索引约 20,000 个问题，然后允许用户针对数据集输入自由文本查询。</p><p>我们很快就会详细介绍脚本的各个部分，但首先让我们看看一些示例结果。在许多情况下，即使查询和索引问题之间没有很强的词语重叠，该方法也能捕捉到相似性：</p><ul><li><p>"压缩文件" 返回"压缩/解压缩文件夹&amp; 文件"</p></li><li><p>"确定某物是 IP" 返回"如何判断字符串是 IP 还是主机名"</p></li><li><p>"将字节转换为双倍" 返回"在 Python 中将字节转换为浮点数"</p></li></ul><h3>实施细节</h3><p><a href="https://github.com/jtibshirani/text-embeddings/blob/blog/src/main.py">脚本</a>首先在 TensorFlow 中下载并创建嵌入模型。我们选择了谷歌的通用句子编码器，但也可以使用许多其他嵌入方法。脚本按原样使用嵌入模型，无需额外的训练或微调。</p><p>接下来，我们创建 Elasticsearch 索引，其中包括问题标题、标签以及编码为向量的问题标题的映射：</p>"mappings": {
"properties": {
"title": {
"type": "text"
},
"title_vector": {
"type": "dense_vector",
"dims": 512
}
"tags": {
"type": "keyword"
},
...
}
}
<p>在 dense_vector 的映射中，我们需要指定向量的维数。索引 title_vector 字段时，Elasticsearch 将检查该字段的维数是否与映射中指定的相同。</p><p>为编制文档索引，我们通过嵌入模型运行问题标题，以获得一个数字数组。该数组会添加到文档的 title_vector 字段中。</p><p>当用户输入查询时，文本会首先通过相同的嵌入模型运行，并存储在参数 query_vector 中。从 7.3 开始，Elasticsearch 在其本地脚本语言中提供了<a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.6/query-dsl-script-score-query.html#vector-functions">余弦相似度函数</a>。因此，为了根据问题与用户查询的相似度对问题进行排序，我们使用了 script_score 查询：</p>{
"script_score": {
"query": {"match_all": {}},
"script": {
"source": "cosineSimilarity(params.query_vector, 'title_vector') + 1.0",
"params": {"query_vector": query_vector}
}
}
}
<p>我们确保将查询向量作为脚本参数传递，以<a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.6/modules-scripting-using.html#prefer-params"> 避免</a> 在每次新查询时 重新编译 script()。由于 Elasticsearch 不允许负分，因此有必要在余弦相似度中加一个负分。</p><p><strong>| 注：</strong>这篇博文最初使用了 Elasticsearch 7.3 中的<a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.3/query-dsl-script-score-query.html#vector-functions">另一种矢量函数语法</a>，但在 7.6 中已被弃用。|</p><h3>重要限制</h3><p>script_score 查询旨在封装限制性查询，并修改其返回文档的分数。不过，我们提供了一个 match_all 查询，这意味着脚本将在索引中的所有文档上运行。这是目前 Elasticsearch 中向量相似性的一个限制--向量可用于为文档评分，但不能用于初始检索步骤。基于向量相似性的支持检索是<a href="https://github.com/elastic/elasticsearch/issues/42326">当前工作</a>的一个重要领域。</p><p>为了避免扫描所有文件并保持快速性能，可以用选择性更强的查询来代替 match_all 查询。用于检索的正确查询可能取决于具体的使用情况。</p><p>虽然我们在上面看到了一些令人鼓舞的例子，但重要的是要注意，结果也可能是嘈杂和不直观的。例如，"压缩文件" 也会给"部分 .csproj 分配高分文件" 和"如何避免使用 .pyc" 。而当方法返回令人惊讶的结果时，如何调试问题并不总是很清楚--每个矢量成分的含义往往是不透明的，与可解释的概念并不对应。使用基于词语重叠度的传统评分技术，通常更容易回答"为何该文档排名靠前？"</p><p>如前所述，该原型旨在举例说明如何将嵌入模型与矢量场结合使用，而不是一个可投入生产的解决方案。在制定新的搜索策略时，关键是要测试该方法在自己的数据中的表现，确保与匹配查询等强大的基线进行比较。在取得可靠结果之前，可能有必要对策略进行重大修改，包括针对目标数据集微调嵌入模型，或尝试不同的嵌入方法，如单词级查询扩展。</p><h2>结论</h2><p>嵌入技术是捕捉文本语言内容的有力方法。通过索引嵌入和基于向量距离的评分，我们可以使用超越词级重叠的相似性概念来比较文档。</p><p>我们期待着引入更多基于向量字段类型的功能。使用矢量进行搜索是一个细致入微、不断发展的领域--我们一如既往地希望在<a href="https://github.com/elastic/elasticsearch">Github</a>和<a href="https://discuss.elastic.co/">讨论论坛</a>上听到您的使用案例和经验！</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/text-similarity-search-with-vectors-in-elasticsearch</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/text-similarity-search-with-vectors-in-elasticsearch</guid>
    <category><![CDATA[向量数据库]]></category>
    <dc:creator><![CDATA[Julie Tibshirani]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt91384bd99b05cd28/6a17e7e01d1b835cc593e467/c633ed737add7d22a7d65b3ca5c56480ef3d8b2c-720x420.jpg" length="0" type="image/jpeg"/>
    <pubDate>Thu, 06 Oct 2022 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[实施学术论文：从 Elasticsearch 和 Lucene 中汲取的经验教训]]></title>
    <description><![CDATA[借鉴我们使用 Elasticsearch 和 Lucene 的经验，了解将研究论文纳入软件应用程序的策略。]]></description>
    <content:encoded><![CDATA[<p>本帖分享在软件应用程序中实施学术论文的策略。它借鉴了 Elasticsearch 和 Lucene 的示例，希望能帮助其他工程师学习我们的经验。读到这些策略，你可能会想："但这只是软件开发啊！"事实的确如此：作为工程师，我们已经掌握了正确的方法和工具，只是需要加以调整，以适应新的挑战。</p><h2>背景</h2><p>在开发 Elasticsearch 的过程中，我们偶尔会遇到一个重要问题，但没有简单或既定的解决方法。人们自然会问："嗯，有没有学术论文论述过这个问题？"其他时候，学术工作是灵感的源泉。我们会遇到一篇提出新算法或数据结构的论文，然后想："这一定很有用！"以下是 Elasticsearch 和 Apache Lucene 如何结合学术工作的几个例子：</p><ul><li><p>用于<a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.15/search-aggregations-metrics-cardinality-aggregation.html"> 万有引力聚合 的</a><a href="https://research.google/pubs/pub40671/"> HyperLogLog++</a></p></li><li><p>用于<a href="https://www.elastic.co/blog/improving-response-latency-in-elasticsearch-with-adaptive-replica-selection"> 自适应复制选择</a><a href="https://www.usenix.org/system/files/conference/nsdi15/nsdi15-paper-suresh.pdf"> 的 C3 算法</a></p></li><li><p>用于 Lucene 中最近向量搜索的<a href="https://arxiv.org/abs/1603.09320">层次导航小世界图 (HNSW)</a></p></li><li><p><a href="https://github.com/elastic/ml-cpp/pull/488">改进机器学习分类的</a> <a href="https://jmlr.csail.mit.edu/papers/volume17/15-308/15-308.pdf">MIC 统计</a></p></li><li><p><a href="http://engineering.nyu.edu/~suel/papers/bmw.pdf">块最大 WAND</a>，用于<a href="https://www.elastic.co/blog/faster-retrieval-of-top-hits-in-elasticsearch-with-block-max-wand">在 Lucene 中更快地检索热门话题</a></p></li><li><p>......以及<a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.15/query-dsl-combined-fields-query.html"> </a><a href="https://github.com/elastic/elasticsearch/blob/b2a9328890b23e7ccf6c66a3b13d6d65e453a3dd/server/src/main/java/org/elasticsearch/search/sort/BucketedSort.java#L302-L323">更多</a></p></li></ul><p>学术论文是工程师开发数据密集型系统的宝贵资源。但是，实施这些算法可能会让人望而生畏，而且容易出错--算法描述往往很复杂，重要的实际细节被省略了。测试是一项真正的挑战：例如，我们如何才能彻底测试输出结果与数据集密切相关的机器学习算法？</p><h2>像评估软件依赖性一样评估论文</h2><p>添加一个新的软件依赖关系需要仔细评估：如果其他软件包不正确、速度慢或不安全，我们的项目也可能如此。在引入依赖关系之前，开发人员一定要对其质量进行评估。</p><p>这同样适用于您正在考虑实施的学术论文。也许有人会认为，论文中发表了一种算法，它就一定是正确的、性能良好的。但是，即使通过了评审程序，学术论文也可能存在问题。也许正确性证明所依赖的假设并不现实。或者，"实验 "部分显示的性能比基线高得多，但这只在特定的数据集上成立。即使论文质量很高，其方法也可能不适合您的项目。</p><p>在考虑是否对学术论文采取 "依赖 "态度时，不妨像对待软件包一样提出同样的问题：</p><ul><li><p>图书馆是否被广泛使用并经过 "实战检验"？→ 其他软件包是否实施了本文，效果如何？</p></li><li><p>是否有性能基准？这些看起来准确和公平吗？→ 论文是否包含现实的实验？它们设计得好吗？</p></li><li><p>性能的提升是否足以证明复杂性的合理性？→ 论文是否与强有力的基线方法相比较？它比基准线高出多少？</p></li><li><p>这种方法能与我们的系统很好地整合吗？→ 算法的假设和权衡是否符合我们的使用情况？</p></li></ul><p>不知为什么，当一个软件包发布与竞争对手的性能比较时，该软件包总是最快的！如果由第三方设计基准，可能会更加平衡。同样的现象也适用于学术论文。如果一种算法不仅在原始论文中表现出色，而且还在其他论文中作为强有力的基线出现，那么它就很有可能是可靠的。</p><h2>创造性地进行测试</h2><p>学术论文中的算法通常比我们日常遇到的算法类型具有更复杂的行为。也许这是一种近似算法，用精确度来换取更快的速度。也可能是一种机器学习方法，它能接收大量数据集，并产生（有时是意想不到的）输出结果。如果我们不能简单地描述这些算法的行为特征，又如何为它们编写测试程序呢？</p><h3>关注不变式</h3><p>在设计单元测试时，我们通常会从示例的角度来思考：如果我们给算法这个示例输入，它就应该有这样的输出。遗憾的是，对于大多数数学算法来说，基于示例的测试并不能充分涵盖它们的行为。</p><p>让我们来看看 C3 算法，Elasticsearch 使用它来确定哪个节点应该处理搜索请求。它使用一个微妙的公式对每个节点进行排名，该公式结合了节点以前的服务和响应时间以及队列大小。测试几个例子并不能真正验证我们对公式的理解是否正确。退一步思考测试不变式：如果服务时间增加，节点的等级是否会降低？如果队列规模为 0，排名是否如论文所说由响应时间决定？</p><p>关注不变式可以帮助解决一些常见问题：</p><ul><li><p>这种方法是否应该与顺序无关？如果是这样，以不同的顺序传递输入数据应该会得到相同的输出结果。</p></li><li><p>算法中的某个步骤会产生类别概率吗？如果是这样，这些概率的总和应为 1。</p></li><li><p>函数是否围绕原点对称？如果是这样，翻转输入的符号应该只是翻转输出的符号。</p></li></ul><p>我们最初实施 C3 时，公式中出现了一个错误，不小心用响应时间的倒数代替了响应时间。这意味着速度较慢的节点可以排名靠前！在修复该问题时，我们<a href="https://github.com/elastic/elasticsearch/pull/70283">确保添加了不变量检查</a>，以防止将来出现错误。</p><h3>与参考实施比较</h3><p>在发表论文的同时，作者还发布了该算法的实施方案。(如果论文中包含实验，这种情况尤其可能发生，因为许多期刊都要求作者发布用于重现结果的代码）。您可以根据该参考实现测试自己的方法，确保没有遗漏算法的重要细节。</p><p>在开发用于最近邻搜索的 Lucene HNSW 实现时，我们<a href="https://issues.apache.org/jira/browse/LUCENE-9937"> 根据</a> 论文作者的 参考库进行了测试 。我们针对相同的数据集运行了 Lucene 和库，比较了其结果的准确性和计算次数。当这些数字紧密匹配时，我们就知道 Lucene 忠实地实现了算法。</p><p>在将算法集成到系统中时，通常需要进行修改或扩展，例如将其扩展到多个内核，或添加启发式算法以提高性能。最好先实施"vanilla" 版本，对照参考进行测试，然后再逐步修改。这样，您就可以确信在进行定制之前已经捕捉到了所有关键部分。</p><h3>与现有算法对决</h3><p>最后一节提出了测试不变式的另一个想法：将算法输出与更简单、更易理解的算法输出进行比较。举例来说，Lucene 中的 block-max WAND 算法可以跳过那些无法出现在顶部结果中的文档，从而加快文档检索速度。我们很难准确描述 block-max WAND 在每种情况下的表现，但我们知道，应用它不应该改变最高结果！因此，我们的测试可以生成多个随机搜索查询，然后在<a href="https://github.com/apache/lucene/blob/main/lucene/core/src/test/org/apache/lucene/search/TestWANDScorer.java#L669"> 使用和不使用 WAND 优化的情况下运行这些</a> 查询，并检查 它们 的结果是否始终一致。</p><p>这些测试的一个重要方面是，它们会<a href="https://www.elastic.co/blog/elasticsearch-testing-qa-increasing-coverage-randomizing-test-runs"> 生成</a> 用于进行比较的 随机输入 。这可以帮助解决你想不到的情况，并使意想不到的问题浮出水面。例如，Lucene 的 BM25F 评分随机比较测试有助于<a href="https://issues.apache.org/jira/browse/LUCENE-10039">捕捉细微边缘情况下的错误</a>。向算法提供随机输入的想法与<a href="https://en.wikipedia.org/wiki/Fuzzing"> 模糊（fuzzing</a> ）的概念密切相关， 模糊 是计算机安全领域的一种常用测试技术。</p><p>Elasticsearch 和 Lucene 经常使用这种测试方法。如果你看到一个测试提到两个算法之间的"决斗" （TestDuelingAnalyzers、testDuelTermsQuery......），那么你就知道这个策略正在发挥作用。</p><h2>使用论文术语</h2><p>当其他开发人员使用您的代码时，他们需要查阅该文件以了解其细节。<a href="https://github.com/elastic/elasticsearch/blob/4f22f437ee50cacb94b37b457be1da0b8ba0e8ce/server/src/main/java/org/elasticsearch/search/aggregations/metrics/HyperLogLogPlusPlus.java#L24-L39">关于 Elasticsearch 的 HyperLogLog++ 实现的评论说</a>得很好："在没有读过论文的情况下就试图理解这个类的作用，是一种冒险"。这种方法的评论也树立了一个好榜样。其中包括学术论文的链接，并重点介绍了对最初描述的算法所做的修改。</p><p>由于开发人员会根据论文来理解代码，因此使用完全相同的术语会很有帮助。由于数学符号是简洁的，这可能导致一些通常不被认为是 "好风格 "的名称，但在论文中却非常清晰。在 Elasticsearch 中，学术论文中的公式是你为数不多能遇到的神秘变量名，如<a href="https://github.com/elastic/elasticsearch/blob/4f22f437ee50cacb94b37b457be1da0b8ba0e8ce/server/src/main/java/org/elasticsearch/node/ResponseCollectorService.java#L151">rS 和 muBarSInverse</a>。</p><p>
<em>作者推荐的阅读论文方式：喝大杯咖啡。</em></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt12d81453c706f7cb/6a17d80e0b0bede6badd3424/d03a8e2a50e173b15a4ec3732810c63ff53321f6-1440x1081.jpg" alt="elastic-blog-academicpaper.jpg" /><h2>您可以给作者发送电子邮件</h2><p>在完成一篇难度很大的论文时，你可能会花几个小时来琢磨一个公式，不知道是自己理解错了，还是只是有一个错别字。如果这是一个开源项目，你可以在 GitHub 或 StackOverflow 上提问。但是，您能从哪里获得学术论文呢？作者看起来很忙，可能会因为你的邮件而感到厌烦。</p><p>相反，许多学者喜欢听到他们的想法被付诸实践的消息，并乐于通过电子邮件回答问题。如果您从事的是他们熟悉的产品，他们甚至可能会在网站上列出您的应用！</p><p>学术界使用软件开发中的许多相同工具公开讨论论文的趋势也在不断增长。如果论文附带软件包，您可以<a href="https://github.com/facebookresearch/faiss/issues/1928"> 在 Github 上 找到</a> 常见问题的 答案。Stack Exchange 社区（如 "理论计算机科学 "和 "交叉验证"）也包含<a href="https://cstheory.stackexchange.com/questions/49296/problem-in-the-paper-stable-minimum-space-partitioning-in-linear-time">有关热门论文的详细讨论</a>。一些会议已开始在网上发表所有论文的评论。这些评论包含了与作者<a href="https://openreview.net/forum?id=H1eA7AEtvS">的来回讨论</a>，这些讨论能让人对写作方法产生有益的见解。</p><h2>待续</h2><p>本篇文章主要介绍选择学术论文的基本知识，以及 </p><p>但并不包括实际部署算法的所有方面。例如，如果算法只是复杂系统中的一个组件，我们如何确保对该组件的更改能带来端到端的改进？如果整合算法需要进行大量修改或扩展，而原始论文又没有涵盖这些内容，该怎么办？这些都是我们希望在今后的文章中与大家分享的重要话题。</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/implementing-academic-papers-lessons-learned-from-elasticsearch-and-lucene</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/implementing-academic-papers-lessons-learned-from-elasticsearch-and-lucene</guid>
    <category><![CDATA[ML 研究]]></category>
    <category><![CDATA[Lucene]]></category>
    <dc:creator><![CDATA[Julie Tibshirani]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltbd7e961f594005e7/6a17d80f033c8d981f6bb009/d240bfef29e9d432069059b312dd044eb76eec6c-1440x840.png" length="0" type="image/png"/>
    <pubDate>Wed, 29 Sep 2021 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>