Jah524’s blog

気が向いた時に技術的なことを書いたりします

VRハッカソンに参加した

都内で行われたVRのハッカソンに出てきました。

www.moguravr.com

といっても自分はUnityやUE(Unreal Engine)等のエンジニアではないので、ひたすら機械学習をしていました。
記事のタイトルを二度見するくらいには何を言っているのかわかりませんが、作成物の項まで読んでいただければ多分わかります。
この記事の内容としては、私達の作成物のちょこっとの紹介と、VR関連のハッカソン参加者はネット環境に気をつけよう!というのが主となっています。

どんなイベントだった?

VRアプリを作って、試遊会してお互いに楽しむ、という内容のものでした。
もちろんイベントにスポンサーがつくタイプのハッカソンですので、特定のデバイスを活用したグループを対象に豪華賞品などが贈呈されるようです。
記事を書いてるこの段階で、どのチームが優秀賞なのか決まってないので、興味がある方は調べてみてください。

会場は東京テレポート駅駅近くのMONOというコワーキングスペースでの開催でした。
時間は31時間が与えられて、その時間で四苦八苦、七転八起を楽しむというイベントでした。

流行?

自分はVR分野に詳しいわけではありませんが、なんとなく感じた流行を書いてみます。
HTC VIVEがいくつか(5台ほど?)貸し出されたというのもあるかもしれませんが、持ち込みで参加する人達もおり、今までVRといえばOculus DK2だらけだったのが雰囲気変わったかな、という気がしました。
Oculus CV1での参加も多かったのでDK2率は30~40%?ほどだったかと思います。
今後PSVR等も出てくるので、今年の後半から乱戦が勃発する感じになるのでしょうかね。

またハッカソンでperception neuronの貸出等もあり、その他に昔ながらのLeap MotionなどでVR世界の中にアクセスする、という内容が多かったと思います。
HTC viveはコントローラーがついているので、vive組はそれをそのまま使うチームがほとんどだったと思います。

どんなの作ったの?

f:id:Jah524:20160623143745p:plain

忍者が寄って集って襲ってくるので、忍術を使って撃退するゲームです。
裏側では連続音声認識が働いていて、何か言ったらそれが忍術と解釈されて相手に攻撃できます。
本当はLeap Motion等で手裏剣を投げたかったのですが、開発環境のバージョンが合わなかったので今後の課題となりました(バージョンの問題は本当にハマりました、相方がですが笑)。

f:id:Jah524:20160627143015p:plain

このように、フレーズから推定される属性印象を推定し、それぞれの属性印象について定義しておいたエフェクトを発生させるということを行いました。
スプライトは水属性印象だったので、水の忍術としてのエフェクトを、縁の下の力持ちは土属性印象が高いフレーズなので、土忍術っぽいエフェクトを、という感じです。

システム構成

f:id:Jah524:20160623144426p:plain

上の図がシステム全体の構成を表しています。
Unity, HMD以外では、音声認識用のモジュール群とフレーズから忍術属性印象を推定するモジュールに分けられます。

音声認識

tips.hecomi.com

こちらのページで紹介されている手法を使わせて頂きました。

諸々のセッティングが終わったらNodeを起動し、Google Chrome音声認識を行うページを開きます。
Nodeは音声認識を行うページとUnity、それぞれとwebsocketで通信を行います。
これで認識結果がでるたびにUnityに音声認識結果がテキストで送られます。

phrase2magic

名前の付け方はてきとーです。
音声認識後のフレーズ、もとい文章から忍術の属性を推定します。
忍術の属性は五行思想(wikipedia)を参考に次のようにしました。

火: 火っぽいもの、攻撃的なもの、エネルギーが大きそうなもの
水: 水っぽいもの、観念的なもの、スピリチュアルそうなもの
木: 木っぽいもの、風っぽいもの、成長などを表しそうなもの、土に比べて動的
金: メタルっぽいもの、自然物よりは人工物を表しそうなもの
土: 土っぽいもの、育成や保護を表しそうなもの、木に比べて静的

とても大雑把です。

f:id:Jah524:20160627142822p:plain

このモジュールが何かを端的にいうと、文章を入力したらそれぞれの属性印象を確率で算出する関数になります。
word2vecとLSTMと呼ばれるリカレントニューラルネットワークを使って未知の文章に対してそれがどのような忍術属性印象をもつのかを推定します。
どのように実装されているかについてはQiitaに投稿しましたので、興味のある方はそちらを確認いただければと思います。

ハマったところ

冒頭でも触れたように、バージョンの問題には悩まされました。
自分の担当ではないため、明確にはわからないのですが、Oculus DK2とLeap MotionによるUnityだかRuntimeだかのバージョンがなかなか合わないみたいでした。
恐らくOculus CV1持ってれば最新で大丈夫だったようですが。

他には、これはどんなハッカソンでもよく起こる問題だと思うのですが、とりわけハッカソン中の回線の問題に悩まされました。
特に今回、運営の方々が頑張ったなぁと思うところでもあるのですが、開発用のデスクトップPCを25台ほど借りられるとのことでした。
しかし、デスクトップPCが借りられてもネットワークがが全く使えない環境でした。
最新版のUnity等は予めUSBに保存して配布できるようになっていたようですが、今回のようにまだ開発環境が安定していない状況でハマる私達のような輩にはつらい状況でした。
加えて、私達のチームは連続音声認識を使う予定だったため、常時接続している必要があるという状況でした。
例えばUnityを数十人がダウンロードできる場所なんて相当ないと思いますので、回線周りについては運営さんや会場が頑張るべきという話ではなく、今後も参加者が気をつけないといけないところではありそうです。
ひとまず参加者としては、たとえ良いデスクトップPCが借りられるからといってその周辺の環境には基本的に期待しないほうが安全です、もしくは期待しないでちゃんと確認をとっておくといいと思います。

その一方で、ネットを含めた環境は出来るだけ運営の方に期待したいところではあります。
ネットへ繋がないでできることは随分限られます。
今のVRハッカソンなら体験型/ゲームくらいしかほとんどないと思いますが、今後は例えばVRのSNS等、ネット環境前提が当たり前のアプリが増えてくることが予想されます。

今回私たちはとても感じのよいスタッフの方の助けをいただきながら、最終的には手持ちのポケットwi-fiでなんとかしました。
無線で飛ばす使い方しか知らなかったんですが、USB接続を行うと接続してるパソコンにもwi-fi環境が与えられるんですね。
もしこれを持っていなければテザリングで試遊会を含めて2日を凌ぎきるしかなかったので、ポケットwi-fiをもっていて運が良かったですし、なによりスタッフの方には本当に助けられました。

その他雑感

これまた大変だった系の話になってしまうのですが、ハッカソンなんてそんなものなので、一応書いておきます。
2日目の終わりの段階で表彰がある予定だったのですが、審査が追いつかないとのことで延期されました。
その後にビルドした作品と作品紹介のスライド(optional)等を参加者にお願いしていましたが、これの〆切が2日後の23時までというのが結構きつかったです。
とりわけ自分は、今回で提出するものはないと聞いていたので、コンフィデンシャルなプロジェクトの中にハッカソン用のソースコードを入れていました(開発速度優先のため)。
その後で必要とのことで、提出用にソースコードを切り離す必要が出てきてとても大変でした、せめて1週間は猶予が欲しかったです。

ハッカソン内の時間として壇上でのプレゼンではなく、試遊会という試みになっていたのは良かったと思います。
やはりお互いに作ったものに対してフィードバックがあってこそです。
音声認識は本当に人によって使い方が違ったので、ゲームデザインとして上手く吸収していく必要があることを痛感しました。

ちなみに作成物は今後もメンバー内で作り続けていく予定です。
ハッカソン中は問題解決だらけで、ゲームデザインについてほとんど検討できなかったのが心残りもであり、この流れになりました。 いずれ機械があったら是非被ってみてください。

JPHACKSに参加した

JPHACKSという、国内最大規模のハッカソンに参加しました。

jphacks.com

下記の3部門についてそれぞれトップ5が選ばれ、その上でプレゼンの結果トップ1になったチームには30万円が進呈されるようです。

  • World Challenge
  • Civic Tech
  • Academic

国内5箇所で同時開催されていましたが、最寄りの東大で参加しました。
はじめて東大に行きましたが、観光名所としても機能しそうなくらいにはいい雰囲気だったと思います(土日だったので、平日の雰囲気は知りません。)

それと実は、ハッカソン初参加です。
なので、あまり他のハッカソンとの比較が上手くできていないかもしれませんが、ご了承のほど。

作ったもの

www.youtube.com

devpost.com

一言でいうと、話せるキャラクターがいるお化け屋敷ゲームですね。
youtubeの投稿者は今回のハッカソンでの相棒です(台湾人)。
なんで作ったのか、何が既存のものと比べて新しいのかは、上記のdevpostをご確認ください。
ちなみに、デモでの声は自分のものですが、声が死んでいます、お察しくださいw

どんな人が集まったの?

大雑把にわけると、

  1. 継続開発費狙い
  2. スポンサー賞狙い
  3. ハッカソンに参加すること自体が目的

以上の3つほどにわけられると思います。

  1. については、もともと作っていたアプリ等を事業にしたい人たちが集まっているのかなという感じでした。
  2. については、継続開発費を狙うほどではないけど、どうせならなにか欲しい、というモチベーションで集まっている人が多かったと思います。
    私達のグループもそうでしたが、もともと3.だったのに、どうせならということで2. になった、というところも多いと思います。
  3. については、賞とかいいからハッカソンに参加したかった、という人達ですね。
    もちろん2.との区別はなかなかわかりにくいですが、1.,2.を狙わないハッカソン常連者としては、ハッカソン終了時の謎の達成感と、胃袋に入っているのかわからないお寿司が目当てなのかもしれません。

成果物についての雑感

音声対話システム

3年前では連続音声認識使おうと思ったらJulius一択だったのですが、辞書を用意しないと音声認識の精度が大変なことになるので、雑談対話等にはまず使えませんでした。
しかし、Googleの連続音声認識を使うことが今では可能であり、時代が進んでいることを実感しました。
似たようなところだと、3年前は形態素解析等をする際には、mecabなどをインストールし、プログラムで叩く必要があったのですが、今ではgoo形態素解析サービスのように、リクエスト送るだけで簡単に形態素解析ができるんですね。
もう少し遅く生まれていたら、対話システム開発が卒論でやりやすくなっていただろうなぁ、なんて思ってしまいます。

Unity+Oculus

主に、周辺技術がまだまだ安定していないという話になりますが、それだけ新しいと思っていただければと思います。 分担として相棒がOculus周辺やってたので、伝聞ですが幾つか書こうと思います。
主に、 最近unityのバージョンを5.2.なんとかやらにアップデートしたら、突然グラボがOculusのプラグイン(?)だかに対応しなくなって、Oculusで試すことができなくなってました。
開発やデモにはUnity上で動いていれば十分だったのですが、相棒がOculusで試したい〜とずっと唸っていました。
また、VR空間上で物体に挟まれて動けなくなるなど、まだまだ謎の挙動があるようです。
(結局ハマるポイント周辺に覆いかぶさるようにオブジェクトを置くことで、はまらないようにしました。)

余談ですが、UnityがBOM付きのUTF-8じゃないと上手く出力してくれなく、ハマりました。
最初はMacとWinの間での文字コード関係で、sjisやunicode16などを疑っていたのですが...!

その他雑感

疲れたけど達成感

ハッカソンで与えられた時間が土日での30時間だったので時間が惜しく、近くのネットカフェで寝泊まりしました。
リクライニングチェアでの睡眠だったので、めちゃくちゃ疲れました。
ネカフェではじめて宿泊しましたが、やはりずっと電気がついているんですね。
それでも、自分たちのようにネカフェに宿泊するチームもいくつかはあったと思います。
(ちなみに、ネカフェに入る22:00まで最寄りのスタバにいたのですが、そこで相棒がOculus Riftをスタバに忘れるハプニングがありましたw)。
実は、ハッカソンの前日も飲み会があって(研究室の先輩の論文2本目おめでとう会)、寝る時間がほとんどなかった状況でした。
2泊で6時間しか寝れないのは流石にきつかったので、申し訳なく思いながら飲み会を先に上がっていればよかったな、と強く思います。
ハッカソンが終わった後のお寿司も美味しかったです。

個人的にはイベントの趣旨がよくわからなかった

事前の説明では、JPHACKSはかなりビジネスに関連するのハッカソンで、それぞれの部門でのトップ1を獲得した出来のいいチームに対して、継続開発費を提供することを謳っていました。
個人参加でもいいのだなと思っていたら、なんと個人参加者は必然的に誰かとチームを組まされ、開発を行うらしいのです。
この時点で、個人参加者間でも相談は予めできるのですが、ハッカソンまでに成果物を十分に作る時間は与えられていませんでした。
その一方で、チーム参加者の人たちは、もともと事業化することを目指しているのであれば、ハッカソンまでに十分な時間が与えられています。
(ファイナルへの審査基準としては、gitのログに残っているハッカソン開催中の2日分とありますが、誤魔化すことも簡単です、ある程度書いたものをコミットしないで、当日に持ち込めばいいだけです)。
兎にも角にも日本最大規模のハッカソンにするために個人参加者もどうにか拾おうとした、という感じに私には受け取られ、このイベントの趣旨がわかりにくくなったかな、という気がします。
(ちなみに、私はもし今回の相棒が見つからなく、個人参加にならざるを得なくなったら、JPHACKSへの参加はやめようと思っていました)。
もちろんこれからのファイナルに選ばれた中には、優れた個人参加者チームもあるでしょう。
しかし、少なくとも個人参加者が賞金を目指すには公平な条件設定にはなってなさそうな上に、評価基準が審判による主観的なものにならざるを得ないので、個人参加者への配慮があってもいいと思った次第です、例えば、個人参加者とチーム参加者で部門を分けるとか。
ファイナル自体はこれからなので、そのあたりもどうだったのかは、可能であればまた別に記事を作成しようと思います。
(ちなみに私達はもともとチーム参加でトップ1の賞金も全く目指していないので、別にイベントの趣旨はどうであってもいいです。ただ思っていたことを書きだしただけの、ちょっとした感想です。ちなみに相棒も同じことを言っていました(共にハッカソン初心者))


追記:先ほどファイナルを終えたのですが、ギブリー株式会社の山根さんとお話できる時間がありました。
上記について直接的に尋ねたわけではありませんが、JPHACKSのスタンスとしては次のような意見を頂いたので紹介します(口頭で大体こういうことを言っていたというだけなので、細かいニュアンスが異なっている可能性もあります)。

アメリカでのハッカソンのように大雑把なものであっても、ハッカソンを開催すること自体が大切で、アウトプットする機会を増やし、かつ作ったものに対して評価される場を作りたいと思っている。

このハッカソン開催の動機には同意できます。
私の所属する学部生も、もっと参加してほしいなと思います(そして面白いものを見せてもらいたい)。

評価の公平さについての私の勝手な解釈としては、参加者各々でハッカソンへの動機をもっているだろうから、それさえあれば十分だろうというところでしょうか。
このあたりはハッカソン慣れしている人からすると、当たり前の感覚なのかどうなのかが気になりますね。
私も仮に運営だったら、問題としてある程度提起されてこなければ、これで十分という処理をするような気がします。


運営頑張ってた

実はこのイベントに参加するきっかけとして、JPHACKSの運営会社であるギブリー株式会社の村上さんが、わざわざ田舎キャンパスまで赴いて、説明会をしてくださったことでした。
他にもJPHACKS参加〆切過ぎても、熊本まで移動してハッカソンの説明をしたり等、イベントの成功に向けて頑張っていたように見受けられます。


以上がJPHACKSについての感想となります。
そういえば、この記事を書いている途中で、スポンサー賞がいただけるとの連絡がありました、ありがたい限りです。
来週の12/12にファイナルでの授与らしいので、ファイナルのプレゼンを見る機会ができました。
またそれについての感想も(覚えていたら)書こうと思います。
では!

Google Science Jam参加報告(メンター)

お久しぶりです。

三日坊主だろうと、せめて思い出した時だけでも、何か書いておこうと思います。
ので、開発関連ではないのですが、興味深いイベントに参加していたので、その報告でもしようかと。
もう3週間前の内容ですが、今回はGoogcle Science Jamというイベントでの参加報告をしようと思います。

どんなイベント?何やったの?

Google Science Jamというイベントにメンターとして参加していました。

メンターの役割を簡単に説明すると、主役である高校生が彼/彼女らのテーマについて研究をするから、研究活動の面倒を見てやってくれ、ということですね。
あくまで面倒をみることなので、自分もプレイヤーとして参加してしまうのはタブーです。
従って、メンターの出来る範囲は、限られています。
例えば、

  • 彼/彼女らの考えている手段で、目的が果たせるのかどうかの確認
  • メンターから質問をすることで、なぜその手段を選ぶのかを明確にさせる
  • 引用やIMRaD等、適切な表現ができているかのチェック

などなどです。

私のチームでは、基本的にはLineで連絡を取り、議論や発表準備等ガッツリと時間を確保したい時にGoogle Hangoutsで、オンライン上でコミュニケーションをとり、メンタリングを行うという形式でした。

ちなみに、メンター参加者は大体B4~D1くらいでした(自分はD1)。

なんで参加したの?

きっかけは今年から研究室に配属された助教の方から紹介されたことです。
次の2つに重きをおいた説明でした。

  • 例えば教員として求職するときに、教育経験として応募用紙に書ける
  • 高校生とはいえど、高い志を持った面々が集まるので、研究のモチベーションがわけてもらえるかも

私は将来、自分で事業をしたいと思っているので、特に教員になる等アカデミックに残るつもりはありません。
研究へのモチベーションに関しても、就活の時に出会えたメンバーが社会で頑張っていたり、関連する研究分野にもライバルは多いので、競争心は消えることはないです。

しかしその一方で、私は今年度から研究室の学部生のメンターともなり、このイベントについて知る少し前から、自分のメンタリングスキルについて気になっていたところでした。
特に将来、エンジニアや研究者も雇用する可能性が高く、その時のためのちょうどいい機会なので、少なくとも意識しておこうと思っていた時期でした。
Google Science Jamで、自分のメンタリングで直すべきところがあれば、今のうちに直しておこう、というのが今回の一番の参加の動機だったと記憶しています。

2番目以降の動機としては、研究活動に勤しむ高校生がどのような雰囲気なのかという興味であったり、他のメンターやスポンサーの社会人の方々と知り合いになれるかもしれないというところだったりします。

キックオフキャンプはどうだった?

つくばの高エネルギー加速器研究機構さんのところに二泊三日でお世話になりました。
施設の見学が基本でしたが、ノーベル賞受賞者小林誠さんの公演などもありました。
専門分野は全く違いましたが、それでもなかなか楽しめたのは意外でした。
むしろ25歳にもなって、普通に高校生と打ち解けられたのは自分でも驚きました。

もちろん見学以外にも、チームでの作業がありました。
発表内容についてののテンプレートが配られ、それについて高校生が考える、という内容でした。
この時ほとんどのメンターは、「なんで?」と尋ね続ける、研究室で飼われているオウムのようになっていたことでしょう。
3日目にはまとめた目標について発表し、スポンサーの方から意見をもらったりしていました。

3ヶ月の間はどんな感じだった?

既に書いたように、キックオフキャンプ以降は、発表会当日まで顔を合わせていませんでした。
初期の段階では、基本的には高校生が研究を進め、時折確認をするという体制でした。

私のチームでは記憶の忘却がテーマでした。
従って、相当量の被験者の募集をする必要があり、そのデータを収集する必要がありました。
また、先行研究調査を得ないと、研究の意義が伝わりにくくなるため、ある程度の時間を先行研究調査と本実験の時間として時間を確保した方がいい旨をアドバイスした記憶があります。

全体的には、おおまかに順調に進んでいました。
順調ではなかった点としては次の4つです。

  1. 本来予備実験としての実験を、時間の都合上、本実験として扱わざるを得なくなった
  2. 高校生の子たちが、自分の想定よりも、先行研究との差別化を意識していなかったこと
  3. (↑ゆえに、)研究のストーリーに必然性がなかったこと
  4. 発表練習に当てられる時間が十分ではなかった

少し細かく説明します。

1. 本来予備実験としての実験を、時間の都合上、本実験として扱わざるを得なくなった

このアクシデントは、想定していた範囲内でした。
そこそこ時間の余裕は確保してきたつもりでしたが、予定通りにあらゆることが進むことはめったにないですからね。
(そもそも普通に高校生しているので、教育を受けた後の平日の17:00~や土日しか時間が使えません。しかも学園祭や修学旅行などもあるのです!)
最終的に被験者を同じ高校内で100人以上集めたのですが、結構無理を言ってお願いしていたようでした。
もちろん被験者への謝礼などがあるわけでもなく、そんな中毎日実験協力させられたわけです。
興味のない被験者の方にとっては、何度も実験に半強制的に参加させられているわけですからね。

2.高校生の子たちが、自分の想定よりも、先行研究との差別化を意識していなかったこと

この項目に関しては、一番悩まされた箇所だったと思います。
恐らく、限定した環境下での記憶忘却の説明ではなく、あらゆる事象について説明ができる、と思っていたのではないかと思います。
従って、先行研究がないと、自分たちの発表の立ち位置が伝わりにくいよ、と伝えることができたのは、発表練習段階になってからでした。
例えば、覚える対象となる刺激の吟味は、先行研究調査によって行なわれるべきです。
(ちなみに、刺激は4×4のマスの中に数字がランダムに配列されているものを用いました。)
キックオフキャンプの頃から口頭では強調して伝えていたつもりでしたが、やはり本人達が必要性を実感をしないことには、伝わらないものかと思います。
そういう意味では、このイベントを通して、先行研究周りの重要性が伝わっていれば成功です。

3.研究のストーリーに必然性がなかったこと

2.の続きになりますが、なぜこの実験設定にしたのか(とりわけ、なぜこの刺激を覚えさせたのか)の説明を吟味していなかったため、事後的にストーリーの構築を行いました(実験の結果によって研究のストーリーが変わるなどはよくある話らしいです(by Ph.D持ちの面々))。

今回の場合、高校生は黒板や教科書、ノート等に覚える対象が散布しており、その中で忘れやすいポイントを発見するというストーリーになりました。
甘いところはあれど、刺激で4×4を活用した理由などが納得できるものになったと思います。

4. 発表会当日4日前から前日までの修学旅行

私自身も忘れていたので、申し訳なかったのですが、発表会前日まで修学旅行が予定されていました。
2週間前まで普通に時間がとれるものと思っていて、余裕を持たせていた期間が4日分とかだったので、急激に色々やらなければいけなくなってしまっていました。
ポスターの作成だったり、口頭発表用のスライドの作成だったりと、時間がギリギリだったことを思い出せます。
なんとか印刷などもギリギリで終えることができ、皆は修学旅行へ旅立って行きました。
(沖縄だってさ、まだ行ったことない、羨ましい)
おみやげもいくつか買ってきてくれたので許しました(ぇ

ただ、発表練習をする時間が全くとれなかったので、当日まで心残りではありました。

発表当日はどうだった?

f:id:Jah524:20151205113545j:plain

上の写真は私が面倒を見たチームの発表です。

全体の様子は、youtubeにリンクが上がっていたので、ここに紹介します(7時間のファイルとか投稿できるんですね)。


Science Jam 2015 - YouTube

雨が結構降っていて会場である日本科学未来館へ向かうのが大変でした。
サムネイルでもわかるように、贅沢な環境での発表でした。
それと、実は直前まで修正作業を行っていました。

発表練習が全くできなかったのでちょっぴり心配でしたが、思ってたよりは上手く出来ていたと思います。 惜しむらくは、実験の結果から考察できたことと、研究背景を結びつけた説明ができると、よりよかったかもしれません。

残念ながら、受賞自体は逃しましたが、終わった後の会場や懇親会で、実は惜しいところまでいっていたと言われ、高校生の皆は悔しがっていました。
最初にキックオフキャンプなどでは、狙えたら狙うと言っていた程度だったので、実は結構ガッツリ狙っていたというのは意外でした。
他のチームでも、いくらか目についた限りでも狙っていたようで、虎視眈々としていたのだなぁというのが驚きでした。

その他

メンタリングを振り返って

まずメンターとして、以下の点について心がけていました。

  1. 基本的に放っておく
  2. 指摘だけではなく、良い点もしっかり伝える
  3. 必ずしも受賞は目指さない

1. 基本的に放っておく

研究に関して必要な手ほどきを、面倒見よく与えることもできるのですが、それは研究活動において本質的ではないと私は考えています。
必要な手ほどきを受ける場は、高校までのいわゆる「スクール」と大学の講義のみであって、研究活動は自身で目的に対してアプローチすることだと思っています。
ここで私があれやこれやと口を出してしまっては、スクールでできることと所詮同じで、研究活動としての本質を逃すと考えていました。
今回のイベントは、あくまで研究活動の補佐であったため、研究室ではツッコミいれてる箇所でもわざとスルーしたりも結構しました。

また相手は同じゼミの班に所属する大学生ではないため、担当する高校生のモチベーションによってはグダグダな研究になってしまってもいいと思っていました。
その代わり、求められたり、モチベーションが高い限りはしっかり補助してあげようとも思っていました。

2. 指摘だけではなく、良い点もしっかり伝える

指摘は基本的にできていない箇所を強調してしまう効果があるので、指摘が多すぎると高校生がげんなりとしてしまう可能性があります。
比較できるような行動は起こしていなかったので、良し悪しは比較できませんが、研究へのモチベーションを低下させにくくさせるためには、必要な行動だったと思います。

3. 必ずしも受賞は目指さない

結果的に受賞をするのであれば、それは素晴らしいことだと思います。
一方で、研究経験を行うという趣旨が今回のイベントにおいてより重要であると考えていました。
もし本気で受賞を目指すのであれば、仮説に対して先行研究を綿密に調査し、妥当な実験計画を組む必要があります。
高校生のもともとの経験にもよりますが、先行研究調査/実験デザインの立案はそれぞれ十分な経験が必要であるため、場合によってはメンターがかなり首を突っ込んだアドバイスを行う必要があります。
私は、既に上記で記述したように、スクール形式のメンタリングは行う方向を考えていなかったので、実験までの準備は高校生に一任しました。
その結果、ストーリーに必然性がなくなるなどの問題もやはり出てきましたが、そこからどのようにストーリーを組み立て直すのかという、とても重要な経験が出来たものだと思っています。 今後彼/彼女らが研究をする際には、先行研究調査/実験デザインの立案にはとりわけ気をつけるようになっているのではないでしょうか。

全体を振り返って

出来なかったことが多めに記述されているので、どうせなら良かったことも書きたいと思います。

高校生のモチベーションが高かった

そもそもこんなイベントに参加する意思を示しているので大丈夫だろうとは思っていましたが、一応心配していました。
というのも、私の考えていたメンタリングの方向に、高校生のモチベ低さが加わると、研究の完成度が恐ろしいことになってしまうからです。
しかし、上記にも述べたように、被験者を100名以上集める、壁にぶつかってもめげずに継続して研究をまとめた、というように、よく頑張ったなと思います。
(そしてめげずに頑張ってくれたおかげで、自分もメンタリングをしたんだ!と主張できます)

高校生が素直だったこと

どうせなら具体的なエピソードをひとつ。
キックオフキャンプのポスター発表の時に、他のチームのポスターを見ている時に質問をする、という行動が当たり前にはなく、戸惑っているようでもありました。
そこで、質問をせめて一つはしよう、とアドバイスをしたところ、3人とも質問をしだし始めました。
素直にアドバイスに対して反応してくれるため、とてもメンタリングがしやすかったです。

連絡がしっかりと取れていたこと

データに対して分析を行ったり、発表準備などをする段階といった重要な期間では、しっかりと連絡が取れていたと思います。
メンターは、Google+でメンター専用コミュニティがあったのですが、高校生と連絡がとれない、などの報告があったりと、チームによっては連絡から四苦八苦していたようです。
連絡が取れないとメンタリングそのものが不可能なので、私のチームは連絡がしっかりとれていて、とても助かりました。


以上が、Google Science Jamのメンターとしての参加報告となります。
なんか文章長くなってしまって、読み人にも辛い文章になってしまった...!
出来る限り小分けにして、ブログに書く癖をつけておきたいところですね。

架空対義語生成bot作ってみた

相当久しぶりの更新...!

もともと数年前に、就活を意識しだして書いてたブログだったので、進学決めてからすっかり存在を忘れていました。
久々に何か書いてもいいよな〜、と思いたったので、作ったものについて記事にしてまとめてみます。

作ったもの twitter.com

使い方は簡単、@taigigo_kaku の後に続けて種となる表現と「⇔」を繫げるだけです。

使用例1) @taigigo_kaku マカロニグラタン ⇔
使用例2) @taigigo_kaku 架空対義語 ⇔

挙動例としては次になります。

架空対義語って?

定義があるなら私も教えて欲しいです。
一言で言ってしまえば、でたらめな対義語です。

架空対義語の楽しみ方としては、次のように説明できるでしょう。
本来、対義語として定義されていない単語を、何らかの属性の対称性から対義語であると無理やり認識することで、原文との間に生じる不適合を楽しむもの。
ユーモアの一種ですね。

なぜ作った?

きっかけは、poroLogueさんと飲んでいる時でした。
架空対義語を集めてボットにしている(架空対義語くん)、という話を聞き、

「自動生成もある程度出来るんじゃないですかね〜? 空いてる時間にやってみます」

と、言ってしまったんですね。
研究の一部で、昨年から話題になっているword2vec使っていましたし、自然言語処理の応用に使える資源も持ち合わせていましたし、実際どこまでできそうなのか試してみた次第です。

結果から言うと、まだまだ期待通りでない箇所はありますが、入力する文章の属性を意識すれば、面白い表現も作れそう、といったところです。

どうやったの?

まず用意したものとして、

  1. word2vec(今回はgensimを使いました)
  2. それの学習に使う新聞記事/twitterのデータ合わせて10GBほど
  3. 日本語語彙大系

以上の3種ですね。

さて、どうやって対義語を同定するのかですが、ここが一番悩まされました。
任意の単語に対して、word2vecで構築した空間上から最も遠い単語って、人間の感覚からする逆の特性ではなく、無関係になるような単語になりやすい気がします。

例 )
コサイン類似度("単語", "言葉") = 0.54
コサイン類似度("単語", "手紙") = 0.26
コサイン類似度("単語", "ブログ") = 0.03

つまり、単純に単語ベクトル空間上から最も遠い単語を抽出するだけでは、対義語っぽい単語は得られません。
そこで、まず対義語を表すようなベクトルが抽出できないか、試しました。
具体的には、"良"→"悪", "悪"→"良"といったベクトルを使用しました。
単に"軽い"の逆は"重い"で、"闇"の逆は"光"だろうという安易な発想です。

まず、入力された単語を{"良", "悪"}と類似度を算出し、2値分類しました (一般的には、教師あり機械学習で対応する箇所ですね) 。
次に、入力単語が"良"と類似度が高い場合は"良"→"悪"のベクトル加算を、"悪"と類似度が高い場合は"悪"→"良"のベクトル加算をしました。 このベクトル加算先での最近傍の単語が、求める対義語になる、といった仮定です。

しかし、満足には期待したような結果はでませんでした。
場合によっては、ベクトル加算語の近傍の単語を確認すると、元の入力単語に似すぎている単語が得られてしまいました。

例)
"過去" + "悪"→"良" = "歴史"         <= 対義語っていうより類義語?
"冷蔵庫" + "良"→"悪" = "洗濯機"      <= ある程度対義語っぽい?ような?
"パソコン" + "良"→"悪" = "インターネット"  <= 類義語っぽい?

そもそも、"良"と"悪"のコサイン類似度が0.56もあります。
つまり、入力単語に"良"→"悪といったベクトルを加算しても、入力単語に近い場所を指し示すだけなんですよね。
影響は大きくないかもですが、多少は求める単語に近づくだろうと判断しました。
しかし、対義語っぽい単語を得るためには、追加で別の対策を考える必要があります。
似すぎていてもダメ、似ていなさすぎてもダメ、なかなか難しいですね。

そこで、今回のところは、3. 日本語語彙体系を用いました。
この語彙体系を参照し、入力の単語に対する類義語を得ます。
得られた同義語全てに対して、入力の単語にベクトル加算した最近傍の単語との類似度を算出し、最も類似していないものを選択します。
これで、似ていないけど、連想できないほど似ていない単語ではない単語が得られます。
これが実際のリプライにもある架空対義語として使用される箇所です。

ちなみに、計算量が地味にヤバイので、ある程度対象を間引いて計算してます。
従って、再現性は完全にあるわけではないので、面白い表現に会えるかどうかは、偶然も絡んできます。

技術的には、以上のようになっております。

出来は?

是非使ってみて判断してみてください。

...というのはさておき、入力する単語にある程度依存しやすいです。
まず、日本語体系に掲載されているある程度メジャーな単語にしか対応出来ていないですし(例えば、"マイクラ"などの単語には対応できてない)、現在ではまだ名詞のみでしか対応をしていないので、形容詞などはそのままです。

グレードアップに乞うご期待。

最後に

気楽に使って頂ければ嬉しいです。
そして、時間があるときにでも追加で機能を出していければ、と思います。
とりあえず次は定期つぶやきとかでしょうか。

何かあれば私の方まで連絡を頂ければ幸いです。

twitter.com

ブログの移動してきました

旧 http://asy524.hatenablog.com/ です。

色々あってHN変えたくて、でもIDの変更はできないよ、とのことなので新しく作成。

前回のブログも就職活動前までのことしか書いてなかったし、時間さえ見つかればかけることは多そうだ。

 

 そうそう、事業の立ち上げをすることにしたんだ。

現在は研究室内で共同研究の話が上がってるので、それが落ち着いたら法的にも立ちあげたいと考えています。

何をやるかについてはまた今度ね!!