北野坂備忘録

主にインストールやプログラミングのメモを載せています。

Twitterのトレンドはひらがなカタカナ混合語が苦手

 Twitterのトレンドに、ときどき不思議な単語が載ることがあります。
 今回は「フレスタンプ」でした。
 これは、大ヒットアニメ「けものフレンズ」の「LINEスタンプ」がバズッたことによるものです。

 本来はけもフレスタンプ」という単語を、Twitterが何らかの機械学習的手法で検知した際に「フレスタンプ」で1単語と判定してしまったのでしょう。
 このあたりは「ひらがなカタカナ混合語の認識」という古くて新しい問題です。
 Twitterのトレンドを見る限り、このトレンドの単語取得システムは「ひらがな-カタカナ境界」をかなり重視したつくりになっていると思います。
 普段はそのほうが判定率がいいんでしょうね。

 このように、実際に自然言語処理システムを作る際にはいろいろな問題が生じます。Twitter社レベルでも逃れることはできません。
 下記の本も参考にしてみてください。


言語処理システムをつくる:実践・自然言語処理シリーズ1

Twitterの「ハイライト」機能削除は難敵

 先日Twitterのタイムラインを時間順に戻す方法の話をしたんですが、

kenichia.hatenablog.com

 これでもまだ治らないという連絡が。
 見に行くと、

「新着ツイートのハイライト」

 が悪さをしていました。

 コイツはなかなかの難敵で、「設定」の中に項目がありません。
 ではどうするかというと、「新着ツイートのハイライト」の右にある「×」マークを押して、そこに出てくる「同じようなツイートの表示を減らす」を押してください。
 「減らすんじゃなくて抹殺したいんだけど……」とお思いの方も多いと思いますが、設定はコレしかないのです。
 で、これを押すと「同じようなツイートの表示が少なくなります」という、なんともハッキリしない表現で回答が。
 とりあえずこれでハイライトは消えたように思えるのですが、たまーに、何かの拍子で復活することがあります。
 そのときはまた同様の設定をしてください。

 それにしても、Twitterはドンドンだめなほうに進化しつつあります。
 Googleは至ってシンプルです。虎の子の検索結果には手を付けず、新機能は右上のドックに追加していきます。
 タイムラインを乱すというのは本当に顧客の心の平安を奪う行為なのです。

Twitterのタイムラインが時間順にならなくなった

 Twitterを使った研究をしておりますと、当然Twitterについて聞かれることが多くなります。
 そのなかで、ダントツで多い質問が

「いつのまにかTwitterが時間順に並ばなくなり、見にくくて非常に困っている」

というものです。
 これは、「重要な新着ツイートをトップに表示」に勝手にチェックをつけられたからです。
 修正することは可能ですが、修正になんとパスワードを要求されますのでお気を付けください。
 2017/4/17現在ですと、

1) 「ツイート」ボタンの横にある「プロフィールと設定」を押す。
2) 「コンテンツ」の「タイムライン」の「重要な新着ツイートをトップに表示」にチェックが入っているのではずす。
3) 下の「変更を保存」ボタンを押す。
4) パスワードを入力する。

という手順になっております。
 なぜみんなこの項目に気づかないかというと、全く「重要な新着ツイート」でないものがダラダラ並ぶので、単にタイムラインがぐちゃぐちゃになったようにしか見えないためです。
 非常に「アルゴリズムをしくじっている」感が強い。

 それでは良いTwitterライフを……。


Rubyによるクローラー開発技法

仮想環境ソフトAnacondaの歴史(2017/3/10バージョン)

 Anacondaは「先導的なオープンデータサイエンスのプラットホーム」らしいです。開発元によれば。

Download Anaconda Now! | Continuum

 対応しているのはPython, R, Scala
 
 で、このAnacondaに「我々の名高い」パッケージ&依存&環境マネージャであるcondaが含まれているとのこと。
 Anacondaは仮想環境構築のために使われていることが多いと思いますが、実際はこのcondaが仮想環境管理を担当してるんですね。

 ちらっと調べてみるとAnacondaにも反対派がいるようです。「他の仮想環境構築プロジェクトと合流せよ」みたいな。確かにPythonを使う上で仮想環境構築パッケージは種類が多い。
 ただ、生き残るのは

・インストールしやすい
・ライブラリが揃っている
・便利な(使いやすい)

パッケージなので、機械学習向けにこれらを(今のところ)兼ね備えているAnacondaがいきなりコケることはないと思います。

 Anacondaを長い間使ってくるとどのあたりで大きな変更があったのか、かつて自分が構築した仮想OS上のAnacondaがどのバージョンか(PythonのバージョンよりもNumPyのバージョンは何か等)知りたくなるので、チェンジログを拾い読んで興味のある部分だけピックアップしてみました。(実に備忘録的な使い方だ)


2012-07-17:0.8.0:
 リリース開始。

2012-08-21:0.9.0:
 MacOSXサポート追加。

2012-09-06:1.0.0:
 Windowsサポート追加。

2013-03-12:1.4.0:
 全てのプラットフォームでPython2.6, 2.7, 3.3をサポート。

2013-05-08: 1.5.0:
 重要なパッケージを全てアップデート:python, numpy, scipy, ipython, matplotlib, pandas, cython

2013-11-05: 1.8.0:
 Windowsインストールで管理者権限が不要になる。

2014-02-10: 1.9.0:
 NumPyのバージョンが1.8になる。

2015-07-02 2.3.0:
 Python が2.7.10に、 Pandasが 0.16.2にアップデート。

2015-11-02 2.4.0:
 Python 3.5サポート追加
 NumPyが1.10にアップデート。

2016-02-05 2.5.0:
 インテルの数値演算ライブラリMKLが追加。numpy, scipy, scikit-learn, numexprのバックエンドになる。

2016-03-29 4.0.0:
 バージョンがいきなり4.0.0にブッ飛ぶ。Anacondaに含まれるPythonのバージョンと混乱を引き起こさないようにするためとのこと。

2016-06-28 4.1.0:
 Jupyter Notebook Extensions追加。

2016-09-28 4.2.0:
 QTのメジャーバージョンが4から5に。
 IPythonが4.2から5.1にアップデート。

2017-01-31 4.3.0: 
 Anaconda3 のインストーラーはPython 3.6に基づく。
 Anaconda 4.3 はPython 2.7, 3.4, 3.5, 3.6をサポートするが、次回リリースからPython3.4は含まれなくなる。


 QTのメジャーバージョン変わってたのかー。
 チェンジログを丁寧に見返すなんて滅多にないんですが、こうやって眺めるとパッケージの方向性が見えて面白いですね。

ロジスティック関数とシグモイド関数

 ロジスティック関数はもともと生物の個体数の変化を表すモデルに用いられる関数でした。
 なので、「時間 t = 0 における初期個体数を加えた形」がもとのロジスティック関数です。
 ところが、機械学習で用いるロジスティック関数は初期個体数を加えません。
 なぜなら、もとの初期個体数を加えたバージョンのロジスティック関数は、Sの字にならないことがあるからです。さらに、(0,1)に圧縮できません。
 機械学習で欲しいのは、

・S字カーブをする
・(0,1)に圧縮できる

関数です。
 機械学習で用いられる

σ(x) = 1 / ( 1 + exp(-x) )

という形をしたロジスティック関数、いわゆる「狭義のシグモイド関数」はこれを満たしています。ただし、これはもとのロジスティック関数側から見るとかなり特殊なケースになります。
 「ではシグモイド関数と呼べばよいのか?」というと、ややこしいことに「シグモイド」は機械学習で用いられるロジスティック・シグモイド関数だけではなく、累積正規分布関数なども含まれます。これはシグモイドというのは「ギリシア語のシグマの語末形(アルファベットでいうとS)に似た形」ということを意味しているからです。
 もっと言うと、正確な「シグモイド関数」は、

σ(x) = 1 / ( 1 + exp(-ax) )

というa(ゲイン)が入った形で、このうちゲインが1のものを「標準シグモイド関数」と言います。

 ということで、機械学習系の人は

σ(x) = 1 / ( 1 + exp(-x) )

を「ロジスティック関数」と気軽に読んでいますが、ロジスティック関数の特殊な形であるロジスティック・シグモイド関数の、さらに特殊な(ゲインが1である)形であるこの関数を「ロジスティック関数」と呼ぶのはやめて、より厳密な「標準シグモイド関数」と呼びませんか、というのが提案です。
 でも現状だと「ロジスティック関数」にしておかないと検索にひっかからないのよね……。