技術的な話題   

こんにちは、ごみばこです。

自然言語処理をするとき n-gram や形態素解析などの処理をし、文章から語にすることがよくあると思います。 n-gram はシンプルですが、分け具合、分け方によって情報量がなくなってしまうこともありますし、データ量も大きくなりがちです。形態素解析は簡単お手軽そうに見えますが、裏の処理はなかなかコストが高く、ちりもつもればなんとやら。

というところで、新しい選択肢の sentencepiece だそうです。

https://github.com/google/sentencepiece

私の知識や理解力の不足から雑な説明にはなってしまいますが…。sentencepiece が行うことは次のことです。

1. 文章をよろしくニューラルネットワークで処理し語に分割するためのモデルを生成
2. そのモデルを使って文章を分割する
3. n-gram や 形態素解析のような何かが得られる!やったー!

この何かで機械翻訳をすると n-gram や形態素解析などと比べて劣ることなく十分に効果を発揮した、との記録もあります。

https://github.com/google/sentencepiece#results-bleu-scores

学習する、という初期コストがかかることについては、形態素解析も同じですが、その後の分割することについては、形態素解析よりもコスト低く行うことができます。また、語彙も形態素解析で扱う辞書に比べて遥かに小さくできるそうで、パフォーマンスよし、効果よし、ととても魅力的に見えますね!

実際に収録されているサンプルを試してみました。

Read more »

   技術的な話題   

こんにちは、ごみばこです。

CSV ファイルってデフォルトでエクセルを使って開けるんですけど、どうにも文字コードを上手いことしてあげないとだめなんですよね。ということで幾つかの組み合わせについてぐぐったり、試したり、調べたのでメモ程度にー。
(ぐぐったらいろんな人が書いていて今更感もありますが・・・)

試したコードはこちら

<?php
// http://php.net/manual/ja/mbstring.supported-encodings.php
$encoding = [
	'UTF-8',
	'UTF-16BE',
	'UTF-16LE',
	'UTF-32BE',
	'UTF-32LE',
	'EUC-JP',
	'SJIS',
	'SJIS-win',
	'ISO-2022-JP',
	'CP932',
];

// https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E3%82%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%83%9E%E3%83%BC%E3%82%AF
$bom = [
	'UTF-8' => chr(0xEF) . chr(0xBB) . chr(0xBF),
	'UTF-16BE' => chr(0xFE) . chr(0xFF),
	'UTF-16LE' => chr(0xFF) . chr(0xFE),
	'UTF-32BE' => chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF),
	'UTF-32LE' => chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00),
];

$ary = ['abcdef', 'テスト', 'ほげほげ', '🍺🍣'];
ob_start();
echo '"' . implode('","', $ary) . '"'; // とりあえず雑に...
$buf = ob_get_flush();

// bom なし
foreach($encoding as $e) {
	file_put_contents("{$e}.csv", mb_convert_encoding($buf, $e));
}

// bomあり版
foreach($encoding as $e) {
	if (empty($bom[$e])) {
		continue;
	}

	file_put_contents("{$e}_bom.csv", $bom[$e] . mb_convert_encoding($buf, $e));
}

寿司ビールが正しく出れば Unicode も適切に処理されているはずなので安心安全ですね!

では結果を順番に見ていきましょう。















まとめるとこんな感じですね!

・CP932 や SJIS, EUC-JP などでは案の定、寿司ビールは出ません。
・UTF では BOM ありでないと文字化けしてしまいました。
・UTF-16 では LE にする必要がありました。
・UTF-16 では他のものと異なり、自動でカンマ部分の解釈がされないようでした。
・UTF-32 はダメです。

というわけで、とりあえず UTF-8 BOM あり にしておけば、色々と安心安全に動くんじゃないかなーと思います。

または、どうしても表でほしいなら xlsx を直にいじくりまわす、ですかねー。
PHP なら phpexcel 。Java なら POI 。Python なら xlrd + pandas 。
などと様々な言語から xlsx を利用する手立てがあります(あたまの良い人ありがとう)ので、これらを使っていくことも検討すべきかと思います。まあ、つらいところもあるので、難しいものなら、そもそもいる?、なんて話にした方がいいよいかもしれませんね!

   技術的な話題   

こんにちは、ごみばこです。

pv コマンド絶妙に便利なのですが、使う機会も少ないので、忘録的に書いときます。

pv ??

ivarch.com: Pipe Viewer

pv = pipe viewer の略で、その名の通り、パイプ処理のときのデータ量を可視化してくれて、絶妙に役立ちます。

pv をインストール

debian 系なら apt-get で、特に何することなくインストールするとこができます。Redhat もとい CentOS では RPMForge を導入することで yum install pv でインストールできます。

RepoForge Project

RPMForge は終了したそうです。理由としては、メンテナンスされていない古いソフトウェアが増えてきたから、とのこと。。というわけで Redhat/CentOS な方々は pv の公式サイトから rpm が公開されているので、これを利用すると良さそうです。

http://www.ivarch.com/programs/rpms/pv-1.6.6-1.x86_64.rpm

※バージョンは要確認すること。

$ sudo rpm -ivh http://www.ivarch.com/programs/rpms/pv-1.6.6-1.x86_64.rpm
$ pv --version

pv を使う

たとえば圧縮された SQL をドバーッと mysql に流したい…。

$ bzcat dump.sql.bz2 | mysql -uroot -pxxxx

が、これでは、ちゃんと進んでいるのかわからにくい! ここで pv を使うと…

$ bzcat dump.sql.bz2 | pv | mysql -uroot -pxxxx
1.81GiB 0:02:31 [ 12.4MiB/s] [                      <=>           ]

こんな出力がされ、流れるデータ量が可視化されます!

更に pv は複数に渡って記述ができるので…
(公式サイトに記載されているものとほぼ同じですが。。)

$ pv -cN source < dump.sql.bz2 | bzcat | pv -cN bzcat | mysql -uroot -pxxxx
    bzcat:  109MiB 0:00:18 [7.60MiB/s] [            <=>                     ]
   source: 52.7MiB 0:00:19 [3.89MiB/s] [=====>              ] 27% ETA 0:00:50

終わりそうな目処感と流れるデータ量を可視化できます!

まとめ

pv を使うことでパイプに流れるデータ量を観測することができます。これによっていつ終わるのか不安に思える作業もある程度は見える化されて便利~!

   技術的な話題   

こんにちは、ごみばこです。

これまで SublimeText ユーザだったのですが、ここのところずっとPHP書きがおおいので、本格的に PhpStorm に乗り換えました。やっぱり IDE すごいっすねー、静的解析強力過ぎやしませんかね。

PhpStorm: Lightning-Smart IDE for PHP Programming by JetBrains

という話は今回ではないのですが。

PHP も書きつつ、機械学習だなんだーとやる機会もあって Python を書くことも増えてきました。そこで PhpStorm でも Python のハイライトくらいはできるよーって紹介です。

PyCharm があるよね?

PhpStorm と同じく JetBrain 社から PyCharm という Python 向けの IDE も出ています。が、これを使うにはまた別途ライセンスを買わないと。。そこまでガッツリと書いているわけでもないしなあ。。。ということで基本的に SublimeText を使って Python を書いています。

PyCharm: Python IDE for Professional Developers by JetBrains

ある日、ふと PhpStorm も IDE だし、プラグインかなにかでハイライトくらいはできるんじゃないの? と思い調べたところ、スルッと出来ました。ただし、できるのはハイライトまでで、静的解析やその他の言語サポートは利用できません。PhpStorm にある機能(検索、置換、etc...)ならばできます。

背景には PHP と Python とが合わさったプロジェクトをやることがあり、エディタを度々切り替えるのもなんだかなーまとめられないかなー、というところからです。

TextMate Bundles Support

TextMate はご存知でしょうか?

textmate/textmate: TextMate is a graphical text editor for OS X 10.9+

Mac 向けのテキストエディタなのですが、そのエディタで使える言語定義ファイルである tmbundle を PhpStorm はじめとした各種の JetBrain 社の IDE で利用することができます。これによりプラグインを含めて IDE がサポートしていない言語、設定ファイルなどをハイライトすることができます。

そんな機能を使うには、まず TextMate Bundles Support を有効化する必要があります。

plugins -> textmate bundles support

次に tmbundle ファイルを探します。これは TextMate オーガナイゼーションに多数あるので、そこから探すと良いでしょう。ここでは python.tmbundle をダウンロードします。

Search · org:textmate tmbundle

textmate/python.tmbundle: TextMate support for Python

このファイルは、どこかわかりやすい場所にまとめると良いでしょう。
そうして準備ができたファイルを PhpStorm で読み込みます。

settings -> editor -> textmate

このとき TextMate と PhpStorm とで、カラースキーマを合わせる設定をします。IDE Color Schema に合わせて TextMate Color Schema を設定していきます。私の場合は Monokai copy という名前で Monokai をちょっと弄ったものを使っているので、これに合わせて Monokai を選びます。(すべて Monokai になっていますが使っているテーマに合わせて、だけでよいです。)

 

以上で設定は完了です。これで Python がシンタックスハイライトされるようになりました。カッコが気持ち悪いのは autopep8 したからです。。

まとめ

PhpStorm でも TextMate Bundles Support を有効にすることで言語定義ファイルの tmbundle を利用できるようになりました。このファイルをどんどん入れていけば、他の言語もハイライトされるようになっていきます。TextMate リポジトリを見てわかるように、かなりの定義ファイルがあります。

ただ、仕事や趣味問わずですが、ガッツリと使っていく予定があるならば、言語環境にあったエディタや IDE を利用したほう生産性も上がっていくと思います。余程のエディタ愛があるならともかく、環境に合わせて使う道具も切り替えていきたいですね!

ガチで書くわけではなく、ちょっとやりたいんだよね、というくらいなら tmbundle で十分だと思います。ぜひお試しください!

   技術的な話題   

こんにちは、ごみばこです

実はさらっと、ごみばこいんを https にしてました。
以前にも一度やっていたのですが、何かに詰まり、元に戻していました。またやったら特に問題なく出来てしまったので、何だったんだろう…。。

個人のひっそりページで証明書買うのもなあ、ということで Let's Encrypt でhttps化を行いました。

そのやったことなんかを簡単に説明していきます。

Read more »

   技術的な話題   

こんにちは。ごみばこです。

某所で激安 CSS が盛り上がり、実際に使うとなったら JS に全部書かれていて、数字だけ入った要素に適用されると嬉しいだろうなあ~、と思ったので、作ってみました。

※激安 CSS についてはこちら > http://qiita.com/shiozaki/items/0e42e101b7483df13c8f

ソースはここ(gist)
✨安い!!お得!!激安JS!!✨

せっかくなので、ただ作るではなく、普段書かないようなメソッドや記述を盛り込んでみようかなあと。

  • ライブラリを使わない
  • document.querySelector と document.querySelectorAll で要素検索
  • テンプレートリテラルで CSS の定義
  • innerHTML じゃなくて createElement で地道に作っていく
  • let! let!
  • アロー関数でクロージャ

 

↓実際に実行するとこちらになります

 

あの大人気の掃除機が今だけナント!49800


<p>あの大人気の掃除機が今だけナント!<span class="gekiyasu">49800</span></p>
<script src="/tool/gekiyasu.js"></script>
<script>gekiyasu.initialize();</script>

 

元の CSS 作者に圧倒的感謝🙏

   技術的な話題   

こんにちは。ごみばこです。

ちょっと思い立って、TensorflowをGPUで動かしたくなったので、その構築メモを残しておきます。

カンタンなまとめ

  • AWS EC2 で g2.2xlarge を スポットインスタンスで使った
  • Tensorflow の学習データを 60GB の付属するストレージに置いた
  • crontab と aws-cli を使って定期的に AWS S3 に学習データ(の一部)を転送した
  • tensorflow と tensorflow_gpu を間違えるとかなしい
  • 2日くらいで試行錯誤した成果は得られなかった

Read more »

   技術的な話題   

こんにちは。ごみばこです。

packagist に公開してあるので composer require regexp-trie:dev-master とでもしたらすぐに使うことができます。

sters/regexp-trie - Packagist

 

use RegexpTrie\RegexpTrie;

$regexpTrie = RegexpTrie::union([
    'C','C#','C++','Clojure','CoffeeScript','CommonLisp',
    'Java','JavaScript','JScript','J#','JSX',
    'Perl','PHP','PostScript','PowerShell','Python',
]);

var_dump($regexpTrie->toRegexp());
// =>
//     /(?:C(?:(?:\+\+|lojure|o(?:ffeeScript|mmonLisp)|#))?|J(?:ava(?:Script)?|S(?:cript|X)|#)|P(?:erl|HP|o(?:stScript|werShell)|ython))/

これは正規表現において Wikipedia や はてなキーワード のような、多数のキーワードを同時に処理しようとすると、選択が多数になるものができあがり、非常にパフォーマンスが悪いものを、トライ木を使って解決するためのものです。

元ネタはこのあたり。

このトライ木による正規表現の生成ですが、ご覧のとおり Perl や Ruby ではすでに作られているようで PHP には特に見当たらなかったので Ruby のものから翻訳してみました。( Perl のソースはちょっと分からないところだらけ過ぎてつらかったので… )

追)PHP には特に見当たらなかったと思っていたのですが packagist を見たらそれっぽいものがありました。。

s9e/regexp-builder - Packagist

ちゃんと実装を追っていないのですが Regexp::Asemble っぽい挙動をしているような…?

   技術的な話題   

強い転職意識があるとかそういうわけじゃないんだけど、スキルチェックがてら、どんな会社があるのかなあと思いぼちぼちとやりながら会社の様子を見ている。たまに見知った会社が出てきて、金額これくらいかーとか、うまく見せてるなーとか、勉強になることが多い。社会を知ろう。

 

paiza とは

ITプログラマー・エンジニア転職のpaiza https://paiza.jp/

いわゆる Top Coder 的な、アルゴリズムな問題が出されるので、好きな言語で解いたものを提出すると自動で採点がされる。それによって自分のランクが決まり、会社からのオファーを受ける、会社にオファーできる。自分の希望もかけるので、しっかりとした面接が良いとか、カジュアル面談とか、選べるっぽい。また業態や言語なども選べ、自分の希望に近い会社からのオファーが来やすそう。

逆に企業側としては、書いているコードが見れるので、その人がどれくらい慣れているのか、どんなコードを書くのか、といったところを見られる模様。

そういったエンジニア転職コンテンツを活用しつつ、よりユーザ確保を狙ってだと思うが、「コードガールこれくしょん」とか「もし次の常駐先が女子エンジニアばかりだったら」という美少女キャラ推しなコンテンツも増えてきている。ぼくはあまりそっち方面に興味は沸いておらずやってはいないのだが。

 

paiza でコードのどんなところが見られるのか

ぼくの場合、こういったところのコードって業務コードと異なるものを書いてしまう。自分が出せる最速の最善策で出していくので、業務としてはそのコードだめじゃね?とか、半ば強引にやっているような箇所があったりすることも多い。

といったときに、企業側の人はそんなコードを見てどんなことを知ろうとしているのかなーとか、単純に気になる。気になるが、転職意識も強くはないので、カジュアル面談に行くことも申し訳ないなあと思っている次第。

もしかしたらぼくの場合がそうであるだけで、ガチで paiza を使う人たちは圧倒的な業務コードを書いているのだろうか。どなたかこっそりおしえてください。

 

というわけで paiza 楽しいよ

いうても競技系のサービスであることに変わりはなく。

そこに合わせて、企業からのスカウトが来たり、点数が出たり、ランキングが出たり、実績というか、凄いんだぞ!!!感が見えるあたりがとても楽しい。それもそうだし、ランク別に問題レベルが分かれていて、自分のレベルにあったチャレンジをしていけるところもあって、チャレンジした問題のランクと回答時間を眺めて、スキルアップしていってるなあというのを実感するのが一番良いと思っている。なので、ぼくは C ランク全部!とかじゃなくて、まばらにポチポチやっています。

あ、オファーについては企業の人たちにはごめんなさいしないといけないですね。

ちなみにぼくはいま、B ランク問題は安定して正解取れていて、A ランク問題が1勝3負くらい。S ランク問題も1つやったところ不正解だったけど、なんだかちょっと頑張ったらいけそうな気がしていて、次にやる時間を取ることをしみにしているところです。なお PHP で。 ある程度いくとこまで行ったら別の言語でもトライしたいなーと思ってます。

 

 

paiza の宣伝記事みたくなってしまったけど、paiza の人ではないし、宣伝してくれ!ってわけでもないよ。

   生きる   

どーもごみばこです。

10月~11月ごろ、お仕事マンしてほぼ始発で帰るという生活をしていました。まあ、夜の用事がない平日だけですが。

 

これを実施していた背景は2つあります。

ひとつは、とくに業務がハッチャメッチャのヤベエ!というわけじゃないものの、やることは沢山あるのでちょうどいいね!と思っていました。急ぎで終わらせなきゃいけないものでもなく、ヤバイ系のものでもなく、ただ単純にやることがたくさんあったので、せっかくだしもりもり消化していくか~という気持ちが起きていました。

もうひとつは、ほぼ始発で帰るような、そんな生活を続けるとどうなるのかなーと興味が沸いていたことです。どこかで聞いた話ですが、徹夜をx日続けたら視界が黄色くなってその後マジで見えなくなって~…。そんな事象にちょっとだけ興味が沸いていました。だって面白いじゃないですか、視界が黄色くなる、ぐるぐるしてぶっ倒れるとか、そういう経験がいままでなかったので。ここは本当に興味の範囲です。

そんなこんなで、なんとなーくで初めてみて、1週間/2週間/3週間/...となんとなーくで続けてみて、自分の変化をある種たのしんでいるような感覚もあり、最終的に1ヶ月半ほどで終わりにしたのですが、そのころには興味よりもヤバさ・恐怖を感じるようにもなってきていていました。興味があれば試してください!なんていうものではなく、同じようなことを

Read more »

   技術的な話題   

こんにちはごみばこです。

この記事はteratailの「Bluemixアドベントカレンダー」の参加記事として書かれました。

昨日は yutori_828 さんによる「クラウドx IoT女子会で推し(二次元)の話をしてきた」でした。
クラウドx IoT女子会で推し(二次元)の話をしてきた – ユニバーサルIoT女子文明

Read more »

   技術的な話題   

普段見慣れない、なんだかでこぼこしたフォントだったのでよさそうなやつを指定しておいた。

調べると「2016年最強のフォント指定はこれだ!」「俺が考えたイマドキのフォント指定」みたいな記事ばかりでなかなか面白さがある。

だいたい同じなんだけども。

いじょ。(やまなしおちなし)

   技術的な話題   

MNISTで手書きの数字認識できるじゃないっすか

あれをこう広げていって、レシートの写真を撮ると自動で項目と値段を割り振ってくれるような何かとかあったらスゲー面白いと思うんですよ

 

え?

 

ああ、そうですね、クラウドソーシングでレシート入力しているソリューションとかありますよね、知ってる知ってる

そういうアプリあるよねわかるわかる。

 

でもそれだと時間差あるじゃないですか。

それになんだかこう、他人に見られるわけじゃないですか、なんかこう嫌な人いるんじゃないですかね、きっと。

いや、わかんないですけど

 

というわけで、話題の「人工知能」と掛け合わせるんですよ、バカウケ間違いなしツールになりそう(適当)

 

「人工知能を使ってあなたのレシートを解析し、いつどこで何を購入したのか、自動で家計簿をつけてくれます」

「人工知能がお買い物や節約、出費に関するアドバイスを提供してくれます」

やばそう。

 

とりあえずトイレに籠ってレシート眺めてどうしたらいけそうか考えてたけど、思った以上にレシートの文字列って大きさバラバラすぎて辛いなーって思った。ので誰か任せた。