不知道你是否對模型進行了優化?如果效果還不理想,我可以給你個建議:我們應該降低學習率,以便模型能更好地收斂。如果出現過度擬合,可能是模型的複雜度過高。因此我們可以減少其卷積層和模型層數,使其更好地貼合數據,而我也會把完整的優化過程放在我的GitHub中,你也可以參考我的優化方式。現在讓我們進入今天的主題
在過去的11天中,我們學習了如何辨識圖像,了解電腦如何將視覺資訊轉換為數位訊號,並透過各種技術與演算法進行分類與分析。利用圖像辨識技術,我們學會了如何讓電腦看見並理解圖片中的物體、形狀和顏色等元素。
然而除了圖像辨識外,現代應用中也經常需要處理大量的文字資料,無論是搜尋引擎、自動翻譯、語音助手甚至是我們日常使用的社群平台,文字的理解與處理都扮演著至關重要的角色。因此在今天的部分,我們將重點放在自然語言處理的概述上,讓先清楚自然語言處理的完整系統架構。
自然語言處理(Natural Language Processing, NLP)
主要分為自然語言理解(Natural Language Understanding, NLU)
和自然語言生成(Natural Language Generation, NLG)
。基本上**NLU
側重於理解和解釋人類語言,從中提取語義信息;而NLG
側重於生成可讀的人類語言文本,將結構化數據轉化為語言表達**。現在先讓我們看看這兩個技術的共同基礎技術。
文字對於人類來說是一種自然的溝通方式,但對於電腦而言文字並不是一開始就能直接理解的資料。在進行文字辨識的過程中,電腦需要將這些「符號」轉化成它能夠處理的格式,然後進行分析與理解。
我們在前面的章節知道電腦必須將任何形式的文字資料轉換為數位格式,這可以是由鍵盤輸入的文字,也可以是圖像中提取出來的文字(光學字符識別,OCR)。每個字元在電腦中以編碼的形式儲存,比如說最常見的編碼方式是ASCII或Unicode。
而對於自然語言處理(Natural Language Processing, NLP)
來說,在需要獲取一段文字時,第一步是進行分詞(word segmentation)
處理。對於英文來說這相對簡單,因為單詞之間是用空格隔開的可以直接進行分詞的動作;但是在中文或其他語言中,電腦需要更多的邏輯來分辨哪些字符組合成一個詞。這時我們就需要利用 BPE(Byte Pair Encoding)
、隱藏式馬可夫模型(Hidden Markov Model)
等分析數據的算法,找出重複率最高的文字,並進行分詞動作。這些高階算法的好處在於能夠將一個單字拆分成更小的單位子詞(Subword)
。
例如在英文中,Happy
和 Happiness
可能語意相似,只不過是後面的文法有些變化。但在深度學習中,這兩個單字會被分割成不同的單字。因此拆分成子詞的好處在於能夠將其分割成 happ
和 iness
這樣的文字向量。這樣我們只需分別計算每一個文字中的子詞,就能夠計算出這些被拆分出來的文字向量權重。這時電腦就能更好地理解這些文字之間的關係了。而這些被通過算法切割出來的文字就被稱之為詞彙(Token)
,而協助我們完成分詞的的工具就叫做分詞器(Tokenizer)
。
分詞器的建立通常是先通過大量分析文本找出對應的Token
後,再建立成一個可轉換的映射表,讓我們能夠重複利用。此外一個模型中通常會有對應的Tokenizer
,以將正確的映射數字投射到更高維的空間向量。
詞嵌入(Word Embedding)
是一種將詞彙轉換為數字向量的技術,這些向量可以捕捉詞語之間的語義和語法關係。詞嵌入的主要目的是使電腦能夠理解和處理自然語言文本。這些詞嵌入之間的關係通過模型訓練,使相對應的Token
靠攏在一起,從而達到更好的分類效果。
詞嵌入層的作法是將原始的Token
映射到一個大小為emb_dim
的隨機初始化向量空間。假設我們的詞彙表(Vocabulary)
大小是100,emb_dim
大小是50,這樣就會產生一個大小為(100, 50)的向量矩陣。在深度學習中,我們的目標是訓練這50維的向量空間,使得相似的Token映射到相近的向量。接下來的步驟是在這些向量空間中劃分數條不規則的線,以進行分隔和分類。這項技術在自然語言處理中非常重要,甚至可以說,只要有一個出色的Word Embedding
,就能達到良好的分類效果。
在今天的文章中,我的主要目的是讓你了解 NLP 的核心概念及其兩大分支——自然語言理解(NLU)和自然語言生成(NLG)。我也介紹了這兩者技術之間的根本技術——詞嵌入(Word Embedding),並解釋了將文字拆分的概念,以幫助你更好地理解分詞器(Tokenizer)和詞彙(Token)。這樣做的目的是為了讓你更好地理解這些名詞之間的關聯性,這樣子當你真正遇到時才能更好的加深你對這些名詞的印象