画像処理の場合は、転移学習を考えると昨日書いた。
では、自然言語処理は・・・というと、必ずしもWord2Vecの日本語版を持ってきて・・・とやるのが、ベストではないことを、今日は述べたいと思います。
まず、日本語をデジタル表現するには、ざっくり3通りあります。
■(1)One-hotベクトル
ある単語が出現したら1、出現しなかったら0の値をとる項目を考えます
(1単語1項目に割り当てる)
そうすると、いくつかの(100とか1000とか)の単語をあつめると、それに対する100、とか1000とかの項目値(0または1しかとらない)があつまります。これを1つのベクトルとします。
ここで、文章を分解すると、いくつかの単語にわかれますが、この出現単語1つ1つについて上記のベクトルに対応させるとすると、出現単語の項目の値は1、ほかのところは(出現しないので)0となります。
例:今日はお盆でお休みだ
今日 は お盆 で お休み だ
まず、今日:について考えると
今日 は お盆 で お休み だ
[1 0 0 0 0 0]
次に「は」について考えると
今日 は お盆 で お休み だ
[0 1 0 0 0 0]
次に「お盆」について考えると
今日 は お盆 で お休み だ
[0 0 1 0 0 0]
このように、出現したところだけ1、ほかは0のベクトルを
(1か所だけホット(1)なので)
one-hot-ベクトルといいます
https://mathwords.net/onehot
■(2)BoW
同じように単語に対するベクトルを考えるのですが、このときある程度の文にたいして、対象単語の出現回数を項目値としたベクトルがBoW
例:
今日はお盆でお休みだ
でも今日は外出できない
今日 は お盆 で お休み だ でも 外出 でき ない
[2 2 1 1 1 1 1 1 1 1 ]
出現回数に対応したベクトルが得られる。これがBoW
https://aizine.ai/glossary-bag-of-words/
■(3)分散表現
文章を機械学習させると、最終層に入る前、つまり、学習処理を
してなんらかの特徴量が得られる。この特徴量は、その対象となる
文(なり、単語なり)の属性・特徴が項目となっていると考えられる
(たんごそのものではなく、もっと抽象化されたもの)
で、その項目に対応する項目値も0、1ではなく、その属性(項目)
らしさを表す数値になる、
このような(出電数ではなく)項目の性質みたいなものにより、
ある値をとるものを分散表現という。
長くなったので、ここで切る
ここで(1)、(2)は出現(回数)が基準、
(3)は、分などの対象の性質が基準(項目)となっている。
なので、出現(回数)にかかわるものを推論させる場合
例:次にいう言葉は何か(言葉自体が問題)はBoWのような
表現がよい
(3)は言葉そのものではなく、雰囲気とか分類とか、
概念的なものを扱いたいときは分散表現がいい
例:
今日の議題は難に分類したらよい?
今日の議題
ハンドルについて
ブレーキについて
タイヤについて
アクセルについて
子供を熱中病にさせないために
→車(だが、上記の議題には、1回も車という単語は出ていない)
そして往々にして、(1)、(2)は狭い、ある限定された文章(仕様書とか、マニュアルとか、だれかの小説とか)に対して行うことも多い(例えばwikipedia全体に(1)(2)を行うと、単語数が半端なく、ぐちゃぐちゃになってくるので)。限定された文章に対してであれば、その文章だけを学習させたほうが良い(Wikipedia全体をやると無駄な言葉多し)。
なので、こちらは学習は転移学習をさせず、やり直すことをまず考える。
(3)はまず、一般的に文章を学習させ、推論するときはそれを使って、特徴量を出す。一般的な学習は転移学習可能なので、こちらはWikipediaから学習させたものを使う(転移学習)を考える。
実際、学習済みWord2vec モデルは、こんな感じで入手できるので、ここからはじめる。
学習済みWord2Vec モデルをサクッと使ってみる
http://cedro3.com/ai/word2vec-gensim/
word2vecの学習済み日本語モデルを公開します
https://aial.shiroyagi.co.jp/2017/02/japanese-word2vec-model-builder/
なかんじで、画像処理のVGGに対応するのは、Word2VecのWikipediaによる学習済み日本語モデルと言えるけど、使う範囲は一般的な学習のときで、範囲が絞られているのであれば、新規にその絞られたデータで学習しなおしたほうが得策のときもある。
では、自然言語処理は・・・というと、必ずしもWord2Vecの日本語版を持ってきて・・・とやるのが、ベストではないことを、今日は述べたいと思います。
まず、日本語をデジタル表現するには、ざっくり3通りあります。
■(1)One-hotベクトル
ある単語が出現したら1、出現しなかったら0の値をとる項目を考えます
(1単語1項目に割り当てる)
そうすると、いくつかの(100とか1000とか)の単語をあつめると、それに対する100、とか1000とかの項目値(0または1しかとらない)があつまります。これを1つのベクトルとします。
ここで、文章を分解すると、いくつかの単語にわかれますが、この出現単語1つ1つについて上記のベクトルに対応させるとすると、出現単語の項目の値は1、ほかのところは(出現しないので)0となります。
例:今日はお盆でお休みだ
今日 は お盆 で お休み だ
まず、今日:について考えると
今日 は お盆 で お休み だ
[1 0 0 0 0 0]
次に「は」について考えると
今日 は お盆 で お休み だ
[0 1 0 0 0 0]
次に「お盆」について考えると
今日 は お盆 で お休み だ
[0 0 1 0 0 0]
このように、出現したところだけ1、ほかは0のベクトルを
(1か所だけホット(1)なので)
one-hot-ベクトルといいます
https://mathwords.net/onehot
■(2)BoW
同じように単語に対するベクトルを考えるのですが、このときある程度の文にたいして、対象単語の出現回数を項目値としたベクトルがBoW
例:
今日はお盆でお休みだ
でも今日は外出できない
今日 は お盆 で お休み だ でも 外出 でき ない
[2 2 1 1 1 1 1 1 1 1 ]
出現回数に対応したベクトルが得られる。これがBoW
https://aizine.ai/glossary-bag-of-words/
■(3)分散表現
文章を機械学習させると、最終層に入る前、つまり、学習処理を
してなんらかの特徴量が得られる。この特徴量は、その対象となる
文(なり、単語なり)の属性・特徴が項目となっていると考えられる
(たんごそのものではなく、もっと抽象化されたもの)
で、その項目に対応する項目値も0、1ではなく、その属性(項目)
らしさを表す数値になる、
このような(出電数ではなく)項目の性質みたいなものにより、
ある値をとるものを分散表現という。
長くなったので、ここで切る
ここで(1)、(2)は出現(回数)が基準、
(3)は、分などの対象の性質が基準(項目)となっている。
なので、出現(回数)にかかわるものを推論させる場合
例:次にいう言葉は何か(言葉自体が問題)はBoWのような
表現がよい
(3)は言葉そのものではなく、雰囲気とか分類とか、
概念的なものを扱いたいときは分散表現がいい
例:
今日の議題は難に分類したらよい?
今日の議題
ハンドルについて
ブレーキについて
タイヤについて
アクセルについて
子供を熱中病にさせないために
→車(だが、上記の議題には、1回も車という単語は出ていない)
そして往々にして、(1)、(2)は狭い、ある限定された文章(仕様書とか、マニュアルとか、だれかの小説とか)に対して行うことも多い(例えばwikipedia全体に(1)(2)を行うと、単語数が半端なく、ぐちゃぐちゃになってくるので)。限定された文章に対してであれば、その文章だけを学習させたほうが良い(Wikipedia全体をやると無駄な言葉多し)。
なので、こちらは学習は転移学習をさせず、やり直すことをまず考える。
(3)はまず、一般的に文章を学習させ、推論するときはそれを使って、特徴量を出す。一般的な学習は転移学習可能なので、こちらはWikipediaから学習させたものを使う(転移学習)を考える。
実際、学習済みWord2vec モデルは、こんな感じで入手できるので、ここからはじめる。
学習済みWord2Vec モデルをサクッと使ってみる
http://cedro3.com/ai/word2vec-gensim/
word2vecの学習済み日本語モデルを公開します
https://aial.shiroyagi.co.jp/2017/02/japanese-word2vec-model-builder/
なかんじで、画像処理のVGGに対応するのは、Word2VecのWikipediaによる学習済み日本語モデルと言えるけど、使う範囲は一般的な学習のときで、範囲が絞られているのであれば、新規にその絞られたデータで学習しなおしたほうが得策のときもある。