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
-
该步骤特有的字符串,用于标识它。
细节
标记化是将字符串分割成更小的部分以进行进一步分析的行为。此步骤使用 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"
值得注意的是,并非所有这些令牌方法都适用,但为了完整性而包含在内。
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] "!"
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
(标记化单元)的小标题。
也可以看看
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 textrecipes step_tokenize_wordpiece 字符变量的Wordpiece标记化
- R textrecipes step_tokenize_sentencepiece 字符变量的句子标记化
- R textrecipes step_tokenize_bpe 字符变量的 BPE 标记化
- R textrecipes step_tokenfilter 根据词频过滤标记
- R textrecipes step_tokenmerge 将多个令牌变量合并为一个
- R textrecipes step_text_normalization 字符变量的标准化
- R textrecipes step_tf 代币的使用频率
- R textrecipes step_tfidf 词频-令牌的逆文档频率
- R textrecipes step_textfeature 计算文本特征集
- R textrecipes step_texthash 代币的特征哈希
- R textrecipes step_lemma 标记变量的词形还原
- R textrecipes step_clean_names 干净的变量名称
- R textrecipes step_word_embeddings 令牌的预训练词嵌入
- R textrecipes step_stem 令牌变量的词干
- R textrecipes step_ngram 从标记变量生成 n-gram
- R textrecipes step_stopwords 过滤标记变量的停用词
- R textrecipes step_pos_filter 令牌变量的语音过滤部分
- R textrecipes step_untokenize 令牌变量的取消令牌化
- R textrecipes step_lda 计算代币的LDA维度估计
- R textrecipes step_clean_levels 清晰的分类级别
- R textrecipes step_sequence_onehot 令牌的位置 One-Hot 编码
- R textrecipes step_dummy_hash 通过特征哈希的指示变量
- R textrecipes show_tokens 显示配方的令牌输出
- R textrecipes tokenlist 创建令牌对象
- R update_PACKAGES 更新现有的 PACKAGES 文件
注:本文由纯净天空筛选整理自等大神的英文原创作品 Tokenization of Character Variables。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。