3.自然言語処理(補足)


第1章で初めて述べた自然言語処理について,再検討する.これは初めてなので、何度も概念や実践を重ねて身につける必要があるので、このような過程を繰り返していきたいと思います.コンセプトと実践コードを参考にしたサイトは以下の通りです(https://wikidocs.net/32105)
  • 前処理
    前処理で使用されるトークン(Tokenizer)は、符号化(単語のインデックス)のために使用される.その後、pad_sequenceが使用される.これは、トレーニングデータ全体において、各サンプルの長さが異なる可能性があるためである.各文章または各文章の字数はそれぞれ異なる.モデルの入力として使用するには、すべてのサンプルの長さが同じでなければならない場合があります.自然言語処理では、これをパディング操作と呼び、通常、数値0を加えることで異なる長さのサンプルの長さを調整する.ケラスはpad_sequenceを使用しています.pad_sequence長さが所与の長さより大きいサンプル部分遮断値、長さが所与の長さより小さいサンプル取値0
  • from tensorflow.keras.preprocessing.text import Tokenizer
        	
    t = Tokenizer()
    text = "The earth is an awesome place live" 
    t.fit_on_texts([text])
    
    print(f'word_index: {t.word_index}')
    print(f'word_count: {t.word_counts}')
    
    sequence = t.texts_to_sequences([text])[0]
    print('sequnce: {}'.format(sequence))
    
    from tensorflow.keras.preprocessing.sequence import pad_sequences
    pad_sequences([[1, 2, 3], [3, 4, 5, 6], [7, 8]], maxlen=3, padding='pre') # pre는 앞에, post는 뒤에 0을 채우게 된다, 지우는 것도 앞에서 기준으로 지우게 된다

  • 単語埋め込み
    単語imbeddingは、テキスト内の単語を密集ベクトル(density vector)に形成するものである.密集ベクトルは1つの熱ベクトルに対して、1つの熱ベクトルの多くはゼロの値を有し、1つの値のベクトルしかない.ベクトルの次元数は単語の数と等しい.[0 1 0 0 0 0 중략 0 0 0 0]のような円熱ベクトル.単語数の階層がありますが、欠点は単語間の類似度が同じであることです
    逆に、密集ベクトルもベクトルの形式を持っているが、0または1のほとんどの値が実数ではなく、相対的に低い次元を持っている.例えば、[0.1 -1.2 0.8 0.2 1.8]の形態を有する
  • .

    このような密集ベクトルの形成過程を単語imbeddingと呼ぶ.主に円熱ベクトルが20000を超える次元とは異なり、単語imbeddingは256、512、1024の次元を有する.imbeddingベクトルは初期にランダム値を有するが,人工ニューラルネットワークの重み値は学習方法と同様に学習され変化する.
    ケラスはEmbeddingという層を提供し、総単語の長さと圧縮する次元についてパラメータとして受け入れられる.
    from tensorflow.keras.layers import Embedding
    from tensorflow.keras.preprocessing.text import Tokenizer
    
    t = Tokenizer()
    t.fit_on_texts(text)
    print(t.word_counts, t.word_index)
    word_indexのように、周波数順で初めて並べ替えられたことがわかります.
    t.texts_to_sequences(text)
    Embedding(classes, 2, input_length=5)
  • 最初のパラメータ=単語セットのサイズ.合計単語数
  • の2番目のパラメータ=imbeddingベクトルの出力次元.生成された埋め込みベクトルのサイズは
  • である.
  • input length=入力シーケンスの長さ