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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。