{
  "source_file": "0930",
  "source_platform": "Medium",
  "author": "Petr Koráb",
  "title_listed": "Topic Modeling Techniques for 2026: Seeded Modeling, LLM Integration, and Data Summaries",
  "keywords": "",
  "domain": "文本处理",
  "content_type": "深度技术解析",
  "is_paid_flag": "否",
  "url": "https://towardsdatascience.com/topic-modeling-techniques-for-2026-seeded-modeling-llm-integration-and-data-summaries/",
  "publish_date": "2026-01-14",
  "corpus_stage": "",
  "notes": "",
  "id": "647cfd8ba857",
  "collected_at": "2026-10-02T03:33:46",
  "title": "Topic Modeling Techniques for 2026: Seeded Modeling, LLM Integration, and Data Summaries | Towards Data Science",
  "body_markdown": "![Revisit consent button](../images/body-df29beacd7496220cc94.svg)\nWe value your privacy\nWe use cookies to enhance your browsing experience, serve personalised ads or content, and analyse our traffic. By clicking \"Accept All\", you consent to our use of cookies.\nCustomise Reject All Accept All\nCustomise Consent Preferences ![](../images/body-2159bb67f3de8ad870eb.svg)\nWe use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.\nThe cookies that are categorised as \"Necessary\" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... Show more\nNecessaryAlways Active\nNecessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.\n  * Cookie\nBCTempID\n  * Duration\n10 minutes\n  * Description\nNo description available.\n\n\n  * Cookie\n__cf_bm\n  * Duration\n1 hour\n  * Description\nThis cookie, set by Cloudflare, is used to support Cloudflare Bot Management. \n\n\n  * Cookie\nAWSALBCORS\n  * Duration\n7 days\n  * Description\nAmazon Web Services set this cookie for load balancing.\n\n\n  * Cookie\n_cfuvid\n  * Duration\nsession\n  * Description\nCloudflare sets this cookie to track users across sessions to optimize user experience by maintaining session consistency and providing personalized services\n\n\n  * Cookie\nli_gc\n  * Duration\n6 months\n  * Description\nLinkedin set this cookie for storing visitor's consent regarding using cookies for non-essential purposes.\n\n\n  * Cookie\n__hssrc\n  * Duration\nsession\n  * Description\nThis cookie is set by Hubspot whenever it changes the session cookie. The __hssrc cookie set to 1 indicates that the user has restarted the browser, and if the cookie does not exist, it is assumed to be a new session.\n\n\n  * Cookie\n__hssc\n  * Duration\n1 hour\n  * Description\nHubSpot sets this cookie to keep track of sessions and to determine if HubSpot should increment the session number and timestamps in the __hstc cookie.\n\n\n  * Cookie\nwpEmojiSettingsSupports\n  * Duration\nsession\n  * Description\nWordPress sets this cookie when a user interacts with emojis on a WordPress site. It helps determine if the user's browser can display emojis properly.\n\n\n  * Cookie\nBCSessionID\n  * Duration\n1 year 1 month 4 days\n  * Description\nBlueconic sets this cookie as a unique identifier for the BlueConic profile.\n\n\n  * Cookie\n_octo\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\nlogged_in\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\n__Secure-YEC\n  * Duration\npast\n  * Description\nYouTube sets this cookie to stores the user's video player preferences using embedded YouTube video\n\n\n  * Cookie\n__eoi\n  * Duration\n6 months\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nAWSALBTGCORS\n  * Duration\n7 days\n  * Description\nNo description available.\n\n\n  * Cookie\nlogin-status-p\n  * Duration\npast\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nAWSALBTG\n  * Duration\n7 days\n  * Description\nNo description available.\n\n\n  * Cookie\ncsrf_token\n  * Duration\nsession\n  * Description\nNo description available.\n\n\n  * Cookie\ntoken_v2\n  * Duration\n1 day\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nD\n  * Duration\n1 year\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nPHPSESSID\n  * Duration\nsession\n  * Description\nThis cookie is native to PHP applications. The cookie stores and identifies a user's unique session ID to manage user sessions on the website. The cookie is a session cookie and will be deleted when all the browser windows are closed.\n\n\n  * Cookie\nVISITOR_PRIVACY_METADATA\n  * Duration\n6 months\n  * Description\nYouTube sets this cookie to store the user's cookie consent state for the current domain. \n\n\n  * Cookie\ncookietest\n  * Duration\nsession\n  * Description\nThe cookietest cookie is typically used to determine whether the user's browser accepts cookies, essential for website functionality and user experience.\n\n\n  * Cookie\n__Host-airtable-session\n  * Duration\n1 year\n  * Description\nThis cookie is used to enable us to integrate the services of Airtable.\n\n\n  * Cookie\n__Host-airtable-session.sig\n  * Duration\n1 year\n  * Description\nThis cookie is used to enable us to integrate the services of Airtable.\n\n\n  * Cookie\nm\n  * Duration\n1 year 1 month 4 days\n  * Description\nStripe sets this cookie for fraud prevention purposes. It identifies the device used to access the website, allowing the website to be formatted accordingly.\n\n\n  * Cookie\nBIGipServer*\n  * Duration\nsession\n  * Description\nMarketo sets this cookie to collect information about the user's online activity and build a profile about their interests to provide advertisements relevant to the user. \n\n\n  * Cookie\n__cfruid\n  * Duration\nsession\n  * Description\nCloudflare sets this cookie to identify trusted web traffic.\n\n\n  * Cookie\n_GRECAPTCHA\n  * Duration\n6 months\n  * Description\nGoogle Recaptcha service sets this cookie to identify bots to protect the website against malicious spam attacks.\n\n\n  * Cookie\n__Secure-YNID\n  * Duration\n6 months\n  * Description\nGoogle cookie used to protect user security and prevent fraud, especially during the login process.\n\n\n  * Cookie\ncookieyes-consent\n  * Duration\n1 year\n  * Description\nCookieYes sets this cookie to remember users' consent preferences so that their preferences are respected on subsequent visits to this site. It does not collect or store any personal information about the site visitors.\n\n\nFunctional\nFunctional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.\n  * Cookie\nlidc\n  * Duration\n1 day\n  * Description\nLinkedIn sets the lidc cookie to facilitate data center selection.\n\n\n  * Cookie\nbrw\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\nbrwConsent\n  * Duration\n5 minutes\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nWMF-Uniq\n  * Duration\n1 year\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nloom_anon_comment\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\nloom_referral_video\n  * Duration\nsession\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nVISITOR_INFO1_LIVE\n  * Duration\n6 months\n  * Description\nA cookie set by YouTube to measure bandwidth that determines whether the user gets the new or old player interface.\n\n\n  * Cookie\nyt-remote-connected-devices\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to store the user's video preferences using embedded YouTube videos.\n\n\n  * Cookie\nytidb::LAST_RESULT_ENTRY_KEY\n  * Duration\nNever Expires\n  * Description\nThe cookie ytidb::LAST_RESULT_ENTRY_KEY is used by YouTube to store the last search result entry that was clicked by the user. This information is used to improve the user experience by providing more relevant search results in the future.\n\n\n  * Cookie\nyt-remote-device-id\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to store the user's video preferences using embedded YouTube videos.\n\n\n  * Cookie\nyt-remote-session-name\n  * Duration\nsession\n  * Description\nThe yt-remote-session-name cookie is used by YouTube to store the user's video player preferences using embedded YouTube video.\n\n\n  * Cookie\nyt-remote-fast-check-period\n  * Duration\nsession\n  * Description\nThe yt-remote-fast-check-period cookie is used by YouTube to store the user's video player preferences for embedded YouTube videos.\n\n\n  * Cookie\nyt-remote-session-app\n  * Duration\nsession\n  * Description\nThe yt-remote-session-app cookie is used by YouTube to store user preferences and information about the interface of the embedded YouTube video player.\n\n\n  * Cookie\nyt-remote-cast-available\n  * Duration\nsession\n  * Description\nThe yt-remote-cast-available cookie is used to store the user's preferences regarding whether casting is available on their YouTube video player.\n\n\n  * Cookie\nyt-remote-cast-installed\n  * Duration\nsession\n  * Description\nThe yt-remote-cast-installed cookie is used to store the user's video player preferences using embedded YouTube video.\n\n\n  * Cookie\ncp_session\n  * Duration\n3 months\n  * Description\nCodepen sets this cookie for Help systems found in the website.\n\n\n  * Cookie\nloid\n  * Duration\n1 year 1 month 4 days\n  * Description\nThis cookie is set by the Reddit. The cookie enables the sharing of content from the website onto the social media platform.\n\n\nAnalytics\nAnalytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.\n  * Cookie\n__hstc\n  * Duration\n6 months\n  * Description\nHubspot set this main cookie for tracking visitors. It contains the domain, initial timestamp (first visit), last timestamp (last visit), current timestamp (this visit), and session number (increments for each subsequent session).\n\n\n  * Cookie\nhubspotutk\n  * Duration\n6 months\n  * Description\nHubSpot sets this cookie to keep track of the visitors to the website. This cookie is passed to HubSpot on form submission and used when deduplicating contacts.\n\n\n  * Cookie\n_ga\n  * Duration\n1 year 1 month 4 days\n  * Description\nGoogle Analytics sets this cookie to calculate visitor, session and campaign data and track site usage for the site's analytics report. The cookie stores information anonymously and assigns a randomly generated number to recognise unique visitors.\n\n\n  * Cookie\n_ga_*\n  * Duration\n1 year 1 month 4 days\n  * Description\nGoogle Analytics sets this cookie to store and count page views.\n\n\n  * Cookie\n__Host-psifi.analyticsTrace\n  * Duration\n6 hours\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\n__Host-psifi.analyticsTraceV2\n  * Duration\n6 hours\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\n_gh_sess\n  * Duration\nsession\n  * Description\nGitHub sets this cookie for temporary application and framework state between pages like what step the user is on in a multiple step form.\n\n\n  * Cookie\nYSC\n  * Duration\nsession\n  * Description\nYSC cookie is set by Youtube and is used to track the views of embedded videos on Youtube pages.\n\n\n  * Cookie\najs_anonymous_id\n  * Duration\n1 year\n  * Description\nThis cookie is set by Segment to count the number of people who visit a certain site by tracking if they have visited before.\n\n\n  * Cookie\nvuid\n  * Duration\n1 year 1 month 4 days\n  * Description\nVimeo installs this cookie to collect tracking information by setting a unique ID to embed videos on the website. \n\n\nPerformance\nPerformance cookies are used to understand and analyse the key performance indexes of the website which helps in delivering a better user experience for the visitors.\n  * Cookie\nAWSALB\n  * Duration\n7 days\n  * Description\nAWSALB is an application load balancer cookie set by Amazon Web Services to map the session to the target.\n\n\n  * Cookie\nacq\n  * Duration\npast\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nacq.sig\n  * Duration\npast\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nptc\n  * Duration\n2 years\n  * Description\nNo description available.\n\n\nAdvertisement\nAdvertisement cookies are used to provide visitors with customised advertisements based on the pages you visited previously and to analyse the effectiveness of the ad campaigns.\n  * Cookie\nmuc_ads\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to collect user behaviour and interaction data to optimize the website.\n\n\n  * Cookie\nguest_id_marketing\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to identify and track the website visitor.\n\n\n  * Cookie\nguest_id_ads\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to identify and track the website visitor.\n\n\n  * Cookie\npersonalization_id\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to integrate and share features for social media and also store information about how the user uses the website, for tracking and targeting.\n\n\n  * Cookie\nguest_id\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to identify and track the website visitor. It registers if a user is signed in to the Twitter platform and collects information about ad preferences.\n\n\n  * Cookie\nbcookie\n  * Duration\n1 year\n  * Description\nLinkedIn sets this cookie from LinkedIn share buttons and ad tags to recognize browser IDs.\n\n\n  * Cookie\n__Secure-ROLLOUT_TOKEN\n  * Duration\n6 months\n  * Description\nYouTube sets this cookie to manage feature rollout and experimentation. It helps Google control which new features or interface changes are shown to users as part of testing and staged rollouts, ensuring consistent experience for a given user during an experiment.\n\n\n  * Cookie\nyt.innertube::nextId\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to register a unique ID to store data on what videos from YouTube the user has seen.\n\n\n  * Cookie\nyt.innertube::requests\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to register a unique ID to store data on what videos from YouTube the user has seen.\n\n\n  * Cookie\nsession_tracker\n  * Duration\nsession\n  * Description\nThis cookie is set by the Reddit. This cookie is used to identify trusted web traffic. It also helps in adverstising on the website.\n\n\n  * Cookie\nedgebucket\n  * Duration\nsession\n  * Description\nReddit sets this cookie to save the information about a log-on Reddit user, for the purpose of advertisement recommendations and updating the content.\n\n\n  * Cookie\ndid\n  * Duration\n1 year\n  * Description\nArbor sets this cookie to show targeted ads to site visitors.This cookie expires after 2 months or 1 year.\n\n\nUncategorised\nOther uncategorised cookies are those that are being analysed and have not been classified into a category as yet.\nNo cookies to display.\nReject All Save My Preferences Accept All\nToggle Search[](https://towardsdatascience.com/)Toggle Mobile Navigation\n[](https://towardsdatascience.com/)\nPublish AI, ML & data-science insights to a global community of data professionals.\nSign in[Submit an Article](https://write.insightmediagroup.io)\n[Latest](https://towardsdatascience.com/latest/)[Editor's Picks](https://towardsdatascience.com/tag/editors-pick/)[Newsletter](https://towardsdatascience.com/tag/the-variable/)[ShipAI](https://towardsdatascience.com/shipai/)\n* * *\n[Write For TDS](https://towardsdatascience.com/submissions/)\n[LinkedIn](https://www.linkedin.com/company/towards-data-science/)[X](https://x.com/TDataScience)Toggle Search\n[Machine Learning](https://towardsdatascience.com/category/artificial-intelligence/machine-learning/)\n# Topic Modeling Techniques for 2026: Seeded Modeling, LLM Integration, and Data Summaries\nSeeded topic modeling, integration with LLMs, and training on summarized data are the fresh parts of the NLP toolkit.\n[Petr Koráb](https://towardsdatascience.com/author/petrkorab/)\nJanuary 14, 202613 min read\n![](../images/000.jpg)\nSource: Image by authors.\n_**By**_ _: Martin Feldkircher (Vienna School of International Studies), Márton Kardos (Aarhus University, Denmark), and Petr Koráb (Text Mining Stories)_\n## 1. Introduction\nTopic modelling has recently progressed in two directions. The improved **statistical methods** stream of Python packages focuses on more robust, efficient, and preprocessing-free models, producing fewer junk topics (e.g., FASTopic). The other relies on the power of **generative language models** to extract intuitively understandable topics and their descriptions (e.g., TopicGPT[ [6]](https://aclanthology.org/2024.naacl-long.164/), LlooM[ [5])](https://crawford.anu.edu.au/sites/default/files/2025-06/35_2025_Feldkircher_Korab_Teliha_1.pdf).\nThanks to research on statistical methods for modelling text representations from transformers, junk topics are the exception rather than the norm in newer models. Meanwhile, novel, LLM-based approaches are challenging our long-standing views about what a topic model is and what it can do. **Human-readable topic names** and **descriptions** are now becoming more and more an expected result of a well-designed topic modelling pipeline.\nAs exciting as these developments are, topic modelling is far from being a solved problem. Neural topic models can be rather **unstable** and sometimes hard for users to trust because of their **black-box nature**. LLM-powered methods produce impressive results, but can at times raise questions about trust, due to hallucinations and sensitivity to semantically irrelevant changes in input. This is especially a problem for the banking sector, where (un)certainty is essential. Running large language models is also a huge infrastructural and computational burden, and might end up costing large sums of money even for smaller datasets.\nLearn this step by step with the interactive [Machine Learning](https://roadmap.sh/machine-learning) roadmap.\n[Our previous tutorial](https://towardsdatascience.com/topic-model-labelling-with-llms/) provides a detailed introduction to how LLMs enhance traditional topic modeling by automatically labeling topic names. In this article, we combine current topic modeling methods with targeted LLM assistance. In our view, a combination of recent advances in language modeling and classical machine learning can provide users with the best of both worlds: a pipeline that combines the capabilities of large language models with the computational efficiency, trustworthiness, and stability of probabilistic ML.\nThis article explains three fresh topic-modelling techniques that should be part of the NLP toolkit in 2026. We will figure out:\n  * _How to use text prompts to specify what topic models should focus on (i.e., seeded topic models)._\n  * _How LLM-generated summaries can make topic models more accurate._\n  * _How generative models can be used to label topics and provide their descriptions._\n  * _How these techniques can be used to gain insights from central banking communication._\n\n\nWe illustrate these on the central bank communication speeches corpus from the European Central Bank. This type of text is long, carefully structured, and highly repetitive — exactly the kind of data where standard topic models struggle and where interpretability is essential. By combining seeded topic modelling with LLM-assisted document summarization and analysis, we show how to extract focused, stable, and economically meaningful topics without compromising transparency or scalability.\n## 2. Example Data\nWe use the press conference communications of the European Central Bank (ECB) as example text data. Since 2002, the ECB’s Governing Council has met on the first Thursday of each month, and its communication of the meeting’s outcome follows the two-step structure ([[2]](https://www.sciencedirect.com/science/article/pii/S0304393219301497)).\n> _**How it works:**__First, at 13:45 CET, the ECB releases a brief monetary policy decision (MPD) statement, which contains only limited textual information. Second, at 14:30 CET, the ECB President delivers an introductory statement during a press conference. This carefully prepared document explains the rationale behind policy decisions, outlines the ECB’s assessment of economic conditions, and provides guidance on future policy considerations. The introductory statement typically lasts about 15 minutes and is followed by a 45-minute Q &A session. _\nFor this article, we use the introductory statements, scraped directly from the ECB website (released with a[ flexible data licence](https://www.ecb.europa.eu/services/using-our-site/disclaimer/html/index.en.html)). The dataset contains 279 statements, and here is what it looks like:\n![](../images/001.png)\nImage 1: ECB communication dataset. Source: Image by authors.\n## 3. Seeded Topic Modelling \nTraditionally, topic models focus on identifying the most informative topics in a dataset. A naive approach practitioners take is to fit a larger model, then, usually manually, filter out topics irrelevant to their data question.\n> > _What if you could condition a topic model to only extract relevant topics to your data question? This is precisely what seeded topic modelling is used for._\nIn some methods, this means selecting a set of keywords that reflect your question. But in the framework we explore in this article, you can specify your interest in **free-text** using a seed phrase that tells the model what to focus on.\n### 3.1 KeyNMF Model\nWe will use the cutting-edge contextual **KeyNMF topic model**([[3]](https://arxiv.org/abs/2410.12791)). It is, in many aspects, very similar to older topic models, as it formulates topic discovery in terms of matrix factorization. In other words, when using this model, you assume that topics are **latent factors** , that your documents contain to a lesser or greater extent, which determine and explain the content of those documents. \n**KeyNMF** is contextual because, unlike older models, it uses context-sensitive transformer representations of text. To understand how seeded modelling works, we need to gain a basic understanding of the model. The modelling process happens in the following steps:\n  1. _We encode our documents into dense vectors using a sentence-transformer._\n  2. _We encode the vocabulary of these documents into the same embedding space._\n  3. _For each document, we extract the top N keywords by taking the words that have the highest cosine similarity to the document embedding._\n  4. _Word importance for a given document is then the cosine similarity, pruned at zero. These scores are arranged into a_ _**keyword matrix,**__where each row is a document, and columns correspond to words._\n  5. _The keyword matrix is decomposed into a_ _**topic-term matrix**_ _and a_ _**document-topic matrix**_ _using Nonnegative Matrix Factorization._\n\n\n![](../images/body-0cf7554271b675313452.png)\nImage 2: KeyNMF model architecture. Source: [Turftopic’s documentation](https://x-tabdeveloping.github.io/turftopic/KeyNMF)\n### 3.2 Seeded KeyNMF \nThe general **KeyNMF** , while perfectly adequate for discovering topics in a corpus, is not the most suitable choice if we need to use the model for a specific question. To make this happen, we first have to specify a **seed phrase,** a phrase that minimally indicates what we are interested in. For example, when analysing the ECB communication dataset, this could be _“Expansion of the Eurozone”_. \nAs sentence-transformers can encode this seed phrase, we can use it to retrieve documents that are relevant to our question:\n  1. _We encode the seed phrase into the same embedding space as our documents and vocabulary._\n  2. _To make our model more attentive to documents that contain relevant information, we compute a_ _**document relevance**_ _score by computing cosine similarity to the seed embedding. We prune, again, at zero._\n  3. _To exaggerate the seed’s importance, one can apply a_ _**seed exponent**_ _. This involves raising the document relevance scores to the power of this exponent._\n  4. _We multiply the keyword matrix’s entries by the document relevance._\n  5. _We then, as before, use NMF to decompose this, now conditioned, keyword matrix._\n\n\nThe **advantages** of this approach are that it is:\n  * _1) incredibly_ _**flexible**_ _, and_\n  * _2) can_ _**save**_ _a lot of_ _**manual work**_ _._\n\n\n> _**Be careful**_ _: some embedding models can be sensitive to phrasing and might retrieve different document-importance scores for the same document with a slightly different seed phrase. To deal with this, we recommend that you use one of the_[ _paraphrase models from sentence-transformers_](https://huggingface.co/sentence-transformers/paraphrase-mpnet-base-v2) _, because they have deliberately been trained to be phrasing invariant, and produce high-quality topics with KeyNMF._\n### 3.3 How to use Seeded KeyNMF\n**KeyNMF** and its seeded version are available on PyPI in the Turftopic package, in a scikit-learn-compatible form. To specify what you are interested in, simply initialize the model with a seed phrase:\npython\n\n```\nfrom sentence-transformers import SentenceTransformer\nfrom turftopic import KeyNMF\n\n# Encode documents using a sentence-transformer\nencoder = SentenceTransformer(\"paraphrase-mpnet-base-v2\")\nembeddings = encoder.encode(documents, show_progress_bar=True)\n\n# Initialize KeyNMF with 4 topics and a seed phrase\nmodel = KeyNMF(\n n_components=4,\n encoder=encoder,\n seed_phrase=\"Expansion of the Eurozone\",\n seed_exponent=3.0,\n)\n\n# Fit model \nmodel.fit(corpus)\n\n# Print modelled topics\nmodel.print_topics()\n```\n\nWe can see that the model returns topic IDs with typical keywords that are clearly related to the Euro and the Eurozone:  \n| Topic Id  | Highest Ranking  |  \n| --- | --- |  \n| 0  | gdp, economic, euro, growth, economy, assessment, analysis, macroeconomic, measures, expected  |  \n| 1  | inflation, rates, inflationary, stability, euro, rate, economy, economic, ecb, expectations  |  \n| 2  | euro, fiscal, stability, countries, reforms, question, governing, policy, european, policies  |  \n| 3  | ecb, germany, frankfurt, communicationssonnemannstrasse, 7455media, europa, question, eu, 1344, 2060314  |  \n## 4. LLM-assisted Topic Modeling\nFinding interpretable topics from a corpus is a difficult task, and it often requires more than just a statistical model that finds patterns in the raw data. LLMs serve topic modelling in two main areas:\n  * _Reading a document and identifying the right aspects in the text based on a specific data question._\n  * _Interpreting the topic model’s output in the relevant context._\n\n\nIn the following text, we will now explore 1) how LLMs improve processing documents for a topic model and 2) how generative models improve understanding and interpreting the model results.\n![](../images/body-9e48df3131af22f13b36.png)\nImage 4: Topic modelling pipeline extended with LLM components. Source: [Turftopic’s docs](https://x-tabdeveloping.github.io/turftopic/analyzers/).\n### 4.1. Document Summarization \nOne of the Achilles' heels of the sentence transformers we frequently use for topic analysis is their short context length. Encoder models that can read considerably longer contexts have rarely been evaluated for their performance in topic modeling. Therefore, we didn't know whether or how these larger transformer models work in a topic modelling pipeline. Another issue is that they produce higher-dimensional embeddings, which often negatively affect unsupervised machine learning models ([[4]](https://aclanthology.org/2025.acl-long.32/)). It can either be because Euclidean distances get inflated in higher-dimensional space, or because the number of parameters surges with input dimensionality, making parameter recovery more difficult.\nWe can solve these issues by:\n  * _**Chunking documents**_ _into smaller sections that fit into the context window of a sentence transformer. Unfortunately, chunking can result in text chunks that are wildly out of context, and it might take considerable effort to chunk documents at semantically sensible boundaries._\n  * _**Using generative models**_ _to summarize the contents of these documents. LLMs excel at this task and can also remove all types of tokenization-based noise and irrelevant information from texts that might hinder our topic model._\n\n\nLet’s now summarise the trade-offs of using LLM-generated summaries in topic modelling in the following image.\n![](../images/body-17188694f67323f9b204.png)\nImage 5: Benefits and drawbacks of LLM-assisted document processing in the topic modelling pipeline. Source: image by authors.\nThe recommended strategy for LLM-assisted document preprocessing is a two-step:\n  1. _Train a topic model with simple preprocessing, or no preprocessing at all._\n  2. _When you find that topic models have a hard time interpreting your corpus, using LLM-based summarisation can be a good choice if the trade-offs work positively in your specific project._\n\n\n#### 4.1.1. Document Summarization in Code\nLet’s now look at how we can summarize documents using an LLM. In this example, we will use GPT-5-nano, but Turftopic also allows running locally run open LLMs. We recommend using open LLMs locally, if possible, due to lower costs and better data privacy.\npython\n\n```\nimport pandas as pd\nfrom tqdm import tqdm\nfrom turftopic.analyzers import OpenAIAnalyzer, LLMAnalyzer\n\n# Loading the data\ndata = pd.read_parquet(\"data/ecb_data.parquet\")\ncontent = list(data[\"content\"])\n\n# We write a prompt that will extract the relevant information\n# We ask the model to separate information to key points so that \n# they become easier to model\n\nsummary_prompt=\"Summarize the following press conference from \nthe European Central Bank into a set of key points separated by \ntwo newline characters. Reply with the summary only, nothing else. \n\\n {document}\"\n\n# Formalize a summarized\nsummarizer = OpenAIAnalyzer(\"gpt-5-nano\", summary_prompt=summary_prompt)\nsummaries = []\n\n# Summarize dataframe, track code execution \nfor document in tqdm(data[\"content\"], desc=\"Summarising documents...\"):\n    summary = summarizer.summarize_document(document)\n    # We print summaries as we go as a sanity check, to make sure \n    # the prompt works\n    print(summary)\n    summaries.append(summary)\n\n# Collect summaries into a dataframe\nsummary_df = pd.DataFrame(\n    {\n        \"id\": data[\"id\"],\n        \"date\": data[\"date\"],\n        \"author\": data[\"author\"],\n        \"title\": data[\"title\"],\n        \"summary\": summaries,\n    }\n)\n```\n\nNext, we will fit a simple KeyNMF model on the key points in these summaries, and let the model discover the number of topics using the [_Bayesian Information Criterion_](https://en.wikipedia.org/wiki/Bayesian_information_criterion). This approach works very well in this case, but be careful that automatic topic number detection has its shortcomings. Check out the [Topic Model Leaderboard](https://x-tabdeveloping.github.io/turftopic/benchmark/) to gain more information on how models perform at detecting the number of topics.\npython\n\n```\nimport numpy as np\nimport pandas as pd\nfrom sentence_transformers import SentenceTransformer\nfrom turftopic import KeyNMF\n\n# Create corpus from text summaries (not original texts)\ncorpus = list(summary_df[\"summary\"])\n\n# Collect key points by segmenting at double line breaks\npoints = []\n\nfor doc in corpus:\n  _points = doc.split(\"\\n\\n\")\n  doc_points = [p for p in _points if len(p.strip().removeprefix(\" - \"))]\n  points.extend(doc_points)\n\n# Tell KeyNMF to automatically detect the number of topics using BIC\nmodel = KeyNMF(\"auto\", encoder=\"paraphrase-mpnet-base-v2\")\ndoc_topic = model.fit_transform(points)\n\n# Print topic IDs with top words\nmodel.print_topics()\n```\n\nHere are the KeyNMF results trained on **document summaries:**  \n| **Topic ID**  | **Highest Ranking**  |  \n| --- | --- |  \n| 0  | inflation, hicp, expectations, expected, wage, energy, prices, price, medium, pressures  |  \n| 1  | ecb, rates, unchanged, kept, key, rate, liquidity, banks, market, exchange  |  \n| 2  | m3, credit, monetary, growth, lending, liquidity, loans, financial, money, m1  |  \n| 3  | euro, area, economy, banknotes, expected, exchange, currency, countries, convergence, external  |  \n| 4  | reforms, fiscal, growth, structural, consolidation, markets, potential, productivity, market, essential  |  \n| 5  | risks, downside, growth, balanced, outlook, upside, prices, tensions, potential, global  |  \n| 6  | stability, price, medium, pact, remains, risks, expectations, term, upside, fiscal  |  \n| 7  | policy, monetary, rate, fiscal, rates, decisions, transmission, measures, remains, stance  |  \n| 8  | gdp, growth, real, economic, projections, quarter, demand, q2, expected, economy  |  \n| 9  | council, governing, rate, decision, meeting, refinancing, consensus, unanimous, ensure, rates  |  \n### 4.3. Topic Analysis with LLMs\nIn a typical topic-analysis pipeline, a user would first train a topic model, then spend time interpreting what the model has discovered, label topics manually, and finally provide a brief description of the types of documents the topic contains. This is time-consuming, especially in corpora with many identified topics. \nThis part can now be done by LLMs that can easily generate human-readable topic names and descriptions. We will use the same[ Analyzer API](https://x-tabdeveloping.github.io/turftopic/analyzers) from Turftopic to achieve this:\npython\n\n```\nfrom turftopic.analyzers import OpenAIAnalyzer\n\nanalyzer = OpenAIAnalyzer()\nanalysis_result = model.analyze_topics(analyzer, use_documents=True)\n\nprint(analysis_result.to_df())\n```\n\nWe apply the analyzer to the introductory statements issued by the ECB, which accompany each monetary policy decision. These statements are prepared carefully and follow a relatively standard structure. Here are the labelled topic names with their descriptions and top words printed from _analysis_result_ :\n![](../images/body-00445d731f83e3681912.png)\nImage 7: Topic Analysis using GPT-5-nano in Turftopic. Source: image by authors.\nNext, let’s show the prevalence of the labelled KeyNMF’ topic names over time. It's how intensely these topics were discussed in the ECB press conferences during the last 25 years:\npython\n\n```\nfrom datetime import datetime\nimport plotly.express as px\nfrom scipy.signal import savgol_filter\n\n# create dataframe from labelled topics, \n# combine with timestamp from date column\ntime_df = pd.DataFrame(\n    dict(\n        date=timestamps,\n        **dict(zip(analysis_result.topic_names, doc_topic.T /\n                                                doc_topic.sum(axis=1)))\n    )\n).set_index(\"date\")\n\n# group dataframe to monthly frequency\ntime_df = time_df.groupby(by=[time_df.index.month, time_df.index.year]).mean()\ntime_df.index = [datetime(year=y, month=m, day=1) for m, y in time_df.index]\ntime_df = time_df.sort_index()\n\n# display dataframe with Plotly\n\nfor col in time_df.columns:\n    time_df[col] = savgol_filter(time_df[col], 12, 2)\nfig = px.line(\n    time_df.sort_index(),\n    template=\"plotly_white\",\n)\nfig.show()\n```\n\nHere is the labelled topic model dataframe displayed in yearly frequency:\n![](../images/body-00e100b8f8c6fc98a400.png)\nImage 8: Topic Analysis using GPT-5-nano in Turftopic over time. Source: Image by authors.\n_**Model results in context:**__The monetary union topic was most prominent in the early 2000s (see [5] for more information). The monetary policy and rate decision topic peaks at the end of the global financial crisis around 2011, a period during which the ECB (some commentators argue mistakenly) raised interest rates. The timing of the inflation and inflation expectations topic also corresponds with economic developments: it rises sharply around 2022, when energy prices pushed inflation into double-digit territory in the euro area for the first time since its creation._\n## 5. Summary\nLet's now summarize the key points of the article. The requirements and code for this tutorial are in this [repo](https://github.com/x-tabdeveloping/ecb-presentation).\n  * SeededKeyNMF topic model combines text prompts with the latest topic model to concentrate modelling on a certain problem.\n  * Summarizing data for topic modeling reduces training time, but it has drawbacks that should be considered in a project.\n  * The Tutftopic Python package implements systematic descriptions and labels with recent LLMs into a topic modelling pipeline.\n\n\n## References \n[1]Taejin Park, Fernando Perez-Cruz and Hyun Song Shin. 2025. [_Mapping the space of central bankers' ideas_](https://www.bis.org/publ/work1299.htm). In: BIS Working Papers, No. 1299, 16 October 2025, 26 pp.\n[2] Carlo Altavilla, Luca Brugnolini, Refet S. Gürkaynak, Roberto Motto and Giuseppe Ragusa. 2019. [Measuring euro area monetary policy](https://www.sciencedirect.com/science/article/pii/S0304393219301497). In: _Journal of Monetary Economics_ , Volume 108, pp 162-179.\n[3] Ross Deans Kristensen-McLachlan, Rebecca M.M. Hicke, Márton Kardos, and Mette Thunø. 2024. _Context is Key(NMF):_[_Modelling Topical Information Dynamics in Chinese Diaspora Media_](https://arxiv.org/abs/2410.12791) _._ In: CHR 2024: Computational Humanities Research Conference, December 4–6, 2024, Aarhus, Denmark.\n[4] Márton Kardos, Jan Kostkan, Kenneth Enevoldsen, Arnault-Quentin Vermillet, Kristoffer Nielbo, and Roberta Rocca. 2025. [_S3 - Semantic Signal Separation_](https://aclanthology.org/2025.acl-long.32/). In: Proceedings of the 63rd Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), pages 633–666, Vienna, Austria. Association for Computational Linguistics.\n[5] Martin Feldkircher, Petr Koráb and Viktoriya Teliha. 2025. [_What do central bankers talk about? Evidence from the BIS archive_](https://crawford.anu.edu.au/sites/default/files/2025-06/35_2025_Feldkircher_Korab_Teliha_1.pdf) _._ In: CAMA Working Paper Nr. 35/2025.\n[6] Michelle S. Lam, Janice Teoh, James A. Landay, Jeffrey Heer, and Michael S. Bernstein. 2024. _Concept Induction: Analyzing Unstructured Text with High-Level Concepts Using LLooM_. In: Proceedings of the 2024 CHI Conference on Human Factors in Computing Systems (CHI '24). Association for Computing Machinery, New York, NY, USA, Article 766, 1–28. <https://doi.org/10.1145/3613904.3642830>.\n[7] Chau Minh Pham, Alexander Hoyle, Simeng Sun, Philip Resnik, and Mohit Iyyer. 2024. [TopicGPT: A Prompt-based Topic Modeling Framework](https://aclanthology.org/2024.naacl-long.164/). In Proceedings of the 2024 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies (Volume 1: Long Papers), pages 2956–2984, Mexico City, Mexico. Association for Computational Linguistics.\n## Register Now to Continue Reading\n### Unlock Towards Data Science with a Free Account\nAll articles on Towards Data Science are available to registered users. Create a free account today to access this article and thousands more.\nRegister for freeSign in to your account\n* * *\n![](../images/body-9e78938b5e8b0a70213c.jpeg)\nWritten By\n## [Petr Koráb](https://towardsdatascience.com/author/petrkorab/)\n[See all from Petr Koráb](https://towardsdatascience.com/author/petrkorab/)\n[Editor's Picks](https://towardsdatascience.com/tag/editors-pick/)[Llm Applications](https://towardsdatascience.com/tag/llm-applications/)[NLP](https://towardsdatascience.com/tag/nlp/)[Statistical Modeling](https://towardsdatascience.com/tag/statistical-modeling/)[Topic Modelling](https://towardsdatascience.com/tag/topic-modelling/)\nShare This Article\n  * [](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Ftowardsdatascience.com%2Ftopic-modeling-techniques-for-2026-seeded-modeling-llm-integration-and-data-summaries%2F&title=Topic%20Modeling%20Techniques%20for%202026%3A%20Seeded%20Modeling%2C%20LLM%20Integration%2C%20and%20Data%20Summaries)\n  * [](https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Ftowardsdatascience.com%2Ftopic-modeling-techniques-for-2026-seeded-modeling-llm-integration-and-data-summaries%2F&title=Topic%20Modeling%20Techniques%20for%202026%3A%20Seeded%20Modeling%2C%20LLM%20Integration%2C%20and%20Data%20Summaries)\n  * [](https://x.com/share?url=https%3A%2F%2Ftowardsdatascience.com%2Ftopic-modeling-techniques-for-2026-seeded-modeling-llm-integration-and-data-summaries%2F&text=Topic%20Modeling%20Techniques%20for%202026%3A%20Seeded%20Modeling%2C%20LLM%20Integration%2C%20and%20Data%20Summaries)\n\n\nTowards Data Science is a community publication. Submit your insights to reach our global audience and earn through the TDS Author Payment Program.\n[Write for TDS](https://towardsdatascience.com/submissions/)\n## Related Articles\n  * [![](../images/002.jpg)](https://towardsdatascience.com/the-ultimate-beginners-guide-to-geospatial-raster-data-feb7673f6db0/)\n## [The Ultimate Beginner's Guide to Geospatial Raster Data](https://towardsdatascience.com/the-ultimate-beginners-guide-to-geospatial-raster-data-feb7673f6db0/)\n[](https://towardsdatascience.com/topic-modeling-techniques-for-2026-seeded-modeling-llm-integration-and-data-summaries/)\nEverything you need to know about raster files, georeferencing, metadata and Rasterio Python library\n[Mattia Gatti](https://towardsdatascience.com/author/mattiagatti/)\nOctober 13, 202213 min read\n  * [![](../images/003.jpeg)](https://towardsdatascience.com/analysis-of-us-elections-from-1976-to-2010-with-pandas-6654cf69849d/)\n## [Analysis of US Elections from 1976 to 2010 with Pandas](https://towardsdatascience.com/analysis-of-us-elections-from-1976-to-2010-with-pandas-6654cf69849d/)\n[Artificial Intelligence](https://towardsdatascience.com/category/artificial-intelligence/)\nPractice Pandas while providing valuable insights into past elections.\n[Soner Yıldırım](https://towardsdatascience.com/author/sonery/)\nOctober 18, 20205 min read\n  * [![](../images/004.png)](https://towardsdatascience.com/ai-aids-eyes-a-computer-vision-system-to-remind-operators-to-wear-safety-glasses-ba0a1fe51b0/)\n## [AI Aids Eyes : a computer vision system to remind operators to wear safety glasses](https://towardsdatascience.com/ai-aids-eyes-a-computer-vision-system-to-remind-operators-to-wear-safety-glasses-ba0a1fe51b0/)\n[Artificial Intelligence](https://towardsdatascience.com/category/artificial-intelligence/)\nHere is a demo of the system. When the system detects that a drill is...\n[Chris](https://towardsdatascience.com/author/kakittwo/)\nOctober 22, 20183 min read\n  * [![](../images/005.png)](https://towardsdatascience.com/things-i-learnt-by-participating-in-genai-hackathons-over-the-past-6-months/)\n## [Things I Learned by Participating in GenAI Hackathons Over the Past 6 Months](https://towardsdatascience.com/things-i-learnt-by-participating-in-genai-hackathons-over-the-past-6-months/)\n[Artificial Intelligence](https://towardsdatascience.com/category/artificial-intelligence/)\nSharing my two cents from the building in public journey so far\n[Parul Pandey](https://towardsdatascience.com/author/pandeyparul/)\nOctober 20, 20259 min read\n  * [![](../images/006.jpg)](https://towardsdatascience.com/five-tips-for-a-successful-api-3d8fdb1e24a6/)\n## [Five Tips for a Successful API](https://towardsdatascience.com/five-tips-for-a-successful-api-3d8fdb1e24a6/)\n[NLP](https://towardsdatascience.com/category/artificial-intelligence/nlp/)\nIt's now remarkably easy to release to the world a cloud-based application programming interface (API) that provides some software...\n[Robert Dale](https://towardsdatascience.com/author/language-technology/)\nSeptember 25, 201911 min read\n  * [![](../images/007.png)](https://towardsdatascience.com/langgraph-101-lets-build-a-deep-research-agent/)\n## [LangGraph 101: Let’s Build A Deep Research Agent](https://towardsdatascience.com/langgraph-101-lets-build-a-deep-research-agent/)\n[Large Language Models](https://towardsdatascience.com/category/artificial-intelligence/large-language-models/)\nLearn LangGraph fundamentals from Google’s open-source full-stack implementation\n[Shuai Guo](https://towardsdatascience.com/author/shuaiguo/)\nAugust 14, 202527 min read\n  * [![](../images/008.png)](https://towardsdatascience.com/counterfactuals-for-reinforcement-learning-i-what-if-d70188fb83c2/)\n## [Counterfactuals for Reinforcement Learning I: \"What if... ?\"](https://towardsdatascience.com/counterfactuals-for-reinforcement-learning-i-what-if-d70188fb83c2/)\n[](https://towardsdatascience.com/topic-modeling-techniques-for-2026-seeded-modeling-llm-integration-and-data-summaries/)\nIntroduction to the POMDP framework and counterfactuals\n[Felix Hofstätter](https://towardsdatascience.com/author/felhof1/)\nDecember 30, 20218 min read\n  * [![](../images/009.png)](https://towardsdatascience.com/understanding-what-we-lose-b91e114e281b/)\n## [Understanding What We Lose](https://towardsdatascience.com/understanding-what-we-lose-b91e114e281b/)\n[Artificial Intelligence](https://towardsdatascience.com/category/artificial-intelligence/)\nHow We Tackle Catastrophic Forgetting in LLMs\n[Matt Tengtrakool](https://towardsdatascience.com/author/matt.tengtrakool/)\nMay 23, 20238 min read\n  * [![](../images/010.jpg)](https://towardsdatascience.com/feature-engineering-techniques-for-numerical-variables-in-python-4bd42e8bded7/)\n## [Feature Engineering Techniques for Numerical Variables in Python](https://towardsdatascience.com/feature-engineering-techniques-for-numerical-variables-in-python-4bd42e8bded7/)\n[Machine Learning](https://towardsdatascience.com/category/artificial-intelligence/machine-learning/)\nLearn the most useful feature engineering techniques to convert numerical values ​​into useful information for your predictive model using...\n[Andrea D'Agostino](https://towardsdatascience.com/author/thedrewdag/)\nSeptember 24, 202418 min read\n\n\n  * [YouTube](https://www.youtube.com/c/TowardsDataScience)\n  * [X](https://x.com/TDataScience)\n  * [LinkedIn](https://www.linkedin.com/company/towards-data-science/)\n  * [Threads](https://www.threads.net/@towardsdatascience)\n  * [Bluesky](https://bsky.app/profile/towardsdatascience.com)\n\n\n[](https://towardsdatascience.com/)\nYour home for data science and AI. The world's leading publication for data science, data analytics, data engineering, machine learning, and artificial intelligence professionals.\nSubscribe to Our Newsletter[Write For TDS](https://towardsdatascience.com/submissions/)•[About](https://towardsdatascience.com/about-towards-data-science-d691af11cc2f/)•[Advertise](https://contact.towardsdatascience.com/advertise-with-towards-data-science)•[Privacy Policy](https://towardsdatascience.com/privacy-policy/)•[Terms of Use](https://towardsdatascience.com/website-terms-of-use/)\n© Insight Media Group, LLC 2026•[The New Stack](https://thenewstack.io)•[roadmap.sh](https://roadmap.sh)•[Creator Network](https://insightmediagroup.io/creator-network)\n####  Recommended Articles \nClose\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607686/image?etag=1782161464448&width=500&height=500) How Relevance Models Foreshadowed Transformers for NLP ](https://towardsdatascience.com/how-relevance-models-foreshadowed-transformers-for-nlp/ \"How Relevance Models Foreshadowed Transformers for NLP\")\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607639/image?etag=1781250125848&width=500&height=500) Javascript Fatigue: HTMX Is All You Need to Build ChatGPT — Part 1 ](https://towardsdatascience.com/javascript-fatigue-you-dont-need-js-to-build-chatgpt/ \"Javascript Fatigue: HTMX Is All You Need to Build ChatGPT — Part 1\")\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607930/image?etag=1782124566054&width=500&height=500) The Subset Sum Problem Solved in Linear Time for Dense Enough Inputs ](https://towardsdatascience.com/subset-sum-problem-solved-in-linear-time-for-dense-enough-inputs/ \"The Subset Sum Problem Solved in Linear Time for Dense Enough Inputs\")\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/3660/image?etag=1780176246070&width=500&height=500) Does Your Company Have a Data Strategy? ](https://towardsdatascience.com/does-your-company-have-a-data-strategy-e8944dbec4ae/ \"Does Your Company Have a Data Strategy?\")\n\n\n",
  "metadata": {
    "title": "Topic Modeling Techniques for 2026: Seeded Modeling, LLM Integration, and Data Summaries | Towards Data Science",
    "description": "Seeded topic modeling, integration with LLMs, and training on summarized data are the fresh parts of the NLP toolkit.",
    "keywords": null,
    "author": "Petr Koráb",
    "og:locale": "en_US",
    "og:type": "article",
    "og:title": "Topic Modeling Techniques for 2026: Seeded Modeling, LLM Integration, and Data Summaries",
    "og:description": "Seeded topic modeling, integration with LLMs, and training on summarized data are the fresh parts of the NLP toolkit.",
    "og:url": "https://towardsdatascience.com/topic-modeling-techniques-for-2026-seeded-modeling-llm-integration-and-data-summaries/",
    "og:site_name": "Towards Data Science",
    "og:image": "https://assets.insightmediagroup.io/media/wp-content/uploads/2026/01/image-356.jpg",
    "og:image:width": "1353",
    "og:image:height": "980",
    "og:image:type": "image/jpeg",
    "twitter:card": "summary_large_image",
    "twitter:site": "@TDataScience",
    "twitter:creator": "@TDataScience",
    "twitter:label1": "Written by",
    "twitter:data1": "Petr Koráb",
    "twitter:label2": "Est. reading time",
    "twitter:data2": "13 min read",
    "article:published_time": "2026-01-14T07:00:13.000Z",
    "article:modified_time": "2026-01-14T07:00:13.000Z",
    "article:author": "https://towardsdatascience.com/author/petrkorab/"
  },
  "paywall": {
    "listed_paid": false,
    "detected": false,
    "marker": "",
    "public_only": false,
    "policy": "付费/会员内容只保留页面公开可见部分，不绕过付费墙"
  },
  "crawl": {
    "success": true,
    "status_code": 202,
    "error": ""
  },
  "code_blocks": [
    {
      "language": "txt",
      "file": "attachments/647cfd8ba857/code/block_000.txt",
      "chars": 499
    },
    {
      "language": "txt",
      "file": "attachments/647cfd8ba857/code/block_001.txt",
      "chars": 1230
    },
    {
      "language": "txt",
      "file": "attachments/647cfd8ba857/code/block_002.txt",
      "chars": 663
    },
    {
      "language": "txt",
      "file": "attachments/647cfd8ba857/code/block_003.txt",
      "chars": 177
    },
    {
      "language": "txt",
      "file": "attachments/647cfd8ba857/code/block_004.txt",
      "chars": 827
    }
  ],
  "images": [
    {
      "status": "http_404",
      "url": "https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607686/image?etag=1782161464448&width=500&height=500",
      "src": "https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607686/image?etag=1782161464448&width=500&height=500",
      "alt": "",
      "downloaded": false,
      "discovery": "saved_markdown",
      "retried_at": "2026-10-20T17:52:53Z"
    },
    {
      "status": "http_404",
      "url": "https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607639/image?etag=1781250125848&width=500&height=500",
      "src": "https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607639/image?etag=1781250125848&width=500&height=500",
      "alt": "",
      "downloaded": false,
      "discovery": "saved_markdown",
      "retried_at": "2026-10-20T17:52:53Z"
    },
    {
      "status": "http_404",
      "url": "https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607930/image?etag=1782124566054&width=500&height=500",
      "src": "https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607930/image?etag=1782124566054&width=500&height=500",
      "alt": "",
      "downloaded": false,
      "discovery": "saved_markdown",
      "retried_at": "2026-10-20T17:52:53Z"
    },
    {
      "status": "http_404",
      "url": "https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/3660/image?etag=1780176246070&width=500&height=500",
      "src": "https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/3660/image?etag=1780176246070&width=500&height=500",
      "alt": "",
      "downloaded": false,
      "discovery": "saved_markdown",
      "retried_at": "2026-10-20T17:52:53Z"
    }
  ],
  "audio": [],
  "videos": [
    {
      "url": "https://www.youtube.com/c/TowardsDataScience",
      "kind": "channel_reference",
      "status": "reference_only"
    }
  ],
  "links": [
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/latest/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/tag/editors-pick/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/tag/the-variable/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/shipai/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/submissions/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/category/artificial-intelligence/machine-learning/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/author/petrkorab/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/topic-model-labelling-with-llms/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/tag/llm-applications/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/tag/nlp/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/tag/statistical-modeling/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/tag/topic-modelling/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/the-ultimate-beginners-guide-to-geospatial-raster-data-feb7673f6db0/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/topic-modeling-techniques-for-2026-seeded-modeling-llm-integration-and-data-summaries/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/author/mattiagatti/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/analysis-of-us-elections-from-1976-to-2010-with-pandas-6654cf69849d/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/category/artificial-intelligence/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/author/sonery/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/ai-aids-eyes-a-computer-vision-system-to-remind-operators-to-wear-safety-glasses-ba0a1fe51b0/"
    },
    {
      "type": "external",
      "href": "https://write.insightmediagroup.io"
    },
    {
      "type": "external",
      "href": "https://www.linkedin.com/company/towards-data-science/"
    },
    {
      "type": "external",
      "href": "https://x.com/TDataScience"
    },
    {
      "type": "external",
      "href": "https://aclanthology.org/2024.naacl-long.164/"
    },
    {
      "type": "external",
      "href": "https://crawford.anu.edu.au/sites/default/files/2025-06/35_2025_Feldkircher_Korab_Teliha_1.pdf"
    },
    {
      "type": "external",
      "href": "https://roadmap.sh/machine-learning"
    },
    {
      "type": "external",
      "href": "https://www.sciencedirect.com/science/article/pii/S0304393219301497"
    },
    {
      "type": "external",
      "href": "https://www.ecb.europa.eu/services/using-our-site/disclaimer/html/index.en.html"
    },
    {
      "type": "external",
      "href": "https://arxiv.org/abs/2410.12791"
    },
    {
      "type": "external",
      "href": "https://x-tabdeveloping.github.io/turftopic/KeyNMF"
    },
    {
      "type": "external",
      "href": "https://huggingface.co/sentence-transformers/paraphrase-mpnet-base-v2"
    },
    {
      "type": "external",
      "href": "https://x-tabdeveloping.github.io/turftopic/analyzers/"
    },
    {
      "type": "external",
      "href": "https://aclanthology.org/2025.acl-long.32/"
    },
    {
      "type": "external",
      "href": "https://en.wikipedia.org/wiki/Bayesian_information_criterion"
    },
    {
      "type": "external",
      "href": "https://x-tabdeveloping.github.io/turftopic/benchmark/"
    },
    {
      "type": "external",
      "href": "https://x-tabdeveloping.github.io/turftopic/analyzers"
    },
    {
      "type": "external",
      "href": "https://github.com/x-tabdeveloping/ecb-presentation"
    },
    {
      "type": "external",
      "href": "https://www.bis.org/publ/work1299.htm"
    },
    {
      "type": "external",
      "href": "https://doi.org/10.1145/3613904.3642830"
    },
    {
      "type": "external",
      "href": "https://www.facebook.com/sharer/sharer.php?title=Topic+Modeling+Techniques+for+2026%3A+Seeded+Modeling%2C+LLM+Integration%2C+and+Data+Summaries&u=https%3A%2F%2Ftowardsdatascience.com%2Ftopic-modeling-techniques-for-2026-seeded-modeling-llm-integration-and-data-summaries%2F"
    }
  ],
  "repair_version": 2,
  "repaired_at": "2026-10-20T17:27:49Z",
  "source_url": "https://towardsdatascience.com/topic-modeling-techniques-for-2026-seeded-modeling-llm-integration-and-data-summaries/",
  "delivery_status": "unverified",
  "discovery_status": "http_403",
  "missing_reason": "源页面未重新核验:http_403；已按保留正文补采图片",
  "repair_error": "",
  "actual_video_files": [],
  "expected_saved_body_images": 4,
  "image_discovery": "saved_markdown",
  "source_body_markdown": "![Revisit consent button](https://cdn-cookieyes.com/assets/images/revisit.svg)\nWe value your privacy\nWe use cookies to enhance your browsing experience, serve personalised ads or content, and analyse our traffic. By clicking \"Accept All\", you consent to our use of cookies.\nCustomise Reject All Accept All\nCustomise Consent Preferences ![](https://cdn-cookieyes.com/assets/images/close.svg)\nWe use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.\nThe cookies that are categorised as \"Necessary\" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... Show more\nNecessaryAlways Active\nNecessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.\n  * Cookie\nBCTempID\n  * Duration\n10 minutes\n  * Description\nNo description available.\n\n\n  * Cookie\n__cf_bm\n  * Duration\n1 hour\n  * Description\nThis cookie, set by Cloudflare, is used to support Cloudflare Bot Management. \n\n\n  * Cookie\nAWSALBCORS\n  * Duration\n7 days\n  * Description\nAmazon Web Services set this cookie for load balancing.\n\n\n  * Cookie\n_cfuvid\n  * Duration\nsession\n  * Description\nCloudflare sets this cookie to track users across sessions to optimize user experience by maintaining session consistency and providing personalized services\n\n\n  * Cookie\nli_gc\n  * Duration\n6 months\n  * Description\nLinkedin set this cookie for storing visitor's consent regarding using cookies for non-essential purposes.\n\n\n  * Cookie\n__hssrc\n  * Duration\nsession\n  * Description\nThis cookie is set by Hubspot whenever it changes the session cookie. The __hssrc cookie set to 1 indicates that the user has restarted the browser, and if the cookie does not exist, it is assumed to be a new session.\n\n\n  * Cookie\n__hssc\n  * Duration\n1 hour\n  * Description\nHubSpot sets this cookie to keep track of sessions and to determine if HubSpot should increment the session number and timestamps in the __hstc cookie.\n\n\n  * Cookie\nwpEmojiSettingsSupports\n  * Duration\nsession\n  * Description\nWordPress sets this cookie when a user interacts with emojis on a WordPress site. It helps determine if the user's browser can display emojis properly.\n\n\n  * Cookie\nBCSessionID\n  * Duration\n1 year 1 month 4 days\n  * Description\nBlueconic sets this cookie as a unique identifier for the BlueConic profile.\n\n\n  * Cookie\n_octo\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\nlogged_in\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\n__Secure-YEC\n  * Duration\npast\n  * Description\nYouTube sets this cookie to stores the user's video player preferences using embedded YouTube video\n\n\n  * Cookie\n__eoi\n  * Duration\n6 months\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nAWSALBTGCORS\n  * Duration\n7 days\n  * Description\nNo description available.\n\n\n  * Cookie\nlogin-status-p\n  * Duration\npast\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nAWSALBTG\n  * Duration\n7 days\n  * Description\nNo description available.\n\n\n  * Cookie\ncsrf_token\n  * Duration\nsession\n  * Description\nNo description available.\n\n\n  * Cookie\ntoken_v2\n  * Duration\n1 day\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nD\n  * Duration\n1 year\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nPHPSESSID\n  * Duration\nsession\n  * Description\nThis cookie is native to PHP applications. The cookie stores and identifies a user's unique session ID to manage user sessions on the website. The cookie is a session cookie and will be deleted when all the browser windows are closed.\n\n\n  * Cookie\nVISITOR_PRIVACY_METADATA\n  * Duration\n6 months\n  * Description\nYouTube sets this cookie to store the user's cookie consent state for the current domain. \n\n\n  * Cookie\ncookietest\n  * Duration\nsession\n  * Description\nThe cookietest cookie is typically used to determine whether the user's browser accepts cookies, essential for website functionality and user experience.\n\n\n  * Cookie\n__Host-airtable-session\n  * Duration\n1 year\n  * Description\nThis cookie is used to enable us to integrate the services of Airtable.\n\n\n  * Cookie\n__Host-airtable-session.sig\n  * Duration\n1 year\n  * Description\nThis cookie is used to enable us to integrate the services of Airtable.\n\n\n  * Cookie\nm\n  * Duration\n1 year 1 month 4 days\n  * Description\nStripe sets this cookie for fraud prevention purposes. It identifies the device used to access the website, allowing the website to be formatted accordingly.\n\n\n  * Cookie\nBIGipServer*\n  * Duration\nsession\n  * Description\nMarketo sets this cookie to collect information about the user's online activity and build a profile about their interests to provide advertisements relevant to the user. \n\n\n  * Cookie\n__cfruid\n  * Duration\nsession\n  * Description\nCloudflare sets this cookie to identify trusted web traffic.\n\n\n  * Cookie\n_GRECAPTCHA\n  * Duration\n6 months\n  * Description\nGoogle Recaptcha service sets this cookie to identify bots to protect the website against malicious spam attacks.\n\n\n  * Cookie\n__Secure-YNID\n  * Duration\n6 months\n  * Description\nGoogle cookie used to protect user security and prevent fraud, especially during the login process.\n\n\n  * Cookie\ncookieyes-consent\n  * Duration\n1 year\n  * Description\nCookieYes sets this cookie to remember users' consent preferences so that their preferences are respected on subsequent visits to this site. It does not collect or store any personal information about the site visitors.\n\n\nFunctional\nFunctional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.\n  * Cookie\nlidc\n  * Duration\n1 day\n  * Description\nLinkedIn sets the lidc cookie to facilitate data center selection.\n\n\n  * Cookie\nbrw\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\nbrwConsent\n  * Duration\n5 minutes\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nWMF-Uniq\n  * Duration\n1 year\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nloom_anon_comment\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\nloom_referral_video\n  * Duration\nsession\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nVISITOR_INFO1_LIVE\n  * Duration\n6 months\n  * Description\nA cookie set by YouTube to measure bandwidth that determines whether the user gets the new or old player interface.\n\n\n  * Cookie\nyt-remote-connected-devices\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to store the user's video preferences using embedded YouTube videos.\n\n\n  * Cookie\nytidb::LAST_RESULT_ENTRY_KEY\n  * Duration\nNever Expires\n  * Description\nThe cookie ytidb::LAST_RESULT_ENTRY_KEY is used by YouTube to store the last search result entry that was clicked by the user. This information is used to improve the user experience by providing more relevant search results in the future.\n\n\n  * Cookie\nyt-remote-device-id\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to store the user's video preferences using embedded YouTube videos.\n\n\n  * Cookie\nyt-remote-session-name\n  * Duration\nsession\n  * Description\nThe yt-remote-session-name cookie is used by YouTube to store the user's video player preferences using embedded YouTube video.\n\n\n  * Cookie\nyt-remote-fast-check-period\n  * Duration\nsession\n  * Description\nThe yt-remote-fast-check-period cookie is used by YouTube to store the user's video player preferences for embedded YouTube videos.\n\n\n  * Cookie\nyt-remote-session-app\n  * Duration\nsession\n  * Description\nThe yt-remote-session-app cookie is used by YouTube to store user preferences and information about the interface of the embedded YouTube video player.\n\n\n  * Cookie\nyt-remote-cast-available\n  * Duration\nsession\n  * Description\nThe yt-remote-cast-available cookie is used to store the user's preferences regarding whether casting is available on their YouTube video player.\n\n\n  * Cookie\nyt-remote-cast-installed\n  * Duration\nsession\n  * Description\nThe yt-remote-cast-installed cookie is used to store the user's video player preferences using embedded YouTube video.\n\n\n  * Cookie\ncp_session\n  * Duration\n3 months\n  * Description\nCodepen sets this cookie for Help systems found in the website.\n\n\n  * Cookie\nloid\n  * Duration\n1 year 1 month 4 days\n  * Description\nThis cookie is set by the Reddit. The cookie enables the sharing of content from the website onto the social media platform.\n\n\nAnalytics\nAnalytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.\n  * Cookie\n__hstc\n  * Duration\n6 months\n  * Description\nHubspot set this main cookie for tracking visitors. It contains the domain, initial timestamp (first visit), last timestamp (last visit), current timestamp (this visit), and session number (increments for each subsequent session).\n\n\n  * Cookie\nhubspotutk\n  * Duration\n6 months\n  * Description\nHubSpot sets this cookie to keep track of the visitors to the website. This cookie is passed to HubSpot on form submission and used when deduplicating contacts.\n\n\n  * Cookie\n_ga\n  * Duration\n1 year 1 month 4 days\n  * Description\nGoogle Analytics sets this cookie to calculate visitor, session and campaign data and track site usage for the site's analytics report. The cookie stores information anonymously and assigns a randomly generated number to recognise unique visitors.\n\n\n  * Cookie\n_ga_*\n  * Duration\n1 year 1 month 4 days\n  * Description\nGoogle Analytics sets this cookie to store and count page views.\n\n\n  * Cookie\n__Host-psifi.analyticsTrace\n  * Duration\n6 hours\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\n__Host-psifi.analyticsTraceV2\n  * Duration\n6 hours\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\n_gh_sess\n  * Duration\nsession\n  * Description\nGitHub sets this cookie for temporary application and framework state between pages like what step the user is on in a multiple step form.\n\n\n  * Cookie\nYSC\n  * Duration\nsession\n  * Description\nYSC cookie is set by Youtube and is used to track the views of embedded videos on Youtube pages.\n\n\n  * Cookie\najs_anonymous_id\n  * Duration\n1 year\n  * Description\nThis cookie is set by Segment to count the number of people who visit a certain site by tracking if they have visited before.\n\n\n  * Cookie\nvuid\n  * Duration\n1 year 1 month 4 days\n  * Description\nVimeo installs this cookie to collect tracking information by setting a unique ID to embed videos on the website. \n\n\nPerformance\nPerformance cookies are used to understand and analyse the key performance indexes of the website which helps in delivering a better user experience for the visitors.\n  * Cookie\nAWSALB\n  * Duration\n7 days\n  * Description\nAWSALB is an application load balancer cookie set by Amazon Web Services to map the session to the target.\n\n\n  * Cookie\nacq\n  * Duration\npast\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nacq.sig\n  * Duration\npast\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nptc\n  * Duration\n2 years\n  * Description\nNo description available.\n\n\nAdvertisement\nAdvertisement cookies are used to provide visitors with customised advertisements based on the pages you visited previously and to analyse the effectiveness of the ad campaigns.\n  * Cookie\nmuc_ads\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to collect user behaviour and interaction data to optimize the website.\n\n\n  * Cookie\nguest_id_marketing\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to identify and track the website visitor.\n\n\n  * Cookie\nguest_id_ads\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to identify and track the website visitor.\n\n\n  * Cookie\npersonalization_id\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to integrate and share features for social media and also store information about how the user uses the website, for tracking and targeting.\n\n\n  * Cookie\nguest_id\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to identify and track the website visitor. It registers if a user is signed in to the Twitter platform and collects information about ad preferences.\n\n\n  * Cookie\nbcookie\n  * Duration\n1 year\n  * Description\nLinkedIn sets this cookie from LinkedIn share buttons and ad tags to recognize browser IDs.\n\n\n  * Cookie\n__Secure-ROLLOUT_TOKEN\n  * Duration\n6 months\n  * Description\nYouTube sets this cookie to manage feature rollout and experimentation. It helps Google control which new features or interface changes are shown to users as part of testing and staged rollouts, ensuring consistent experience for a given user during an experiment.\n\n\n  * Cookie\nyt.innertube::nextId\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to register a unique ID to store data on what videos from YouTube the user has seen.\n\n\n  * Cookie\nyt.innertube::requests\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to register a unique ID to store data on what videos from YouTube the user has seen.\n\n\n  * Cookie\nsession_tracker\n  * Duration\nsession\n  * Description\nThis cookie is set by the Reddit. This cookie is used to identify trusted web traffic. It also helps in adverstising on the website.\n\n\n  * Cookie\nedgebucket\n  * Duration\nsession\n  * Description\nReddit sets this cookie to save the information about a log-on Reddit user, for the purpose of advertisement recommendations and updating the content.\n\n\n  * Cookie\ndid\n  * Duration\n1 year\n  * Description\nArbor sets this cookie to show targeted ads to site visitors.This cookie expires after 2 months or 1 year.\n\n\nUncategorised\nOther uncategorised cookies are those that are being analysed and have not been classified into a category as yet.\nNo cookies to display.\nReject All Save My Preferences Accept All\nToggle Search[](https://towardsdatascience.com/)Toggle Mobile Navigation\n[](https://towardsdatascience.com/)\nPublish AI, ML & data-science insights to a global community of data professionals.\nSign in[Submit an Article](https://write.insightmediagroup.io)\n[Latest](https://towardsdatascience.com/latest/)[Editor's Picks](https://towardsdatascience.com/tag/editors-pick/)[Newsletter](https://towardsdatascience.com/tag/the-variable/)[ShipAI](https://towardsdatascience.com/shipai/)\n* * *\n[Write For TDS](https://towardsdatascience.com/submissions/)\n[LinkedIn](https://www.linkedin.com/company/towards-data-science/)[X](https://x.com/TDataScience)Toggle Search\n[Machine Learning](https://towardsdatascience.com/category/artificial-intelligence/machine-learning/)\n# Topic Modeling Techniques for 2026: Seeded Modeling, LLM Integration, and Data Summaries\nSeeded topic modeling, integration with LLMs, and training on summarized data are the fresh parts of the NLP toolkit.\n[Petr Koráb](https://towardsdatascience.com/author/petrkorab/)\nJanuary 14, 202613 min read\n![](https://assets.insightmediagroup.io/media/wp-content/uploads/2026/01/image-356.jpg)\nSource: Image by authors.\n_**By**_ _: Martin Feldkircher (Vienna School of International Studies), Márton Kardos (Aarhus University, Denmark), and Petr Koráb (Text Mining Stories)_\n## 1. Introduction\nTopic modelling has recently progressed in two directions. The improved **statistical methods** stream of Python packages focuses on more robust, efficient, and preprocessing-free models, producing fewer junk topics (e.g., FASTopic). The other relies on the power of **generative language models** to extract intuitively understandable topics and their descriptions (e.g., TopicGPT[ [6]](https://aclanthology.org/2024.naacl-long.164/), LlooM[ [5])](https://crawford.anu.edu.au/sites/default/files/2025-06/35_2025_Feldkircher_Korab_Teliha_1.pdf).\nThanks to research on statistical methods for modelling text representations from transformers, junk topics are the exception rather than the norm in newer models. Meanwhile, novel, LLM-based approaches are challenging our long-standing views about what a topic model is and what it can do. **Human-readable topic names** and **descriptions** are now becoming more and more an expected result of a well-designed topic modelling pipeline.\nAs exciting as these developments are, topic modelling is far from being a solved problem. Neural topic models can be rather **unstable** and sometimes hard for users to trust because of their **black-box nature**. LLM-powered methods produce impressive results, but can at times raise questions about trust, due to hallucinations and sensitivity to semantically irrelevant changes in input. This is especially a problem for the banking sector, where (un)certainty is essential. Running large language models is also a huge infrastructural and computational burden, and might end up costing large sums of money even for smaller datasets.\nLearn this step by step with the interactive [Machine Learning](https://roadmap.sh/machine-learning) roadmap.\n[Our previous tutorial](https://towardsdatascience.com/topic-model-labelling-with-llms/) provides a detailed introduction to how LLMs enhance traditional topic modeling by automatically labeling topic names. In this article, we combine current topic modeling methods with targeted LLM assistance. In our view, a combination of recent advances in language modeling and classical machine learning can provide users with the best of both worlds: a pipeline that combines the capabilities of large language models with the computational efficiency, trustworthiness, and stability of probabilistic ML.\nThis article explains three fresh topic-modelling techniques that should be part of the NLP toolkit in 2026. We will figure out:\n  * _How to use text prompts to specify what topic models should focus on (i.e., seeded topic models)._\n  * _How LLM-generated summaries can make topic models more accurate._\n  * _How generative models can be used to label topics and provide their descriptions._\n  * _How these techniques can be used to gain insights from central banking communication._\n\n\nWe illustrate these on the central bank communication speeches corpus from the European Central Bank. This type of text is long, carefully structured, and highly repetitive — exactly the kind of data where standard topic models struggle and where interpretability is essential. By combining seeded topic modelling with LLM-assisted document summarization and analysis, we show how to extract focused, stable, and economically meaningful topics without compromising transparency or scalability.\n## 2. Example Data\nWe use the press conference communications of the European Central Bank (ECB) as example text data. Since 2002, the ECB’s Governing Council has met on the first Thursday of each month, and its communication of the meeting’s outcome follows the two-step structure ([[2]](https://www.sciencedirect.com/science/article/pii/S0304393219301497)).\n> _**How it works:**__First, at 13:45 CET, the ECB releases a brief monetary policy decision (MPD) statement, which contains only limited textual information. Second, at 14:30 CET, the ECB President delivers an introductory statement during a press conference. This carefully prepared document explains the rationale behind policy decisions, outlines the ECB’s assessment of economic conditions, and provides guidance on future policy considerations. The introductory statement typically lasts about 15 minutes and is followed by a 45-minute Q &A session. _\nFor this article, we use the introductory statements, scraped directly from the ECB website (released with a[ flexible data licence](https://www.ecb.europa.eu/services/using-our-site/disclaimer/html/index.en.html)). The dataset contains 279 statements, and here is what it looks like:\n![](https://assets.insightmediagroup.io/media/wp-content/uploads/2025/12/image-358-1024x479.png)\nImage 1: ECB communication dataset. Source: Image by authors.\n## 3. Seeded Topic Modelling \nTraditionally, topic models focus on identifying the most informative topics in a dataset. A naive approach practitioners take is to fit a larger model, then, usually manually, filter out topics irrelevant to their data question.\n> > _What if you could condition a topic model to only extract relevant topics to your data question? This is precisely what seeded topic modelling is used for._\nIn some methods, this means selecting a set of keywords that reflect your question. But in the framework we explore in this article, you can specify your interest in **free-text** using a seed phrase that tells the model what to focus on.\n### 3.1 KeyNMF Model\nWe will use the cutting-edge contextual **KeyNMF topic model**([[3]](https://arxiv.org/abs/2410.12791)). It is, in many aspects, very similar to older topic models, as it formulates topic discovery in terms of matrix factorization. In other words, when using this model, you assume that topics are **latent factors** , that your documents contain to a lesser or greater extent, which determine and explain the content of those documents. \n**KeyNMF** is contextual because, unlike older models, it uses context-sensitive transformer representations of text. To understand how seeded modelling works, we need to gain a basic understanding of the model. The modelling process happens in the following steps:\n  1. _We encode our documents into dense vectors using a sentence-transformer._\n  2. _We encode the vocabulary of these documents into the same embedding space._\n  3. _For each document, we extract the top N keywords by taking the words that have the highest cosine similarity to the document embedding._\n  4. _Word importance for a given document is then the cosine similarity, pruned at zero. These scores are arranged into a_ _**keyword matrix,**__where each row is a document, and columns correspond to words._\n  5. _The keyword matrix is decomposed into a_ _**topic-term matrix**_ _and a_ _**document-topic matrix**_ _using Nonnegative Matrix Factorization._\n\n\n![](https://assets.insightmediagroup.io/media/wp-content/uploads/2025/12/keynmf-scaled-3-1-1024x282.png)\nImage 2: KeyNMF model architecture. Source: [Turftopic’s documentation](https://x-tabdeveloping.github.io/turftopic/KeyNMF)\n### 3.2 Seeded KeyNMF \nThe general **KeyNMF** , while perfectly adequate for discovering topics in a corpus, is not the most suitable choice if we need to use the model for a specific question. To make this happen, we first have to specify a **seed phrase,** a phrase that minimally indicates what we are interested in. For example, when analysing the ECB communication dataset, this could be _“Expansion of the Eurozone”_. \nAs sentence-transformers can encode this seed phrase, we can use it to retrieve documents that are relevant to our question:\n  1. _We encode the seed phrase into the same embedding space as our documents and vocabulary._\n  2. _To make our model more attentive to documents that contain relevant information, we compute a_ _**document relevance**_ _score by computing cosine similarity to the seed embedding. We prune, again, at zero._\n  3. _To exaggerate the seed’s importance, one can apply a_ _**seed exponent**_ _. This involves raising the document relevance scores to the power of this exponent._\n  4. _We multiply the keyword matrix’s entries by the document relevance._\n  5. _We then, as before, use NMF to decompose this, now conditioned, keyword matrix._\n\n\nThe **advantages** of this approach are that it is:\n  * _1) incredibly_ _**flexible**_ _, and_\n  * _2) can_ _**save**_ _a lot of_ _**manual work**_ _._\n\n\n> _**Be careful**_ _: some embedding models can be sensitive to phrasing and might retrieve different document-importance scores for the same document with a slightly different seed phrase. To deal with this, we recommend that you use one of the_[ _paraphrase models from sentence-transformers_](https://huggingface.co/sentence-transformers/paraphrase-mpnet-base-v2) _, because they have deliberately been trained to be phrasing invariant, and produce high-quality topics with KeyNMF._\n### 3.3 How to use Seeded KeyNMF\n**KeyNMF** and its seeded version are available on PyPI in the Turftopic package, in a scikit-learn-compatible form. To specify what you are interested in, simply initialize the model with a seed phrase:\npython\n\n```\nfrom sentence-transformers import SentenceTransformer\nfrom turftopic import KeyNMF\n\n# Encode documents using a sentence-transformer\nencoder = SentenceTransformer(\"paraphrase-mpnet-base-v2\")\nembeddings = encoder.encode(documents, show_progress_bar=True)\n\n# Initialize KeyNMF with 4 topics and a seed phrase\nmodel = KeyNMF(\n n_components=4,\n encoder=encoder,\n seed_phrase=\"Expansion of the Eurozone\",\n seed_exponent=3.0,\n)\n\n# Fit model \nmodel.fit(corpus)\n\n# Print modelled topics\nmodel.print_topics()\n```\n\nWe can see that the model returns topic IDs with typical keywords that are clearly related to the Euro and the Eurozone:  \n| Topic Id  | Highest Ranking  |  \n| --- | --- |  \n| 0  | gdp, economic, euro, growth, economy, assessment, analysis, macroeconomic, measures, expected  |  \n| 1  | inflation, rates, inflationary, stability, euro, rate, economy, economic, ecb, expectations  |  \n| 2  | euro, fiscal, stability, countries, reforms, question, governing, policy, european, policies  |  \n| 3  | ecb, germany, frankfurt, communicationssonnemannstrasse, 7455media, europa, question, eu, 1344, 2060314  |  \n## 4. LLM-assisted Topic Modeling\nFinding interpretable topics from a corpus is a difficult task, and it often requires more than just a statistical model that finds patterns in the raw data. LLMs serve topic modelling in two main areas:\n  * _Reading a document and identifying the right aspects in the text based on a specific data question._\n  * _Interpreting the topic model’s output in the relevant context._\n\n\nIn the following text, we will now explore 1) how LLMs improve processing documents for a topic model and 2) how generative models improve understanding and interpreting the model results.\n![](https://assets.insightmediagroup.io/media/wp-content/uploads/2025/12/image-360-1024x276.png)\nImage 4: Topic modelling pipeline extended with LLM components. Source: [Turftopic’s docs](https://x-tabdeveloping.github.io/turftopic/analyzers/).\n### 4.1. Document Summarization \nOne of the Achilles' heels of the sentence transformers we frequently use for topic analysis is their short context length. Encoder models that can read considerably longer contexts have rarely been evaluated for their performance in topic modeling. Therefore, we didn't know whether or how these larger transformer models work in a topic modelling pipeline. Another issue is that they produce higher-dimensional embeddings, which often negatively affect unsupervised machine learning models ([[4]](https://aclanthology.org/2025.acl-long.32/)). It can either be because Euclidean distances get inflated in higher-dimensional space, or because the number of parameters surges with input dimensionality, making parameter recovery more difficult.\nWe can solve these issues by:\n  * _**Chunking documents**_ _into smaller sections that fit into the context window of a sentence transformer. Unfortunately, chunking can result in text chunks that are wildly out of context, and it might take considerable effort to chunk documents at semantically sensible boundaries._\n  * _**Using generative models**_ _to summarize the contents of these documents. LLMs excel at this task and can also remove all types of tokenization-based noise and irrelevant information from texts that might hinder our topic model._\n\n\nLet’s now summarise the trade-offs of using LLM-generated summaries in topic modelling in the following image.\n![](https://assets.insightmediagroup.io/media/wp-content/uploads/2026/01/benefit_cost_LLM_summary-1024x660.png)\nImage 5: Benefits and drawbacks of LLM-assisted document processing in the topic modelling pipeline. Source: image by authors.\nThe recommended strategy for LLM-assisted document preprocessing is a two-step:\n  1. _Train a topic model with simple preprocessing, or no preprocessing at all._\n  2. _When you find that topic models have a hard time interpreting your corpus, using LLM-based summarisation can be a good choice if the trade-offs work positively in your specific project._\n\n\n#### 4.1.1. Document Summarization in Code\nLet’s now look at how we can summarize documents using an LLM. In this example, we will use GPT-5-nano, but Turftopic also allows running locally run open LLMs. We recommend using open LLMs locally, if possible, due to lower costs and better data privacy.\npython\n\n```\nimport pandas as pd\nfrom tqdm import tqdm\nfrom turftopic.analyzers import OpenAIAnalyzer, LLMAnalyzer\n\n# Loading the data\ndata = pd.read_parquet(\"data/ecb_data.parquet\")\ncontent = list(data[\"content\"])\n\n# We write a prompt that will extract the relevant information\n# We ask the model to separate information to key points so that \n# they become easier to model\n\nsummary_prompt=\"Summarize the following press conference from \nthe European Central Bank into a set of key points separated by \ntwo newline characters. Reply with the summary only, nothing else. \n\\n {document}\"\n\n# Formalize a summarized\nsummarizer = OpenAIAnalyzer(\"gpt-5-nano\", summary_prompt=summary_prompt)\nsummaries = []\n\n# Summarize dataframe, track code execution \nfor document in tqdm(data[\"content\"], desc=\"Summarising documents...\"):\n    summary = summarizer.summarize_document(document)\n    # We print summaries as we go as a sanity check, to make sure \n    # the prompt works\n    print(summary)\n    summaries.append(summary)\n\n# Collect summaries into a dataframe\nsummary_df = pd.DataFrame(\n    {\n        \"id\": data[\"id\"],\n        \"date\": data[\"date\"],\n        \"author\": data[\"author\"],\n        \"title\": data[\"title\"],\n        \"summary\": summaries,\n    }\n)\n```\n\nNext, we will fit a simple KeyNMF model on the key points in these summaries, and let the model discover the number of topics using the [_Bayesian Information Criterion_](https://en.wikipedia.org/wiki/Bayesian_information_criterion). This approach works very well in this case, but be careful that automatic topic number detection has its shortcomings. Check out the [Topic Model Leaderboard](https://x-tabdeveloping.github.io/turftopic/benchmark/) to gain more information on how models perform at detecting the number of topics.\npython\n\n```\nimport numpy as np\nimport pandas as pd\nfrom sentence_transformers import SentenceTransformer\nfrom turftopic import KeyNMF\n\n# Create corpus from text summaries (not original texts)\ncorpus = list(summary_df[\"summary\"])\n\n# Collect key points by segmenting at double line breaks\npoints = []\n\nfor doc in corpus:\n  _points = doc.split(\"\\n\\n\")\n  doc_points = [p for p in _points if len(p.strip().removeprefix(\" - \"))]\n  points.extend(doc_points)\n\n# Tell KeyNMF to automatically detect the number of topics using BIC\nmodel = KeyNMF(\"auto\", encoder=\"paraphrase-mpnet-base-v2\")\ndoc_topic = model.fit_transform(points)\n\n# Print topic IDs with top words\nmodel.print_topics()\n```\n\nHere are the KeyNMF results trained on **document summaries:**  \n| **Topic ID**  | **Highest Ranking**  |  \n| --- | --- |  \n| 0  | inflation, hicp, expectations, expected, wage, energy, prices, price, medium, pressures  |  \n| 1  | ecb, rates, unchanged, kept, key, rate, liquidity, banks, market, exchange  |  \n| 2  | m3, credit, monetary, growth, lending, liquidity, loans, financial, money, m1  |  \n| 3  | euro, area, economy, banknotes, expected, exchange, currency, countries, convergence, external  |  \n| 4  | reforms, fiscal, growth, structural, consolidation, markets, potential, productivity, market, essential  |  \n| 5  | risks, downside, growth, balanced, outlook, upside, prices, tensions, potential, global  |  \n| 6  | stability, price, medium, pact, remains, risks, expectations, term, upside, fiscal  |  \n| 7  | policy, monetary, rate, fiscal, rates, decisions, transmission, measures, remains, stance  |  \n| 8  | gdp, growth, real, economic, projections, quarter, demand, q2, expected, economy  |  \n| 9  | council, governing, rate, decision, meeting, refinancing, consensus, unanimous, ensure, rates  |  \n### 4.3. Topic Analysis with LLMs\nIn a typical topic-analysis pipeline, a user would first train a topic model, then spend time interpreting what the model has discovered, label topics manually, and finally provide a brief description of the types of documents the topic contains. This is time-consuming, especially in corpora with many identified topics. \nThis part can now be done by LLMs that can easily generate human-readable topic names and descriptions. We will use the same[ Analyzer API](https://x-tabdeveloping.github.io/turftopic/analyzers) from Turftopic to achieve this:\npython\n\n```\nfrom turftopic.analyzers import OpenAIAnalyzer\n\nanalyzer = OpenAIAnalyzer()\nanalysis_result = model.analyze_topics(analyzer, use_documents=True)\n\nprint(analysis_result.to_df())\n```\n\nWe apply the analyzer to the introductory statements issued by the ECB, which accompany each monetary policy decision. These statements are prepared carefully and follow a relatively standard structure. Here are the labelled topic names with their descriptions and top words printed from _analysis_result_ :\n![](https://assets.insightmediagroup.io/media/wp-content/uploads/2025/12/image-364-1024x439.png)\nImage 7: Topic Analysis using GPT-5-nano in Turftopic. Source: image by authors.\nNext, let’s show the prevalence of the labelled KeyNMF’ topic names over time. It's how intensely these topics were discussed in the ECB press conferences during the last 25 years:\npython\n\n```\nfrom datetime import datetime\nimport plotly.express as px\nfrom scipy.signal import savgol_filter\n\n# create dataframe from labelled topics, \n# combine with timestamp from date column\ntime_df = pd.DataFrame(\n    dict(\n        date=timestamps,\n        **dict(zip(analysis_result.topic_names, doc_topic.T /\n                                                doc_topic.sum(axis=1)))\n    )\n).set_index(\"date\")\n\n# group dataframe to monthly frequency\ntime_df = time_df.groupby(by=[time_df.index.month, time_df.index.year]).mean()\ntime_df.index = [datetime(year=y, month=m, day=1) for m, y in time_df.index]\ntime_df = time_df.sort_index()\n\n# display dataframe with Plotly\n\nfor col in time_df.columns:\n    time_df[col] = savgol_filter(time_df[col], 12, 2)\nfig = px.line(\n    time_df.sort_index(),\n    template=\"plotly_white\",\n)\nfig.show()\n```\n\nHere is the labelled topic model dataframe displayed in yearly frequency:\n![](https://assets.insightmediagroup.io/media/wp-content/uploads/2026/01/image13-1024x524.png)\nImage 8: Topic Analysis using GPT-5-nano in Turftopic over time. Source: Image by authors.\n_**Model results in context:**__The monetary union topic was most prominent in the early 2000s (see [5] for more information). The monetary policy and rate decision topic peaks at the end of the global financial crisis around 2011, a period during which the ECB (some commentators argue mistakenly) raised interest rates. The timing of the inflation and inflation expectations topic also corresponds with economic developments: it rises sharply around 2022, when energy prices pushed inflation into double-digit territory in the euro area for the first time since its creation._\n## 5. Summary\nLet's now summarize the key points of the article. The requirements and code for this tutorial are in this [repo](https://github.com/x-tabdeveloping/ecb-presentation).\n  * SeededKeyNMF topic model combines text prompts with the latest topic model to concentrate modelling on a certain problem.\n  * Summarizing data for topic modeling reduces training time, but it has drawbacks that should be considered in a project.\n  * The Tutftopic Python package implements systematic descriptions and labels with recent LLMs into a topic modelling pipeline.\n\n\n## References \n[1]Taejin Park, Fernando Perez-Cruz and Hyun Song Shin. 2025. [_Mapping the space of central bankers' ideas_](https://www.bis.org/publ/work1299.htm). In: BIS Working Papers, No. 1299, 16 October 2025, 26 pp.\n[2] Carlo Altavilla, Luca Brugnolini, Refet S. Gürkaynak, Roberto Motto and Giuseppe Ragusa. 2019. [Measuring euro area monetary policy](https://www.sciencedirect.com/science/article/pii/S0304393219301497). In: _Journal of Monetary Economics_ , Volume 108, pp 162-179.\n[3] Ross Deans Kristensen-McLachlan, Rebecca M.M. Hicke, Márton Kardos, and Mette Thunø. 2024. _Context is Key(NMF):_[_Modelling Topical Information Dynamics in Chinese Diaspora Media_](https://arxiv.org/abs/2410.12791) _._ In: CHR 2024: Computational Humanities Research Conference, December 4–6, 2024, Aarhus, Denmark.\n[4] Márton Kardos, Jan Kostkan, Kenneth Enevoldsen, Arnault-Quentin Vermillet, Kristoffer Nielbo, and Roberta Rocca. 2025. [_S3 - Semantic Signal Separation_](https://aclanthology.org/2025.acl-long.32/). In: Proceedings of the 63rd Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), pages 633–666, Vienna, Austria. Association for Computational Linguistics.\n[5] Martin Feldkircher, Petr Koráb and Viktoriya Teliha. 2025. [_What do central bankers talk about? Evidence from the BIS archive_](https://crawford.anu.edu.au/sites/default/files/2025-06/35_2025_Feldkircher_Korab_Teliha_1.pdf) _._ In: CAMA Working Paper Nr. 35/2025.\n[6] Michelle S. Lam, Janice Teoh, James A. Landay, Jeffrey Heer, and Michael S. Bernstein. 2024. _Concept Induction: Analyzing Unstructured Text with High-Level Concepts Using LLooM_. In: Proceedings of the 2024 CHI Conference on Human Factors in Computing Systems (CHI '24). Association for Computing Machinery, New York, NY, USA, Article 766, 1–28. <https://doi.org/10.1145/3613904.3642830>.\n[7] Chau Minh Pham, Alexander Hoyle, Simeng Sun, Philip Resnik, and Mohit Iyyer. 2024. [TopicGPT: A Prompt-based Topic Modeling Framework](https://aclanthology.org/2024.naacl-long.164/). In Proceedings of the 2024 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies (Volume 1: Long Papers), pages 2956–2984, Mexico City, Mexico. Association for Computational Linguistics.\n## Register Now to Continue Reading\n### Unlock Towards Data Science with a Free Account\nAll articles on Towards Data Science are available to registered users. Create a free account today to access this article and thousands more.\nRegister for freeSign in to your account\n* * *\n![](https://assets.insightmediagroup.io/media/1787657190540_3p82kv.jpeg)\nWritten By\n## [Petr Koráb](https://towardsdatascience.com/author/petrkorab/)\n[See all from Petr Koráb](https://towardsdatascience.com/author/petrkorab/)\n[Editor's Picks](https://towardsdatascience.com/tag/editors-pick/)[Llm Applications](https://towardsdatascience.com/tag/llm-applications/)[NLP](https://towardsdatascience.com/tag/nlp/)[Statistical Modeling](https://towardsdatascience.com/tag/statistical-modeling/)[Topic Modelling](https://towardsdatascience.com/tag/topic-modelling/)\nShare This Article\n  * [](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Ftowardsdatascience.com%2Ftopic-modeling-techniques-for-2026-seeded-modeling-llm-integration-and-data-summaries%2F&title=Topic%20Modeling%20Techniques%20for%202026%3A%20Seeded%20Modeling%2C%20LLM%20Integration%2C%20and%20Data%20Summaries)\n  * [](https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Ftowardsdatascience.com%2Ftopic-modeling-techniques-for-2026-seeded-modeling-llm-integration-and-data-summaries%2F&title=Topic%20Modeling%20Techniques%20for%202026%3A%20Seeded%20Modeling%2C%20LLM%20Integration%2C%20and%20Data%20Summaries)\n  * [](https://x.com/share?url=https%3A%2F%2Ftowardsdatascience.com%2Ftopic-modeling-techniques-for-2026-seeded-modeling-llm-integration-and-data-summaries%2F&text=Topic%20Modeling%20Techniques%20for%202026%3A%20Seeded%20Modeling%2C%20LLM%20Integration%2C%20and%20Data%20Summaries)\n\n\nTowards Data Science is a community publication. Submit your insights to reach our global audience and earn through the TDS Author Payment Program.\n[Write for TDS](https://towardsdatascience.com/submissions/)\n## Related Articles\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2022/10/0FUghFy8jINnE2zZV-scaled.jpg)](https://towardsdatascience.com/the-ultimate-beginners-guide-to-geospatial-raster-data-feb7673f6db0/)\n## [The Ultimate Beginner's Guide to Geospatial Raster Data](https://towardsdatascience.com/the-ultimate-beginners-guide-to-geospatial-raster-data-feb7673f6db0/)\n[](https://towardsdatascience.com/topic-modeling-techniques-for-2026-seeded-modeling-llm-integration-and-data-summaries/)\nEverything you need to know about raster files, georeferencing, metadata and Rasterio Python library\n[Mattia Gatti](https://towardsdatascience.com/author/mattiagatti/)\nOctober 13, 202213 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2020/10/19meZjVfvGg2qDJq3ZD4bzA-scaled.jpeg)](https://towardsdatascience.com/analysis-of-us-elections-from-1976-to-2010-with-pandas-6654cf69849d/)\n## [Analysis of US Elections from 1976 to 2010 with Pandas](https://towardsdatascience.com/analysis-of-us-elections-from-1976-to-2010-with-pandas-6654cf69849d/)\n[Artificial Intelligence](https://towardsdatascience.com/category/artificial-intelligence/)\nPractice Pandas while providing valuable insights into past elections.\n[Soner Yıldırım](https://towardsdatascience.com/author/sonery/)\nOctober 18, 20205 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2018/10/1PZ7VlYA_1vdzJJok2vBgmQ.png)](https://towardsdatascience.com/ai-aids-eyes-a-computer-vision-system-to-remind-operators-to-wear-safety-glasses-ba0a1fe51b0/)\n## [AI Aids Eyes : a computer vision system to remind operators to wear safety glasses](https://towardsdatascience.com/ai-aids-eyes-a-computer-vision-system-to-remind-operators-to-wear-safety-glasses-ba0a1fe51b0/)\n[Artificial Intelligence](https://towardsdatascience.com/category/artificial-intelligence/)\nHere is a demo of the system. When the system detects that a drill is...\n[Chris](https://towardsdatascience.com/author/kakittwo/)\nOctober 22, 20183 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2025/10/Untitled-27-scaled-1.png)](https://towardsdatascience.com/things-i-learnt-by-participating-in-genai-hackathons-over-the-past-6-months/)\n## [Things I Learned by Participating in GenAI Hackathons Over the Past 6 Months](https://towardsdatascience.com/things-i-learnt-by-participating-in-genai-hackathons-over-the-past-6-months/)\n[Artificial Intelligence](https://towardsdatascience.com/category/artificial-intelligence/)\nSharing my two cents from the building in public journey so far\n[Parul Pandey](https://towardsdatascience.com/author/pandeyparul/)\nOctober 20, 20259 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2019/09/0OrU9pHgTUQNrrkHg-scaled.jpg)](https://towardsdatascience.com/five-tips-for-a-successful-api-3d8fdb1e24a6/)\n## [Five Tips for a Successful API](https://towardsdatascience.com/five-tips-for-a-successful-api-3d8fdb1e24a6/)\n[NLP](https://towardsdatascience.com/category/artificial-intelligence/nlp/)\nIt's now remarkably easy to release to the world a cloud-based application programming interface (API) that provides some software...\n[Robert Dale](https://towardsdatascience.com/author/language-technology/)\nSeptember 25, 201911 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2025/08/ChatGPT-Image-Jun-7-2025-10_49_06-AM.png)](https://towardsdatascience.com/langgraph-101-lets-build-a-deep-research-agent/)\n## [LangGraph 101: Let’s Build A Deep Research Agent](https://towardsdatascience.com/langgraph-101-lets-build-a-deep-research-agent/)\n[Large Language Models](https://towardsdatascience.com/category/artificial-intelligence/large-language-models/)\nLearn LangGraph fundamentals from Google’s open-source full-stack implementation\n[Shuai Guo](https://towardsdatascience.com/author/shuaiguo/)\nAugust 14, 202527 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2021/12/1ecH3OdEvhY0-Sp9gBMl0MA.png)](https://towardsdatascience.com/counterfactuals-for-reinforcement-learning-i-what-if-d70188fb83c2/)\n## [Counterfactuals for Reinforcement Learning I: \"What if... ?\"](https://towardsdatascience.com/counterfactuals-for-reinforcement-learning-i-what-if-d70188fb83c2/)\n[](https://towardsdatascience.com/topic-modeling-techniques-for-2026-seeded-modeling-llm-integration-and-data-summaries/)\nIntroduction to the POMDP framework and counterfactuals\n[Felix Hofstätter](https://towardsdatascience.com/author/felhof1/)\nDecember 30, 20218 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2023/05/1F5_d6D3D4CLPyvq7zWvDpA.png)](https://towardsdatascience.com/understanding-what-we-lose-b91e114e281b/)\n## [Understanding What We Lose](https://towardsdatascience.com/understanding-what-we-lose-b91e114e281b/)\n[Artificial Intelligence](https://towardsdatascience.com/category/artificial-intelligence/)\nHow We Tackle Catastrophic Forgetting in LLMs\n[Matt Tengtrakool](https://towardsdatascience.com/author/matt.tengtrakool/)\nMay 23, 20238 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/09/0yNc4tuPrqSXJDADS-scaled.jpg)](https://towardsdatascience.com/feature-engineering-techniques-for-numerical-variables-in-python-4bd42e8bded7/)\n## [Feature Engineering Techniques for Numerical Variables in Python](https://towardsdatascience.com/feature-engineering-techniques-for-numerical-variables-in-python-4bd42e8bded7/)\n[Machine Learning](https://towardsdatascience.com/category/artificial-intelligence/machine-learning/)\nLearn the most useful feature engineering techniques to convert numerical values ​​into useful information for your predictive model using...\n[Andrea D'Agostino](https://towardsdatascience.com/author/thedrewdag/)\nSeptember 24, 202418 min read\n\n\n  * [YouTube](https://www.youtube.com/c/TowardsDataScience)\n  * [X](https://x.com/TDataScience)\n  * [LinkedIn](https://www.linkedin.com/company/towards-data-science/)\n  * [Threads](https://www.threads.net/@towardsdatascience)\n  * [Bluesky](https://bsky.app/profile/towardsdatascience.com)\n\n\n[](https://towardsdatascience.com/)\nYour home for data science and AI. The world's leading publication for data science, data analytics, data engineering, machine learning, and artificial intelligence professionals.\nSubscribe to Our Newsletter[Write For TDS](https://towardsdatascience.com/submissions/)•[About](https://towardsdatascience.com/about-towards-data-science-d691af11cc2f/)•[Advertise](https://contact.towardsdatascience.com/advertise-with-towards-data-science)•[Privacy Policy](https://towardsdatascience.com/privacy-policy/)•[Terms of Use](https://towardsdatascience.com/website-terms-of-use/)\n© Insight Media Group, LLC 2026•[The New Stack](https://thenewstack.io)•[roadmap.sh](https://roadmap.sh)•[Creator Network](https://insightmediagroup.io/creator-network)\n####  Recommended Articles \nClose\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607686/image?etag=1782161464448&width=500&height=500) How Relevance Models Foreshadowed Transformers for NLP ](https://towardsdatascience.com/how-relevance-models-foreshadowed-transformers-for-nlp/ \"How Relevance Models Foreshadowed Transformers for NLP\")\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607639/image?etag=1781250125848&width=500&height=500) Javascript Fatigue: HTMX Is All You Need to Build ChatGPT — Part 1 ](https://towardsdatascience.com/javascript-fatigue-you-dont-need-js-to-build-chatgpt/ \"Javascript Fatigue: HTMX Is All You Need to Build ChatGPT — Part 1\")\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607930/image?etag=1782124566054&width=500&height=500) The Subset Sum Problem Solved in Linear Time for Dense Enough Inputs ](https://towardsdatascience.com/subset-sum-problem-solved-in-linear-time-for-dense-enough-inputs/ \"The Subset Sum Problem Solved in Linear Time for Dense Enough Inputs\")\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/3660/image?etag=1780176246070&width=500&height=500) Does Your Company Have a Data Strategy? ](https://towardsdatascience.com/does-your-company-have-a-data-strategy-e8944dbec4ae/ \"Does Your Company Have a Data Strategy?\")\n\n\n",
  "body_base_path": "attachments/647cfd8ba857/pages/",
  "body_markdown_path": "attachments/647cfd8ba857/pages/archived-body.md",
  "local_html": "attachments/647cfd8ba857/pages/archived-body.html",
  "body_source": "prior_capture"
}