読者です 読者をやめる 読者になる 読者になる

チラシの裏の設計書

プログラム開発、データ分析からロボット作りまでものづくり全般を思うがままに書き連ねたブログ。

fastTextがすごそう ~とりあえず足し算もしてみた編~

これの続きです。

stkdev.hatenablog.com

…が、まだきれいにまとまってないので、とりあえず遊び中のメモです。

 

前回の記事では1つの単語に対して類似の単語を見つけてきたわけですが、単語の足し算・引き算もできるようにして、やってみました。

いい感じになったものを列挙しておきます。

Webサービス化してみんなで遊べるようにしたいなぁ。。。)

 

・"AI"に何か足してみる編

AI + BI = Zinrai

AI + 製品 = コグニティブコンピューティング

AI + 理解 = 自然言語

AI + ゲーム = 複合現実

AI + 人生 = 偏見

AI + ニュース = 虚偽

AI + 絶望 = 碁

 

 ・”企業”にいろいろぶつけてみる編

企業+長時間労働 = 法制度

企業+ウイルス = 標的型

企業+ランサムウェア = 保護規則

企業+不正=情報漏洩

 

・"技術"を見ておく編

技術+注目 = コグニティブコンピューティング

技術+重要 = エッジデバイス

技術+優秀 = DevOps

技術+事業 = デジタルトランスフォーメーション

 

学習データがITニュースばかりなので、いろいろと偏った単語が出てきますが、なかなかいい感じです。

fastTextがすごそう ~とりあえず使ってみた編~

Facebookから公開されたfastTextというライブラリがすごそうなので使ってみようと思います。

github.com

 

このライブラリは大量の文章を読み込んで、単語をベクトル表現できるようにするものです。

そうすることで、似ている単語や単語同士の関連性などを知ることができます。さらには単語の分類やレコメンドにも利用できるというものです。

 

もっとくわしく機能や凄さを紹介している記事はこちら

deepage.net

 

使ってみて面白い結果が出てきたら、ここのブログかQiitaの方にでもまとめようと思いますが、「とりあえず適当にデータ突っ込んでみた」結果からもすごさの片鱗が見られたので紹介しておきます。

 

まず学習のためのデータは、自作のニュースまとめサイトITニュースのお漬物(β)」でせっせと集めているニュースの記事を使います。

とりあえずライブラリのパラメータはデフォルト値を使って何も考えずに処理を流してみました。そして特定の単語と近いと判断された単語をまとめてみます。

このあたりの作業手順とかはきれいにしてから別途まとめる、、、予定。

(これで、IT系の話題検出とか関連ニュースのレコメンドとかを将来的にはやりたい。。。)

 

試してみた単語はIT系で何かと話題の”分析”、”機械学習”、”AI”、ついでに”ポケモン”です。

単語→
↓順位
ポケモン 分析 機械学習 AI
1 トレーナー 分析技術 機械学習技術 bot
2 トレーナーレベル 蓄積 機械学習機能 Nauto
3 メダル 分析結果 深層学習 SAIKAWA
4 トレーニングバトル 誤検知 学習 WISE
5 Pokemon 人手 人工知能技術 ABEJA
6 タマゴ 把握 強化学習 Artificial
7 ポケストップ 欠品回避 異種混合学習技術 Einstein
8 ゲットホリックケース 収集 自然言語処理 COTOHA
9 モンスターボール 規則性 膨大 TIS
10 トレース 脅威情報 自動生成 Institute

 

これはなかなかすごい結果ではないでしょうか。

もちろん単語によってはよくわからない結果だったりもしましたが、上の結果はだいぶ妥当性がある気がします。

 

まだまだいろんなことができそうなので引き続き遊んでみよう。

 

Coursera Machine Learning 完走!

3月から頑張っていたCoursera Machine Learningのカリキュラム全部終わりました。

www.coursera.org

 

とりあえずこんな感じでした。 

 

○始める前

「え?3ヶ月のカリキュラム?基礎知識はあるし1ヶ月で終わらしてやんよ」

 

f:id:stkdev:20170514031712p:plain

○途中

 「あ、ちょっと、これは、・・・。」

f:id:stkdev:20170514031807p:plain

○今ここ

 「ちょっと休んでから2週目行きますかね。」

f:id:stkdev:20170514031903p:plain

 

ということで、非常にためになる講座でした。

まだまだ理解が不十分なところあるので、何かしらサンプルコードでも書きながら復習が必要そうです。

 

とりあえず「ちゃんと最後までやったよ!」という報告だけなので、今回は中身についてあまり書きませんが、カリキュラムの終盤は機械学習の理論的な中身の話だけでなく、実際のプロジェクトにおいて注意しなくてはいけない点や様々なデータに対するアプローチ方法なども紹介されていて、仕事として機械学習を使っていこうとしている人にとっては必見な内容だと思いました。

 

 

Coursera MLの6,7週目ともろもろ

Coursera Machine Learningの6,7週目が終わりました。

SVMの話や教師なし学習としてk-meansやPCAの話がありました。

今までに比べるとサラッと解説するような感じで、とっつきやすい内容でした。(中身もだいたい知っている内容だったこともある。)

SVMはマージンの意味などもわかりやすくて相変わらずためになる内容です。

 

また、1~4週目の復習がてら回帰を実装しながら細かく見ていくプログラム&資料を作成中なのでまた公開します。

 

で、それはそうとGW期間が来ましたね。

現実逃避の旅に出かけるべく、日本地図にダーツをして行き先を決めるアプリないかなーと思って探していると、簡易的なものを見つけました。ただちょっと改良したかったのでちょろっと改造をし始めるといつの間にか1日が終わって旅に出るタイミングを逃していまいました。

その日記がこちら

qiita.com

とりあえず動作確認も兼ねて行き先をポチッと。

f:id:stkdev:20170501012227p:plain

© OpenStreetMap contributors

(図はOpenStreatMap。GoogleMapは画像で貼れないので。)

 

あー・・・。最北端・・・、を超えてますかねぇ。これは行けない。。。

まぁそもそも連休をつなげてないので遠出はできないんですけどね。

Coursera Machine Learning 4,5週目日記

引き続き頑張り中のCoursera Machine Learning。4,5週目はニューラルネットワークの話です。

www.coursera.org

入力から結果を計算するフォワードプロパゲーションと、結果から重みを更新するバックプロパゲーションの解説。

プログラム課題の難易度が前回より随分上がった気がしました。いろいろと調べまわってなんとか。。。

 

とりあえず全体的な復習も兼ねて、ロジスティック回帰のR言語自力実装を開始したので、完成したらここかQiitaにまとめようと思います。

いやはや、まだNNは自力実装できる気がしないのでがんばる。

 

まだMachine Learningコースはドロップアウトせずにぎりぎり続いてますよ、という報告でした。

 

 

分析コンテスト、スタートでつまずいた教訓

さてさて、新年度ということで以下の分析コンテストに参加して、一回目の解析結果投稿をしてみました。

deepanalytics.jp

そして投稿してみてびっくり。一発目の投稿はbenchmarkよりちょっと良いぐらいで、ほぼ最下位グループではありませんか。

ここのベンチマークは乱数というか値固定というか、いわば「解析せずにえいやで数値だすとこのぐらいのスコアだよ」っていう感じ基準(過去の傾向を見た感じの憶測です)なので、自分の結果もその程度だということです。

それにランキング全体をみると、どうも上位と下位で明確にスコア差があります。0.4以下グループと0.8以上グループみたいな。

あ、これは分析精度うんぬんの前に、そもそも答えのフォーマットというか求められている数値になってないなと。特に今回のコンペの場合、学習データは故障の有無なのに対して、出すべき答えは故障確率なので、そのへんで誤ってそうです。

 

ということで、問題定義や結果の出し方でいきなり間違ったので戒めがてら記録しておきました。さて、どこまでスコア伸ばせるかなぁ。。。

 

ーーー

 

csvをsqliteにポイっと入れるスクリプト

Gistから貼り付ける実験を兼ねて。。。

Gistに2ファイル投稿したものを貼り付けたらどうなるのっと。

 

データ分析コンペなどで、たくさんのcsvを受け取ってまずは結合したり抽出したりコネコネしたいときにDB(というかSQLでの処理)が使いたくなります。

ということでワンクリックでcsvからsqliteにデータを流し込むツールがほしかったんですが、案外見当たらなかったので作りました。

非常に用途は限られていると思いますが。。。

 

ああ、、、今見るともうちょっといろいろ関数化しておくべきだったなぁとか、「ワンクリックで」と書いたのにクリックじゃなくて「ワン"カタカタ、ターン"」だなぁとか思ってしまいました。