從經典學習 NLP:小白到大白:1. Word Tokenization

文章目錄

      • 1 Word Tokenization
        • 1.1 Top-down/rule-based tokenization
        • 1.2 Byte-pair Encoding: A Bottom-up tokenization algorithm

1 Word Tokenization

來源:JM3 Chapter 2.5 p19-23

tokenization 就是 把 running text 分割成為 words;

常有兩種方法:

  • top-down/rule-based tokenization
    根據預先定義的標準與規則實現分詞;
  • bottom-up tokenization
    使用字母序列的統計量實現分詞;
1.1 Top-down/rule-based tokenization

舉個例子,

首先要注意 clitic contraction ,也就是附著縮略詞的處理,clitic 是:“ A clitic is a part of a word that can’t stand on its own, and can only occur when it is attached to another word. ”

按照 Penn Treebank tokenization 標準:
doesn’t 被展開為 does + n’t
其中的 n’t 就是 clitic contraction 嘛
tokenization 會保持 hyphenated words,即連字符連接的詞在一起,并把所有 punctuation,即標點符號進行分割!具體例子可以見:
![[Pasted image 20240229223529.png]]

tokenization 可以展開這種 clitic contraction,也可以看到,tokenization 識別出了 does 這個詞,所以 tokenization 也和 NLP 的一個方向:named entity recognition 緊密相關!

由于 tokenization 在 其他的 text precessing 前,所以需要比較迅速,常是基于 regular expression 正則表達式,正則表達式通常都編譯入非常高效的 有限狀態自動機。

設計優秀的 top-down tokenization 所遵循的 deterministic algorithm 可以處理各種 ambiguity,比如 不同的 撇好apostrophe:

  • genitive marker 屬格
    the book’s cover
  • quotative 引用
    ‘The other class’, she said
  • clitics 附著詞
    they’re, doesn’t

不同的語言在進行tokenization時可能存有不同困難,english 天然的以 words 分,但 chinese 不使用 space 進行 words 的分割,而是以 character,即漢字,作為分割得到的 token。由于chinese本身的character,也就是漢字,具有豐富的意義,研究表明,chinese NLP 中,以 character 作為 input 會比 words 更好。

但像 japanese,thai 等語言,他的 character 本身作為一個 unit 太小,不足以表達含義,所以也需要 word segmentation 算法。

1.2 Byte-pair Encoding: A Bottom-up tokenization algorithm

tokenization 很重要的一點是要有能力處理 unknown words,我們希望也能夠處理 corpus,即語料庫,之外的的 unknown words。

首先要引入一個 subwords 子字的概念,這是一種 sets of tokens that include tokens smaller than words. 即一種比 words 更小的 token.

子詞并行:在自然語言處理中,一種處理詞匯的方法,將詞匯分解為更小的單元(子詞),以便更好地處理稀有詞匯和詞匯變化。

subwords 可以是 arbitrary substring,也可以是有一定意義的 morphemes,即語素,比如:-est, -er.

A morpheme is the smallest meaning-bearing unit of a language; for example the word unlikeliest has the morphemes un-, likely, and -est.

現代 tokenization 方法中的 token 常為 words,但也可以為 某些 frequently morpheme 高頻語素,或者是一些其他的 字詞,比如:-er.

基于 subword,任何 unknow words 都可以由某些 subwords units 序列構成,比如 lower,可以由 low 和 -er 這兩個 subwords 組成,或者,如果有必要,可以視為由 -l, -o,-w, -e, -r 等一系列 letter 構成。

tokenization schema 一般分為 token learner 和 token segmenter。前者從 corpus語料中學習,并產生vocabulary,即 set of tokens。后者作用于原始文本,對文本按照 vocabulary 進行分割,實現分詞得到一系列 tokens。

常有三種方法:

  • byte-pair encoding, BPE
  • unigram language modeling
  • SentencePiece library 含有上述兩種,但常指代后一種

BPE token learner 由所有部分均為 individual character 的 vocabulary 開始,根據 training corpus 中的 words,去尋找具有最高出現頻次的 adjacent symbols (symbol可以是多個character構成)。注意,最開始的 vocabulary 就是所有 character 構成的。

將最高頻次的 symbols 不斷merge,并加入到 vocabulary中,以一種greedy的思想去不斷 merge highest frequent adjacent symbols into vocabulary,直到添加完畢 k k k 個 symbols 進入到 vocabulary中。注意,這里的 k k k 是 BPE algorithm 的參數。通過BPE,最終得到的 vocabulary 就是由原來的 individual characters 加上 k k k 個 merged symbols.

過程中,同樣頻率的 pairs of characters,哪個先 merge 沒有特定要求,是 arbitrary 的!

BPE的核心思想:
iteratively merge freaquent pairs of characters.

一些優點:

  • data-informed tokenization
    language independent, can derive the vocabulary for the language with only corpus, this BPE can figure the corpus itself;
  • works for different languages
    no need to design rules for different language
  • deal better with unknown words
    worst case: unknown words 分成 individual characters

最終的 vocabulary 里,大部分都是 full words,少部分是 subwords。
最差情況下,unknown word 也是被分為多個 individual characters。

具體例子參考 jm3,p21. 簡單展示:

![[Pasted image 20240301174028.png]]
注意,有一個 end-of-word symbol _;
從過程來看,一般都是從 end-of-word 處開始 merge。

基于最終得到的 vocabulary:
對于 n e w e r _,其會被分為一整個 token:newer_;
對于 unknown word l o w e r _, 會被分為兩個 token: low 和 er_.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712281.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712281.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712281.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AVL 樹

AVL樹的概念 二叉搜索樹雖可以縮短查找的效率,但如果數據有序或接近有序二叉搜索樹將退化為單支樹,查找元素相當于在順序表中搜索元素,效率低下。因此,兩位俄羅斯的數學家G.M.Adelson-Velskii和E.M.Landis在1962年 發明了一種解決…

k8s筆記26--快速實現prometheus監控harbor

k8s筆記26--快速實現prometheus監控harbor 簡介采集指標&配置grafana面板采集指標配置grafana面板 說明 簡介 harbor是當前最流行的開源容器鏡像倉庫項目,被大量IT團隊廣泛應用于生產、測試環境的項目中。本文基于Harbor、Prometheus、Grafana介紹快速實現監控…

3. 臺階問題

數樓梯 題目描述 樓梯有 N N N 階,上樓可以一步上一階,也可以一步上二階。 編一個程序,計算共有多少種不同的走法。 輸入格式 一個數字,樓梯數。 輸出格式 輸出走的方式總數。 樣例 #1 樣例輸入 #1 4樣例輸出 #1 5提示…

FPGA之帶有進位邏輯的加法運算

module ADDER( input [5:0]A, input [5:0]B,output[6:0]Q ); assign Q AB; endmodule 綜合結果如下圖所示: 使用了6個Lut,,6個LUT分布…

詳細介紹如何用windows11自帶Hyper-V安裝虛擬機

通過系統自帶的hyper-v安裝windows11,舒服又愜意,相比用第三方虛擬機軟件速度快很多。 硬件準備 1、對于電腦自帶的虛擬機Hyper-V,不是每種電腦系統版本都帶著的。我們先要確定您的系統符合 Hyper-V 的最低要求。我們跟著下面的步驟來執行&…

鴻蒙開發相關知識(四)【數據持久化(用戶首選項、關系型數據庫)、通知(基礎通知、進度條通知、通知意圖)】

文章目錄 一、數據持久化1、用戶首選項(1)語法說明(2)完整代碼示例 2、關系型數據庫(1)初始化數據庫(2)增刪改數據(3)查詢數據(4)完整…

《2023年勒索軟件攻擊態勢報告》

獲取方式: 鏈接:https://pan.baidu.com/s/1zd-yVsuGwJADyyGNFR_TIQ?pwd2lo0 提取碼:2lo0

探索數據結構:解鎖計算世界的密碼

?? 歡迎大家來到貝蒂大講堂?? 🎈🎈養成好習慣,先贊后看哦~🎈🎈 所屬專欄:數據結構與算法 貝蒂的主頁:Betty‘s blog 前言 隨著應用程序變得越來越復雜和數據越來越豐富,幾百萬、…

600萬訂單每秒Disruptor +SpringBoot,如何解決消息不丟失?

尼恩說在前面 在40歲老架構師 尼恩的讀者交流群(50)中,最近有小伙伴拿到了一線互聯網企業如得物、阿里、滴滴、極兔、有贊、shein 希音、百度、網易的面試資格,遇到很多很重要的面試題: Disruptor 官方說能達到每秒600w OPS訂單處理能力&…

Java——Object

1.Object萬類之祖 1.1 Object類型的概述 Object類是所有類型的頂層父類,所有類型的直接或者間接的父類;所有的類型中都含有Object類中的所有方法。 隨意定義一個類型,不手動顯式定義其父類,那么這個類的父類就是Object類 public Object() …

【C語言】指針初階2.0版本

這篇博文我們來繼續學習指針的其他內容 指針2.0 傳值調用與傳址調用傳值調用傳址調用 一維數組與指針理解數組名使用指針深入理解一維數組 二級指針指針數組二維數組與指針 傳值調用與傳址調用 在開始之前,我們需要先了解這個概念,后面才能夠正常的學習…

利用 Python 抓取數據探索汽車市場趨勢

一、引言 隨著全球對環境保護意識的增強和技術的進步,新能源汽車作為一種環保、高效的交通工具,正逐漸受到人們的關注和青睞。在這個背景下,對汽車市場的數據進行分析和研究顯得尤為重要。 本文將介紹如何利用 Python 編程語言,結…

VSCode上搭建C/C++開發環境(vscode配置c/c++環境)Windows系統---保姆級教程

引言勸退 VSCode,全稱為Visual Studio Code,是由微軟開發的一款輕量級,跨平臺的代碼編輯器。大家能來搜用VSCode配置c/c,想必也知道VSCode的強大,可以手握一個VSCode同時編寫如C,C,C#&#xff…

微服務day02-Ribbon負載均衡與Nacos安裝與入門

一.Ribbon負載均衡 在上一節中,我們通過在RestTemplte實例中加上了注解 LoadBalanced,表示將來由RestTemplate發起的請求會被Ribbon攔截和處理,實現了訪問服務時的負載均衡,那么他是如何實現的呢? 1.1 Ribbon負載均衡的原理 Rib…

鏈表的歸并排序-LeetCode(Python版)

雙指針歸并排序!圖解排序鏈表!-知乎 class ListNode(object):def __init__(self, val0, nextNone):self.val valself.next nextclass Solution(object):def find_mid(self, head): # 快慢指針slow, fast head, headwhile fast.next and fast.next.n…

linux 硬盤存儲剩余容量自動化監控+報警通知

linux 硬盤存儲剩余容量自動化監控報警通知 編寫shell腳本 #!/bin/bash# 獲取系統存儲大小(單位為GB) storage_size$(df -h / | awk NR2 {print $4} | sed s/G//)# 閾值(小于10GB觸發報警) threshold10# 釘釘機器人 Webhook UR…

LabVIEW非接觸式電阻抗層析成像系統

LabVIEW非接觸式電阻抗層析成像系統 非接觸式電阻抗層析成像(NEIT)技術以其無輻射、非接觸、響應速度快的特點,為實時監測提供了新的解決方案。基于LabVIEW的電阻抗層析成像系統,實現了數據的在線采集及實時成像,提高…

代碼隨想錄算法訓練營第四十四天|139.單詞拆分、56.攜帶礦石資源

139.單詞拆分 思路:將字符串s看作為背包容量,從字符串中獲取物品,剛好滿足背包容量的過程,因為可以從字符串中多次取值,相當于物品的數量是不限制,這就是一個完全背包的問題!這個題有個關鍵點&a…

Python中的windows路徑問題

在Python中處理Windows路徑時,經常會遇到一些特殊的問題。這主要是因為Windows和大多數其他操作系統(如Linux和macOS)使用不同的路徑分隔符。在Windows中,路徑使用反斜杠(\)作為分隔符,而在其他操作系統中,路徑使用正斜杠(/)作為分隔符。 以下是在Python中處理Windo…

Java SE:多線程(Thread)

1. 線程兩個基本概念 并發:即線程交替運行多個指令并行:即多個線程同時運行指令 并發并行不矛盾,兩者可同時發生,即多個線程交替運行指令 2. 多線程3種實現方式 2.1 直接創建線程對象 /*** 方式1:* 1. 創建thread類的…