#1 Adversarial Multi-task Learning for Text Classification
一言で言うと
タスク依存の特徴量とタスク普遍の特徴量を完全に分けてMultiTaskLearningをした
タスク普遍の特徴量をより普遍にするためにGANを利用
タスク依存の特徴量をより依存にするためにorthogonality constraintsを利用
詳しく
Multi Task Learning(MLT)とは
複数のタスクを並行に学習させることでタスク間のcorrelationを利用し、単独タスクで学習した時よりも精度を上げるための枠組みである。
提案手法
本論文では文分類のためのLSTMをtask-independentなものとtask-invariantなもの両方を各タスクについて用意し、task-invariantなLSTMはタスク間で共有する。
そしてtask-invariantなLSTMのfeatureをよりtask-invariantにしてtask-specificなfeatureに汚染されないようにするためにGANを用いた。
Discriminator:入力文がどのタスクからきたかをshared LSTMから得られたfeatureをパーセプトロンに通して予測
通常のGANのDiscriminatorは2値分類をするが、多クラス分類をさせるためにLossを拡張をしている。
さらにtask-invariantからtask-independentへの汚染を防ぐためにorthogonality constraintsを利用 具体的にはFrobenius normを採用
結果
16のデータセットでMTLをしたところ、提案手法が平均ErrorRateでもっとも低い値を実現
【Pandas】データフレームの結合【タテ】
Kaggleというデータサイエンスのコンペを始めるに当たって
Pandasの使い方を勉強しています。
今回はデータフレームの結合について
データフレームを定義
df_sample1 = pd.DataFrame ([["day1","day2","day1","day3”,”day3”,”day2"],
["A",”C”,”A”,”B”,”C”,”C”]]).Tdf_sample2 = pd.DataFrame([["day3”,”day3”,”day2”,”day1”,”day2”,”day1”],
[“B”,”A”,”A”,”B”,”C”,”A”]]).T
タテに結合(pd.concat)
joined = pd.concat([df_sample1, df_sample2])
#6x2行列をタテに二つ
#12x2行列ができる。
<参考にしたサイト>
http://pythondatascience.plavox.info/pandas/pandasでデータフレームを結合/
Python+Eclipse+機械学習 〜環境構築〜【Mac】
<開発環境>
Mac OS Yosemite(10.10.5)
<本文>
PyDevを使ってEclipseでpythonのコードを書いているんですが、scikit-learnをimportしようとしたらエラーが起きました。
僕はpyenvを使ってpythonのバージョン管理をして、pipを使ってパッケージをインストール・管理しているのですが、pipでインストールしたパッケージは以下の場所にあるようです。
/Users/ユーザー名/.pyenv/versions/2.7.9/lib/python2.7/site-packages
ところが、EclipseでPythonインタープリタを指定する際に、pyenvのpythonではなく、
/usr/bin/pythonというデフォルトで入っているpythonを指定していたためにscikit-learnをimportできなかったようです。
/Users/ユーザー名/.pyenv/versions/2.7.9/bin/python
を指定し、Eclipseを再起動したらエラーは消えました!
ついでにpython3.4も登録しました。
納得納得( ´ ▽ ` )
<参考にしたサイト>
↓ついでにパッケージのバージョンを一気に新しくしました
東京大学大学院入試の話(情報理工学と工学)
今年の8月に東大の大学院の入試、通称院試がありました。
一応内部生だけど専攻を変えようとしていたので、実質外部生でした。
外部生となると情報が内部生に比べて圧倒的に少ないのが難点。。。
ネットで外部から受験した人のブログが何個かあって、それだけでもとても参考になったので僕も院試体験記を書こうと思う...!
※気になることがあったら気軽にコメント欄で質問してくださいね。
受けた院試は以下の2つ
- 情報理工学系研究科コンピュータ科学専攻(第一志望)
- 工学系研究科システム創成学専攻(第二志望、学部と同じ専攻)
開示した点数、面接で聞かれたことも含めて順に書いていきます。
情報理工学系研究科コンピュータ科学専攻
外国語(TOFEL-ITP):543 / 677
一般教育科目(数学):204 / 300
専門科目:224 / 800
おわかりいただけるだろうか・・。
専門科目の点数の低さが・・。
CS専攻ではTOFELは足切りに使われるともっぱらの噂だったので、英語は1週間前から対策始めました。問題形式になれて、文法問題のパターンをつかむだけで30点くらい上がる気がする。実際英語に時間割くより、数学専門に時間割く方がコスパが◎
数学は、大学の1~2年でやるような数学をおさらいすればいいと思う。真面目にいい成績を取ってきた人ならさほど問題はなさそう。
問題は専門科目。学科の授業の期末試験とそっくり同じ問題が院試で出題されることもあるらしく、理学部情報学科の人たちは圧倒的有利。
TwitterでISer(=理学部情報学科の学生のこと)で検索して彼らを探してお友達になり、過去問を流してもらうのも一つの手かもしれない。
内部生の間でも院試の過去問の答えは出回ってないそうなので、それは諦めた方が良さそうです。
実際に院試を受けて思ったことは
「コンピュータアーキテクチャ出題されすぎ。もっと勉強しとけばよかった。」
HP行けば参考書とか書いてありますが、離散数学とか機械学習とか勉強する前に、コンピュータアーキテクチャを完璧にするべき。それだけで200~300点は堅そう。
僕は試験勉強でいろんな科目に手を出しすぎて、時間が足りずどっちつかずって感じでした。受かったからよかったけど。
ちなみに今はやりの機械学習で超著名なS山・S藤研が第一・二志望だったんですがいかんせん人気すぎて、この点数では到底いけませんでした。
まあこんな点数でも受かるっていう参考してください・・。
面接でも、第三志望でもいいですか?って聞かれたし。ちなみに面接で大したことは聞かれないです。
面接のときはスーツと私服で半々でした。笑
工学系研究科システム創成学専攻
外国語(TOEFL):62 / 100
論理的(中略)数理的問題:93 / 100
小論文:35 / 100
TOEFLについては上で書いた通り。
こっちは内部生ということもあり、謎の自信からほぼ対策はしないで臨みました。
数理的問題は今年から一般の数学も出題されるようになったから対策が必要。とはいえ逸脱して難しい問題はないので、1,2年で普通に勉強してきていれば問題なさそう。
数理的問題の方は中学受験のような地頭使って解くようなやつ。こっちは対策しても仕方ない感あります。
数理的問題は同じ学科の知り合いたちも大抵満点近くとってるっぽいのでここで差はつかなそう。
この点数を見ればわかるように小論文で大きく差がついた。そのためこちらも志望した研究室には行けませんでした。
でも小論文って何を対策すればいいんだってばよ。
面接は、就活の面接みたいなことを聞かれました。面接官として教授が7人くらいいて、一人から一つずつ質問されるみたいな感じ。質問内容は、希望研究室の志望動機、システム創成学専攻に期待するもの、あなたの長所・短所とか、興味のある分野とか、あと併願してるかどうかとか。
面接時は全員スーツでした。普通スーツだよね。
【Mac OS】テキスト 置き換え
テキスト中の文字列を他の文字列に置き換えたい時があります。
例えば、javaでクオーテーションマークや改行を含む長い文章を一つのString型の文字列変数として定義したいときです。
そのままコードにコピペすると見栄えが悪いし、"を文字列の終わりだと判断されてエラーが起きることもあります。
そんなときは・・・
- テキストエディタに一旦コピー
- ⌘F
- 「置き換え」にチェック
- 好きなように置き換える。
これでOK!
<備考>
- クオーテーションマーク
「"」をString型の文字列に含めたいときは、「\"」とすれば、文字列の終わりだとは判断されない。
- 改行
例えばテキストエディタに文章をコピーすると、改行コードは見えない。
しかし、「option+Enter」を検索欄で入力すれば見えない改行も検索できる。
同様に改行をString型の変数に含めたかったら、「\n」に変換すればよい。
MySQLコマンド集(随時追加予定)
MySQLを久々に使おうとするたびに起動の仕方やコマンドを忘れるので
備忘録として記録しようと思う。
注)
OS X 10.10.5 (Yosemite)
MySQL 5.7.10
- 起動
$ mysql.server start
- ログイン
$ mysql -u root -p
の後にパスワードを入力して対話モードに入る
- 主要コマンド
## データベース
# データベース一覧を表示
show databases;
# そのデータベースがあったら削除(危険な操作)
drop database if exists <データベース名>;
# データベースを作成(同じ名前のものを作ろうとするとエラー)
create database <データベース名>;
# 使用するデータベースを選択
use <データベース名>
## テーブル
# テーブルが存在すれば削除
drop table if exists <テーブル名>;
# テーブルを作成
create table <テーブル名> (<フィールド名> <型>, <フィールド名> <型>, ...);
## データ
# テーブルの検索
select <フィールド名1>, <フィールド名2>,... from <テーブル名>;
select * from <テーブル名>; # データの全てのフィールドを表示
# データの追加
insert into <テーブル名> (<フィールド名1>, <フィールド名2>,...) values (<値1>, <値2>,...)
## 検索条件
# データを10個まで表示
select * from <テーブル名> limit 10; #テーブル内のデータが膨大な場合は必須
# フィールドの値が値と等しいデータのみを表示
select * from <テーブル名> where <フィールド名> = <値> # 同様に >, <, >=, <=も使える。
# フィールドの値が値1,値2,...のいずれかであるデータを表示
select * from <テーブル名> where <フィールド名> in (値1, 値2,...);
# データの項目数を表示、as(省略可)によってフィールド名を変えることが可能
select count(*) as count from <テーブル名>;
# 指定したフィールドの値が昇順になるように表示
select * from <テーブル名> order by <フィールド名> asc
# 指定したフィールドの値が降順になるように表示
select * from <テーブル名> order by <フィールド名> desc