人間が働かなくて良い時代が来ないかな~、といつも思っているブタ野郎こと、どうもボクです。
Microsoftさんが、またやらかしてたみたいな...
Microsoftは2020年1月、Windows 10を実行する何億台ものPCに影響を与える危険な脆弱性を修正するため、セキュリティパッチを配布しました。
Microsoftの報告によると、今回の脆弱性はCryptoAPIというWindowsのAPIで発見されたとのことですが、セキュリティ専門家らが特に「重要な点である」と指摘したのが、「脆弱性を報告したのがアメリカの諜報機関であるアメリカ国家安全保障局(NSA)だった」という点でした。
⇧ アメリカ国家安全保障局(NSA:National Security Agency)とか出てきちゃうって... っていうか、NSAもWindows使ってるんですかね?
どんな危険性かっていうのは、
⇧ 上記サイト様で解説してくれています。
んで、全然関係ないけども、
⇧ に参加して参りました~。
NTTデータさんの「NTTデータが手がけるマルチクラウド、大規模開発におけるCI/CD事例勉強会」 では、「マルチクラウド」っていう概念を初めて知りました。
グローバルなプロジェクトになってくると、「マルチクラウド」って構成が重要になってきますと。
「マルチクラウド」の辛みとかが聞けて勉強になりました。
特に、クラウドで使いたい機能に対して、第三者認証ができているかに関わってくるであろう、SOC(Service Organization Control)ってものも初めて知りました。
さて、SOCとは “Service Organization Control” の略で、アメリカ公認会計士協会 (AICPA) ならびにカナダ公認会計士協会 (CICA) が制定した、国際的なトラストサービスの原則と基準(Trust Services Principles and Criteria)に基づき評価されるものです。
内部統制に関する国際認証 SOC について、クラウドサービスの視点で考える – サポート − トラスト・ログイン byGMO【旧SKUID(スクイド)】
⇧ SOC自体は、国際的な「トラストサービス」で評価されるものであると。
「トラストサービス」はと言うと、
⇧ 上記サイト様が詳しいです。政府によって、定義されるとあるので、国によっても意味合いが異なってきそうですが...
あと、「マルチクラウド」の場合、SLA(Service Level Agreement)も、「1つ」「それぞれ」のどちらで考えるのかっていう難しさもありますと。
株式会社ドリーム・アーツさんの「Jetson NanoとTensorFlowでディープラーニングにチャレンジ!」では、Jetson Nanoっていうものを初めて知りました。
Jetson Nano とは
NVIDIAが開発している、GPUがのっかったエッジコンピューティングマシン。 NVIDIAなのでCUDAが利用可能なので、外出先でもGPUプログラミングができる夢のマシン。
⇧ 株式会社ドリーム・アーツのCTOの石田さんが、GitHubにチュートリアルを公開してくれています。
Jetson Nano も購入して、学習していきたいですかね~。
その前に、「機械学習」「ディープラーニング」まわりを、学習していかねばということで、今回は、そのへんにレッツトライ~。
結論から申し上げますと、Kerasを使ってのコーディングは試せていないので、お時間のある方のみ、ご照覧ください。
Kerasって?
Kerasって何?
Kerasは、Pythonで書かれたオープンソースニューラルネットワークライブラリである。MXNet、Deeplearning4j、TensorFlow、CNTK、Theanoの上部で動作することができる。ディープニューラルネットワークを用いた迅速な実験を可能にするよう設計され、最小限、モジュール式、拡張可能であることに重点が置かれている。
プロジェクトONEIROS (Open-ended Neuro-Electronic Intelligent Robot Operating System) の研究の一部として開発された。中心的な開発者、メンテナはGoogleのエンジニアのFrançois Cholletである。
⇧ 「Deeplearning4j」「Tensorflow」「CNTK」なんかので動かすことができる、「ニューラルネットワーク」ライブラリですと。
「Deeplearning4j」はJava製のライブラリだから、python 2系で連携するのかな?
Kerasのドキュメントでは、
KerasはPython 2.7-3.6に対応しています.
⇧ python 2系もサポートしてますと。ただ、Python 3.6 までしかサポートされとらんとんので、Python 3系を使うときは注意が必要ですと。
「ニューラルネットワーク」ライブラリって言われてもね...
ニューラルネットワーク(神経網、英: neural network、略称: NN)は、脳機能に見られるいくつかの特性に類似した数理的モデルである。「マカロックとピッツの形式ニューロン」など研究の源流としては地球生物の神経系の探求であるが、その当初から、それが実際に生物の神経系のシミュレーションであるか否かについては議論があるため人工ニューラルネットワーク(artificial neural network、ANN)などと呼ばれることもある。
また生物学と相互の進展により、相違点なども研究されている。
⇧ わ、分からん...
ニューラルネットワークはシナプスの結合によりネットワークを形成した人工ニューロン(ノード)が、学習によってシナプスの結合強度を変化させ、問題解決能力を持つようなモデル全般を指す。狭義には誤差逆伝播法を用いた多層パーセプトロンを指す場合もあるが、これは誤った用法である。
一般的なニューラルネットワークでの人工ニューロンは生体のニューロンの動作を極めて簡易化したものを利用する。
⇧ 「ニューラルネットワーク」は、ネットワークを持つ「人工ニューロン(ノード)」を作成して、そいつに「学習」させて自立(問題解決能力を持たせる)させていこうっていうモデルであると...いまいちピンとこないっすね。
⇧ 上記サイト様の説明が分かりやすいです。
要するに、人間が認識処理を行う際に、脳内で行われている処理を「脳神経をモデルとした情報処理システム」と考えた場合に、コンピューターの世界で同じようなことするために考えられたのが「ニューラルネットワーク」ってことですかね。
イメージ図は、
⇧ 上記サイト様のようになるのだと。「入力層」「中間層」「出力層」の3構成が一般的なんですかね?
ただし、「誤差逆伝播法を用いた多層パーセプトロン」ってのは、「ニューラルネットワーク」ではないのですと。
「誤差逆伝播法」って何よ?
バックプロパゲーション(英: Backpropagation)または誤差逆伝播法(ごさぎゃくでんぱほう)は、機械学習において、ニューラルネットワークを学習させる際に用いられるアルゴリズムである。1986年にbackwards propagation of errors(後方への誤差伝播)の略からデビッド・ラメルハートらによって命名された。
バックプロパゲーションでは、人工ニューロン(または「ノード」)で使われる活性化関数が可微分でなければならない。
⇧ わ、分からん...
誤差を最小化して任意関数を近似することが出来る。 そのアルゴリズムは次の通りである:
- ニューラルネットワークに学習のためのサンプルを与える。
- ネットワークの出力を求め、出力層における誤差を求める。その誤差を用い、各出力ニューロンについて誤差を計算する。
- 個々のニューロンの期待される出力値と倍率 (scaling factor)、要求された出力と実際の出力の差を計算する。これを局所誤差と言う。
- 各ニューロンの重みを局所誤差が小さくなるよう調整する。
- より大きな重みで接続された前段のニューロンに対して、局所誤差の責任があると判定する。
- そのように判定された前段のニューロンのさらに前段のニューロン群について同様の処理を行う。
このアルゴリズムの名が暗示するように、エラー(および学習)は出力ノードから後方のノードへと伝播する。
⇧ 「誤差逆伝播法」は、名前の通り、「出力層」の結果を確認して、「期待」してた値で無かった場合に、「中間層」に対して「期待値」に近づくようにフィードバックを行っていくアルゴリズムらしい。
ニューラルネットワークでは、入力データから出力データまで人工ニューロンを通して演算処理することを、順方向のデータ伝搬、フォワードプロパゲーション(Forward-propagation)と呼ぶ。逆に学習は、出力データから入力データまでの逆方向の情報伝搬のことを指し、誤差逆伝搬法(Back-propagation)と呼ぶ。学習の目的は、フォワードプロパゲーションしたときの出力データと目的とする理想的な出力データとの誤差を近づけることだ。
⇧ 上記サイト様と、Wikipediaの説明を合わせて考えてみますと、「誤差逆伝播法」は、あくまで「ニューラルネットワーク」の1つである「順伝播型ニューラルネットワーク」で使用できるアルゴリズムってことになるのかと。
だいぶ、脱線しましたが、「ニューラルネットワーク」は、その仕組み上「学習」が行われているのであり、
ニューラルネットワークは、教師信号(正解)の入力によって問題に最適化されていく教師あり学習と、教師信号を必要としない教師なし学習に分けられることがあるが、本質的には教師なし学習と教師あり学習は等価である。
三層以上のニューラルネットワークは可微分で連続な任意関数を近似できることが証明されている。
⇧ んで、その「学習」には、
の2つがあるけど、どっちも等価ですと。
2020年2月3日(月)追記:↓ ここから
「学習」には、3種類あったそうな...
機械学習には大きく分けて3種類あります. 教師あり学習と教師なし学習, そしてその中間ぐらいの立場をとる強化学習です.
【機械学習勉強会】パターン認識と機械学習(PRML)第1章のまとめ Part.1 - IMACEL Academy -人工知能・画像解析の技術応用に向けて-| エルピクセル株式会社
⇧ 「強化学習」というものもありますと。
2020年2月3日(月)追記:↑ ここまで
画像や統計など多次元量のデータで線形分離不可能な問題に対して、比較的小さい計算量で良好な解を得られることが多い。 現在では、画像認識、市場における顧客データに基づく購入物の類推などとして応用されている(パターン認識、データマイニング)。
⇧ 「ニューラルネットワーク」は、実社会で活用されているんだと。
んで、「Keras」は、「ニューラルネットワークライブラリ」ですと。
だから、「Keras」を導入すれば、「パターン認識」「データマイニング」なんてことができるんじゃよ、と。
でも、「Tensorflow」とかでも「パターン認識」「データマイニング」ってできるんじゃない?って思った、そこの貴方!
ワシもじゃ ワシもじゃ みんな!!
⇧ 皆様が感じた通り、「Tensorflow」でもいけますと。
「Keras」の目的は、お手軽に「ニューラルネットワーク」が試せるってところが強みのようです。
なので、
Kerasは少ないコードでニューラルネットワークを構築することができ、大変重宝しています。あまりに便利なので、KerasベースでSeq2Seqを実装しようと思ったときにも、「Seq2Seqレイヤー」のようなものがすでにあって、1行で実装完了!などと言ったことを期待していましたが、残念ながらそうではありませんでした。
⇧ 上記サイト様が仰るように、「Keras」が何もかも用意してくれてるわけではないんですと。
Kerasでチャットボット作成してみるのに必要なもの
「Keras」ってものが何であるか、ザックリとは分かったので、実際に使ってみたいと思います。
⇧ 上記サイト様を参考にさせていただきました。
今回、必要となる環境は、
項目 | 内容 |
---|---|
仮想化(仮想マシン) | Virtual Box |
OS(仮想マシンのOS) | Ubuntu 18.04 |
言語(仮想マシン内) | Python 3.6 |
ライブラリ(フロントエンド) | Keras |
ライブラリ(バックエンド) | TensorFlow |
ライブラリ(自然言語処理) | gensim |
ライブラリ(統計的自然言語処理) | NLTK(Natural Language Toolkit) |
ライブラリ(数値計算) | NumPy |
⇧ みたいな感じになるかと。 (ここでいう「フロントエンド」「バックエンド」ってのは、すべてサーバサイド内での話ですかね)
「gensim」については、
Gensim is an open-source library for unsupervised topic modeling and natural language processing, using modern statistical machine learning.
Gensim is implemented in Python and Cython. Gensim is designed to handle large text collections using data streaming and incremental online algorithms, which differentiates it from most other machine learning software packages that target only in-memory processing.
⇧ 英語版のWikipedia情報になってしまうんですが、「トピック分析」という手法で「自然言語処理」の「機械学習」ができるライブラリじゃと。
Gensim includes streamed parallelized implementations of fastText, word2vec and doc2vec algorithms, as well as latent semantic analysis (LSA, LSI, SVD), non-negative matrix factorization (NMF), latent Dirichlet allocation (LDA), tf-idf and random projections.
⇧ 上記をGoogle翻訳してみたところ、「gensim」には、
- fastText、word2vec、doc2vecアルゴリズムのストリーム並列化実装
- 潜在的セマンティック分析(LSA、LSI、SVD)
- 非負行列因子分解(NMF)
- 潜在ディリクレ割り当て(LDA)
- tf-idf
- ランダム射影
が含まれるんであると。う~ん、まったく分からん...
んで「doc2vec」については、
⇧ 上記サイト様が詳しいです。
ただ、今回は、参考にさせていただいたサイト様が「word2vec」を使っているような感じですと。
「word2vec」については、
⇧ 上記サイト様が詳しいです。
また、「seq2seq(sequence to sequence)」については、実用するにはまだ課題があるようです。
仮想マシンを用意
はい、すみません、脱線しました。
そんじゃ、まずは、Virtual Boxで仮想マシンを作成ですかね。(Virtual Boxをインストールしていない場合は、インストールしちゃいましょう。)
自分は、
⇧ この回の記事で仮想マシン作成したので、仮想マシンの作成については割愛させていただきます。(仮想マシンのOSとしては、Ubuntu 18.04.3 LTS Server版のisoイメージファイルを使ってインストールしています。)
CUIだけで、仮想マシンの作成したので、いろいろハマりました(涙)。
VirtualBox のプラグインである「GuestAdditions」も上手く機能していません。
なので、
⇧ 上記サイト様などを参考にしていただければ、スムーズに仮想マシンの作成が完了するのではないかと。
必要なライブラリをインストールする
そんじゃ、仮想マシンにライブラリをインストールするために、仮想マシンの起動。
そしたらば、VirtualBox の「GuestAdditions」が上手く機能していない場合、仮想マシンのIPアドレス確認がVBoxmanage.exe コマンドで確認することができないので、VirtualBox のGUIコンソールのほうから、仮想マシンへログイン。
とりあえず、NIC(Network Interface Card)がホストオンリーアダプターであるIPアドレスを知りたいのですが、
⇧ 上記サイト様のように、VirtualBox マネージャーの画面から、NICを確認してから、仮想マシン内のものと比べるしか無さそう...
「GuestAdditions」が機能しておれば、VBoxmanage.exe のコマンドのみで確認できるのかもしらんが...
⇧ 自分の場合は、「ネットワークアダプター」の2つ目が、「ホストオンリーアダプター」ですと。
ちなみに、「NIC」と「ネットワークアダプター」は、
⇧ ってことらしく、同様の意味で良いかと。
ただ、
⇧ 結構ややこしいことになってきてるんすかね。
⇧ 略語の罠が...
脱線しましたが、仮想マシンで、「NIC」に一致する「IPアドレス」を確認していきますと。
普通に、「ip a」とかでも良いんですが、
⇧ 上記サイト様を参考に、以下を試してみました。スーパーユーザ(root ユーザ)に切り替わってる必要があります。
lshw -class network
⇧ VirtualBox の「GuestAdditions」が機能しない影響で、「ゲストOSの画面を自動リサイズ」 が効かず、画面のリサイズができない影響で、見切れてしまっていますが、「*-network:0」から存在するらしいので、自分の環境ですと、
VirtualBoxマネージャーで確認できた情報 | 仮想マシン内で確認できた情報 | |||
---|---|---|---|---|
アダプター | 割当て | network | logical name | IPアドレス |
1 | NAT ネットワーク | 0 | enp0s3 | 10.0.2.4 |
2 | ホストオンリーアダプター | 1 | enp0s8 | 192.168.99.100 |
⇧ ってな対応関係になるんじゃないかと。
「GuestAdditions」が機能しないと、いろいろと面倒くさいな~。
「ホストオンリーアダプター」の「IPアドレス」が分かったので、Visual Studio Code の「ターミナル(自分の場合は、PowerShell になってます)」で仮想マシンへ、SSHログインしてきます。
⇧ Visual Studio Code の「ターミナル」からもログインできました。
まずは、何はともあれPythonをインストールですが、2020年2月1日(土)現在、Keras が Python 3.6 までしかサポートしていないので、Python 3.6 をインストールで、と思ったのですが、Ubuntu 18.04 LTS はデフォルトでPython 3.6 がインストールされとるらしい。
⇧ Python 3.6.9 って...3.6 系のギリギリだけど、サポートされるんよね?
ちなみに、Pythonのパッケージ管理ツールである pip についてはインストールされとりませんでした...。
ので、pip をインストールですが
⇧ Python 2系とPython 3系を共存させている場合は、「python3-pip」をインストールしといたほうが良いということらしいです。
今回は、Python 3系しか使わないので、スーパユーザ(root ユーザ)に切り替えたら、「python-pip」をインストールで。
apt install python-pip
そうしたら、まさかのPython 2系の pip がインストールされるという...
⇧ 一般ユーザだと、python 3系しかインストールされとらんかったらしいんだけど、スーパユーザ(root ユーザ)のほうだと、python 2系もインストールされとったらしい?という悲劇...
そいうわけで、「python3-pip」をインストールで。
apt install python3-pip
pip3 がインストールできたので、pip3 自体のバージョンアップしときます。
pip3 install --upgrade pip
⇧ 上記サイト様によりますと、「venv」は、python 3系にデフォルトで同梱されてたようでした。
なので、以下の「venv」のインストールは不要です。(自分は気づかずインストールしちゃいましたけど...)
⇩ ここから不要(Python 3系に、「venv」は同梱されてるらしいので)
そしたらば、Python仮想環境を構築できる「venv」もインストールしておきます。
apt install python3-venv
⇧ ここまで不要(Python 3系に、「venv」は同梱されてるらしいので)
一般ユーザに切り替えて、「pip」「venv」がインストールされてることを確認。
ちなみに、昨今は、「pipenv」っていうものもあるそうです。
はい、それでは、「venv」で、Python仮想環境を作成して、 その他のライブラリをインストールしていきたいと思います。
まずは、Python仮想環境を作成で。
⇧ ってあり、「ensurepip」は、
⇧ ってあるんで、Python仮想環境用に、pip がインストールされるってことですかね?
なので、「--without-pip」のオプションは付けない感じで。(Python仮想環境の独自のpip を使っていく感じで)
python3 -m venv /home/ubuntu/myenv
そしたらば、Python仮想環境へログインで。
Python仮想環境へのログインに使うスクリプトファイルは、シェルによって変わってくるので要注意です。以下参照。
source [/bin/activateまでのパス]
⇧ Python仮想環境にログイン後、 一応、Python仮想環境のディレクトリに移動しておきました。(ここに、「src」ディレクトリとか作成して、pythonのファイル配置していく感じになるかと)
pip は、Python仮想環境のほうにもインストールされとりますね。Pythonも、Python仮想環境のものを使っているようです。(python3 じゃなくて、python でバージョン確認して、python 3系が表示されてるので)
まずは、Python仮想環境の pip についても、バージョンアップしときます。
pip install --upgrade pip
⇧ アップデートされました。
そんでは、必要なpythonライブラリをインストールしていきます。
まずは、「gensim」をインストールで。
pip install gensim
⇧ 「gensim」がインストールできたようです。
続きまして、「tensorflow」をインストールで。
pip install tensorflow
⇧ エラー出てるんだが...Successfully ってなってるけど、インストールされたって考えて良いのだろうか?
⇧ 上記サイト様を参考に、「setuptools」のバージョンを上げてみますか。
バージョンアップできたので、再度「tensorflow」のインストール。
状況が悪化したような気がするんだが...
⇧ インストールされてるようにも見えるんだが...
インストールはされてるっぽいが...
⇧ インポートで怒られてる...原因が分からな過ぎる...
Googleの公式のドキュメントを見たら、何か、
⇧ python3-dev が足りてないんじゃないか説。
一旦、Python仮想環境を初期化します。
python3 -m venv --clear [Python仮想環境のディレクトリ]
⇧ 初期化はできたっぽい。ライブラリ名をタイポしてた...oh, my gosh
Python仮想環境から抜けて、スーパユーザ(root ユーザ)に切り替わって、「python3-dev」をインストール。
⇧ 何か既にインストールされてる?っぽい気が。
んで、Python仮想環境に再びログインし、pip のアップデート~の、tensorflowのインストールで、
⇧ エラー。 すまんです...またタイポしてもうた。LとRの発音は日本人には難しいからね~...はい、すみません、関係ありませんでした。
今度こそ。
pip install --upgrade tensorflow
エラーなくイケたっぽい。
Python仮想環境をリセットしたんで、「gensim」も再度インストール。
Kerasのインストール。
pip install keras
インストールできたらしい。なんか、Kerasのインストールで、Numpy とかもインストールされるっぽい、たぶん。
そしたらば、Visual Studio Code から、仮想マシンへSSHリモート接続します。
Visual Studio Code に拡張機能を入れてない場合はインストールしちゃいましょう。
自分は、「Remote Development」って拡張機能をインストールしてます。
「Remote Development」って拡張機能がインストールできたらば、Visual Studio Code 左下の のアイコンをクリック。
「Remote-SSH: Connect to Host...」を選択。
仮想マシンへのSSHログインの情報を入力して、Enterキーを押下。
新しく、Visual Studio Code(vscode-server)が起動するので、SSHログインのパスワードを入力。
左下に、「SSH: 仮想マシンのIPアドレス」が表示されていれば、接続成功。「ファイル(F)」>「フォルダーを開く...」で。
SSHログインのパスワードを入力で。
接続できました~。
⇧ 怒られてるので、
⇧ 上記の手順の通り、設定値を修正する。旧いほうのVisual Studio Code の「ターミナル」で仮想マシンにログイン後、「/etc/sysctl.conf」をviエディタで修正します。
「fs.inotify.max.user_watches=524288」を最終行に追加。いまのところマックス値が、524288 らしい...
⇧ 追加したらば、Escキー押下後、「:wq」で保存して、viエディタを終了。
設定を反映。
そしたらば、Visual Studio Code(vscode-server)で、Python仮想環境として作成したディレクトリ「myenv」直下に、「src」ってディレクトリを作成します。
「myenv」ディレクトリを選択した状態で、 のアイコンをクリック。
「src」ディレクトリができたらば、「src」ディレクトリ直下に、拡張子が「.py」なファイルを作成します。
「src」ディレクトリを選択した状態で、 のアイコンをクリック。
そしたら、追加したPythonファイルにコーディング。
⇧ 上記サイト様のソースをそのまま使わせていただきました。(学習データが無かったので、できませんでした。後述。)
Visual Studio Code(vscode-server)に「workspace」を追加で。
「リモート[SSH: 仮想マシンのIPアドレス]」タブが選択された状態で、右上の のアイコンをクリック。
「settings.json」が作成されるので、PythonをVisual Studio Code で実行できる設定を追加します。
「/home/ubuntu/.vscode-server/data/Machine/settings.json」っていうJSONファイルが追加されます。
後で、このファイルに設定を追加していきます。
Visual Studio Code(vscode-server)で、Pythonを実行するためには、Visual Studio Code(vscode-server)に拡張機能の追加が必要なので、追加で。拡張機能「Python」の追加で。
インストールされたらば、
「再読み込みが必要です」をクリック。
再起動されたら、SSH再ログイン。
どのPythonで実行すれば良いか分からんって怒られるので、「Select Python Interpreter」を選択で。
これで、Pythonの実行自体はできるようになったのですが、Pythonのコーディングが正しいのかチェック(静的解析)などをするためのライブラリなどを使用するよう、設定ファイル(「/home/ubuntu/.vscode-server/data/Machine/settings.json」)に追記します。
⇧ 上記サイト様の設定を使わせていただきます。
共通の設定(「/home/ubuntu/.vscode/settings.json」)の方で、
⇧ python.pythonPath とかは設定されていたので、
「/home/ubuntu/.vscode-server/data/Machine/settings.json」の以下の部分はコメントアウトしてます。
⇧ 次々に出てくるダイアログで、ライブラリを「Install」するか聞かれるので、すべて「Install」で。テスト系は今回は、「Disabe Tests」で。
いろいろインストールされます。
んで、実行してみたら、
nltk ってモジュールが無いって怒られた...すっかりインストールするの忘れてた。
とりあえず、インストールで。
時間の都合上、仮想マシンとか一旦、停止で。
翌日。
仮想マシン再起動で、Visual Studio Code から、Visual Studio Code(vscode-server)へSSH接続。
⇧ settings.json に記載し、インストールしたPythonライブラリ(「flake8」っていうPythonの静的解析ツール)が有効になってました。エラーがむっちゃある...
エラー見ながら、コーディングを修正していく過程で、参考サイト様の「学習データ」「word2vec.bin」ってのを自分で用意しないといけないことが判明。
「word2vec.bin download link」ってURLから「apnews_sg.tgz」ってファイルがダウンロードできたんですが、リモート接続先に配置したいので、ファイル転送ソフトが必要です。
Visual Studio Code の拡張機能で、ファイル転送の機能を追加できるそうなので、追加します。
その前に、ダウンロードしたファイルを適当なディレクトリに配置で。今回は、ローカルで自分が決めてた作業ディレクトリに配置しました。
そんでは、Visual Studio Code へ拡張機能を追加します。Visual Studio Code(vscode-server)側への拡張機能の追加ではないのに注意。
拡張機能「SFTP」をインストールで。
インストールが完了すると、
⇧ 「SFTP」のアイコンが追加されてることが確認できます。
接続の前に、Visual Studio Code 上で「Command + Shift + P」を押下。Widnowsの場合は、「Ctrl + Shift + P」でイケるかと。
コマンドパレットが表示されるので、「sftp」の入力し、「SFTP:Config」を選択。
ローカルの作業ディレクトリに「.vscode/sftp.json」ってファイルができるので、ここに、SFTP接続情報を記載していきます。
自分は、以下のように設定しました。「host」に、仮想マシンのIPアドレスを指定してるので、IPアドレスが変わるたびに修正の必要がありますが...
設定が完了すると、ローカルの作業ディレクトリ上で右クリックして、「Sync Local -> Remote」ってのが選択できるので、選択。(個別にファイルを「Download」「Upload」って場合は、ファイルを選択した状態で右クリックでいけます。)
「SFTP」のアイコンをクリックすると、リモート接続先にアップロードされたファイルが確認できます。(「apnews_sg.tgz」以外もアップロードされてしまった...)
Visual Studio Code(vscode-server)側で、「apnews_sg.tgz」を展開しますか。
tar -xzvf [展開したいファイルまでのパス]
「word2vec.bin」はあったけど、「学習データ」が無い...
「word2vec.bin」と「学習データ」が関連してるとしたら、「apnews_sg.tgz」を展開して取得できた「word2vec.bin」に合致する「学習データ」を取得できないといけないってことだけど、どんなデータを使ってるのか分からんしな...
致し方ないので、
⇧ 上記サイト様を参考に、自分で、作成していくことに。
⇧ 「学習データ」を作るには、「形態素解析」が必要で、
⇧「MeCab」っていうライブラリが必要らしい。
⇧ 上記サイト様によりますと、「Pythonバインディング」ってのをしないと、Pythonライブラリとして、MeCabが使えないらしい。
まずは、Ubuntuでスーパユーザ(root ユーザ)になって、「MeCab」をインストール。
apt install mecab libmecab-dev mecab-ipadic-utf8
⇧ インストールできたっぽい。
「Pythonバインディング」ってのをするには、「swig」ってライブラリもインストールしておく必要があるらしい。
インストールで。
apt install swig
そしたらば、一般ユーザに戻って、Python仮想環境にログインし、
exit cd [Python仮想環境のディレクトリまでのパス] source ./bin/activate
「Pythonバインディング」のためのPythonライブラリをインストールで。
pip install mecab-python3
そしたらば、「学習データ」の元データとして、「青空文庫」から、適当なzipファイルをダウンロード。
⇧ 私は、「レ・ミゼラブル」の「テキストファイル(ルビあり)」をダウンロードいたしました。「レ・ミゼラブル」読み直したいな~。
ダウンロードしたzipファイルを仮想マシンに転送します。
⇧ アップロードされました。
unzip しようとしたら、
⇧ まさかの、unzip がインストールされてないというね...
インストールで。
「nkf」ってコマンドも無いので、インストールで。
展開したけど、文字化けってるので、
文字コードを、utf8 に変換。
nkf -w --overwrite [変換したいテキストファイル]
⇧ 文字コードを、utf8 に変換できました。
テキストファイルの中身を「分かち書き」(「形態素解析」ってやつですかね)にするための、Pythonファイルを作成。
コーディングで静的解析ツールに引っかかったので、
⇧ 上記サイト様を参考に修正。
Pythonって静的解析でエラー出ても特に影響ないのかな?
# -*- coding: utf-8 -*- import MeCab import sys tagger = MeCab.Tagger('-F\\s%f[6] -U\\s%m -E\\n') fi = open(sys.argv[1], 'r') fo = open(sys.argv[2], 'w') line = fi.readline() while line: result = tagger.parse(line) fo.write(result[1:]) # skip first \s line = fi.readline() fi.close() fo.close()
⇧ 上記で保存したらば、Visual Studio Code(vscode-server)側の「ターミナル」で実行。
python [実行したいpythonファイルまでのパス] [inputテキストファイル] [outputテキストファイル]
続きまして、「分かち書き」のデータを元に、「word2vec」でモデルを作成。新たに、「train.py」を作成。
ソースコードは以下。
# -*- coding: utf-8 -*- from gensim.models import word2vec import logging import sys logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO) sentences = word2vec.LineSentence(sys.argv[1]) model = word2vec.Word2Vec(sentences, sg=1, size=100, min_count=1, window=10, hs=1, negative=0) model.save(sys.argv[2])
⇧ 上記を保存し、Visual Studio Code(vscode-server)側の「ターミナル」で実行。
python [実行したいpythonファイルまでのパス] [inputテキストファイル] [outputモデル]
モデルが完成。
モデルを試してみる。新たに、「similar.py」を作成。
ソースコードは以下。(すみません、載っけてたコーディング間違ってました。)
2020年2月2日(日)22:00 修正:↓ ここから
# -*- coding: utf-8 -*- from gensim.models import word2vec import sys model = word2vec.Word2Vec.load(sys.argv[1]) results = model.most_similar(positive=sys.argv[2], topn=10) for result in results: print(result[0], '\t', result[1])
2020年2月2日(日)22:00 修正:↑ ここまで
⇧ 上記を保存し、Visual Studio Code(vscode-server)側の「ターミナル」で実行。
python [実行したいpythonファイルまでのパス] [使用したいモデル] [inputキーワード]
⇧ 「人生」って何なんね? に対する近しいものを応えてくれました!
「人生」は、「今」という!
結構、胸が熱くなる答えがトップに来てますね、それ以外の「回答」が、何かドイヒーですが...
学習データが重要なんですね...
「レ・ミゼラブル」時代の「人生感」ってやつが出てますかね...
まぁ、一応、「質問」に「回答」してくれたということで。
Keras は使えなかったし、頓珍漢な「回答」ではありますが、「打てば響く」を実現できたのではないでしょうか。
「機械学習」「DeepLearning 」なんかも勉強していかねばですね。(理解できなさ過ぎて、やる気が出ないけど...)
今回はこのへんで。