Skip to contents

Recomputes the ranked terms of a fitted topic model under different term settings. Term extraction depends only on the fitted topic assignments and the document text, so every argument here can be changed without repeating the clustering or the encoding.

Usage

# S3 method for class 'sbert_topic_model'
terms(
  x,
  n = NULL,
  stop_words = NULL,
  min_term_frequency = NULL,
  min_token_length = NULL,
  weighting = NULL,
  reduce_frequent_words = NULL,
  stem = NULL,
  numbers = NULL,
  roman_numerals = NULL,
  section_numbers = NULL,
  smoothing = 0,
  sort_by = c("score", "beta"),
  ...
)

Arguments

x

A fitted model from [topics()].

n

Terms returned per topic, or `NULL` for the whole vocabulary (useful together with `smoothing` to obtain a full \(p(term | topic)\) distribution). Defaults to the model's fitted `n_terms`.

stop_words

Character vector excluded from terms. Defaults to the model's fitted list; see [stop_words()].

min_term_frequency

Minimum corpus-wide token frequency.

min_token_length

Minimum Unicode character length for a token.

weighting

Class-based term weighting, `"ctfidf"` or `"bm25"`.

reduce_frequent_words

Square-root the within-topic frequency before weighting, damping very frequent words.

stem

Collapse inflected forms onto a shared Porter stem, displaying the most frequent surface form. Requires `SnowballC`.

numbers

How to treat purely numeric tokens: `"keep"` or `"remove"` (drop digit-only tokens such as years and counts). Defaults to the model's fitted setting.

roman_numerals

How to treat Roman-numeral tokens: `"keep"` or `"remove"` (drop chapter/section markers such as `ii`, `iv`, up to 100). Defaults to the model's fitted setting.

section_numbers

How to treat section, reference, and list numbering — multi-level indices such as `1.2.3` and enumeration markers such as `1.`, `2.`: `"keep"` or `"remove"`. Defaults to the model's fitted setting.

smoothing

Additive (Dirichlet) smoothing for the `beta` column. Only terms a topic actually used are returned, so with `smoothing = 0` (default) each topic's `beta` sums to one, while any positive value reserves mass for the zero-count vocabulary and the returned rows sum to less than one.

sort_by

Order terms within each topic by `"score"` (default, the class-based weight — distinctive words) or `"beta"` (raw \(p(term | topic)\) — the words the topic uses most). `n` is applied after ordering.

...

Unused, present for generic consistency.

Value

A base data frame with one row per topic and term: `topic`, `label`, `term`, `rank`, `score` (the class-based weight), `frequency` (within-topic count), and `beta`, the multinomial \(p(term | topic)\).

Examples

text <- c(
  "Cats chase mice", "Kittens chase mice too", "Cats nap daily",
  "Stocks and bonds trade", "Markets price shares", "Banks report profit"
)
embeddings <- rbind(
  c(1, 0, 0), c(0.98, 0.02, 0), c(0.96, 0, 0.04),
  c(0, 1, 0), c(0.02, 0.98, 0), c(0, 0.96, 0.04)
)
fitted <- topics(
  text, n_topics = 2, embeddings = embeddings, min_term_frequency = 1
)
terms(fitted, n = 3)
#>   topic                   label    term rank     score frequency      beta
#> 1     1     cats / chase / mice    cats    1 0.3788329         2 0.2222222
#> 2     1     cats / chase / mice   chase    2 0.3788329         2 0.2222222
#> 3     1     cats / chase / mice    mice    3 0.3788329         2 0.2222222
#> 4     2 banks / bonds / markets   banks    1 0.2558428         1 0.1111111
#> 5     2 banks / bonds / markets   bonds    2 0.2558428         1 0.1111111
#> 6     2 banks / bonds / markets markets    3 0.2558428         1 0.1111111
terms(fitted, n = 3, weighting = "bm25")
#>   topic                   label    term rank     score frequency      beta
#> 1     1     cats / chase / mice    cats    1 0.3080654         2 0.2222222
#> 2     1     cats / chase / mice   chase    2 0.3080654         2 0.2222222
#> 3     1     cats / chase / mice    mice    3 0.3080654         2 0.2222222
#> 4     2 banks / bonds / markets   banks    1 0.2107911         1 0.1111111
#> 5     2 banks / bonds / markets   bonds    2 0.2107911         1 0.1111111
#> 6     2 banks / bonds / markets markets    3 0.2107911         1 0.1111111