當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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