当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R textrecipes step_tokenize 字符变量的标记化


step_tokenize() 创建配方步骤的规范,该步骤将字符预测器转换为 token 变量。

用法

step_tokenize(
  recipe,
  ...,
  role = NA,
  trained = FALSE,
  columns = NULL,
  training_options = list(),
  options = list(),
  token = "words",
  engine = "tokenizers",
  custom_token = NULL,
  skip = FALSE,
  id = rand_id("tokenize")
)

参数

recipe

一个recipe 对象。该步骤将添加到此配方的操作序列中。

...

一个或多个选择器函数用于选择受该步骤影响的变量。有关更多详细信息,请参阅recipes::selections()

role

由于没有创建新变量,因此此步骤未使用。

trained

指示预处理数量是否已估计的逻辑。

columns

将由 terms 参数(最终)填充的变量名称字符串。在 recipes::prep.recipe() 训练该步骤之前,这是 NULL

training_options

训练时传递给分词器的选项列表。仅适用于引擎=="tokenizers.bpe"。

options

传递给分词器的选项列表。

token

用于标记化的单位。请参阅选项的详细信息。默认为"words"。

engine

将用于标记化的包。请参阅选项的详细信息。默认为"tokenizers"。

custom_token

用户提供的分词器。使用此参数将覆盖令牌和引擎参数。必须将字符向量作为输入并输出字符向量列表。

skip

一个合乎逻辑的。当recipes::bake.recipe() 烘焙食谱时是否应该跳过此步骤?虽然所有操作都是在 recipes::prep.recipe() 运行时烘焙的,但某些操作可能无法对新数据进行(例如处理结果变量)。使用 skip = FALSE 时应小心。

id

该步骤特有的字符串,用于标识它。

recipe 的更新版本,其中新步骤添加到现有步骤(如果有)的序列中。

细节

标记化是将字符串分割成更小的部分以进行进一步分析的行为。此步骤使用 tokenizers 包,其中包括有关如何将文本拆分为段落标记、单词标记等的启发式方法。 textrecipes 将标记保留为 token 变量,其他步骤将在这些 token 变量上执行任务,然后再将它们转换回数字变量。

textrecipes 的工作几乎总是从调用 step_tokenize 开始,然后是修改和过滤步骤。情况并非总是如此,因为您有时想要应用预标记化步骤,这可以使用 recipes::step_mutate() 来完成。

引擎

engine 的选择决定了 token 的可能选择。

下面是后面例子中用到的一些小示例数据

text_tibble <- tibble(
  text = c("This is words", "They are nice!")
)

分词器

tokenizers 包是默认的 engine ,它带有以下单位 token 。所有这些选项都对应于 tokenizers 包中的一个函数。

  • "words"(默认)

  • "characters"

  • "character_shingles"

  • "ngrams"

  • "skip_ngrams"

  • "sentences"

  • "lines"

  • "paragraphs"

  • "regex"

  • "ptb"(宾夕法尼亚树库)

  • "skip_ngrams"

  • "word_stems"

默认标记器是"word",它将文本分割成一系列单词。通过使用 step_tokenize() 而不设置任何参数,您可以获得单词标记

recipe(~ text, data = text_tibble) %>%
  step_tokenize(text) %>%
  show_tokens(text)
#> [[1]]
#> [1] "this"  "is"    "words"
#> 
#> [[2]]
#> [1] "they" "are"  "nice"

此标记生成器具有更改标记化发生方式的参数,并且可以通过传递命名列表使用 options 参数进行访问。在这里我们告诉tokenizers::tokenize_words我们不想将单词变成小写

recipe(~ text, data = text_tibble) %>%
  step_tokenize(text,
                options = list(lowercase = FALSE)) %>%
  show_tokens(text)
#> [[1]]
#> [1] "This"  "is"    "words"
#> 
#> [[2]]
#> [1] "They" "are"  "nice"

我们也可以停止删除标点符号。

recipe(~ text, data = text_tibble) %>%
  step_tokenize(text,
                options = list(strip_punct = FALSE,
                               lowercase = FALSE)) %>%
  show_tokens(text)
#> [[1]]
#> [1] "This"  "is"    "words"
#> 
#> [[2]]
#> [1] "They" "are"  "nice" "!"

可以通过设置不同的 token 来更改分词器。这里我们将其更改为返回字符标记。

recipe(~ text, data = text_tibble) %>%
  step_tokenize(text, token = "characters") %>%
  show_tokens(text)
#> [[1]]
#>  [1] "t" "h" "i" "s" "i" "s" "w" "o" "r" "d" "s"
#> 
#> [[2]]
#>  [1] "t" "h" "e" "y" "a" "r" "e" "n" "i" "c" "e"

值得注意的是,并非所有这些令牌方法都适用,但为了完整性而包含在内。

斯帕希尔

  • "words"

tokenizers.bpe

tokeenizers.bpe 引擎执行字节对编码文本标记化。

  • "words"

该分词器在训练集上进行训练,因此需要传递训练参数。这些被传递给 training_options 参数,最重要的是 vocab_size 。确定标记生成器将生成的唯一标记的数量。它通常设置为更高的值,通常为数千,但出于演示目的,此处设置为 22。

recipe(~ text, data = text_tibble) %>%
  step_tokenize(
    text,
    engine = "tokenizers.bpe",
    training_options = list(vocab_size = 22)
  ) %>%
  show_tokens(text)
#> [[1]]
#>  [1] "_Th" "is"  "_"   "is"  "_"   "w"   "o"   "r"   "d"   "s"  
#> 
#> [[2]]
#>  [1] "_Th" "e"   "y"   "_"   "a"   "r"   "e"   "_"   "n"   "i"   "c"   "e"  
#> [13] "!"

乌德管道

  • "words"

custom_token

有时您需要执行支持的引擎未涵盖的标记化。在这种情况下,您可以使用 custom_token 参数传递一个函数来执行您想要的标记化。

下面是一个非常简单的空间标记化的示例。这是一种非常快速的标记化方式。

space_tokenizer <- function(x) {
  strsplit(x, " +")
}

recipe(~ text, data = text_tibble) %>%
  step_tokenize(
    text,
    custom_token = space_tokenizer
  ) %>%
  show_tokens(text)
#> [[1]]
#> [1] "This"  "is"    "words"
#> 
#> [[2]]
#> [1] "They"  "are"   "nice!"

整理

当您tidy()此步骤时,会出现一个包含列terms(选择的选择器或变量)和value(标记化单元)的小标题。

调整参数

此步骤有 1 个调整参数:

  • token:令牌单元(类型:字符,默认:单词)

箱重

底层操作不允许使用案例权重。

也可以看看

step_untokenize() 取消标记化。

标记化的其他步骤:step_tokenize_bpe()step_tokenize_sentencepiece()step_tokenize_wordpiece()

例子

library(recipes)
library(modeldata)
data(tate_text)

tate_rec <- recipe(~., data = tate_text) %>%
  step_tokenize(medium)

tate_obj <- tate_rec %>%
  prep()

bake(tate_obj, new_data = NULL, medium) %>%
  slice(1:2)
#> # A tibble: 2 × 1
#>       medium
#>    <tknlist>
#> 1 [8 tokens]
#> 2 [3 tokens]

bake(tate_obj, new_data = NULL) %>%
  slice(2) %>%
  pull(medium)
#> <textrecipes_tokenlist[1]>
#> [1] [3 tokens]
#> # Unique Tokens: 3

tidy(tate_rec, number = 1)
#> # A tibble: 1 × 3
#>   terms  value id            
#>   <chr>  <chr> <chr>         
#> 1 medium NA    tokenize_zffJ2
tidy(tate_obj, number = 1)
#> # A tibble: 1 × 3
#>   terms  value id            
#>   <chr>  <chr> <chr>         
#> 1 medium words tokenize_zffJ2

tate_obj_chars <- recipe(~., data = tate_text) %>%
  step_tokenize(medium, token = "characters") %>%
  prep()

bake(tate_obj, new_data = NULL) %>%
  slice(2) %>%
  pull(medium)
#> <textrecipes_tokenlist[1]>
#> [1] [3 tokens]
#> # Unique Tokens: 3
源代码:R/tokenize.R

相关用法


注:本文由纯净天空筛选整理自大神的英文原创作品 Tokenization of Character Variables。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。