豊洲にマグロを運ぶ仕事
去年、人工知能に仕事を奪われて無職となった私ですが、 なんせ東北で農業始めた時の借金が多すぎた。
そのため、強面のお兄さん達に仕事を紹介してもらって今はマグロ漁船に乗ってる。 命がけの仕事な上に、給料のほとんどが借金返済に充てられるから実質時給300円くらいだと思う。
でも、仕事っていうのはお金だけじゃない! 私が釣り上げたマグロでみんなに家族団欒の時と笑顔をお届けする事ができる、とても やりがいのある 仕事です! みなさんも一緒にどうでしょう?
ところで話は変わる。 本当は口止めされているのだが、こっそりとならこのブログに書いてしまってもいいだろう。
実は今回我々がマグロを運ぶのは最初から築地じゃなくて豊洲でって言われてたんだよね。 多分要するに、そういうことなんじゃないかな?
※ このブログは4/1に記載されたものになります
今更マイナンバーについてでも語っとくか
2016年はブログをいっぱい書くというのを2015年の目標にしたので、今年のうちに数を増やしておく。 何を言ってるかわからないと思うが俺にもわからない。
はじめに言っておくが、年末で暇なので暇つぶしに書いているものであり、中身は無い。
さて、実は11月に財布をなくしたのだが、その時にちょうどマイナンバーが盛り上がっていたので、 その経験も踏まえて思うことを書いておくことにする。
事前知識
事前知識として、財布をなくしたときの復旧の困難さについて語っておこう。
通常財布の中身で復旧が必要になることが想定されるものは
- キャッシュカード
- クレジットカード
- 免許証
- 保険証
などが考えられる。その他にも人によって再発行が必要になるものは様々だろう。
ここで、再発行には本人確認ができるものが必要なわけだが、多くの場合 公的機関 の発行するものが必要となる。
具体的には免許証や保険証、住民票などである。
ええ、上記失うものを見て分かる通りこりゃ大変ですね。
さらには免許証なんかも再発行には本人確認できる書類が必要である。
私の場合パスポートがあったのと、保険証は会社に申請だったのでなんとかなった。
マイナンバー?
この時ふと思ったのが、こういう時にこそマイナンバーが使えると便利ではないだろうか?
ということである。
マイナンバーで何ができるか詳しくは知らない私だが、
ICカード入りのを作っておけばコンビニなどで書類発行できる的なことが書いてあった。
違う、違うんだ!そんなことできるんならそれ自体が本人確認使えていいはずだろ!
ガバガバな仕組みのせいで出来ないこと。。
そう、番号さえ提示すればいい時代が来て欲しい。
番号から参照できるデータに適切な権限が設定されていれば最低限の情報のみを確認できるようになるはずなんだ。
しかし、どうやらこのマイナンバーは人に見せると問題があるようである。
それにもかかわらず会社とかには提出しないとダメらしい。
ふむ、これって要するにID=パスワードな仕組みかつ、必要な人とはアカウントを共有することって話じゃないかな?
しかも目的なく第三者に見せるのが違法とはいえ、データベースの中身を売りさばく社員がいるようなご時世ですよ。
私はセキュリティの専門家ではないので、この辺に関してはあまり言及しないようにしておくが、少なくともこの仕組みのせいで出来ることが少なすぎる(出来ちゃいけないことが多すぎる)ように思うのだよ。
少なくとも、
- 番号を提示すれば適切な権限で限られた必要な情報のみを国から取得できる
- 本人は番号の他にパスワードなど認証を使って全情報にアクセスや編集(住所変更、公開設定など)
ができるようになってるだけでも今まで面倒だった手続きで簡略化できるものが増えて便利になったんだろうなぁ・・・と思う次第であります。
少なくとも私にとって現状は、取り立ててメリットは無いが、 財布を無くすのと同様に誰かにカードを盗まれるリスクのみを一方的に国から背負わされた感しかない。
などなど考えていたら、外もすっかり暗くなってきた。
冬の日は短いものだ
おまけ
各種再発行には公的機関が発行する証明書が必要ですが、逆にそれさえあれば誰でもその人になりすませる可能性が実はあります。
キャッシュカードやクレジットカードは電話一本で止めることができましたが、免許証や保険証には無効化する手段がありません。
おそらくマイナンバーもそうなので皆さんくれぐれもお気をつけください。(人が気をつけないとダメな仕組みになってるのが問題な気がしますがね)
wikipediaのタイトルの読み仮名を取得する
どうも、クソアプリ Advent Calendar 2015の25日目を酔った勢いだけでとったじょんすみすです。
アプリとか作れないので昨日まで何を書くか悩んでいた
さて、最近は人工知能とか機械学習とかが流行ってますね。 みなさん魔法の杖かのように「機械学習でやりましょう!」とか「人工知能で職がなくなる」とか言っております。
ところで、有名な言葉に「データサイエンティストは21世紀で最もセクシーな職業」というものがあり、 どうやらデータサイエンティストになるにはセクシーな魔法使いである必要があるようです。
魔法使いになるには30歳まで童貞でいる必要があるので、セクシーな30歳童貞とかまさにユニコーンですね。 なお、私はユニコーンになる条件を満たしておりません(セクシー、30歳以上、童貞のどれを満たしていないかは想像にお任せします)
そんなわけで、本題に入りたいのですが、 機械学習やAIのような難解な数式を持ち出さなくても人間の経験則だけでこんなことが簡単にできちゃう事例を紹介します。
勘と経験だけで人は30万単語の読みを把握できる
エンジニアたるものコードで語りましょう。
# -*- coding: utf-8 -*- require 'rexml/document' data = '' File.open('jawiki-latest-abstract.xml').each do |line| # ファイル全体を読み込んでxmlとして処理するにはデータが大き過ぎるので # 一行ずつ読み込んでdocタグ単位で処理 data = '' if line.include?("<doc>") data += line if line.include?("</doc>") doc = REXML::Document.new(data) # タイトルから前後の余計な文字列を取る # 末尾は「(曖昧回避)」などが含まれている場合がある title = doc.elements['doc/title'].text.gsub("Wikipedia: ", "").gsub(/\(.+\)$/, '').strip abstract = doc.elements['doc/abstract'].text next if abstract.nil? # 最初の括弧内が読み仮名、英語表記、略語である可能性が高い kana = abstract.scan(/(.*?)/) if !kana.empty? # 読み仮名、英語表記、略語が複数ある場合によく使われる区切り文字 kana = kana[0].slice(1...-1).split(/[,:、]/) kana.each do |i| # 仮名表記のみを取り出すことで読み仮名のみに限定 if !i.empty? && /^[ぁ-んァ-ン・ \-]+$/.match(i) # 一部いらんもじ削除 i = i.strip.gsub(/([・-]|\s)/, '') # カタカナをひらがなに統一 hira = i.tr('ァ-ン', 'ぁ-ん') puts "#{title}\t#{hira}" if !hira.empty? end end end end end
なんと、このコードはすべてemacsで書かれています!vimは一度も起動してません!
これはwikipediaのダンプデータにあるアブストラクト(※リンクをクリックすると1.7GBのxmlを取得します)を利用して簡単なルールだけでタイトルに対応する読み仮名を抽出するものです。
みなさまにおかれましては寄付をされているかは存知あげませんが普段からよくwikipediaをお使いのことと思われます。で、このwikipediaでは
例えば「近藤うどん子」に関する内容の場合、
近藤うどん子(こんどううどんこ)とは〜〜である。
のような形式で始まっているものの多いこと!おそらく人間のサガというやつでしょう。
※2015/12/25現在、wikipediaに近藤うどん子に関する記事はございません。
その性質を使うだけでおよそ30万語の読み仮名データを取得できました。一例を見てみましょう。
形式言語 けいしきげんご 文脈自由言語 ぶんみゃくじゆうげんご 正規言語 せいきげんご 自然言語処理 しぜんげんごしょり
のようなものや、
イスラエルの失われた10支族 いすらえるのうしなわれたじゅうしぞく グラム・シュミットの正規直交化法 ぐらむしゅみっとのせいきちょっこうかほう 商法中署名スヘキ場合ニ関スル法律 しょうほうちゅうしょめいすべきばあいにかんするほうりつ NHKデジタル衛星ハイビジョン えぬえいちけいでじたるえいせいはいびじょん 日本国政府と中華人民共和国政府の共同声明 にほんこくせいふとちゅうかじんみんきょうわこくせいふのきょうどうせいめい
のような長いもの、
7 しち 7 ひち 7 ち 7 なな
のような同じ文字で別な読みがあるものなどとれています。
中には
SUZUKIハッピーモーニング・いってらっしゃいシリーズ すずき ハーディ・ガーディ より
のような、「いや、おい!」とい言いたくなるものもありますが、まぁ仕方ないでしょう。
ちなみに、はてなキーワードのデータだと最初からキーワードと読みがセットになっているものがおよそ40万語、 ニコニコデータセットの大百科だと18万語ほど取得できます。
この処理には1.7GBあるデータをダウンロードする必要があるのと、1時間以上の処理時間が必要なので、 やってみた割にはあまり効果がないと言えるでしょう。
なお、欲しい方がいるかはわかりませんが、こちらにあげておきました。 13MBあります。
で、何に使えるか?
クソアプリアドベントカレンダーのネタなのにこれを考えるのは少々無粋です。
wikipediaのタイトル自体は形態素解析の辞書に追加される例などが見受けられますが、 これに読み仮名も付与できるわけですね。
しかし、はてなキーワードより語数が少なく、ooの一覧なども抽出されている上に、 最近ではmecab-neologdというものもあります。
また、辞書の追加においては解析対象のドメインに特化したものが必要となることが多いので、その点ニコニコ大百科の方が利用シーンが多いと言えるでしょう。
そもそも世の中には便利なルビ振りAPIとかありますね。 例えばYahooのとか
なので、皆さんで勝手に御考え下さい。
ちなみにこの程度の内容であれば過去既にだれかやっていると思いますよ。
あとがき
実は他にもネタがあったんですが。。
今年は凛ちゃんの年だったので、何度かやっていた「星空凛」、「渋谷凛」、「遠坂凛」、「松岡凛」の四方に対する2chでの個別キャラスレの会話内容から、どの凛ちゃんに対する話かを予測するとかよくやってました。
こちらはslideshareに上がってるので興味がある人は頑張って探してみてくださいw(半年以上ぶりのブログ更新のためこれらに関する記事を書いていないかった)
ついでに来年やりたいネタメモ
CNNでアニメキャラの顔認識とRNNを利用したキャプションをつけるやつを使って、
キャラの画像とそのシーンでのセリフを学習させれば、キャラの性格や口癖を反映させた文章が生成できないだろうか?
というのがありますので、恵まれない私にクリスマスプレゼントとしてGPUを買ってくれる人を募集しています。 これが今回一番主張したかったことです!(というか必要なデータどうやって集めるんだこれ・・・)
RNNこれくしょんでLSTM使おうと思って失敗した話をMLCTでした
RNNこれくしょんを早速人柱になろうじゃないかと使ってみた
本来であれば結果や内部でどんな表現を獲得してるのかを話したかったが、 動くまでがものすごくツラく、しかもまだ間違ってるっぽい
しかし、後世の人たちの為にセグフォで落ちないところまでどうやったかをまとめておく
ただし、全てのデータが必ずこのやり方で落ちないとはかぎらない
公式のwikiに書かれているMLPのレイヤー数を変更したりしても落ちるので注意
入力データについて
※LSTMは自然言語処理なところで流行っているのでfeatureの日本語は「素性」とします
サンプルにあるrecall.jsonで動かす場合入力データはpythonのstructでpackされている(gen_recall.pyのwrite_binay参照)
素性が01の二値である場合(jsonの設定のdata/typeにserise_int_binaryを指定した)これでいいようだ
今回は文中の単語や文字をword2vecを用いて分散表現にしたのち、各次元を一つの素性として与えている
このときはどうやらserise_asciiを選択するよう(任意の実数値を読み込めるのがこれだけだった)で
おそらくこれでいい
正解ラベルも二値分類なら0-1でいいがn値なら正解だけを1、他を0にしたベクトル行×データセット分の列とすれば読み込めた
次に読み込ませるにはこれを各値ごとに1行割り当てる必要がある
実際に読み込んでいるscr/core/io.hppではfscanf("%f", &data[i])として読み込んだあと各値を
node->x_all[0][i][j]に入れていた(nodeはsrc/core/node.hppで定義されいるmsadow/tensorのTensorContainer。余談だが、3重ループのコメントアウトやインデントのされ方的に3つ目の次元も使おうとしていたっぽい。ひょっとするとこれをシーケンスの長さに利用する予定だったのかも)
jsonの設定について
こいつもまた厄介
data/n_{train, test}で学習、テストのデータ件数を指定するが、こいつはΣn_i * l_iとなる
n_iはi番目のデータ、l_iはn_iのシーケンスの長さ
これはもちろん人力計算
learning/n_timeは公式でBPTTの逆伝播ステップ数となっている
ん?固定長なのかまさか?
というわけで再び入力データ
n_timeが固定っぽいので、短いデータはどうすんだ?となった
確かに公式wikiのサンプルはいずれも固定長だ(なんでRNNのサンプルにMNISTのデータとか使ったんだろ?)
本当はその辺の処理もどうしてるかソース読まないかんのだけど、今回はとりあえず よろしくやってくれるだろうと信じて、0のベクトルを埋めてみた
そしてその結果うまく行かなかったのでおそらくここの扱いが間違ってる
平均取る時に確実にこのゼロの部分も計算に入れられてるね。。
その他
データ件数、素性数、BPTTのステップ数など、間違えて入力データと整合性がとれないと確実にセグフォになります
人力計算が含まれているのでかなりツラいです
データと設定の整合性がとれていないと動かないのは下手に中途半端な動作をしてマズい結果を出すよりはいいと思うのですが、何処と何処の整合性がとれていないかは出して欲しいですw
さて、その後の飲み会でも話題になったDevDataですが、このRNNこれくしょんはいい感じにそれを体現してるな、と思いました
最終更新が1ヶ月前と不穏ですが、せっかくOSSとしてGithubに上がっているのだから積極的な参加でよくしていくことが求められます
研究レベルで新しいこと(LSTMは97年。忘却ゲート入れたのも00年ですが)は、優れたライブラリの登場によって応用研究やビジネス利用にも繋がっていきます
是非、数年後に「このRNNこれくしょんはワシが育てた」とか言えるにはもってこいのOSSだとおもいますよ!
実装への貢献だけじゃなく、ドキュメントの充実でも、英語化でも何でもいいと思います
ニコニコデータ研究会でLTしてきたよー
「凛ちゃん」というキャラが登場する作品は数多くあるので、 文章からどの凛ちゃんについての内容なのかを分類する話
SVMとDeep Learningを使って、 「星空凛」、「渋谷凛」、「遠坂凛」、「松岡凛」を分類
2chの各キャラについて語られてるスレを学習データに使用
という話をしてきた訳である
まぁ、Linear KernelのSVMでそこそこ精度が出てるということは ある程度線形に分離可能なので、 ぶっちゃけ、たぶんDeep Learningなんて必要なくて隠れ層なしのパーセプトロンでもよかった
うん、パラメータチューニング時の傾向から何となく想像出来てた。
ちなみにこのスライドをのせた時に H2OのDeep Learningについていろいろ書こうかと数日前までは思っていたのだが、 機械学習プロフェッショナルシリーズの「深層学習」が これ読めばいいじゃんって内容だったのでアマゾっておくことにした
アフィリエイトとかしてないので気にせず押して大丈夫だよー