Get To The Point: Summarization with Pointer-Generator Networksのデータコーパス

abisee/pointer-generatorから、becxer/cnn-dailymailに飛び、Python3でデータセットを作成している時に詰まった。

Download Stanford CoreNLPで最新版をインストールすると、上手くいかなかった。

2016-10-31versionで

python make_datafiles.py /path/to/cnn/stories /path/to/dailymail/stories

すると動いた。

Ruby初心者はRuby技術者認定試験Silverの勉強しろ

Ruby技術者認定試験Silverを84点で合格しました。

かなり初心者にオススメの試験だと感じたので、紹介します。

対象読者

Ruby経験半年ぐらい

学生

Ruby経験

Ruby合宿で初めてRubyと出会う。

Ruby on Railsエンジニアとして半年程、インターン(Rubyに触るよりIEに振り回される時間の方が長かった)

大学の講義を再構築という人生の黒歴史を残す

imaharu-blog.hatenadiary.jp

qiita.com

Ruby技術者認定試験Silverの勉強をすべき理由

Rubyの基礎を客観的評価で身についたと言える

初心者がRuby技術者認定試験Silverを受ける理由は、これにつきます。

初心者のつまづきやスロースタートは、技術を評価する基準を持っていないことが根本的な原因だと思います。

技術を評価する基準をもっていないために、Rubyを理解する前に無謀ともいえるRailsチュートリアルに挑んで挫折するのです。

勿論、Ruby技術者認定試験Silverを受験しなくて大丈夫です。

しかし、基礎を認識するためネットに転がっている問題を解いて欲しいです。

残念?嬉しいこと?にRuby技術者認定試験Silverは奇問も少し出題されます。

例えば

グローバル変数におけるリテラル/式展開 です。

$a = 1
 puts "a = #{$a}"

上記は予想通りですよね。

実は、下記でも出力されます。知らねーよ。

$a = 1
 puts "a = #$a"

ダブルクォート(")で囲まれた文字列式、コマンド文 字列および正規表現の中では#{式}という形式で式 の内容(を文字列化したもの)を埋め込むことができます。式が変数 記号($,@)で始まる変数の場合には {}を省略して、#変数名という形式で も展開できます。

Rubyの知らない記法などを知れて賢くなった気分になれます。

奇問集を作れば、面白そう。

受験にあたって

ネット申し込むが、かなり面倒です。

学割の申請が2日ぐらいかかるので、早め早めの行動を心がける。

対策方法

(1) 書籍購入

[改訂2版]Ruby技術者認定試験合格教本(Silver/Gold対応) Ruby公式資格教科書

[改訂2版]Ruby技術者認定試験合格教本(Silver/Gold対応) Ruby公式資格教科書

(2) 正誤表で間違いを修正

サポートページ:[改訂2版]Ruby技術者認定試験合格教本(Silver/Gold対応)Ruby公式資格教科書:|技術評論社

(3) 章末の基礎力確認問題を解き、現在の実力を知る

(4) 1 ~ 6章を読む

(5) 模擬試験を解く

(6) Webで問題を探す

ミニツク - Rubyのe-ラーニング研修システム

silver_j.md · GitHub

まとめ

Ruby技術者認定試験SilverとってRailsやろう。

AdventCalendar 超Ruby入門

はじめに

本記事は、超Ruby入門 { 大学を作ろう} Advent Calendar 2018のガイダンスだ。

各記事にコメントをしてくれる優しい方は、該当箇所まで飛んで下さい。

対象者

Ruby入門は、地方国立大学の1、2年生を対象としたものである。

なお、大学以前からコンピュータサイエンスに関心があり手を動かし既に一定の評価を受けている者ではなく

大学入学後に初めてプログラミングに触れた学生を対象としている。

周囲との意欲差に悩み不安の中、懸命に踠いている学生に進むべき大雑把な地図を示せれば幸いだ。

何をするのか

Ruby入門は、その名の通りRubyを学ぶ。

学部1回生で履修するプログラミング入門の再構築だ。

モチベーションがRubyソースコードを読みたいから発生しているので、復習のためC言語も扱っている。

入門と言っておきながら、C言語Rubyの基本的な構文は一切説明しない。

基本的なレベルが心配な人は以下のリンクを見ておくとよいかもしれない

プログラミング言語C 第2版 ANSI規格準拠

ミニツク - Rubyのe-ラーニング研修システム

なぜ、行うのか

私が高校生の頃、Moocの代表であるedxやcourseraが徐々に認知されていく時期にあった。

哲学に興味のあった私はedxでマイケル・サンデルの正義の講義の受講した。

毎週繰り広げられるレベルの高いディスカッション、考えさせられる講義。

世界最高峰の大学による講義を受けてしまった高校生が大学教育に対し、多大な期待するのは必然だろう。

肥大化した私の期待が幻想であると気がつくのに時間は、かからなかった。

穴埋め問題のような実験、議論のない講義、単位取得の有無を教授のせいにする学生。

大学のレベルが低いと言われれば、それまでかも知れないが話を聞く限り大抵の大学で同じようなことが起こっているように思われる。

勿論、優秀な学生は一定数いる。しかし、それらの学生の大半が弊大学で学ぶ内容程度を入学以前から理解しているのだ。

私に必要なものは、同レベルのモチベーションを持つ同級生か良質な講義であった。

前者に関しては勉強会を開催するなどしたが、そもそもconnpassなどを閲覧する人がいないのと私のブランド力が足りないせいもあり個人の力でやるのは難しいものがあった。

では、講義はどうかというと学生が立ち入れるには難しいであろうが不可能な領域ではないと感じる。

東京大学オペレーティングシステム大規模ソフトウェアを手探る京都大学実験を改善できるわけはないが

弊大学のプログラミング入門レベルならば改善可能ではないかと思った。

私と同じような苦労を味わっている地方の学生がいるならば少しでも貢献したいと思いと能力的な側面からプログラミング入門の再構築を行う。

なぜ、Ruby

ハッカーの方々には、申し訳ないが技術に大して興味がない。それなりに関心はあるのだろうが、自発的に論文やカーネルを眺めるほどではないのだ。

そもそも情報工学を専攻したのもBig History Projectのようなものを作りたいと思ったからだ。

教育のために技術を学んでいる。

そんな私だ。Python神、推しはRust、Matz可愛いなどというものがない。

本題に戻ろう。なぜ、Rubyなのか

教育的な面から考えると大学が目指すべき姿は、一次情報から知識を体得し、時にはその前提すら疑いながら問題の解決方法を考察できる人物を育てることにあるのではないかと考える。

であるならば、一次情報を元に講義を構築するべきであろう。

さて、一次情報の定義は曖昧だ。何を持って一次情報とするのだろうか?

極端に考えると全ての情報は、人類誕生やビックバンまで辿ることが可能であろう。

それでは、何の意味もない。

ことプログラミング言語においては公式ドキュメントが一次情報と言えるだろう。

ここでの一時情報を疑うとは、プログラミング言語自体を疑うことに他ならない。

プログラミング言語ソースコードを追う必要があるのだ。

残念なことに私には技術力がない。

RubyRHCRubyソースコード完全解説などの良質な情報がある。

教育的条件を満たし、私の利害と一致するものがRubyだった。これが理由だ。

目指すべきもの

地方では、どれくらいの技術力が求められているかすら測ることが困難である。

私が、目標にすべき対象を定めることが出来たのは運よくYahooさんのインターンに参加出来たからだ。

目標を捕捉するためには、一定の努力が必要である。

地方の学生が記事を通して、目標を見つけるための基礎力を養い興味のある分野に突き進むきっかけを与えたい。

imaharu-blog.hatenadiary.jp

謝辞

ここまで、大層なことを述べたが記事そのものの質は大学の講義レベルに現時点で到底及ばないと認識している。

原因は複数考えれるが、一番は技術力のなさだ。技術について書くというのは真の意味で理解して初めて成せる匠の技である。

他にも、文章が下手とか、カリキュラム構成が悪いとかだ。

しかし、各記事で出題している課題や情報は中々良いのではないかと思っているので気になったものを余裕のある時期にやってみるのを勧める。

各記事にコメントしてくれる方へ

若輩者の記事にコメントをしてやろうと思ってくれた方々、ありがとうございます。

近年、Qiitaでマサカリを投げるのはやめようぜ。優しくなろうぜ!という意見がありますがどんどんマサカリを投げて下さい。

本プロジェクトに関しては、教育的側面や燻っている学生を全力で励ましたいという思いを遂行する必要があり、可能な限り正確な情報を伝えたいと考えています。

とは言っても、コメントの真偽を確かめていては完遂するための時間が足りなくなってしまいます。

そこで、間違ってる場合は該当箇所のソース(Rubyのドキュメントリンクなど)を明示してくれると大変助かります。

レベル的に対応できないのでC言語は緩くRubyは、がっつり指摘してもらいたいです。

卒論の関係で修正するのに時間がかかると思いますが、それでもいいよという方はコメント頂けると幸いです。

それでは、imaharu育成ゲーム楽しんで下さい

乞食

Rubyによるデザインパターン

リファクタリング:Rubyエディション

Rubyソースコード完全解説

を読みたいがインターンを辞めて金がないので優しい人いれば‥

ほしいものリスト

Ruby合宿に行くべき3つの理由と合宿後の軌跡

Ruby合宿とは

Ruby合宿とは、学生(大学・高専・専門学校・高校等)または25歳未満(平成30年4月1日時点)の求職中を対象にしたミニハッカソンである。ハッカソンといっても、事前講義や現役Rubyエンジニアの方々が開発をサポートしてくれるため初心者の人でも気軽に参加できる。

Ruby合宿URL

1. Matzに会える

友人のFacebookプロフィール画像のほとんどが、一人もしくは二人の画像だということに気付いた。対して僕は、Twitterアイコンと同じカブトムシで圧倒的アウェイ感!!!

Facebookという貴族社会において、プロフィールの写真というのは階級を表す。

カブトムシのアイコンなんて、下人のそれと同じである。

ひねくれ者の僕が、夕日をバックに写真を撮ることができるはずもない

しかし、カブトムシは嫌だ。エンジニアという身分を貴族の方々に知らしめながらも調子乗ってるやつ扱いされない写真は何かと日々頭を悩ましている時、Ruby合宿のことを知った。

その時は、Rubyなど書いたことがなく、日本人が開発した言語であるという知識しかなかった。

HPを閲覧するとMatzさんが講演に来るらしいということがわかった。

エンジニアらしい写真!? よし、応募だ!

という経緯があって参加をした僕にとって、Matzさんに会えるRuby合宿は最高だった!

真面目な話をすると、Rubyで開発しているサービスがたくさんあり、顧客がいる。それはつまり社会に対して何かしらの正の影響を与えていることを意味するだろう。その根本を作った、Matzさんに会いたいという思いも強く、Ruby合宿に参加した。

情報工学を専攻する学生はエンジニアではなくハッカーになる必要があると考える。OSSに対して、利用するだけでなく貢献することが専門知識を身につけた情報工学を専攻した者の使命だろう。OSSであるRubyを開発したMatzさんは将来、僕が達成する必要がある目標を成した人物の一人である。Matzさんに会うことで将来なるべきハッカー像を明確にしたかったのだ。

Matzさんに会う。勿論、このこと自体に大した意味はない。

会ってどうするかが大切である。

僕は、Matzさんの講演をお聞きしてモチベーションが上がり、より勉学に励むことができた

近距離でMatzさんに会えることが出来る点がRuby合宿を勧める一つ目の理由である。

続きを読む

大学生のうちにやるべきこと10選

f:id:scratch_world:20180930223157p:plain

「大学生でやるべきこと」を検索すると成長意欲に満ち満ちている記事が数多く量産されているのが確認できます。

しかし、僕のような意識も能力もない人間がそのような活動を実行できるはずもありません。そして、大半の大学生もそうなのではないでしょうか?

凡人が真似することができる「大学生のうちにやるべきこと」を提唱したいと思います。

とくとご覧あれ!これが平凡大学生の生き様じゃ!!!

好みの白米を炊くための水分量を知る

f:id:scratch_world:20180930222728j:plain

新入生の5月ぐらいになると自炊の楽しさがわかってくる頃でしょう。

ポテトサラダ、ヒラメの煮付け、郷土料理など凝った料理に挑戦することになるでしょうが、一食の質は白米に依存すると言っても過言ではないでしょう。

白米を好みの硬さに調節できるスキルを大学生のうちにつけておくべきです。

(結局パスタか、焼きそばに落ち着くのだが‥)

定食屋で大盛りを注文する

f:id:scratch_world:20180930222748j:plain

大学4年生にもなると大学周辺の定食屋で大盛りを食べられなくなります。

老いは、思った以上の速度で進んでいるのです!

大学生は、腹一杯食べろ!

島耕作を見る

続きを読む

エウレカインターンに行っても内閣総理大臣になれない件について

f:id:scratch_world:20180917152010j:plain

多くのインターンに参加した天才である私は、ある真実に気づく。

そう、インターンに参加しても内閣総理大臣になれないということに!

いや、そんなわけはない。悲しくも人は簡単に真実を認めることができない生き物であります。

エウレカインターンもまた、そうなのです。

Pairsで有名なエウレカでAIエンジニアとして活動した2週間を通して感じたことを綴っていきます。

インターン概要

2週間のインターン

前半課題があり、合格した人のみ後半に進むことができます。

デザイナーも参加しているため、後半ではデザイナーと共にチーム活動ができる

AIエンジニア以外はな!!!

ライバルに差をつける、"学び働く" 貴重な体験をしませんか? メンターをつとめるのは、国内屈指のカンファレンスで登壇経験を持つ業界トップクラスのエンジニアとデザイナーたち。 本気のビジネスの楽しさを、この夏エウレカで体験しよう!

ともあれ、応募要項に記載されている謳い文句通りのインターンである。

参加動機と合格まで

SQLをそろそろ勉強したいと思っていた所、下記の記事を見つけた。

SQLで分析を始めた人に贈る、中級者に上がるための10のTips

記事を見て、インターンあるならSQL書きに行きたいなーと思って、検索するとありがたいことに学年不問だったため応募した。

一次面接では、地方大学ではモチベーションを保つのが辛いことや、情報工学を学べば学ぶほど限りない知によって、自分が馬鹿であることを知らしめられるみたいことを話した。

高校までは陸に足をつけ自分の場所がはっきりとわかるのですが、大学で真剣に学んでいると、広い海の中をあてもなく彷徨っている感覚に陥ります。広い海に一人ぼっちは怖いし辛い。周りに一緒に泳いでくれる人がいないため心がどんどん荒んでいく的なことを喋った気がする。

恥ずかしながら、人生相談のような面接をして頂いた。

何故か知らないが、面接を通過。

1次はSkype面接だったのだが、最終は東京に行くことに。

就職活動を通して、空港での時間の使い方が下手ということに気づき、東京に行くのは憂鬱だった。

赤羽橋という聞いたこともない駅に迷わず来れた自分を褒めてあげたいものだ。偉いぞ!

会社に訪問するまで、Pairsというサービスを知らなかったのでオフィス見学で様々な知見を得た。

出会い系とマッチングアプリの違いなどを知り、教育以外のことにも目を向けた方がいいんだなーと思った。(小並感)

そうこうしているうちに面接開始。

驚くことに、面接官はCTO。(最終日に卓球で負けたので、ドライブを覚えてボコボコしたい)

一言で言うとニートはいいなーっていう面接だった。

かなり狭く優秀層を見ている自覚はあるのですが、会うエンジニアは技術だけでなくデザインや広告、顧客とのコミュニケーションを取れる人が多く、エンジニア以外の職種がどのように生き残っていくのかを聞いたりして有意義な時間を過ごしました。

無事合格通知を頂けることに(特に技術的な話をしてなかったような‥ 印象に残ってないだけ?)

実は、福岡の屋台で常連客におでんを奢ってもらいたいという夢を叶えるため応募していた日経新聞インターンにも合格を貰っていた。

どちらに参加するか迷ったが、期間的に長い方が学べることが多いと思いエウレカインターンに行く旨を伝え、参加が決定。

待って貰ってありがたかった。

参加までにやったこと

サーバーサイドエンジニアとして、参加する予定だったのですがAIチームで参加しないかという旨のメールをもらい、二つ返事で許諾した。

しかし、研究室の課題としてPytorchとChainerでEncoder-Decoderモデルを組んだぐらいで不安しかなかったので、研究室にある本で事前学習を行った。

また、Pairsをインストールしてどのようなタスクを行うのかを予測した。

Pairsでは、相手との相性がパーセンテージで表示されているためコミュニティの相関関係などを元に推薦を行うのではないかと思っていたが、違った。

事前課題で自然言語処理100本ノックが課されてたことからこの推測が正しくないことを判断できたのだが、不安で頭が回っていなかった。

前半

前半戦の課題は、青空文庫コーパスを使って分類問題かクラスタリングに関するモデルを作成することでした。

社会人になれば当たり前にやることですが、自分で課題を設定するのが難しいということを知った。しかも、知識の少ない分野なら尚更。

必要なデータを収集するため、データ整形から行う必要があるためモデルに関する知識を深掘りせずに実装したのが、少し心残りです。

詳しい内容は、Githubに公開しているので気になった人は覗いてみて下さい。

GitHub

今なら、進化したシェル芸でpython書かなくても前処理できる気がする。

後半

何とか後半に進むことができた。

後半戦の課題は、自己紹介文の改善でした。

また、良い自己紹介の定義から行う、これまた難しい課題。

後半戦の内容は、秘密保持なんたらかんたらとかでどこまで公開していいのか難しいのですが、生データ使ってワイワイやっていました。

発表

全くもって、やってきたことを伝えることができなかった。

反省としては、プレゼン資料はチーム(2人)でフォーマットと型を決めるべきであると感じた。

前処理アイデアを五つぐらい実装したり、モデルに関しても代替案を考えていたのだが、その理由を準備していなかったため咄嗟に答えることができなかったのは、後悔が残っている。

最後まで詰めることができなかった。エンジニアとして、コードを書くだけならかなりの成果を上げたのではないかと思っているが、技術は単なる表現媒体であることを忘れ最終的なサービスへのイメージを共有できなかった。反省を次に生かしたい。

内閣総理大臣について

上記の内容は、正直どうでもいい話である。

ここからが本題です。

続きを読む

Yahooインターンはとんでもないものを盗んでいきました。それはわたしの心です。

f:id:scratch_world:20180901045727j:plain 実に危なかった、もう少しでYahooに心を奪われるところでした。

2018年冬、Yahooのインターンに参加してきました。

書こう、書こうと思っていたのですが、なかなか筆が上がらず気づけば半年経っていた。

しかし、インターンの同期が他インターンの感想を上げていたので書く気になりました。

natsuyoshy.hatenablog.com

インターンとその後、就職活動で感じたこと。

また、内定を辞退したことについて綴ってまいります。

参加動機

私がYahooと初めて出会ったのは、お馴染みYahooキッズです。

どうにか、先生の目を盗んで検索をしては閲覧禁止にガッカリするという小学生時代を過ごしていました。

その当時は、「ビーゴ」という青い謎の生命体が登場する英語教材を両親に強要されコンピュータに対峙するのが億劫だったので、全く関心がなく、Yahooが一つの企業であることすら知りませんでした。

大学で情報工学を専攻し、Yahooという企業の実態を知りました。

それでも、Yahooキッズで一番早くエロサイトを表示させるハッカソンあれば面白くね!?ぐらいのイメージでした。(今でも開いてほしい)

そんな私がYahooのインターンに参加しようと思ったのは、今書いているようなインターンに関する記事を拝見したからです。

名の知れた企業のインターン参加記事は難しいそうなことを言っており技術力に優れた人がいる印象を受けました。

弊大学は勉学に対して真剣に取り組む姿勢のない人が多く個人でモチベーションを維持していくの限界を感じ、より高い環境で刺激を受けたかったので応募しました。

Yahooのエンジニアインターンでは、様々なコースに別れているのですが私が応募した部署は金融に関する部署でした。

その時期は、Bitcoinなど仮想通貨が流行っており金融に少し興味を持ちました。

金融サービスは、セキュリティなど他のサービスより高い技術力が求められるのではないかと考え、そのレベルに達するために今の自分に足りないものを知りたいと思ったのがもう一つの参加動機です。

実際には、ビーゴとかエロサイトなどはESに書いてないです。それくらいわかるよね!?

参加まで

ESを書く→面接を一回受ける→合格する

マイナンバーとか色々事前準備(他のインターンでもそうだが、ここが一番めんどくさい)

東京に行く→赤坂見附駅で迷う→どうにか建物に到着→どこが正解かわからず再び迷う

様子を伺う多数のインターン生を見つける→到着を確認

以上。

インターン

インターン前日、東京観光をしたいと何を思ったか山手線(45km)を歩いて一周した。

東京のことは、よくわからなかったが、歩いたら疲れるということを知った。

また、歩く前にAirbnbに泊まっていたのだがフィリピン人らしき同居人にメガネを壊された。

瀕死に近い状況の中、インターンがスタート。

同じ部署にメンバーは自分を合わせて5人だった。

スーパーマン、超人格者、リア充、煽り芸人として活動を開始した人、そして私だ。

今、思うと私以外すごい濃いメンバーだ。

インターンの内容を詳しく書くと怒られるかもしれないので、軽く説明すると

プログラムを書いた。

テストの重要さ、設計が大事であること。APIの実装方法を学んだ。

他にも、チームで開発をしたため、コミュニケーションの重要性や現状の知識でチームのために何ができるのかを考えることが大切ではないかということを学んだ。

詳しく説明する。

開発は、わからなかった時などはメンターに聞くが設計から実装までインターン生で行った。

インターン生の中で、自分の技術力が最も低かったと思う。多分、周りの評価もそうだろう。

周りの発言に対して技術的にわからないことがあれば、ホテルに帰宅後、その技術について調べたりコードを書いたりしてキャッチアップを行った。

5日、実質的に実装できる時間は3.5日ぐらいしかなかったのだが、最後の方には自分のやるべきことを切り分け実装を行うことができた。汚いコードでごめんなさい。次、一緒に仕事をする時は、読んでいて気持ちよくなるコードを書けるように精進します。

目標にすべき同年代の人達と、あと学生生活が一年あるという取り返しが効く段階で出会えたことが最高でした。

もし、見てくれているならば感謝を伝えたいです。

他にも、インターンを通して人を尊敬するのを辞めようと考えました。

尊敬していると、その人に追いつけない気がします。尊敬している人みたいには、なれないの気がするのです。私は、尊敬する人達と肩を並べ同じ景色をみて一緒に仕事をしたいのです。そのための努力を尊敬していると出来ない気がします。

敬意を示すことは忘れるわけではありません。

*尊敬を憧れに置き換えた方がしっくりくる人の方が多いかも知れませんが、感覚的に尊敬の方が馴染む。

インターンに関しては、参加してYahooを好きにならない奴いるの?というぐらい素晴らしいインターンでした。

オススメ

就職

Yahooさんに内定を頂きました。

だが断る!!!

続きを読む