1. 文本清理(Text Cleaning)
目的:去除文本中的噪音和無關內容,確保輸入數據的質量和一致性。
方法:
- 去除標點符號:刪除文本中的標點符號(視任務需求,某些標點符號可能保留)。
- 轉換大小寫:將所有文本轉換為小寫,減少同一個詞的不同形式(如“Cat”和“cat”)帶來的影響。
- 去除停用詞:刪除常見的停用詞(如“the”、“is”、“and”),這些詞對語義貢獻較小。
- 刪除空白和特殊字符:去除多余的空格、換行符和特殊字符。
2. 標記化(Tokenization)
目的:將文本劃分為單詞或子詞單位(tokens),這些單位是模型的基本輸入。
方法:
- 單詞級標記化:將文本分割成單詞,如“Natural language processing”變成[“Natural”, “language”, “processing”]。
- 子詞標記化:使用BPE(Byte Pair Encoding)或WordPiece等算法,將單詞進一步分解成更小的單元,處理未見過的單詞更靈活。
3. 詞匯表構建(Vocabulary Building)
目的:創建一個詞匯表,將所有標記化后的單位映射到唯一的索引。
方法:
- 詞匯表大小:設定一個固定的詞匯表大小,如10,000個詞,詞頻較低的詞匯可以統一映射為特殊標記(如<UNK>)。
- 包含特殊標記:詞匯表中通常包含特殊標記,如<PAD>(填充)、<SOS>(序列開始)、<EOS>(序列結束)。
4. 詞嵌入(Word Embedding)
目的:將離散的詞匯轉換為連續的向量表示,捕捉詞匯間的語義關系。
方法:
- 預訓練詞嵌入:使用預訓練的詞嵌入模型,如Word2Vec、GloVe、FastText等,將詞匯映射到高維向量。
- 自訓練詞嵌入:在模型訓練過程中,同時學習詞匯的向量表示。
5. 序列填充和截斷(Padding and Truncation)
目的:確保所有輸入序列長度一致,便于批量處理。
方法:
- 填充:對較短的序列在末尾添加<PAD>標記,擴展到固定長度。
- 截斷:對超過固定長度的序列進行截斷,只保留前面的部分。
6. 生成注意力掩碼(Attention Masking)
目的:在處理可變長度輸入時,忽略填充部分,確保模型只關注有效部分。
方法:創建一個與輸入序列長度相同的掩碼,填充部分為0,有效部分為1,指導模型計算注意力權重時忽略填充部分。
7. 詞干提取和詞形還原(Stemming and Lemmatization)
目的:將單詞還原到其基本形式,減少詞形變化的影響。
方法:
- 詞干提取:通過簡單規則去掉單詞的詞尾,使其變成詞干形式,如“running”變成“run”。
- 詞形還原:使用詞典和語言學規則,將單詞還原到其基本形式,如“better”還原為“good”。
8. 字符級預處理(Character-level Processing)
目的:在處理細粒度任務(如拼寫糾錯、生成任務)時,直接處理字符級別的信息。
方法:將文本分割成單個字符,構建字符級詞匯表,并生成字符序列。