Python AI 自然言語処理

f:id:nikudaisukikun:20181231182115j:plain

 

  1.  自然言語処理とは
  2. 使用ツール
  3. word2vec
  4. 下処理

 

1.自然言語処理とは

自然言語処理とは、人間が使用する言語をコンピューターに処理させる技術であり、人工知能が活躍する分野である。

今回は、単語をベクトル化することを目標にする。

単語をベクトル化することで、コンピューターに単語を計算することができる。

 

2.使用ツール

  • Python
  • Jupyter notebook
  • keras
  • tensorflow

 

3.word2vec

今回単語をベクトル化するために、word2vec N gram model を使用 

N gram model  はA B Cという単語の並びがあるとき、AとCからBが出現する確率をニューラルネットワークに計算させる理論

f:id:nikudaisukikun:20181231184850j:plain

の2文字が与えられたとき、の単語が出現する確率をニューラルネットワークで計算

計算結果から、単語のベクトルを取り出す→word2vec

 

4.下処理

下処理の手順

  1. 文章を準備
  2. 文章を単語に分割
  3. AIが単語を計算できるように、単語にidを振る

 

1.文章の準備

下処理のテストとして、英語の文書をコピペする。

処理としては、英語のほうが日本語より簡単

理由:英語の単語間はスペースが入るので分けやすい。

 

準備した文章:

The core of the model consists of an LSTM cell that processes one word at a time and computes probabilities of the possible values for the next word in the sentence. The memory state of the network is initialized with a vector of zeros and gets updated after reading each word. For computational reasons, we will process data in mini-batches of size batch_size. In this example, it is important to note that current_batch_of_words does not correspond to a of words. Every word in a batch should correspond to a time t. TensorFlow will automatically sum the gradients of each batch for you.

 

f:id:nikudaisukikun:20181231203136p:plainJupyter notebook上で

text=" コピペ 文章 "

文章から、単語に分割

keras.preprocessing.text.text_to_word_sequence()の機能を利用

(text:文章

filters:文章中から削除したい文字を指定。今回は記号を削除

split:"条件 "条件に単語に分割する条件を指定。今回は、"スペース"で分割

 

words[0:13]:分割された単語の0~13を表示

 

2.文章を単語に分割

やりたいこと

単語ごとに個別の数字を割り振る

(例)単語→数字(word2id):たこ焼き→1,お金→2,車→3

  数字→単語(id2word):1→たこ焼き,2→お金,3→車

 

f:id:nikudaisukikun:20181231210706p:plain


 sorted(set(words)):単語のかぶりを削除

  word2idx={}  :Python辞書

辞書:{key1:本体1,key2:本体2,key3:本体3}

辞書の本体とkeyをひもづけ

(例)辞書[key1]→本体1

key1を代入して本体1を取り出すことができる

idx2word=np.array(vocab):数字を単語に変換

(例)インデックス(先頭からの数*スタート0から)を使用

idx2word=["a","b","c","d","e"]

インデックス2:0からスタートなので先頭から3番目

idx2word[2]="c"

 

for i ,word in enumerate(idx2word):
           word2idx[word]=i

辞書の設定を行っている

key:分割した単語をループで次々にkeyに設定

本体:keyに設定したときのループ回数を本体(単語の番号)に設定

 

テスト

f:id:nikudaisukikun:20181231212713p:plain

idx2word[52]:52はtheを表す

word2idx['the']:theは52を表す

 

下処理が終わったので、今後

ニューラルネットワークで計算させ、単語のベクトルを獲得する

誰でもできるAI画像認識入門1

f:id:nikudaisukikun:20181230120620j:plain


目次

  1.  AI入門
  2. 使用ツール
  3. 画像認識
  4. AI(ニューラルネットワーク)
  5. 実装

 

1.AI入門

最近のトレンドは、AI

新聞,テレビもAIについて見ない日はない(個人的)

第四次産業革命かもしれないAIに乗り遅れないため、初心者でもAIを使えるように解説する予定

 

2.使用ツール

AI作成で使用するツールは、Pythonを使用

 

AIを作る準備(以下googleで検索)

  1. python anacondaインストール
  2. python tensorflowインストール
  3. python kerasインストール
  4. Jupyter notebook起動

Jupyter notebookを起動後画面

f:id:nikudaisukikun:20181230122216p:plain

 ここまでくれば準備完了

 

3.画像認識

AIの利用法として、画像認識がある。今後の自動運転、無人コンビニなどで使用される技術である。

今回は、画像認識の入門[minist 手書き文字認識]を試してみる。

f:id:nikudaisukikun:20181230123300p:plain

 AIに手書き文字を見せて、数字を当てることが目標

 

4.AI(ニューラルネットワーク)

画像認識するニューラルネットワークの構成

f:id:nikudaisukikun:20181230143818j:plain

  •  入力層:画像のデータを入れる
  • 中間層:出力層の答えが正しくなるように計算する
  • 出力層:中間層からの出力から入力画像を認識する

              (画像認識イメージ)

f:id:nikudaisukikun:20181230144310j:plain

 

5.実装

説明したネットワークを実装する。

1:jupyter notebookを立ち上げ、必要な機能をimportする

f:id:nikudaisukikun:20181230145048p:plain

 ここでは、AI開発に便利なtensorflow,keras 

データを保持する箱のnumpy

絵を表示するmatplotlib

f:id:nikudaisukikun:20181230145048p:plain

をimportし、名前が長いのでasで略字(省略)

 

2:minist 手書き文字をインストール

 

f:id:nikudaisukikun:20181230150122p:plain

訓練

x_train:入力画像

y_train:答え

成績確認用

x_test,y_test

 

3:画像を確認する(x_test)

f:id:nikudaisukikun:20181230150803p:plain

訓練用画像25枚を確認

 

4:画像のピクセル値を正規化する

最小0,最大1になるように8bit=255で割る

f:id:nikudaisukikun:20181230151258p:plain

5:ニューラルネットワークを組み立てる

f:id:nikudaisukikun:20181230151939p:plain

入力層:ks.layer.Flatten(input_shape(28,28))

input_shape(28,28):画像の縦,横のピクセル

ks.layer.Flattenで画像2次元データを28×28の1次元データに変換

中間層:ks.layer.Dense(64,activation=tf.nn.relu)

中間層の〇が64で,計算手法がactivation=tf.nn.relu

出力層:ks.layer.Dense(10,activation=tf.nn.softmax)

数字が0~9の10種類なので、〇を10個用意、計算手法がactivation=tf.nn.softmax

 

6:計算させる

f:id:nikudaisukikun:20181230152829p:plain

model.compile()で計算法の指定

optimizer:計算方法

loss:10種類分類するので、sparse_categorical_crossentropyを使用

model.fit(x_tarin,y_train,epoch=5)で計算開始

x_train:入力画像

y_train:答え

epoch:計算繰り返し回数

 

訓練用データで正解率97.99達成

 

今後詳しい内容、CNNなど解説する予定