はてなを退職しました

正式には2017年10月15日付での退職ですが、9月29日が最終出社日でした。
はてなには2012年4月に新卒で入社して5年半、濃密な時間を過ごさせてもらいました。大変お世話になりました、ありがとうございました。

はてなでの5年

はてなでは、アプリケーションエンジニアとして5年半過ごしました。はてなブログはてなブックマークMackerelMiiverseBrandSafe はてな家電会議PINGAなどなど、C向け自社サービスから、B向け自社サービス、受託まで、多くのサービス開発に関わりました。はてなのエンジニアの中でも関わったサービス数は多い方でいろいろと経験させてもらいました。

最初の2年くらいは、はてなブログMiiverseはてなスペースMackerelと、いくつかのプロジェクトに関わり、エンジニアとして少しずつ成長させてもらいました。この2年でコードの品質やWebの知識など、多少はまともなエンジニアになれたんじゃないかと思います。

その次は、はてなブックマークで2年くらいテックリード*1(当時はそういう役割はなかったけど)として開発しました。ちょうど10周年のタイミングだったので、10周年企画をやり、そのいくつかを担当しました。中でも、トピック機能や関連記事機能は開発していて楽しかったですし、YAPC(前夜祭)やはてなエンジニアセミナーでも発表してよい経験になったなと思います。

最後のほうは、家電会議のリリースをしたり、PINGAのリニューアルをしたり、BrandSafe はてなのリニューアルをしたりしました。

他には、シニアエンジニアをさせてもらい、特に何かをしたわけではないですが、エンジニアのキャリアを考えたり、組織について考えたり、少し違う角度からエンジニアについて考えれたのはよかったです。

はてなに入ったときはまだ上場前で、今より人数も半分くらいだったので、そこからだんだん会社っぽくなっていくところを中からみれたのは良かったなと思います。といっても、上場で変わったことはそんなになく、総じて働きやすい環境で、周りの人たちも優秀だし、技術に対する理解もある会社なので、はてなで働けて良かったなと思いますし、Webアプリケーションエンジニアにとって魅力ある会社だと思います。

次の5年

5年というのを1つの大きな区切りと考えていた(博士 前期+後期の期間という意味合い)ので、昨年末あたりから、次のことを考え始めました。

5年前を振り返って、やりたいことが変わったかというと、あまり変わっていなくて、研究成果(最新である必要はない)をサービスにいれてエンドユーザに届けたい、それにより新しい価値が提供できるといいなと思っています。あと最近は、テキスト・データとユーザの行動・思想をつなげることに興味があったり、文章の質や面白さに興味があります。

これをはてなで出来ているかというと、少しは出来ていますが、専門性(自然言語処理)を活かすよりは、純粋なWebアプリケーションエンジニアとして働くほうが貢献度が高いので、やりたいこととビジネスモデルがあまりマッチしていないなーという気がしていました(あくまで主観ですが)。アプリケーションエンジニアとして、はてなに貢献していくイメージはある程度つきますし、数年後には今の状況も変わりそうにも見えるので、はてなに残るという選択肢もありましたが、自分なりの1つの区切りだったのでわがままを言って、別の環境に行かせてもらうことにしました。


ということで、次ですが、2017年10月16日より Gunosyのデータ分析部で働かせてもらいます。
「情報を世界中の人に最適に届ける」という理念や、データ駆動でありデータ分析が強いこと、また最近ではクリックベイト対策などの研究開発もしていることなど、はてなとはまた違った環境なので、いろいろと楽しみです(もちろん新しい環境への不安もありますが)。

おわりに

はてなの皆様、5年半の間、お世話になりました、はてなで働くことができたのは本当によかったと思っています。ありがとうございました、そして、今後ともよろしくお願いします。

PyCon JP 2017に参加した

PyConJP 2017に参加してきた。トークを応募していたので、本当はトークできたらよかったけど、落ちてしまったので、聴講のみの参加。


聞いてある程度覚えているものを。

  • 野球を科学する技術〜Pythonを用いた統計ライブラリ作成と分析基盤構築
    • slide
    • 野球の分析をするために、scrapy, Airflow, Jupiterなどを使って、分析基盤を作った話。分析基盤の話が半分、野球の話が半分だった。
    • 結構な分析基盤をちゃんと作っていてすごい。分析基盤の方に興味があったけど、思ったよりさらっと話していた。Airflowが気になったのだけど、ブログを見てという感じだった。scheduler, workerをGUIで管理できるらしくて良さそうだけど、設定はやや複雑だったり、依存ライブラリがかなり多いらしい。
  • 機械学習におけるデータの再現性について
    • slide
    • 機械学習タスクを複数人で取り組むと、再現性が問題になる。実験の再現性はデータの再現性に縛られるので、ちゃんとデータの再現性を担保したい。そのためにはコードでデータの取得ができるようにしておけるとよさそうなので、そのためのツールを作ったという話。ツール部分はサブで、メインは問題提起をしたいとのことだった。
    • 問題にしている部分はすごく共感できる。データのバージョン管理とかしてるのかと思ったけど、その部分はこれからみたいだった。
  • SREエンジニアがJupyter+BigQueryでデータ分析基盤をDev&Opsする話
    • slide
    • データ分析基盤とデータ分析の文化についての話。いろんな要望に応えていったら、システムが複雑になり、エンジニアチームの負荷も大きくなってしまったので、モデルとビューをちゃんと分離して、分析基盤を作った。ビューは部署ごとに適切なものを用意。
    • 今回のPyConJPで自分が聞いたなかでは一番面白い発表だった。現実と向き合いつつ、着実に分析基盤とそれを活用する文化を作っていくすごくいい話だった。


PyConJPは3年ぶり2度目の参加。思ってたより初心者向けの解説的な発表が多かった気がする。

言語処理学会に参加した

筑波大学であった、言語処理学会第23回年次大会に参加してきた。参加したのは2日目と3日目。


聞いてある程度メモをとれたものを残しておく。徐々にメモするの疲れてきて3日目のはあまりメモとれてない。

  • 『現代日本語書き言葉均衡コーパス』への情報構造アノテーションの構築
    • BCCWJに対して、情報状態、定性、特定性、有生性、有情性、動作主性、共有性の7つの情報をアノテーションした。
    • 意味まで踏み込もうとすると、こういった情報が必要になってくるんだろう。アノテーション自体はすごく難しそうな印象だった。
  • クラウドソーシングによる関係知識のアノテーション
    • XとYにおける活性化関係(促進、抑制)をアノテーションする。Xを固定して、Xに対して促進する、促進させる、抑制する、抑制されるという4つの関係となる、体言もしくは用言を文書中から選択してアノテーションする。クラウドソーシングを利用してアノテーションするが、分類のようなタスクとは異なり、完全一致ではないため、ダミーの質問を利用した単純なクラウドワーカーの見極めができないため、別のページに遷移させて、アノテーションの文字単位の一致度をみて閾値以上のアノテーターには正解のパスフレーズを提示するというアプローチをしている。
    • 部分一致とか、複数解が許容されるようなタスクになると、当たり前だけどクラウドソーシング使うのも結構大変なんだなと感じた。体言、用言混ぜてやっていたけど、一旦、体現だけにして問題を簡単にしてやってみてもよかったのかなと思った。
  • PDFAnno: PDFドキュメントのための言語アノテーションツール
    • PDFをテキスト化したあとにアノテーションしようとすると、構造などの情報が失われて、アノテーション作業の効率が下がるため、PDF自体にアノテーションするツールを作成。PDFにアノテーションしてから、テキストに変換する。
    • 学生のときにpdf2textとかでPDFをテキストにしてからアノテーションしたりしてたので、気持ちが分かる内容だった。構造とか残せるといいんだけど、やっぱり技術的に難しいんだな。
  • Simple PPDB: Japanese
    • 難易度を付与した大規模な辞書を生成。難易度が4段階、6段階で付与されている辞書の語を使う。難易度を3段階に簡単化して学習データとし、頻度、文字種、単語長、CBOWなどを素性として利用して7割程度の精度で57万語に対して難易度を付与した。この辞書と既存の言い換え表現辞書を利用して、文を平易化した。言い換え表現辞書にノイズがあるため、誤ることもあるが、言語モデルと併用すればよくなる予定とのこと
    • 公開されているらしいし、大規模な難易度辞書は使ってみたい。初心者単語はほとんど既存の辞書にカバーされているらしく、辞書外の単語の性能は高くないとのことだった。既存の辞書の難易度って教科書とか教育がベースになってると思うけど、特定分野の難易度の判定もできるのかが気になる。
  • データ拡張による感情分析のアスペクト推定
    • 分類問題にLSTM, CNNなどを適用しようとするときに、データサイズが少ない問題をデータ拡張により解決しようとした場合に、どのような拡張の仕方がよいかを実験したもの。類似度、シソーラス、ルールベースを試し、データサイズを同じにした場合はシソーラスの性能がよかったという結果。
    • ルールベース、シソーラスだと文脈は壊れないが、拡張される数には限度がある、一方、類似度は文脈は壊れるが、ルールベース、シソーラスよりもサイズを大きくできる。実験ではルールベースに合わせて、3.5倍くらいのサイズでやってシソーラスが良い結果となっていたが、類似度で10倍のデータサイズにしたほうが結果がよくなっていた。文脈守ってちゃんと作るよりも、多少文脈壊れてでもとにかくデータサイズ増やしたほうがよいということなのかな...もちろん、解きたい課題とアルゴリズムによるんだろうけど。サイズごとの性能をグラフ化し、サチり具合みれるとよかったなと思った。
  • キーワードに基づくニューラル文生成のためのリランキング
    • 動詞1つと名詞2つの3つのキーワードから文を生成する。Encoder-Decoderだと未知語に対応できないので、Propositional Unknownモデルを利用。生成した文をJaccard係数でランキングすると、同じ単語を複数出力する文を高く評価してしまうので、重複単語を考慮したランキング手法を使う。
    • 必ず3つのキーワードを含むという制約にしてはダメなのかなと思ったけど、言い換えてよい文が生成されるならよいのかな。キーワードから文生成できると要約とかでも使えそうでよさそうだなと思った。
  • テーマをもつ観光地グループの自動生成
    • 観光地+都市名、観光資源+都市名で検索し、固有名詞を抽出、共起頻度を計算することにより観光のテーマを抽出する。テーマとテーマに関連する観光地グループを生成。
    • 手動でNGワード用意したり、表記揺れに対応したりしていて大変そうではあったけど、こういうのをブクマの地域ページでできるといいのかなと感じた。
  • Sentiment Analysis with Eight Dimensions for Emotional Chatbots
    • りんなとの会話を感情分析した話。感情は8カテゴリ。8カテゴリ1000語(顔文字も含む)を用意し、Character-level RCNNで学習。
    • りんなに対する発言と、りんなの発言を感情分析していた、割合をちゃんと覚えてないけど、りんなの発言にも怒りが1割程度あらわれていて、りんなは優しいとは限らないらしい。
  • 賛否表明パターンと行列分解に基づく賛否モデリング
    • Aに賛成する人はBにも賛成すると仮定し、情報推薦の問題と同様にして、賛否の問題を協調フィルタリングで解いた。賛否のデータはTwitterの賛否ハッシュタグを利用して収集。
    • 情報推薦と同様の問題設定にして解くのはおもしろかった。
  • レビューテキストの書き手の評価視点に対する評価点の推定
    • 総合の評価点ではなく、評価視点ごとに評価点を推定する。レビュー全文ではなく、評価視点に対するコメントのみを利用して評価。評価視点は楽天トラベルの6つ(サービス、など)を利用。コメント抽出では、評価視点と、その類義語、さらにそれらキーワードを含むレビュー記事から頻度上位100、それと並列する単語を利用し、F値で8割程度。抽出したコメントを利用して各評価視点に対する評価点を推定。
    • コメント抽出に利用する単語があまり多くなかったのでカバー率が気になったけど、精度重視と言っていた気がする。
  • 日本語における筆者の性格推定の取組み
    • Twitterの発言から性格を推定する。正確はビッグファイブ理論というのが有名らしくそれを利用している。
    • すでに公開されているのでやってみると面白そう。
  • 単語分かち書き辞書 mecab-ipadic-NEologd の実装と情報検索における効果的な使用方法の検討
    • neologdにどうやって新しい単語を追加しているかという話。ベンチマーク問題を作成して、性能を測りつつコスト調整をしながら、新しく単語を追加したときに既存の単語分割がおかしくならないように調整しながら追加をしている。検索ではneologdだけを使うのではなくて、他の辞書も使ったインデックスも用意して重みづけをしつつ検索する。
  • 辞書情報と単語分散表現を組み込んだリカレントニューラルネットワークによる日本語単語分割
    • RNNによるBIOタギングをして単語を分割する。RNNの学習時にunigram, bigramといった表層情報だけでなく、対象の文字から始まる(終わる)単語を辞書から検索して素性として利用する。
  • 分散表現を用いた語の上位下位関係の学習―Lexical Memorizationの緩和―
    • 上位語の頻度にばらつきがあるのと、関係性を学習してくれず、特定の上位語を学習してしまう問題に取り組む。 上位語の頻度が偏らないようにして学習 。
    • Lexical Memorization 知らなかったけど、本質的な課題を解こうとしていて面白かった。ちゃんと論文読んでみよう。
  • 定量調査のための意見調査コーパス構築への取り組み
    • 不満買取センターを作って、不満を書いとる。単語レベルだとわかりづらいので、格関係を取り出し、不満調査のサポートをする
    • 今後ビジネスにつなげていくらしい。どのくらいのお金かかったのか聞けばよかったな。
  • 招待講演 : 認知言語学---言語科学の静かなる革命
    • チョムスキーの文法理論では限界があるので、認知言語学が生まれてきたという話や、言語能力には認知能力と運用能力が重要といった話や、あとは用法基盤モデルや参照点能力、スキーマユニットといったキーワードについての話があった。1時間と限られた時間ですごい勢いで話されてたのでキーワードを拾うのが精一杯という感じだった。とにかく作ってきた資料を読みましょう、論文集買ってくださいという内容だった。もう少し丁寧な説明のある招待講演だと思ってたので、イメージとは違ってた。


2年ぶりの参加、久々の学会だったけど楽しかった。文生成の現状をあまり知らなかったので、Encoder-Decoderやその派生のモデルについて知れたのはよかった。気になるものの論文を事前に読んでいけるとよかったけど、できなかったので、気になったものについては論文も軽く読んでみよう。

来年は岡山での開催、微妙な距離感。

論文メモ: Linguistic Benchmarks of Online News Article Quality

ACL2016 の論文 Linguistic Benchmarks of Online News Article Quality を読んだのでメモ。
自分がやってみたいと思ってることに近いことをやっていて面白い。

概要

オンラインニュースの質を測れるかを検討した論文。質という1つの指標で表すのではなく、質に関係する14の指標を用意して評価する。14の指標に対して、専門家がニュースに対して5段階評価でそれぞれ点数をつけたコーパスを作成。14の指標と質との関係を分析し、ベンチマークとして質を予測できるかを調査。

質を測るための指標

5カテゴリ、14の指標を用意。

  • Readability: 読みやすさ
    • Fluency: 流暢さ、文が意味的につながっているか
    • Conciseness: 簡潔さ、冗長でないか
  • Informativeness: 情報量
    • Descriptiveness: 描写性、タイトルが内容をどの程度表しているか、釣りタイトルじゃないか
    • Novelty: 新規性、平均的な読者が知らない情報が含まれているか
    • Completeness: 網羅性、適切な情報量か、満足できる情報量か
    • Referencing: 参照性、外部ソースへの参照がどの程度か
  • Style
    • Formality: 形式性、ガイドラインに沿っているか、句読点や文法のルールに従っているか
    • Richness: 豊かさ、語彙が多様で面白いものか
    • Attractive: 魅力的なタイトルか
  • Topic
    • Technicality: 専門性
    • Popularity: 需要、記事の内容に興味がある読者の数
  • Sentiment
    • Subjectivity: 主観性
    • Sentimentality: 感情性、どの程度ポジティブ、ネガティブか
    • Polarity: 極性、ポジティブかネガティブか

コーパス作成

Yahoo! Newsから記事をクロールしてきて、15ジャンル1043記事を収集し、その中からサンプリングして561記事を抽出。561記事に対して、10人の専門家が14の指標と質に対して5段階評価する。1記事は専門家の中の1人と著者の中の1人によって評価される。アノテーションの質を保つため、1日10記事までに制限。一致率は62.1%、1ポイント差以内は65.5%、2ポイント差以内は96.6%

分析結果など

分析結果として、completeness は質と相関性が高い、Polarityは相関性が低いことが分かる。
Generalised Linear Methodを利用して、14の指標を使って質を予測した結果、Completeness, Fluency, Richnessが質に影響が大きかった

感想

最近、文章の面白さについて考えていたけど、結構自分が考えていた要素と似ていて、おもしろかったし、ちゃんと研究したくなった。関連研究にも面白そうなの多いし、読んでみたい。あとは、アノテーションの質のために、1日10記事までに制限するのはおもしろいなと思った。

2017年目標

今年の目標を考えた。

  1. 手を動かす、行動する
    • 去年は考えることが多い1年だった。それはそれで視野を広げられた気がするのでよかったけど、何もできなかった感がどうしても出てくるので、今年はもう少し実行性を高めていきたい。中長期的にやりたいことももう少し整理しつつ進めていきたい。
  2. 自己投資
    • もともと物欲とかあまりないこともあって、特に何も考えずに過ごすとあまりお金を使うことがないんだけど、もったいない気もしてるので、食やら娯楽やら環境やら、自分のためになりそうとか、楽しめそうものには意識的にお金を使っていくようにしたい。関係ないけど、そろそろ引っ越したい気がする。
  3. 次の5年
    • 今後の5年を考える。考えるといっても既に大体の方向性は決まっているので、どういうタイミングで、どういう環境で何をやるべきかみたいなことを考えつつ、環境を整えていきたい。


今年1年は重要な気がしてるのは頑張りたい。

2016年振り返り

2016年を振り返る。

目標

2016年目標 - skozawa's blog

  1. 中・長期的な計画を立てて実行する
  2. 日々のことを記録する
    • だいたい週1で記録することができた
    • 1年振り返ってみて、クリエイティブなことが全くできてないことが分かって反省、来年は頑張ろう。
  3. 新しいことをする
    • 特に何かできたわけではないけど、なんとなく興味範囲は広がったのでよしとする。

振り返り

1年通してモチベーションなかなか上がらないし、ぱっとしない1年だった。今年はエンジニアとしてはほとんど成長できなかった気はするけど、組織やらビジネスやら、少し周辺のことを色々考えて幅を広められた気がする。それにしても一度糸が切れてしまうと、それを元に戻すのは難しいんだなと感じる年末だった。


さて、もうすぐ今の仕事をして5年になる。院生として自然言語処理の研究を5年、WebエンジニアとしてWebサービス開発を5年。ちょうど次のことを考えるいいタイミングなのかなと思ってぼやぼや考えてる。同じ道を進むか、前の道に戻るか、少し角度を変えてみるか、はたまた全然違うことをしてみるか。何かしらテーマを持ちつつ進みたいなーと思いつつ、どういう方向性があるか考えてるものの特に決まってないので来年また考える。

エンジニアの立ち居振る舞い: ボトルネックを作らないように

お題「エンジニア立ち居振舞い」

僕が意識しているエンジニアの立ち居振る舞いは、チーム開発におけるボトルネックをなるべく発生させないようにすること。

エンジニア、デザイナー、企画、ディレクターなどがいるチームで開発していると、エンジニアリングやサービス仕様の側面で困りごとが発生することがある。
例えば、

  • チームのエンジニアが仕様や設計について困っている。
  • チームのエンジニアがレビュー待ちでタスクが進めづらくなっている。
  • デザイナーの開発環境でエラーがでたり、gitの操作で困っている。
  • 企画、ディレクターなどがエンジニアリングに関して相談がある。

比較的チームに長く在籍していて、サービス仕様などに詳しいということもあるけど、こういったエンジニアリングにおける困りごとをなるべくすばやく解決できるようにして、待ち時間を短く、チームの開発効率を上げようとしている。あとは、一人でできるタスクよりも複数人が関わるタスクを優先するとか。
他にも、Githubやslackとかに何となく書かれた質問に対してもすばやく回答して、メンバーが困っている時間をなるべく少なくするようにしてる。タスクを進めるうえでボトルネックなくスムーズにタスクを進められることは気持ちよく仕事をする大事なポイントの一つな気がしていて、質問に対して30秒後に回答が返ってくるのと、1時間後に回答が返ってくるのではタスクの進みやすさも違ってくる気がする。

特定の行動や習慣というわけではないかもしれないけど、普段意識していることでした(エンジニアとしてというよりエンジニアディレクターとしてというほうが少し強いかもしれない)