<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~files/atom-premium.xsl"?>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedpress="https://feed.press/xmlns" xmlns:media="http://search.yahoo.com/mrss/" xmlns:podcast="https://podcastindex.org/namespace/1.0">
  <feedpress:locale>en</feedpress:locale>
  <feedpress:newsletterId>progress-blogs</feedpress:newsletterId>
  <link rel="hub" href="https://feedpress.superfeedr.com/"/>
  <title type="text">Blogs</title>
  <subtitle type="text"/>
  <id>uuid:fd955036-122b-4d34-b6e3-d037933faf37;id=177</id>
  <updated>2026-08-02T01:53:48Z</updated>
  <contributor>
    <name>Hassan Djirdeh </name>
  </contributor>
  <contributor>
    <name>Adam Bertram </name>
  </contributor>
  <link rel="alternate" href="https://www.progress.com/"/>
  <link rel="self" type="application/atom+xml" href="https://feeds.progress.com/blogs"/>
  <entry>
    <id>urn:uuid:c2061ad1-71a8-4344-9d7e-f0de9c9f5f20</id>
    <title type="text">Semantic Search vs Keyword Search and Why You Need Both</title>
    <summary type="text">Keyword search and semantic search each solve different retrieval problems, but neither is perfect on its own.</summary>
    <published>2026-07-31T19:24:06Z</published>
    <updated>2026-08-02T01:53:48Z</updated>
    <author>
      <name>Hassan Djirdeh </name>
    </author>
    <link rel="alternate" href="https://www.progress.com/blogs/semantic-search-vs-keyword-search-and-why-you-need-both"/>
    <content type="text"><![CDATA[<p>If you search for &ldquo;authentication&rdquo; in a keyword-based system, it might miss documents that only mention &ldquo;login security&rdquo; because none of the exact words match. Semantic search has the opposite weakness. If you search for a specific identifier like the authentication error code ERROR_401_EXPIRED, it may prioritize broadly related passages about login failures while ranking the document containing that exact error code much lower.</p><p>A production search system needs both: keyword search for exact terms, semantic search for meaning, and a merge step that combines their rankings into one list. That combination is called <strong>hybrid search</strong>, and it&rsquo;s become the standard retrieval strategy for RAG systems.</p><p>We&rsquo;ll walk through how each approach works, where each one breaks down, and how hybrid search merges them.</p><h2 id="what-is-keyword-search">What is Keyword Search?</h2><p>Keyword search, also called lexical search, matches the words in a query against the words in documents. Most implementations use the <a href="https://en.wikipedia.org/wiki/Okapi_BM25">BM25</a> scoring algorithm, which ranks documents higher when they contain the query terms more often, when those terms are rare across the entire collection, and when the documents aren&rsquo;t padded with unrelated text. A common word like &ldquo;revenue&rdquo; appears in nearly every page of an earnings report, so a match carries little weight. A string like ERROR_401_EXPIRED appears in one runbook, so BM25 treats that match as a strong signal.</p><p>This mechanical behavior is the strength. Keyword search finds exact identifiers, error codes, product names and quoted phrases every time they appear. It runs fast, and its results are easy to explain to users and auditors: a document matched because it contains the words you typed.</p><h2 id="what-is-semantic-search">What is Semantic Search?</h2><p>Semantic search compares <em>meaning</em> instead of spelling. It uses an embedding model to convert text into a vector, where vectors representing related ideas are positioned close together. The query is converted into a vector as well, and the engine returns the documents whose vectors are nearest to it, usually measured by <a href="https://en.wikipedia.org/wiki/Cosine_similarity">cosine similarity</a>.</p><p>Vocabulary stops being a constraint. A search for &ldquo;authentication&rdquo; retrieves the &ldquo;login security&rdquo; document because the two phrases occupy the same semantic neighborhood. Users can ask full questions in plain language, like &ldquo;How do I let users sign in with their Google account?&rdquo;, and retrieve OAuth documentation that shares almost no words with the query.</p><h2 id="where-each-approach-breaks-down">Where Each Approach Breaks Down</h2><p>The two engines fail in nearly opposite situations, which is what makes them such good partners.</p><p><strong>Keyword search breaks on vocabulary mismatch.</strong> Writers and searchers rarely pick the same words. A support agent types &ldquo;refund policy&rdquo; while the document says &ldquo;returns and reimbursements,&rdquo; and BM25 scores it near zero. Keyword search also carries no model of intent, so it can&rsquo;t tell that &ldquo;How do I cancel my plan?&rdquo; and &ldquo;subscription termination steps&rdquo; want the same answer.</p><p><strong>Semantic search breaks on exact strings.</strong> Embeddings compress text into general meaning, and rare tokens lose their identity in that compression. Error codes, part numbers, acronyms and person or product names tend to retrieve similar-looking content instead of the exact match. A query for &ldquo;OpenEdge 12.8 release notes&rdquo; may return notes for a nearby version, since the two documents are semantically near twins.</p><p>The second failure mode is the one we see teams underestimate. Demos run on natural language questions, so semantic search looks flawless until a real user pastes an invoice number or an error code into the search bar.</p><h2 id="what-is-hybrid-search">What is Hybrid Search?</h2><p>Hybrid search runs both engines on every query and merges the two ranked lists into one. The merge step needs care because BM25 scores and cosine similarities live on different scales, so comparing them directly is meaningless. <a href="https://www.progress.com/blogs/master-advanced-search-ranking-fusion-and-reranking-explained">Reciprocal Rank Fusion</a> sidesteps the scale problem by using positions instead of scores. Each document earns points based on where it ranks in each list, and a document that ranks high in both lists accumulates the most points and floats to the top.</p><p>Most implementations expose a weight between the two signals. A support knowledge base full of error codes benefits from a keyword tilt, while a policy wiki that people query in plain language benefits from a semantic tilt. We&rsquo;d start balanced and adjust only after watching real queries fail.</p><h2 id="why-hybrid-search-matters-for-rag">Why Hybrid Search Matters for RAG</h2><p>A RAG pipeline can only generate answers from the passages retrieval hands it. If retrieval misses the relevant passage, the LLM never sees it and can&rsquo;t cite it. No amount of prompt engineering or model quality can recover a fact that never entered the context.</p><p>Consider a question like <em>&ldquo;What was revenue guidance for FY 2026?&rdquo;</em> Semantic retrieval surfaces passages discussing financial outlook and guidance, while keyword retrieval ensures the exact phrase <strong>&ldquo;FY 2026&rdquo;</strong> is matched so the model cites the correct fiscal year instead of a semantically similar one. Combined, the two approaches retrieve both the relevant passage and the precise details the LLM needs to generate an accurate answer.</p><h2 id="hybrid-search-in-progress-agentic-rag">Hybrid Search in Progress Agentic RAG</h2><p>The&nbsp;<a href="https://www.progress.com/agentic-rag">Progress Agentic RAG</a>&nbsp;platform runs keyword and semantic search together by default. The platform is powered by <a href="https://nuclia.com/rag-database/">NucliaDB</a>, which unifies semantic search, keyword search, metadata search and knowledge graph traversal in a single store, so we never maintain a separate keyword index next to a vector database or write our own merging logic.</p><p>The Search configuration panel exposes Reciprocal Rank Fusion directly. We can adjust the weighting to boost semantic results over keyword results, or the reverse, depending on how our users search and the types of information they need to retrieve.</p><img sf-image-responsive="true" src="https://www.progress.com/images/default-source/sf_local/semantic-search-vs-keyword-seach.png?sfvrsn=5de54c70_2" height="584" style="max-width:100%;height:auto;" title="Semantic Search vs Keyword Seach" width="936" alt="" sf-size="213164" /><h2 id="wrap-up">Wrap Up</h2><p>Keyword search matches exact words with speed and predictability, semantic search matches meaning across different vocabulary. Each one fails where the other succeeds. Hybrid search runs both and merges their rankings with Reciprocal Rank Fusion, which is why it has become the default retrieval strategy for RAG. Progress Agentic RAG ships this behavior out of the box, with the fusion weighting a single setting away.</p><p>For more details and to get started with Progress Agentic RAG, be sure to check out the following resources:</p><h2>Frequently Asked Questions</h2><h3 id="is-semantic-search-always-better-than-keyword-search">Is semantic search always better than keyword search?</h3><p>No. Semantic search wins when queries are phrased differently from the documents, and keyword search wins when the query contains an exact string such as an error code, a product name, or a quoted phrase. Each covers the other&rsquo;s blind spot, which is why production systems merge both.</p><h3 id="what-is-reciprocal-rank-fusion-in-hybrid-search">What is Reciprocal Rank Fusion in hybrid search?</h3><p>Reciprocal Rank Fusion (RRF) is the algorithm that merges the ranked lists from keyword and semantic search. Since the two engines score documents on incompatible scales, RRF ignores the raw scores and awards each document points based on its rank position in each list. Documents that rank well in both lists rise to the top of the fused ranking, and many systems, including Progress Agentic RAG, let us weight one list more heavily than the other.</p><h3 id="do-i-need-a-separate-keyword-index-and-vector-database-to-run-hybrid-search">Do I need a separate keyword index and vector database to run hybrid search?</h3><p>It depends on the stack. Many teams pair a keyword engine like Elasticsearch with a vector database and merge results in application code, which works but doubles the infrastructure and keeps two indexes in sync. Unified stores such as NucliaDB index text for both search modes at ingestion, so hybrid search runs as a single query against one index.</p>]]></content>
  </entry>
  <entry>
    <id>urn:uuid:ed7bede6-2732-4352-b8e8-be90ebf3e4b1</id>
    <title type="text">RAG vs Fine-Tuning: When to Use Which?</title>
    <summary type="text">RAG changes what a model knows by retrieving from a live knowledge base, while fine-tuning changes how a model behaves by training it on curated examples. In this post, we compare them in terms of accuracy, cost and citations, and show when to reach for each.</summary>
    <published>2026-07-31T19:16:07Z</published>
    <updated>2026-08-02T01:53:48Z</updated>
    <author>
      <name>Hassan Djirdeh </name>
    </author>
    <link rel="alternate" href="https://www.progress.com/blogs/rag-vs-fine-tuning-when-to-use-which"/>
    <content type="text"><![CDATA[<p>Most teams hit the same wall with LLMs. Prompt engineering works well at first, but as applications grow, stuffing more context into ever-longer prompts doesn't scale. At that point, two paths usually come up: connect the model to your data with Retrieval-Augmented Generation (RAG) or adapt the model itself through fine-tuning. While the two are often discussed together, they solve fundamentally different problems.</p><p>Here's the short answer: <strong>use RAG when the model needs knowledge it lacks and use fine-tuning when the model needs behavior it lacks.</strong> RAG retrieves facts from an external knowledge base at query time, so answers stay current and citable. Fine-tuning adjusts a model's weights with curated training examples, so it changes how the model responds (its tone, format, and style) rather than what it knows.</p><p>That one-line rule covers most decisions, but the details matter, especially around cost, hallucinations and keeping answers up to date. We'll walk through both approaches and the situations where each one fits.</p><h2>What is RAG?</h2><p>RAG connects an LLM to an external knowledge source and grounds every answer in retrieved content. The process runs in three steps. When a user asks a question, the system:</p><ul><li>Retrieves the most relevant passages from an indexed knowledge base</li><li>Augments the prompt with those passages</li><li>Generates a response grounded in that context</li></ul><p>Suppose we've indexed Progress Software' Q2 2026 earnings report and someone asks, "What was revenue guidance for FY 2026?" The system pulls the guidance passage from the report and hands it to the model along with the question. The answer quotes the actual figures, and it can cite the exact source paragraph.</p><p>The defining trait of RAG is that the model itself never changes. Update a document in the knowledge base, and the very next answer reflects it.</p><h2>What is Fine-Tuning?</h2><p>Fine-tuning takes a pre-trained model and continues its training on a curated dataset of example inputs and outputs. The model's weights shift to match the patterns in those examples. Training data is typically provided as JSONL, where each line is a conversation showing the model exactly how it should respond:</p><pre><code class="language-csharp">{"messages": [
{"role": "system", "content": "You are a support assistant for FinTrack."},
{"role": "user", "content": "How do I export my transactions?"},
{"role": "assistant", "content": "Happy to help! Head to Settings &amp;gt; Data,
choose Export, and pick CSV or JSON. Exports cover the last 24 months."}
]}</code><br /></pre><p>Feed the model a few hundred examples like this and it learns the pattern: the greeting style, the concise step-by-step structure, the product terminology. After training, the model produces that style by default, without needing lengthy instructions in every prompt.</p><p>That's what fine-tuning is good at: tone, output format, domain-specific phrasing and following a house style. What it does poorly is act as a knowledge store. Facts from training examples aren't reliably memorized, and the model can blend or misremember them at generation time. Fine-tuning effectively freezes knowledge at training time. When the FY 2027 guidance replaces FY 2026, a fine-tuned model keeps answering with the old numbers until we retrain it.</p><p>One practical caveat: OpenAI is winding down its fine-tuning platform for new users. The technique itself remains available through other providers and on open-source models, but if you're on the OpenAI stack, RAG becomes an even clearer default.</p><h2>How do RAG and Fine-Tuning Compare?</h2><p>The differences show up across almost every practical dimension:</p><table><tbody><tr style="height:16.666666666666668%;"><td style="width:33.333333333333336%;"><strong>Dimension</strong></td><td style="width:33.333333333333336%;"><strong>RAG</strong></td><td style="width:33.333333333333336%;"><strong>Fine-Tuning</strong></td></tr><tr style="height:16.666666666666668%;"><td style="width:33.333333333333336%;"><strong>Data freshness</strong></td><td style="width:33.333333333333336%;">Update a document, get updated answers immediately</td><td style="width:33.333333333333336%;">Frozen at training time; needs retraining to refresh</td></tr><tr style="height:16.666666666666668%;"><td style="width:33.333333333333336%;"><strong>Cost to update<strong></strong></strong></td><td style="width:33.333333333333336%;">Low, just re-index the changed content</td><td style="width:33.333333333333336%;">Each update requires a new training run and evaluation</td></tr><tr style="height:16.666666666666668%;"><td style="width:33.333333333333336%;"><strong>Citations</strong></td><td style="width:33.333333333333336%;">Answers can cite the exact source passage</td><td style="width:33.333333333333336%;">No sources; the answer comes from model weights</td></tr><tr style="height:16.666666666666668%;"><td style="width:33.333333333333336%;"><strong>Hallucination risk</strong></td><td style="width:33.333333333333336%;">Lower, since answers are grounded in retrieved text</td><td style="width:33.333333333333336%;">Unchanged or worse for facts outside the training set</td></tr><tr style="height:16.666666666666668%;"><td style="width:33.333333333333336%;"><strong>Engineering effort</strong></td><td style="width:33.333333333333336%;">Indexing pipeline, retrieval tuning prompt assembly</td><td style="width:33.333333333333336%;">Dataset curation, training runs, evaluation, versioning</td></tr><tr style="height:16.666666666666668%;"><td style="width:33.333333333333336%;"><strong>Data volume needed</strong></td><td style="width:33.333333333333336%;">Works from the documents you already have</td><td style="width:33.333333333333336%;">Typically 50 to 100+ curated examples of ideal outputs</td></tr><tr style="height:16.666666666666668%;"><td style="width:33.333333333333336%;"><strong>Latency</strong></td><td style="width:33.333333333333336%;">Adds a retrieval step before generation</td><td style="width:33.333333333333336%;">None added; single model call&nbsp;</td></tr></tbody></table><p>&nbsp;</p><div style="color:#000000;background-color:#fffffe;font-family:'Open Sans', Menlo, Monaco, 'Courier New', monospace;font-size:12px;line-height:18px;white-space:pre;"><div></div></div><p>Our take: For question answering over company knowledge, which is what most teams are actually building, RAG should be the default. The ability to cite sources alone justifies it in any setting where users need to verify answers, and the update story (re-index a file versus schedule a training run) decides the matter for content that changes quarterly or faster. Fine-tuning still earns its keep when the output itself is the product, like a classifier that must emit a strict JSON schema or an assistant that must sound unmistakably like your brand&mdash;though availability and tooling vary by provider. </p><h2>Can you combine RAG and fine-tuning?</h2><p>Yes, and the combination is often stronger than either alone because they solve different problems. A support team might fine-tune a model on hundreds of its best-rated replies, so responses match the company&rsquo;s voice and formatting conventions. That fine-tuned model then sits behind a RAG pipeline that retrieves from the current product documentation. Fine-tuning supplies the behavior, while retrieval supplies the facts. When the docs change, answers change with them, and no retraining is required.</p><h2 id="progress-agentic-rag">Progress Agentic RAG</h2><p>The most common objection to RAG isn&rsquo;t conceptual; it&rsquo;s infrastructural. Someone has to stand up embedding models, a vector database, chunking and indexing pipelines and retrieval logic&mdash;then keep all of it running. The <a href="https://www.progress.com/agentic-rag">Progress Agentic RAG</a> solution removes that objection by delivering <a href="https://docs.rag.progress.cloud/docs/">RAG-as-a-Service</a>. Upload documents to a Knowledge Box, and the platform handles extraction, chunking, embeddings and indexing automatically.</p><p><img src="https://www.progress.comdata:image/png;base64,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" alt="" /></p><p>Because Agentic RAG works with <a href="https://www.progress.com/blogs/why-llm-flexibility-matters-for-agentic-rag">any LLM</a>, the hybrid strategy above fits naturally. We can point the retrieval pipeline at a stock model today and swap in a fine-tuned one later, without touching the knowledge base. The knowledge layer and the behavior layer stay independent, which is exactly how we&rsquo;d want them.</p><p>In addition to the above, the clearest wins for retrieval are the tasks where the answer lives in a document that someone edited recently:</p><ul><li><strong>Customer support over live product docs</strong>. A release moves the export flow on Tuesday, and the answer has to move with it. A fine-tuned model keeps reciting the old steps until we rebuild the dataset and retrain.</li><li><strong>Investor and financial questions</strong>. When FY 2027 guidance replaces FY 2026, each figure needs the source paragraph attached to it. Model weights have nothing to cite.</li><li><strong>Policy and compliance lookups</strong>. An auditor asks which version of the expense policy was applied in March. Retrieval returns the clause itself, while a fine-tuned model produces an answer nobody can trace.</li></ul><p>Fine-tuning can have a real job in all three, shaping how the reply reads, but the <em>lookup</em> underneath it belongs to retrieval.</p><h2 id="faqs">FAQs</h2><h3 id="is-rag-cheaper-than-fine-tuning">Is RAG cheaper than fine-tuning?</h3><p>Usually, and especially over time. RAG has ongoing retrieval and indexing costs, but updating knowledge is as cheap as reindexing a document. Fine-tuning carries the cost of dataset curation, training runs and evaluation, and that full cycle repeats every time the model needs to learn something new. For fast-changing content, fine-tuning costs compound quickly.</p><h3 id="does-fine-tuning-stop-a-model-from-hallucinating">Does fine-tuning stop a model from hallucinating?</h3><p>No. Fine-tuning shapes how a model responds, not how truthful it is. A fine-tuned model will confidently produce wrong facts in a perfect brand voice. Grounding answers in retrieved documents, the way RAG does, is the more direct lever against <a href="https://www.progress.com/blogs/how-retrieval-improves-accuracy-reduces-hallucination-ai">hallucination</a> because the model works from real text instead of its memory.</p><h3 id="can-i-use-rag-with-a-fine-tuned-model">Can I use RAG with a fine-tuned model?</h3><p>Yes. RAG is model-agnostic, so the generation step can use any LLM, including one you&rsquo;ve fine-tuned. This pairing is common in production: the fine-tuned model handles tone and format while retrieval keeps the facts current. The Progress Agentic RAG solution supports this directly by letting you bring your own model.</p><h2 id="wrap-up">Wrap-Up</h2><p>RAG and fine-tuning answer different questions. RAG changes what a model can know by retrieving from a live knowledge base, which keeps answers current, citable and grounded. Fine-tuning changes how a model behaves by training it on curated examples, which is the right tool for tone, format and style. Reach for RAG first when the problem is knowledge, reach for fine-tuning when the problem is behavior, and combine them when you need both.</p><p>Progress Agentic RAG covers the retrieval side of this without the pipeline work. Start a <a href="https://www.progress.com/agentic-rag/free-trial-sign-up">free trial</a> to index your own documents or <a href="https://www.progress.com/agentic-rag/book-a-demo">book a live demo</a> to walk through it with a Progress AI expert.</p>]]></content>
  </entry>
  <entry>
    <id>urn:uuid:f883b069-ed60-4c83-aded-8282c340729f</id>
    <title type="text">What Is Named Entity Recognition (NER) in RAG?</title>
    <summary type="text">Named Entity Recognition (NER) finds the people, organizations and dates inside unstructured text and stores them as metadata alongside the embeddings. In this post, we explain how that metadata sharpens retrieval and show how Progress Agentic RAG automatically detects entities during ingestion.</summary>
    <published>2026-07-31T19:05:02Z</published>
    <updated>2026-08-02T01:53:48Z</updated>
    <author>
      <name>Hassan Djirdeh </name>
    </author>
    <link rel="alternate" href="https://www.progress.com/blogs/what-is-named-entity-recognition-(ner)-in-rag"/>
    <content type="text"><![CDATA[<p>&nbsp;</p><p>Retrieval-Augmented Generation (RAG) systems typically rely on <strong>embeddings</strong> to find semantically similar information. Embeddings help a system understand that phrases like "company earnings" and "financial results" refer to similar concepts. What they don't do is explicitly recognize that <a href="https://www.progress.com/company/leadership/yogesh-gupta">"YogeshGupta"</a> is a person or that "August 31, 2025" is a date. When a query depends on a specific person, organization, product or point in time, that missing structure becomes important.</p><p><strong>Named Entity Recognition (NER)</strong> is a natural language processing technique that locates named entities in unstructured text and classifies them into categories such as people, organizations, locations, dates and products. In a RAG pipeline, these entity labels become structured metadata that sits alongside embeddings in the search index, enabling more precise filtering, <a href="https://www.progress.com/blogs/how-retrieval-strategies-enable-ai-experiences">better retrieval</a> for exact names and dates and features like entity-based autocomplete.</p><p>In this article, we'll unpack how NER works, why it matters for retrieval quality and how the <a href="https://www.progress.com/agentic-rag">Progress Agentic RAG</a> solution applies entity detection to our content.</p><h2>What is Named Entity Recognition?</h2><p>Most organizational knowledge lives in unstructured text. Contracts, earnings reports, support tickets and internal wikis are full of facts written as sentences rather than stored in neat database columns. NER adds structure to that prose by doing two things. It <strong>locates</strong> each entity mention within the text. It then <strong>classifies</strong> each mention into a predefined category.</p><p><strong>What are common named entities?</strong></p><p>Most NER models ship with a standard set of categories:</p><ul><li><strong>People:</strong> Executives, authors, customers and other named individuals.</li><li><strong>Organizations:</strong> Companies, government agencies, universities and internal departments.</li><li><strong>Locations:</strong> Countries, cities, regions and street addresses.</li><li><strong>Dates and times: </strong>"August 31, 2025," "Q3 2025" or "the quarter ended August 31."</li><li><strong>Events: </strong>Earnings calls, product launches, conferences and outages.</li><li><strong>Products: </strong>Product names, model numbers and SKUs.</li><li><strong>Numerical values:</strong> currencies, percentages and quantities.</li></ul><p>Consider a sentence you might find in an earnings report:</p><pre><code class="language-csharp">Yogesh Gupta discussed Progress Software's results for the quarter ended August 31, 2025.</code><br /></pre><p>After NER processes it, the same sentence carries explicit labels:</p><pre><code class="language-csharp">[Yogesh Gupta](PERSON) discussed [Progress Software](ORGANIZATION)'s results for the quarter ended [August 31, 2025](DATE).</code><br /></pre><p>The text itself hasn't changed. What's new is that the system knows what those words represent, and that knowledge can be stored as metadata alongside the original text and its embedding. NER relies on context to make these classifications: it can determine that "Progress" refers to a company in this sentence, even though the same word can mean forward movement in other contexts.</p><h2>Why Does NER Matter in a RAG Pipeline?</h2><p>A typical RAG pipeline splits documents into chunks, converts each chunk into an embedding and stores everything in an index. Semantic search then matches queries against that index by meaning. This works well for conceptual questions, but similarity alone can blur the details. Earnings reports from different companies and quarters all look semantically similar, even though only one contains the fact a user is asking about.</p><p>NER adds a second, complementary signal. When entities are detected at ingestion time and stored as <strong>index metadata,</strong> the RAG system can use them at query time in several ways:</p><p>&nbsp;</p><p>&nbsp;</p><table><tbody><tr style="height:20%;"><td style="width:50%;"><strong>Capability</strong></td><td style="width:50%;"><strong>What it enables</strong></td></tr><tr style="height:20%;"><td style="width:50%;"><strong>Entity filtering</strong></td><td style="width:50%;">Restrict search to chunks that mention a specific person, company, product or date.</td></tr><tr style="height:20%;"><td style="width:50%;"><strong>Revival precision</strong></td><td style="width:50%;">Separate documents that are topically similar but concern different entities.&nbsp;</td></tr><tr style="height:20%;"><td style="width:50%;"><strong>Disambiguation</strong></td><td style="width:50%;">Distinguish "Progress" the organization from "progress" the everyday word.</td></tr><tr style="height:20%;"><td style="width:50%;"><strong>Autocomplete</strong></td><td style="width:50%;">Suggest known entities from the index as the user types a query.</td></tr></tbody></table><p>Suppose a knowledge base contains several years of quarterly reports and a user asks, <em>"What did Yogesh Gupta say about AI in the Q3 2025 report?"</em> An embedding-only search will surface passages about executives and AI from multiple quarters. With NER metadata, the system also knows which chunks mention the person "Yogesh Gupta" and the period "Q3 2025," so it can weight or filter results accordingly.</p><p>NER doesn't replace embeddings. Embeddings capture the meaning of a whole passage, while NER labels the individual people, companies and dates mentioned inside it. The two signals work best together.</p><h2>How Does NER Provide Better Answers?</h2><p>Entity awareness pays off most when the identity of a subject matters as much as the topic itself. Here are the situations where we find it makes the clearest difference.</p><p><strong>Questions about a specific organization.</strong> If a user asks, <em>"Which contracts mention Acme Corp?"</em>, semantic search will happily return contracts involving similar companies in similar industries. An organization filter narrows results to documents where Acme Corp actually appears.</p><p><strong>Date-sensitive financial queries.</strong> Guidance, pricing and policies change over time. Recognizing "August 31, 2025" as a date prevents the system from blending figures from different reporting periods into one answer.</p><p><strong>People lookups.</strong> Names carry little semantic content on their own, so embeddings often can't tell two executives apart. A person entity makes <em>"What has Yogesh Gupta said about acquisitions?"</em> resolve to the right speaker.</p><p><strong>Similar or ambiguous names. </strong>Product names, project code names and short company names frequently collide with ordinary words. Classifying them as entities keeps unrelated passages out of the context sent to the LLM, which directly improves the quality of the generated answer.</p><h2>How NER Helps Auto-Build Knowledge Graphs</h2><p>One of the more interesting things NER unlocks is the <strong>knowledge graph,</strong> a structure that represents entities as nodes and the relationships between them as edges. From our example sentence, "Yogesh Gupta" and "Progress Software" become nodes, and a relation extraction step adds an edge&mdash;such as "is CEO of"&mdash;between them.</p><p>When this extraction runs across an entire knowledge base, facts scattered through separate documents connect into a single navigable graph. That makes it possible to answer questions that require following relationships rather than matching one passage.</p><h2>NER in Progress Agentic RAG</h2><p>The <a href="https://www.progress.com/agentic-rag"><strong>Progress Agentic RAG</strong></a> solution runs entity detection automatically as part of ingestion. When we upload a resource to a Knowledge Box, the platform identifies entities across <strong>16 built-in entity types,</strong> covering people, organizations, dates, events, locations and more. We can also define our own entity types for domain-specific vocabulary.</p><img sf-image-responsive="true" src="https://www.progress.com/images/default-source/sf_local/ner-in-progress-agentic-rag.png?sfvrsn=709c1324_2" height="598" style="max-width:100%;height:auto;" title="NER in Progress Agentic RAG" width="936" alt="A user interface of a window titled Agentic RAG showing various menus and layouts." sf-size="141711" /><p>For deeper customization, the <a href="https://docs.rag.progress.cloud/docs/ingestion/data-augmentation/#graph-extractors"><strong>Graph Extraction agent</strong></a> lets us describe the entities and relationships we care about, along with examples that guide the extraction. A legal team, for instance, might define plaintiffs, defendants, contracts and clauses, so the extracted entities reflect their domain rather than generic categories.</p><p>That separation is what raises search precision. With <strong>plaintiff </strong>and <strong>defendant</strong> as distinct types, the team can pull only the filings where a given company sat on the defense side, which one generic PERSON or ORGANIZATION label can't express. A compliance team gets the same effect by mapping internal regulation codes and control IDs, so a question about a single control returns the records governed by it instead of anything that reads like policy language.</p><h2>Wrap-Up</h2><p>Named Entity Recognition turns the names, organizations, dates and products buried in unstructured text into structured metadata. In a RAG pipeline, that metadata works alongside embeddings to sharpen filtering and <a href="https://www.progress.com/blogs/how-retrieval-improves-accuracy-reduces-hallucination-ai">retrieval,</a> power entity-based autocomplete, support <a href="https://docs.rag.progress.cloud/docs/management/how-to/anonymize-kb/">anonymization</a> and lay the foundation for knowledge graphs. The Progress Agentic RAG solution handles all of this automatically at ingestion time.</p><p>To see entity detection running against your own documents, <a href="https://www.progress.com/agentic-rag/book-a-demo">book a live demo</a> with a Progress AI expert or <a href="https://www.progress.com/agentic-rag/free-trial-sign-up">start a free trial</a> and upload a file to a Knowledge Box.</p><h2>FAQs</h2><h3>What is the difference between NER and keyword extraction?</h3><p>Keyword extraction surfaces the phrases that best summarize a document's topics, such as "financial results" or "revenue guidance." NER instead finds specific mentions and assigns them to categories, labeling "Yogesh Gupta" as a person and "August 31, 2025" as a date. In short, keywords describe what a document is about, while entities identify who and what it refers to.</p><h3>Does NER replace embeddings in a RAG system?</h3><p>No. Embeddings capture the meaning of an entire passage, which is what makes semantic retrieval possible. NER labels the entities inside that passage. A strong RAG pipeline uses embeddings to find related content and entity metadata to filter and rank it when a query depends on an exact name or date.</p><h3>Can NER identify custom, domain-specific entities like product codes or internal project names?</h3><p>Yes. Beyond built-in categories, NER systems can be configured to recognize custom entity types. With the <a href="https://docs.rag.progress.cloud/docs/">Progress Agentic RAG solution,</a> we can define our own entities and relationships for the Graph Extraction agent, with descriptions and examples that help the platform distinguish things like internal project names from ordinary text.</p><p>&nbsp;</p>]]></content>
  </entry>
  <entry>
    <id>urn:uuid:10894037-e0e8-4f0f-bb7b-2d1f215f490e</id>
    <title type="text">What is a Knowledge Graph in Enterprise AI?</title>
    <summary type="text">Knowledge graphs make relationships explicit and queryable, so enterprise AI can follow business facts instead of guessing from similar text.</summary>
    <published>2026-07-31T18:51:45Z</published>
    <updated>2026-08-02T01:53:48Z</updated>
    <author>
      <name>Adam Bertram </name>
    </author>
    <link rel="alternate" href="https://www.progress.com/blogs/what-is-a-knowledge-graph-in-enterprise-ai"/>
    <content type="text"><![CDATA[<p><p>What lets an AI assistant go beyond quoting a contract and trace who signed it, which policy in your estate governs it and whether it is still current? The answer has to make business relationships explicit and preserve the evidence behind each step, even when two systems disagree. A knowledge graph is the structure that makes it possible.</p><h2>What Is a Knowledge Graph?</h2><p>Who signed a contract and which policy governs it: those questions start with the relationships your systems store. Applications often express those relationships through different tables and joins, with system-local or inconsistently shared identifiers. Cross-system questions force an application or AI assistant to recreate that logic. That is repeated plumbing. A <a href="https://www.progress.com/semaphore/solutions/enterprise-knowledge-graphs">knowledge graph</a> makes those relationships reusable.</p><p>The change is straightforward: give entities a shared identifier and connect them through explicit, typed relationships. You can then follow one path instead of reproducing every application&rsquo;s joins. The <a href="https://www.w3.org/TR/rdf11-primer/">Resource Description Framework (RDF)</a> provides that shared path through a W3C-standard data model, recording each relationship as a subject-predicate-object triple.</p><p>Take a customer who is party to a contract. The customer is the subject, the contract is the object and &ldquo;is party to&rdquo; is the predicate or named relationship. A query can now follow that relationship to the contract and then to the governing policy. No custom joins at every step.</p><p>That relationship only holds while both systems agree on which customer and which contract they mean. Shared identity is half of it. The relationship also needs shared meaning, which is where an <a href="https://www.w3.org/TR/owl2-overview/">ontology</a> comes in. Ontologies define your key concepts, like customers, contracts and the policies that govern them, as well as how they connect. Ontologies stay flexible by design, so a missing detail doesn&rsquo;t automatically make a record invalid. When you need to enforce required fields or data shapes, handle that separately with something like the <a href="https://www.w3.org/TR/shacl/">Shapes Constraint Language (SHACL).</a> Keeping meaning and validation apart sets up the real question: do the graph&rsquo;s relationships actually support the answer?</p><h2>Why Does Enterprise AI Need a Knowledge Graph?</h2><p>Try a question that sounds simple: &ldquo;Which policy governs a given customer&rsquo;s current contract?&rdquo; Similar passages about the customer and the policy, the kind a similarity search returns, can look persuasive, but they do not prove that the records belong together. Let the model bridge that gap, and you can get a polished answer that no source supports.</p><p>A defensible answer needs the full path: the customer, the contract, the governing-policy relationship and evidence for each step. Stable identifiers let an authorized caller traverse that path and inspect permitted facts. Confidence is not the goal; evidence is.</p><p>A knowledge-orchestration layer, such as the one in the <a href="https://www.progress.com/agentic-rag">Progress Agentic RAG</a> solution, can assemble that traceable evidence from retrieved sources. It uses <a href="https://www.progress.com/blogs/unpacking-retrieval-augmented-generation-%28rag%29-and-generative-ai">retrieval-augmented generation (RAG)</a> to place retrieved evidence in a model&rsquo;s context. But retrieval is only as trustworthy as the rules around it. It should require authorized, traceable evidence and define how the system behaves when evidence is incomplete.</p><h2>How Do Graph and Vector Search Work Together?</h2><p>Those evidence rules also shape how graph queries and vector search divide the work. Graph queries complement vector search rather than replace it. Vector search compares numeric text representations, called embeddings, to find passages with similar meaning. That helps when the wording is uncertain: &ldquo;renewal risk&rdquo; can surface passages about churn or approaching contract end dates. Graph queries handle a different job. They follow a defined path, such as every project assigned to a consultant under a specific agreement.</p><p>In a hybrid pipeline, vector search proposes passages while graph queries resolve their entities and governing relationships. A <a href="https://arxiv.org/abs/2404.16130">GraphRAG study</a> applies a related pattern: a graph-based index built from source text supplies graph-derived summaries for answers. That related pattern still leaves you to route loose wording to vector search and defined paths to graph queries. Mixed questions can use both. For each query class, write down what runs first, then set an evidence threshold and spell out the fallback.</p><p>Those query rules still need a source-authority matrix. A vector result might mention the right customer in an expired contract, while the graph lacks the latest amendment text. Quote the expired terms, and the customer could act on the wrong number. So, decide which source owns the contract status and amendment text. Define how effective dates filter results and when facts expire. When sources conflict, choose which source wins. If neither can, present the disagreement or decline to answer. &ldquo;Use both&rdquo; is not a conflict policy.</p><h2>Where Should an Enterprise Architect Start?</h2><p>Start by turning that source-authority matrix into a narrow set of relationship-dependent questions. For each question, document the <a href="https://www.w3.org/TR/rdf-schema/">required entity types and relationships</a> and source owner, then define the identity rule, freshness target, conflict policy and decision maker. Turn those requirements into acceptance tests for a current, authorized path to evidence.</p><p>Creating those relationships is the next thing you have to schedule, and it does not all have to be hand-modeled. Agentic RAG builds graph relations two ways: <a href="https://docs.rag.progress.cloud/docs/ingestion/data-augmentation#graph-extractors">graph extraction agents</a> derive them from your documents, or you write them directly through <a href="https://docs.rag.progress.cloud/docs/ingestion/how-to/custom-graph/">its ingestion API.</a> Both paths build the same graph, and the API documents three relation shapes:</p><ul><li>One entity to another entity</li><li>A document to an entity it mentions</li><li>One entity declared equivalent to another entity</li></ul><p>The third shape is where competing definitions get handled. You mark &ldquo;master agreement&rdquo; and &ldquo;framework contract&rdquo; as the same concept, rather than leaving each system&rsquo;s label to stand alone. The documented gain is a more structured representation for search, not a record of which path an answer took, so keep your own evidence tests either way.</p><p>Whichever creation path you use, customers, contracts, governing policies and effective dates make a useful first slice. They expose inconsistent identifiers, competing definitions, missing ownership and stale relationships without forcing you to model the whole company. Expand only when the slice stays accurate. Your architecture review board should be able to compare the slice&rsquo;s answer accuracy and running cost against your current retrieval setup. A smaller, trustworthy graph beats an enterprise graph nobody can explain.</p><p><a href="https://www.progress.com/agentic-rag/book-a-demo">Book a demo</a> to see this run against your own content.</p><h2>FAQ</h2><h3>How should graph authorization follow source-system permissions?</h3><p>Carry source identity and access metadata along that first slice, then evaluate permissions before facts or passages enter the model context. Mixed-permission paths are where weak designs show up. Access to a customer record must not automatically grant access to a linked contract or policy. Keep denials observable without exposing the restricted value. Authorization decides who can traverse the path; temporal rules decide which path is current.</p><h3>How should the graph represent relationships that change over time?</h3><p>Represent the relationship&rsquo;s effective interval or status and preserve its source timestamp. A query for &ldquo;current&rdquo; facts should apply an agreed business-time rule, not trust the latest ingestion timestamp. Then test late-arriving amendments and overlapping intervals. Test retroactive corrections separately because a correction can change which path was valid for a past question.</p><h3>How do you know whether the graph justifies its governance cost?</h3><p>Temporal rules add governance work, so make the graph earn it. Measure answer accuracy and the rate of unsupported answers. Then measure join work and identity resolution, including freshness failures. Continue only when the improvement justifies the ownership and validation work.</p></p>]]></content>
  </entry>
  <entry>
    <id>urn:uuid:b644900b-06d5-4d08-b196-aee01fbb1d97</id>
    <title type="text">What is AI Grounding and Why Does it Prevent Hallucinations?</title>
    <summary type="text">AI grounding ties answers to verified sources, helping architects reduce hallucinations without locking retrieval into one vendor.</summary>
    <published>2026-07-31T18:44:47Z</published>
    <updated>2026-08-02T01:53:48Z</updated>
    <author>
      <name>Adam Bertram </name>
    </author>
    <link rel="alternate" href="https://www.progress.com/blogs/what-is-ai-grounding-and-why-does-it-prevent-hallucinations"/>
    <content type="text"><![CDATA[<p>Let me show you six court filings that never happened. Each had a plaintiff, a defendant, a judge and a citation number. A lawyer submitted all six to a federal court in <a href="https://en.wikipedia.org/wiki/Mata_v._Avianca,_Inc."><em>Mata v. Avianca</em></a> because an AI wrote them and sounded sure of itself. That confident invention has a name: an <a href="https://arxiv.org/abs/2509.04664"><em>AI hallucination</em></a>. Model training rewards a confident guess over an honest admission of doubt. Grounding gives you a better control. It ties answers to sources you can inspect, and it can reduce hallucinations without locking your architecture to one model.</p><h2>What Is Grounding in RAG?</h2><p>Start with what you want: better answers, with fewer invented ones. Grounding is the means to that end. It tethers each answer to an authoritative source, so the model does not rely on training data alone. <a href="https://arxiv.org/abs/2005.11401"><em>Retrieval-augmented generation (RAG)</em></a> is the pattern most teams use. It fetches passages from your content at question time and tells the model to answer from them.</p><p>Grounding is broader than RAG. You can ground an answer through:</p><ul><li>A tool call that returns a live system value</li><li>A lookup against a governed table</li><li>Citation rules that reject unsupported claims</li><li>A context API that supplies curated metadata</li></ul><p>Keep the goal separate from the mechanism. When a vendor says &ldquo;we do RAG,&rdquo; ask whether the answers improve and how you can prove it.</p><h2>How Does Grounding Prevent Hallucinations in RAG?</h2><p>An AI hallucination happens when a model fills a knowledge gap with plausible text. The model is not lying. It predicts patterns without knowing whether they are true. Grounding narrows that gap by retrieving relevant facts before the model writes its answer. In one study, <a href="https://arxiv.org/abs/2104.07567"><em>retrieval cut hallucinated responses by more than 60%.</em></a></p><p>The percentage matters less than the audit path. A grounded answer can cite the exact source it used, so you can inspect the supporting passage. Picture the alternative. A confident answer reaches a customer email or a board slide. A week later, someone asks where it came from. With a memory-only model, there is nothing to open.</p><h2>Why Doesn&rsquo;t a Bigger Model Mean Better Answers?</h2><p>If hallucinations come from knowledge gaps, a bigger model should have fewer gaps, right? The data does not cooperate. OpenAI&rsquo;s o3 reasoning model <a href="https://cdn.openai.com/pdf/2221c875-02dc-4789-800b-e7758f3722c1/o3-and-o4-mini-system-card.pdf"><em>hallucinated on 33% of the PersonQA benchmark</em></a>. The older o1 scored 16%. More capability did not buy more truth.</p><p>Your enterprise data creates a more basic limit. No public model knows your current contracts or last quarter&rsquo;s pricing exception. A larger model arrives knowing more about the world and exactly as little about your company.</p><p><strong><em>Warning: If model upgrades are your hallucination strategy, your reliability roadmap depends on a vendor&rsquo;s release schedule. Grounding keeps that control on your side.</em></strong></p><p>A larger context window does not solve that problem. It accepts more material, but it still cannot prove which passage drove an answer. It also cannot decide whether the person asking may see that source. Grounding adds traceable sources and query-time access checks. Model size adds neither.</p><h2>How Do You Turn Grounding Into Durable Architecture?</h2><p>Grounding now earns its place in the design. The next question is how to make it survive model changes and fit the estate you already run.</p><p>Build a shared, model-agnostic grounding layer between enterprise content and each AI experience. OpenAI-compatible APIs can make a model swap a configuration change. Embeddings create the deeper lock-in. Change the embedding model and you must re-index the corpus, so keep that choice open too.</p><p>Trace at least one real source-system path before you approve the design: SharePoint to an ingestion connector, then to a governed index, permission-filtered retrieval and the AI experience. That path exposes integration and access assumptions that a box labeled &ldquo;enterprise data&rdquo; hides.</p><p>The design also needs evaluation. A separate evaluator, often called a judge model, compares each answer with its retrieved context and assigns a generic groundedness score. Judge models can use different scales, so store the scoring method with the result. If score history must move between platforms, require a documented export format and verify it during procurement. Do not assume it travels.</p><p><a href="https://www.progress.com/agentic-rag"><em>Progress Agentic RAG</em></a><em> </em>provides the scoring function through <a href="https://www.progress.com/agentic-rag/features/remi-rag-evaluation-model"><em>REMi (RAG Evaluation Metrics)</em></a>. Its named Groundedness metric measures whether the generated answer is supported by retrieved context. That verified capability does not imply that score export is available.</p><p>Durable grounding must also honor who is asking. Filter candidate sources against each user&rsquo;s permissions at query time. Log the retrieved content and source identity. When an auditor asks why the system produced an answer, that log separates evidence from guesswork.</p><h2>What Should an Architect Do Now?</h2><p>Ask a harder question than &ldquo;which model should we use?&rdquo; Check that every answer can point to its source and that retrieval preserves source permissions. Then confirm that the evaluation method survives a platform review. Design grounding as shared infrastructure with replaceable models and embeddings. Verify score portability instead of assuming it.</p><p><a href="https://www.progress.com/agentic-rag/book-a-demo"><em>Book a demo</em></a> to see Groundedness measured against your own content.</p><h2>FAQ</h2><p>Three practical questions follow once grounding becomes an architecture decision.</p><h3>How Do You Prove an Answer Is Actually Grounded?</h3><p>Return the source with every answer. Then check that the cited passage supports the claim. A real grounding layer exposes the retrieved content and its origin. A footnote label added after generation proves nothing.</p><h3>Can Grounding Eliminate Hallucinations Completely?</h3><p>No. Grounding reduces hallucinations by shrinking the gaps a model fills on its own. It also makes failures easier to detect because each answer points to a source you can inspect. The goal is an auditable system, not a perfect model.</p><h3>Does Grounding Slow Answers Down or Add Cost?</h3><p>Retrieval adds latency and compute cost. That tradeoff favors grounding when someone will act on the answer. For lower-stakes paths, use a lighter model. Reserve heavier models for decisions with larger consequences.</p>]]></content>
  </entry>
</feed>
