Path: blob/master/site/ko/tutorials/load_data/text.ipynb
25118 views
Copyright 2018 The TensorFlow Authors.
ν μ€νΈ λ‘λνκΈ°
μ΄ νν 리μΌμ ν μ€νΈλ₯Ό λ‘λνκ³ μ μ²λ¦¬νλ λ κ°μ§ λ°©λ²μ λ³΄μ¬ μ€λλ€.
λ¨Όμ Keras μ νΈλ¦¬ν°μ μ μ²λ¦¬ λ μ΄μ΄λ₯Ό μ¬μ©ν©λλ€. μ¬κΈ°μλ λ°μ΄ν° νμ€ν, ν ν°ν λ° λ²‘ν°νλ₯Ό μν΄ λ°μ΄ν°λ₯Ό
tf.data.Dataset
μtf.keras.layers.TextVectorization
μΌλ‘ λ³ννλtf.keras.utils.text_dataset_from_directory
κ° ν¬ν¨λμ΄ μμ΅λλ€. TensorFlowκ° μ²μμ΄λΌλ©΄ μ¬κΈ°μλΆν° μμν΄μΌ ν©λλ€.κ·Έλ° λ€μ
tf.data.TextLineDataset
μ κ°μ νμ μμ€ μ νΈλ¦¬ν°λ₯Ό μ¬μ©νμ¬ ν μ€νΈ νμΌμ λ‘λνκ³ , λ³΄λ€ μΈλ°ν μ μ΄λ₯Ό μν΄text.UnicodeScriptTokenizer
λ°text.case_fold_utf8
κ³Ό κ°μ TensorFlow Text APIλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μ²λ¦¬ν©λλ€.
μμ 1: μ€ν μ€λ²νλ‘ μ§λ¬Έμ λν νκ·Έ μμΈ‘νκΈ°
첫 λ²μ§Έ μμ λ‘ μ€ν μ€λ²νλ‘μμ νλ‘κ·Έλλ° μ§λ¬Έ λ°μ΄ν°μΈνΈλ₯Ό λ€μ΄λ‘λν©λλ€. κ° μ§λ¬Έ("κ°μΌλ‘ μ¬μ μ μ΄λ»κ² μ λ ¬νλμ?")λ§λ€ μ νν νλμ νκ·Έ(Python
, CSharp
, JavaScript
, λλ Java
)κ° λ μ΄λΈλ‘ μ§μ λ©λλ€. μ¬λ¬λΆμ μμ
μ μ§λ¬Έμ λν νκ·Έλ₯Ό μμΈ‘νλ λͺ¨λΈμ κ°λ°νλ κ²μ
λλ€. μ΄κ²μ μ€μνκ³ λ리 μ μ© κ°λ₯ν λ¨Έμ λ¬λ λ¬Έμ μΈ λ€μ€ ν΄λμ€ λΆλ₯ μμ μ
λλ€.
λ°μ΄ν°μΈνΈ λ€μ΄λ‘λ λ° νμνκΈ°
tf.keras.utils.get_file
μ μ¬μ©νμ¬ μ€ν μ€λ²νλ‘ λ°μ΄ν°μΈνΈλ₯Ό λ€μ΄λ‘λνκ³ , λλ ν°λ¦¬ ꡬ쑰λ₯Ό νμνμ¬ μμνλλ‘ ν©λλ€.
train/csharp
, train/java
, train/python
λ° train/javascript
λλ ν°λ¦¬μλ λ§μ ν
μ€νΈ νμΌμ΄ ν¬ν¨λμ΄ μμΌλ©°, κ° ν
μ€νΈ νμΌμ λ΄μ©μ μ€ν μ€λ²νλ‘ μ§λ¬Έμ
λλ€.
λ€μκ³Ό κ°μ΄ μμ νμΌμ μΆλ ₯νκ³ λ°μ΄ν°λ₯Ό κ²μ¬ν©λλ€.
λ°μ΄ν°μΈνΈ λ‘λνκΈ°
λ€μμΌλ‘ λμ€ν¬λ‘λΆν° λ°μ΄ν°λ₯Ό λ‘λνκ³ λ°μ΄ν°λ₯Ό νλ ¨μ μ ν©ν νμμΌλ‘ μ€λΉν©λλ€. μ΄λ κ² νκΈ° μν΄ μ¬λ¬λΆμ tf.keras.utils.text_dataset_from_directory
μ νΈλ¦¬ν°λ₯Ό μ¬μ©νμ¬ λ μ΄λΈμ΄ μ§μ λ tf.data.Dataset
λ₯Ό μμ±ν©λλ€. tf.data
λ μ
λ ₯ νμ΄νλΌμΈμ ꡬμΆνλ κ°λ ₯ν λꡬ λͺ¨μμ
λλ€(tf.data: TensorFlow μ
λ ₯ νμ΄νλΌμΈ λΉλ κ°μ΄λμμ μμΈν μμ보μΈμ).
tf.keras.utils.text_dataset_from_directory
APIλ λ€μκ³Ό κ°μ λλ ν°λ¦¬ ꡬ쑰λ₯Ό μμν©λλ€.
λ¨Έμ λ¬λ μ€νμ μ€νν λ λ°μ΄ν°μΈνΈλ₯Ό νλ ¨, κ²μ¦ λ° ν μ€νΈμ μΈ λΆλΆμΌλ‘ λλλ κ²μ΄ κ°μ₯ μ’μ΅λλ€.
μ€ν μ€λ²νλ‘ λ°μ΄ν°μΈνΈλ μ΄λ―Έ νλ ¨ μΈνΈμ ν μ€νΈ μΈνΈλ‘ λλμ΄μ Έ μμ§λ§ μ¬κΈ°μλ κ²μ¦ μΈνΈκ° μμ΅λλ€.
validation_split
μ΄ 0.2
(μ¦, 20%)λ‘ μ€μ λ tf.keras.utils.text_dataset_from_directory
λ₯Ό μ¬μ©νμ¬ νλ ¨ λ°μ΄ν°λ₯Ό 80:20μ λΉμ¨λ‘ λΆν νλ κ²μ¦ μΈνΈλ₯Ό μμ±ν©λλ€.
μ΄μ μ
μΆλ ₯μ ν΅ν΄ μ μ μλ―μ΄ νλ ¨ ν΄λμλ 8,000κ°μ μμ κ° μμΌλ©° μ¬λ¬λΆμ κ·Έ μ€ 80%(λλ 6,400κ°μ μμ )λ₯Ό νλ ¨μ μ¬μ©ν κ²μ
λλ€. μ¬λ¬λΆμ tf.data.Dataset
λ₯Ό Model.fit
μ μ§μ μ λ¬νμ¬ λͺ¨λΈμ νλ ¨ν μ μλ€λ κ²μ κ³§ λ°°μ°κ² λ κ²μ
λλ€.
λ¨Όμ λ°μ΄ν°μΈνΈλ₯Ό λ°λ³΅νκ³ λͺ κ°μ§ μμ λ₯Ό μΈμνμ¬ λ°μ΄ν°μ λν κ°κ°μ μ΅νμΈμ.
μ°Έκ³ : λΆλ₯ λ¬Έμ μ λμ΄λλ₯Ό λμ΄κΈ° μν΄ λ°μ΄ν°μΈνΈ μμ±μλ νλ‘κ·Έλλ° μ§λ¬Έμμ Python, CSharp, JavaScript λλ JavaλΌλ λ¨μ΄λ₯Ό blankλ‘ λ체νμ΅λλ€.
λ μ΄λΈμ 0
, 1
, 2
λλ 3
μ
λλ€. μ΄λ€μ΄ μ΄λ ν λ¬Έμμ΄ λ μ΄λΈμ ν΄λΉνλμ§ νμΈνλ €λ©΄ λ°μ΄ν°μΈνΈμ class_names
μμ±μ κ²μ¬νλ©΄ λ©λλ€.
λ€μμΌλ‘ tf.keras.utils.text_dataset_from_directory
λ₯Ό μ¬μ©νμ¬ κ²μ¦ λ° ν
μ€νΈ μΈνΈλ₯Ό λ§λλλ€. κ²μ¦μ μν΄ νλ ¨ μΈνΈμ λλ¨Έμ§ 1,600κ° λ¦¬λ·°λ₯Ό μ¬μ©ν©λλ€.
μ°Έκ³ : tf.keras.utils.text_dataset_from_directory
μ validation_split
λ° subset
μΈμλ₯Ό μ¬μ©ν λ κ²μ¦ λ° νλ ¨ λΆν μ΄ κ²ΉμΉμ§ μλλ‘ μμ μλλ₯Ό μ§μ νκ±°λ shuffle=False
λ₯Ό μ λ¬νλλ‘ ν©λλ€.
νλ ¨μ μν λ°μ΄ν°μΈνΈ μ€λΉνκΈ°
λ€μμΌλ‘ tf.keras.layers.TextVectorization
λ μ΄μ΄λ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό νμ€ν, ν ν°ν λ° λ²‘ν°νν©λλ€.
νμ€νλ μΌλ°μ μΌλ‘ λ°μ΄ν°μΈνΈλ₯Ό λ¨μννκΈ° μν΄ κ΅¬λμ μ΄λ HTML μμλ₯Ό μ κ±°νλλ‘ ν μ€νΈλ₯Ό μ μ²λ¦¬νλ κ²μ μΌμ»«μ΅λλ€.
ν ν°νλ λ¬Έμμ΄μ ν ν°μΌλ‘ λΆν νλ κ²μ μΌμ»«μ΅λλ€(μ: λ¬Έμ₯μ 곡백μ μ¬μ©νμ¬ κ°λ³ λ¨μ΄λ‘ λΆν ).
벑ν°νλ μ κ²½λ§μ μ 곡ν μ μλλ‘ ν ν°μ μ«μλ‘ λ³ννλ κ²μ μΌμ»«μ΅λλ€.
μμ λͺ¨λ μμ
μ μ΄ λ μ΄μ΄λ‘ μνν μ μμ΅λλ€(tf.keras.layers.TextVectorization
API λ¬Έμμμ κ° μμ
μ λν΄ μμΈν μμλ³Ό μ μμ΅λλ€).
μ°Έκ³ μ¬ν:
κΈ°λ³Έ νμ€νλ ν μ€νΈλ₯Ό μλ¬Έμλ‘ λ³ννκ³ κ΅¬λμ μ μ κ±°ν©λλ€(
standardize='lower_and_strip_punctuation'
).κΈ°λ³Έ ν ν°νλ 곡백μΌλ‘ λΆν ν©λλ€(
split='whitespace'
).κΈ°λ³Έ 벑ν°ν λͺ¨λλ
'int'
(output_mode='int'
)μ λλ€. μ΄ λͺ¨λλ μ μ μΈλ±μ€λ₯Ό μΆλ ₯ν©λλ€(ν ν°λΉ νλ). μ΄ λͺ¨λλ λ¨μ΄ μμλ₯Ό κ³ λ €νλ λͺ¨λΈμ λΉλνλ λ° μ¬μ©ν μ μμ΅λλ€.'binary'
μ κ°μ λ€λ₯Έ λͺ¨λλ₯Ό μ¬μ©νμ¬ bag-of-words λͺ¨λΈμ λΉλν μλ μμ΅λλ€.
TextVectorization
μ μ¬μ©νλ νμ€ν, ν ν°ν λ° λ²‘ν°νμ λν΄ μμΈν μμ보기 μν΄ λ€μ λ κ°μ§ λͺ¨λΈμ λΉλν©λλ€.
λ¨Όμ
'binary'
벑ν°ν λͺ¨λλ₯Ό μ¬μ©νμ¬ bag-of-words λͺ¨λΈμ λΉλν©λλ€.κ·Έλ° λ€μ 1D ConvNetμμ
'int'
λͺ¨λλ₯Ό μ¬μ©ν©λλ€.
'int'
λͺ¨λμ κ²½μ° μ΅λ μ΄ν ν¬κΈ° μΈμ λͺ
μμ μΈ μ΅λ μνμ€ κΈΈμ΄(MAX_SEQUENCE_LENGTH
)λ₯Ό μ€μ ν΄μΌ λ μ΄μ΄κ° ν¨λ©λκ±°λ μνμ€λ₯Ό μ νν output_sequence_length
κ°μΌλ‘ μλ¦
λλ€.
λ€μμΌλ‘ μ μ²λ¦¬ λ μ΄μ΄μ μνλ₯Ό λ°μ΄ν°μΈνΈμ λ§μΆκΈ° μν΄ TextVectorization.adapt
λ₯Ό νΈμΆν©λλ€. κ·Έλ¬λ©΄ λͺ¨λΈμ΄ λ¬Έμμ΄ μΈλ±μ€λ₯Ό μ μλ‘ λΉλν©λλ€.
μ°Έκ³ : ν
μ€νΈμΈνΈλ₯Ό μ¬μ©νλ©΄ μ λ³΄κ° λμΆλλ―λ‘ TextVectorization.adapt
λ₯Ό νΈμΆν λ νλ ¨ λ°μ΄ν°λ§ μ¬μ©νλ κ²μ΄ μ€μν©λλ€.
μ΄λ¬ν λ μ΄μ΄λ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μ μ²λ¦¬ν κ²°κ³Όλ₯Ό μΈμν©λλ€.
μμ νμλ κ²μ²λΌ TextVectorization
μ 'binary'
λͺ¨λλ μ
λ ₯μ ν λ² μ΄μ μ‘΄μ¬νλ ν ν°μ λνλ΄λ λ°°μ΄μ λ°ννλ λ°λ©΄ 'int'
λͺ¨λλ κ° ν ν°μ μ μλ‘ λ체νκΈ°μ μλ μμλ₯Ό μ μ§ν©λλ€.
λ μ΄μ΄μμ TextVectorization.get_vocabulary
λ₯Ό νΈμΆνμ¬ κ° μ μκ° ν΄λΉνλ ν ν°(λ¬Έμμ΄)μ μ‘°νν μ μμ΅λλ€.
λͺ¨λΈμ νλ ¨ν μ€λΉκ° κ±°μ λμμ΅λλ€.
μ΅μ’
μ μ²λ¦¬ λ¨κ³λ‘ μ΄μ μ μμ±ν TextVectorization
λ μ΄μ΄λ₯Ό νλ ¨, κ²μ¦ λ° ν
μ€νΈ μΈνΈμ μ μ©ν©λλ€.
μ±λ₯μ λμ΄λλ‘ λ°μ΄ν°μΈνΈ ꡬμ±νκΈ°
λ€μμ I/Oκ° μ°¨λ¨λμ§ μλλ‘ λ°μ΄ν°λ₯Ό λ‘λν λ μ¬μ©ν΄μΌ νλ λ κ°μ§ μ€μν λ©μλμ λλ€.
Dataset.cache
λ λ°μ΄ν°κ° λμ€ν¬μμ λ‘λλ ν λ©λͺ¨λ¦¬μ λ°μ΄ν°λ₯Ό 보κ΄ν©λλ€. μ΄λ κ² νλ©΄ λͺ¨λΈμ νλ ¨νλ λμ λ°μ΄ν°μΈνΈλ‘ μΈν λ³λͺ© νμμ΄ λ°μνμ§ μμ΅λλ€. λ°μ΄ν°μΈνΈκ° λ무 컀μ λ©λͺ¨λ¦¬μ λ§μ§ μλ κ²½μ° μ΄ λ©μλλ₯Ό μ¬μ©νμ¬ μ±λ₯μ΄ λ°μ΄λ μ¨ λμ€ν¬ μΊμλ₯Ό μμ±ν μλ μμ΅λλ€. λ€μμ μμ νμΌλ³΄λ€ μ½κΈ°κ° λ ν¨μ¨μ μ λλ€.Dataset.prefetch
λ νλ ¨νλ λμ λ°μ΄ν° μ μ²λ¦¬ λ° λͺ¨λΈ μ€νμ μ€μ²©μν΅λλ€.
tf.data APIλ₯Ό ν΅ν μ±λ₯ ν₯μ κ°μ΄λμ ν리νμΉ μΉμ μμ λ κ°μ§ λ©μλμ λ°μ΄ν°λ₯Ό λμ€ν¬μ μΊμνλ λ°©λ²μ λν΄ μμΈν μμλ³Ό μ μμ΅λλ€.
λͺ¨λΈ νλ ¨νκΈ°
μ΄μ μ κ²½λ§μ λ§λ€ μ°¨λ‘μ λλ€.
'binary'
벑ν°νλ λ°μ΄ν°μ κ²½μ° κ°λ¨ν bag-of-words μ ν λͺ¨λΈμ μ μν λ€μ λ°μ΄ν°λ₯Ό ꡬμ±νκ³ νλ ¨ν©λλ€.
κ·Έλ° λ€μ 'int'
벑ν°νλ λ μ΄μ΄λ₯Ό μ¬μ©νμ¬ 1D ConvNetμ λΉλν©λλ€.
λ λͺ¨λΈμ λΉκ΅ν©λλ€.
ν μ€νΈ λ°μ΄ν°μμ λ λͺ¨λΈμ νκ°ν©λλ€.
μ°Έκ³ : μ΄ μμ λ°μ΄ν°μΈνΈλ λ€μ λ¨μν λΆλ₯ λ¬Έμ λ₯Ό λνλ λλ€. λ 볡μ‘ν λ°μ΄ν°μΈνΈμ λ¬Έμ λ μ μ²λ¦¬ μ λ΅κ³Ό λͺ¨λΈ μν€ν μ²μμ λ―Έλ¬νμ§λ§ μ€μν μ°¨μ΄λ₯Ό λνλ λλ€. λ€μν μ κ·Ό λ°©μμ λΉκ΅νλ €λ©΄ λ€μν νμ΄νΌ λ§€κ° λ³μμ epochsλ₯Ό μλν΄μΌ ν©λλ€.
λͺ¨λΈ λ΄λ³΄λ΄κΈ°
μμ μ½λμμλ λͺ¨λΈμ ν
μ€νΈλ₯Ό μ 곡νκΈ° μ μ tf.keras.layers.TextVectorization
μ λ°μ΄ν°μΈνΈμ μ μ©νμ΅λλ€. λͺ¨λΈμ΄ μμ λ¬Έμμ΄μ μ²λ¦¬ν μ μλλ‘ νλ €λ©΄(μ: λ°°ν¬λ₯Ό λ¨μννκΈ° μν΄) λͺ¨λΈ λ΄λΆμ TextVectorization
λ μ΄μ΄λ₯Ό ν¬ν¨ν μ μμ΅λλ€.
μ΄λ₯Ό μν΄ λ°©κΈ νλ ¨ν κ°μ€μΉλ₯Ό μ¬μ©νμ¬ μ λͺ¨λΈμ λ§λ€ μ μμ΅λλ€.
μ΄μ μ¬λ¬λΆμ λͺ¨λΈμ μμ λ¬Έμμ΄μ μ
λ ₯μΌλ‘ μ¬μ©νκ³ Model.predict
λ₯Ό μ¬μ©νμ¬ κ° λ μ΄λΈμ μ μλ₯Ό μμΈ‘ν μ μμ΅λλ€. λ€μκ³Ό κ°μ΄ μ΅λ μ μλ₯Ό κ°μ§ λ μ΄λΈμ μ°Ύλ ν¨μλ₯Ό μ μν©λλ€.
μ λ°μ΄ν°μ λν μΆλ‘ μ€ννκΈ°
λͺ¨λΈ λ΄λΆμ ν μ€νΈ μ μ²λ¦¬ λ Όλ¦¬λ₯Ό ν¬ν¨νλ©΄ λ°°ν¬λ₯Ό λ¨μννκ³ νλ ¨/ν μ€νΈ μ곑 κ°λ₯μ±μ μ€μ΄λ νλ‘λμ μ© λͺ¨λΈμ λ΄λ³΄λΌ μ μμ΅λλ€.
tf.keras.layers.TextVectorization
λ₯Ό μ μ©ν μμΉλ₯Ό μ νν λ μΌλμ λμ΄μΌ ν μ±λ₯ μ°¨μ΄κ° μμ΅λλ€. λ μ΄μ΄λ₯Ό λͺ¨λΈ μΈλΆμμ μ¬μ©νλ©΄ GPUμμ νλ ¨ν λ λΉλκΈ° CPU μ²λ¦¬ λ° λ°μ΄ν° λ²νΌλ§μ μνν μ μμ΅λλ€. λ°λΌμ GPUμμ λͺ¨λΈμ νλ ¨νλ κ²½μ° λͺ¨λΈμ κ°λ°νλ λμ μ΅μμ μ±λ₯μ μ»κΈ° μν΄ μ΄ μ΅μ
μ μ¬μ©νκ³ λ°°ν¬ μ€λΉκ° μλ£λλ©΄ λͺ¨λΈ λ΄λΆμ TextVectorization
λ μ΄μ΄λ₯Ό ν¬ν¨νλλ‘ μ νν μ μμ΅λλ€.
λͺ¨λΈ μ μ₯μ λν΄ μμΈν μμλ³΄λ €λ©΄ λͺ¨λΈ μ μ₯κ³Ό 볡μ νν 리μΌμ λ°©λ¬ΈνμΈμ.
μμ 2: μΌλ¦¬μλ(Iliad) λ²μμ μμ±μ μμΈ‘νκΈ°
λ€μμ tf.data.TextLineDataset
λ₯Ό μ¬μ©νμ¬ ν
μ€νΈ νμΌλ‘λΆν° μμ λ₯Ό λ‘λνκ³ TensorFlow Textλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μ μ²λ¦¬νλ μλ₯Ό μ 곡ν©λλ€. νΈλ¨Έμ μΌλ¦¬μλ μνμ λ€λ₯΄κ² λ²μν 3κ°μ μμ΄ λ²μλ¬Έμ μ¬μ©νκ² λλ©°, ν μ€μ ν
μ€νΈκ° μ 곡λμμ λ λ²μκ°λ₯Ό μλ³νλ λͺ¨λΈμ νλ ¨ν©λλ€.
λ°μ΄ν°μΈνΈ λ€μ΄λ‘λ λ° νμνκΈ°
3κ°μ§ λ²μλ³Έμ λ€μκ³Ό κ°μ΅λλ€.
μ΄ νν 리μΌμμ μ¬μ©λ ν μ€νΈ νμΌμ λ¬Έμ ν€λμ λ°λ₯ κΈ, μ€ λ²νΈ λ° μ±ν° μ λͺ© λ±μ μ κ±°νλ μΌλ°μ μΈ μ μ²λ¦¬ μμ μ κ±°μ³€μ΅λλ€.
μ΄ κ°λ³κ² μμ§ν νμΌμ λ‘μ»¬λ‘ λ€μ΄λ‘λν©λλ€.
λ°μ΄ν°μΈνΈ λ‘λνκΈ°
μ΄μ μλ tf.keras.utils.text_dataset_from_directory
λ₯Ό μ¬μ©ν κ²½μ° νμΌμ λͺ¨λ μ½ν
μΈ λ₯Ό λ¨μΌ μμ λ‘ μ·¨κΈνμ΅λλ€. μ¬κΈ°μμλ ν
μ€νΈ νμΌλ‘λΆν° tf.data.Dataset
λ₯Ό μμ±νλλ‘ μ€κ³λ tf.data.TextLineDataset
μ μ¬μ©ν©λλ€. μ΄λ κ° μμ λ μλ³Έ νμΌμ ν
μ€νΈ μ€μ
λλ€. TextLineDataset
μ μ£Όλ‘ μ€ κΈ°λ°μ ν
μ€νΈ λ°μ΄ν°(μ: μ λλ μ€λ₯ λ‘κ·Έ)μ μ μ©ν©λλ€.
μ΄λ¬ν νμΌμ λ°λ³΅νμ¬ κ° νμΌμ μ체 λ°μ΄ν°μΈνΈμ λ‘λν©λλ€. κ° μμ λ κ°λ³μ μΌλ‘ λ μ΄λΈμ μ§μ ν΄μΌ νλ―λ‘ Dataset.map
μ μ¬μ©νμ¬ κ° μμ μ labeler ν¨μλ₯Ό μ μ©ν©λλ€. μ΄λ κ² νλ©΄ λ°μ΄ν°μΈνΈμ λͺ¨λ μμ λ₯Ό λ°λ³΅νμ¬ (example, label
) μμ λ°νν©λλ€.
λ€μμΌλ‘ Dataset.concatenate
λ₯Ό μ¬μ©νμ¬ λ μ΄λΈμ΄ μ§μ λ λ°μ΄ν°μΈνΈλ₯Ό λ¨μΌ λ°μ΄ν°μΈνΈλ‘ κ²°ν©ν ν Dataset.shuffle
μ μ¬μ©νμ¬ μ
νν©λλ€.
μ΄μ κ³Ό κ°μ΄ λͺ κ°μ§ μμ λ₯Ό μΆλ ₯ν©λλ€. λ°μ΄ν°μΈνΈκ° μμ§ μΌκ΄ μ²λ¦¬λμ§ μμμΌλ―λ‘ all_labeled_data
μ κ° νλͺ©μ νλμ λ°μ΄ν° ν¬μΈνΈμ ν΄λΉν©λλ€.
νλ ¨μ μν λ°μ΄ν°μΈνΈ μ€λΉνκΈ°
tf.keras.layers.TextVectorization
μ μ¬μ©νμ¬ ν
μ€νΈ λ°μ΄ν°μΈνΈλ₯Ό μ μ²λ¦¬νλ λμ μ μ΄μ λ TensorFlow Text APIλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό νμ€ν λ° ν ν°ννκ³ μ΄νλ₯Ό λΉλνκ³ , tf.lookup.StaticVocabularyTable
μ μ¬μ©νμ¬ ν ν°μ λͺ¨λΈμ μ μμ λ§€νν ν λͺ¨λΈμ 곡κΈν©λλ€(TensorFlow ν
μ€νΈμ λν΄ μμΈν μμ보기).
λ€μκ³Ό κ°μ΄ ν μ€νΈλ₯Ό μλ¬Έμλ‘ λ³ννκ³ ν ν°ννλ ν¨μλ₯Ό μ μν©λλ€.
TensorFlow Textλ λ€μν ν ν¬λμ΄μ λ₯Ό μ 곡ν©λλ€. μ΄ μμ μμλ
text.UnicodeScriptTokenizer
λ₯Ό μ¬μ©νμ¬ λ°μ΄ν°μΈνΈλ₯Ό ν ν°νν©λλ€.μ¬λ¬λΆμ
Dataset.map
μ μ¬μ©νμ¬ λ°μ΄ν°μΈνΈμ ν ν°νλ₯Ό μ μ©ν©λλ€.
λ°μ΄ν°μΈνΈλ₯Ό λ°λ³΅νκ³ λͺ κ°μ§ ν ν°νλ μμ λ₯Ό μΆλ ₯ν μ μμ΅λλ€.
λ€μμΌλ‘ λΉλλ³λ‘ ν ν°μ μ λ ¬νκ³ μμ VOCAB_SIZE
ν ν°μ μ μ§νμ¬ μ΄νλ₯Ό λΉλν©λλ€.
ν ν°μ μ μλ‘ λ³ννλ €λ©΄ vocab
μΈνΈλ₯Ό μ¬μ©νμ¬ tf.lookup.StaticVocabularyTable
μ μμ±ν©λλ€. [2
, vocab_size + 2
] λ²μμ μ μμ ν ν°μ λ§€νν©λλ€. TextVectorization
λ μ΄μ΄μ λ§μ°¬κ°μ§λ‘ 0
μ ν¨λ©μ λνλ΄κΈ° μν΄ μμ½λμ΄ μμΌλ©° 1
μ OOV(out-of-vocabulary) ν ν°μ λνλ΄κΈ° μν΄ μμ½λμ΄ μμ΅λλ€.
λ§μ§λ§μΌλ‘ ν ν¬λμ΄μ λ° μ‘°ν ν μ΄λΈμ μ¬μ©νμ¬ λ°μ΄ν°μΈνΈλ₯Ό νμ€ν, ν ν°ν λ° λ²‘ν°ννλ ν¨μλ₯Ό μ μν©λλ€.
κ²°κ³Όλ₯Ό μΆλ ₯νκΈ° μν΄ λ¨μΌ μμ μμ λ€μμ μλν μ μμ΅λλ€.
μ΄μ Dataset.map
μ μ¬μ©νμ¬ λ°μ΄ν°μΈνΈμμ μ μ²λ¦¬ ν¨μλ₯Ό μ€νν©λλ€.
λ°μ΄ν°μΈνΈλ₯Ό νλ ¨ λ° κ²μ¦ μΈνΈλ‘ λΆν νκΈ°
Keras TextVectorization
λ μ΄μ΄λ 벑ν°νλ λ°μ΄ν°λ μΌκ΄ μ²λ¦¬νκ³ ν¨λ©ν©λλ€. λ°°μΉ λ΄λΆμ μμ λ ν¬κΈ°μ λͺ¨μμ΄ κ°μμΌ νκΈ° λλ¬Έμ ν¨λ©μ΄ νμνμ§λ§ μ΄λ¬ν λ°μ΄ν°μΈνΈμ μμ λ λͺ¨λ κ°μ ν¬κΈ°κ° μλλ©° κ° ν
μ€νΈ μ€μ λ¨μ΄ μλ λ€λ¦
λλ€.
tf.data.Dataset
μ λ°μ΄ν°μΈνΈ λΆν λ° ν¨λ© μΌκ΄ μ²λ¦¬λ₯Ό μ§μν©λλ€.
μ΄μ validation_data
λ° train_data
λ (example, label
) μμ λͺ¨μμ΄ μλλΌ λ°°μΉμ λͺ¨μμ
λλ€. κ° λ°°μΉλ λ°°μ΄λ‘ νμλλ ν μμ (λ§μ μμ , λ§μ λ μ΄λΈ)μ
λλ€.
μ΄λ λ€μκ³Ό κ°μ΅λλ€.
ν¨λ©μλ 0
μ μ¬μ©νκ³ OOV(out-of-vocabulary) ν ν°μλ 1
μ μ¬μ©νμκΈ°μ μ΄ν ν¬κΈ°κ° 2λ°° μ¦κ°νμ΅λλ€.
μ΄μ κ³Ό κ°μ λ λμ μ±λ₯μ μν λ°μ΄ν°μΈνΈλ₯Ό ꡬμ±ν©λλ€.
λͺ¨λΈ νλ ¨νκΈ°
μ΄μ κ³Ό κ°μ΄ μ΄ λ°μ΄ν°μΈνΈμμ λͺ¨λΈμ νλ ¨ν μ μμ΅λλ€.
λͺ¨λΈ λ΄λ³΄λ΄κΈ°
μμ λ¬Έμμ΄μ μ
λ ₯μΌλ‘ μ¬μ©ν μ μλ λͺ¨λΈμ λ§λ€κΈ° μν΄ μ¬μ©μ μ μ μ μ²λ¦¬ ν¨μμ λμΌν λ¨κ³λ₯Ό μννλ Keras TextVectorization
λ μ΄μ΄λ₯Ό μμ±νκ² λ©λλ€. μ΄λ―Έ μ΄νλ₯Ό νλ ¨νμΌλ―λ‘ TextVectorization.adapt
λμ TextVectorization.set_vocabulary
λ₯Ό μ¬μ©νμ¬ μ μ΄νλ₯Ό νλ ¨ν μ μμ΅λλ€.
μΈμ½λ©λ κ²μ¦ μΈνΈμ λͺ¨λΈκ³Ό μμ κ²μ¦ μΈνΈμ λν΄ λ΄λ³΄λ΄κΈ°λ₯Ό μνν λͺ¨λΈμ μμ€ λ° μ νμ±μ μμλλ‘ λμΌν©λλ€.
μ λ°μ΄ν°μ λν μΆλ‘ μ€ννκΈ°
TensorFlow λ°μ΄ν°μΈνΈ(TFDS)λ₯Ό μ¬μ©νμ¬ λ λ§μ λ°μ΄ν°μΈνΈ λ€μ΄λ‘λνκΈ°
TensorFlow λ°μ΄ν°μΈνΈλ‘λΆν° λ λ§μ λ°μ΄ν°μΈνΈλ₯Ό λ€μ΄λ‘λν μ μμ΅λλ€.
μ΄ μμ μμλ IMDB λν μν 리뷰 λ°μ΄ν°μΈνΈλ₯Ό μ¬μ©νμ¬ κ°μ λΆλ₯μ© λͺ¨λΈμ νλ ¨ν©λλ€.
λͺ κ°μ§ μμ λ₯Ό μΆλ ₯ν©λλ€.
μ΄μ μ΄μ κ³Ό κ°μ΄ λ°μ΄ν°λ₯Ό μ μ²λ¦¬νκ³ λͺ¨λΈμ νλ ¨ν μ μμ΅λλ€.
μ°Έκ³ : μ΄μ§ λΆλ₯ λ¬Έμ μ΄λ―λ‘ μ¬λ¬λΆμ λͺ¨λΈμ tf.keras.losses.SparseCategoricalCrossentropy
λμ tf.keras.losses.BinaryCrossentropy
λ₯Ό μ¬μ©ν©λλ€.
νλ ¨μ μν λ°μ΄ν°μΈνΈ μ€λΉνκΈ°
λͺ¨λΈ μμ±, κ΅¬μ± λ° νλ ¨νκΈ°
λͺ¨λΈ λ΄λ³΄λ΄κΈ°
κ²°λ‘
μ΄ νν 리μΌμμλ ν μ€νΈλ₯Ό λ‘λνκ³ μ μ²λ¦¬νλ μ¬λ¬ λ°©λ²μ λ³΄μ¬ λλ Έμ΅λλ€. λ€μ λ¨κ³λ‘ λ€μκ³Ό κ°μ μΆκ° ν μ€νΈ μ μ²λ¦¬ TensorFlow ν μ€νΈ νν 리μΌμ νμν μ μμ΅λλ€.
TensorFlow λ°μ΄ν°μΈνΈμμ μ λ°μ΄ν°μΈνΈλ₯Ό μ°Ύμ μλ μμ΅λλ€. κ·Έλ¦¬κ³ tf.data
μ λν΄ μμΈν μμλ³΄λ €λ©΄ μ
λ ₯ νμ΄νλΌμΈ λΉλ κ°μ΄λλ₯Ό νμΈνμΈμ.