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

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

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

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

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

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

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

最近読んだ本

最近興味のある話題について、いくつか本を読んだのでその感想。

フォーカス

フォーカス

フォーカス

最近、人によって集中力が持続しやすい、しにくいみたいなのはどういう感じで決まるんだろうかとか、あっちこっちに集中力を使っていると疲れやすい気がするなとか、集中力について考えていたので読んでみた。結果としてはそういう情報は書いてなかったけど、いくつかおもしろい部分があった。

ひとつは集中力の分散について。なんとなく分散できるんじゃないかと思ってたけど勘違いだったみたいで、単に頑張って切り替えているだけらしい。たしかにそういわれるとそんな気はする。結構ショッキングなのは「しょっちゅう切り替えていると、一つのことに全面的な注意を注ぐ能力が落ちてくる。」という部分。ここ1年くらいしょっちゅう切り替えている自覚があるし、最近1つのことに集中しづらくなっている気もする。個人的にはもう少し1つのことに集中して成果を出したいと思ってるので、1つのことに注意を注ぐ能力が落ちないように気を付けないとなと思った。

もう一つ、注意をいろいろな対象に「分散」することが可能だと考える人もいるようだが、これも認知科学者に言わせれば、フィクションにすぎないようだ。注意というのは風船を膨らますように大きくして同時並行的に使えるものではなく、決まった細かいパイプラインを選択的に使うようなものらしい。注意を「分散」できるように見えるのは、実際には、パイプラインを素早く切り替えているのである。しょっちゅう切り替えていると、一つのことに全面的な注意を注ぐ能力が落ちてくる。

あともう一つおもしろかったのがポジティブとネガティブの比率の話。ポジティブ:ネガティブが2.9:1以上だといいらしい(高すぎると逆にダメ)。自分の比率がどのくらいかはあまり意識して考えたことないけど、どのくらいなんだろう。

何百ものビジネス・チームを分析した結果、最も優秀なチームはポジティブ感情とネガティブ感情の比率が二・九対一以上であることが分かった(ポジティブ感情にも上限があり、ロサダによれば、十一対一以上になるとチームは浮かれすぎて効率が落ちる。人間個人についても同様な比率が望ましい。

感情

感情 (〈1冊でわかる〉シリーズ)

感情 (〈1冊でわかる〉シリーズ)

自然言語処理の感情分析とか興味あって、少し手を出してみたりしたけど、そもそも感情とはなんだろうというのを考えたことがあまりなかったので、読んでみた。

生得的な感情(喜び、怒りなど)と社会・文化的な影響がある感情があることや、人が感じる感情の種類数と感情を表す語彙数との間には関連がないことなどが書いてあって、おもしろかった。

僕たちはこれから何をつくっていくのだろう

少し前に読んだ広告についての本。広告についての箭内さんの考え方や、バンドやラジオ、映像などいろいろやってきているけど、すべては広告のためにやっているというのはすごいなあと思う。

広告の話ではないけど、小田桐昭さんとの対談で出てきた故郷の話がおもしろかった。

小田桐 僕の故郷は電通なので、やはり責任感がないわけではない。電通人は日本の広告を良くすることに責任をもっています。だから若い人がたくさん入ってきてほしい。沸き立つような広告への情熱や光り輝くものを見てきたので、今も広告がそこに向かわないと自分ではとても嫌なんです。今だって、たくさん広告界への志望者はいます。なのにどうして広告の現実がこんなにみすぼらしくてつまらないんだろうって、電通に対していつも怒ってます。
箭内 「電通が故郷」ってしっくりきます。僕の故郷は博報堂です。故郷は決して土地のことだけじゃなく、大事な仲間や後輩がいて、志のある場所は故郷。広告も大きな意味では故郷ですね。

最初に社会を大きく感じた場所とか、自分自身が大きく成長できた場所が「故郷」になるのかな。それは人によって、最初に働いた会社であったり、所属するコミュニティだったり、インターネットだったりするんだと思う。じゃあ、自分にとっての故郷はどこなんだろうと考えてみたけど、今のところ「研究」になるんだろうか。今年でエンジニア5年目なので、あと1年で大学院で研究した年数と同じになると思うと、現状ではあまり故郷への貢献はできてないなぁと。

予想通りに不合理

あとは「無意識」についても気になっているので、関係ありそうなものとして読んでみた。

社会規範と市場規範の話がおもしろかった。お金の絡まない社会規範で成り立っていた話に少しでもお金が絡むと市場規範となってしまい、その後はなかなか社会規範が取り戻せないらしい。たしかにボランティアとか無償で行う行動に多少でも報酬が関わってくると取り組み方が変わってしまう気がする。

あともう一つお金関係でおもしろかったのが、冷蔵庫に現金を入れてもなくならないけど、コーラを入れておくとなくなるという話で、お金を持っていくのには抵抗があるけど、それと同等だけどモノになってしまうと後ろめたさが薄れるというのは確かにそんな気がする。おもしろいけど気を付けないとなと思う。

他には、自分の所有物を過大評価してしまうことや問題を先延ばしにしがちだとか書いてあった。



ここ最近関心のあるところの本をいくつか読んでみた。アルゴリズムを考えるときとかに還元できるといいなとは思うけど、できるかはわからない。

論文メモ:NLP2016

今年は言語処理学会に参加できなかったので、proceedingsを眺めて気になった論文を斜め読みだけした。メモ程度だけど残しておく。
来年の言語処理学会はどこなんだろ、筑波大?行けるといいな。


慣用句感情コーパスの構築および慣用句感情表現辞書の拡張
  • 単語やフレーズだけでなく、慣用句の感情表現を獲得する
  • 既存の慣用句感情表現辞書を使ってコーパスを作成し、そこから慣用句感情表現を拡張する
web上のテキストからの表記ゆれ語獲得
  • 「うーれしい」と「嬉しい」のような表記ゆれ語と正規語を教師なしのアプローチで獲得する
  • Twitterのデータに対して、区切り文字(改行文字、句読点、記号、顔文字、スペース)で分割し10文字以下の文字列を対象とする
    • 実際にデータ見ないと決められないような上手な条件設定だなーと感じた
  • 意味類似度、音類似度、ノード間類似度を利用
    • 音類似度(母音の置換と削除を無視した編集距離)というのはおもしろい
評判情報分析のための製品属性の異表記辞書の自動構築
  • 「価格」「値段」「コスト」などの属性の異表記を獲得する
  • 表(価格.comの仕様表)と製品のレビュー文から属性、属性値ペアを取得
    • レビュー文を利用することが従来研究との違い
    • レビュー文からの抽出はまだ十分ではなさそう
分散表現を用いたニュース記事の重複排除
  • 記事の分散表現のコサイン類似度で記事の重複を判定する
  • オフライン評価として記事の重複具合を評価するだけでなく、オンライン評価として記事のCTRなどでもしているのはおもしろい
文脈限定Skip-gramによる同義語獲得に関する研究
  • Skip-gramを拡張し、文脈を考慮するようにした文脈Skip-gramを利用して同義語を判定
  • 文脈としては、周辺単語の品詞、種類、周辺単語の左右、周辺単語の相対距離に依存した文脈限定関数を利用
  • それぞれの文脈を素性として線形SVMの学習
  • 正解データはWordnetの同義対データベースを利用
  • 文脈を考慮することで、抽出精度、再現率ともに上がっていてよさそう
大規模テキストコーパスを用いた因果関係の自動抽出手法
  • Webコーパスから手がかり表現と共起情報を利用して<勉強、合格>というような因果関係のペアを取得する
  • 手がかり表現と共起情報を使って特徴ベクトルを作り、TF, IDF, PMIからなるスコア関数によって因果関係を取得する
  • ヒューリスティック閾値によるアプローチでは精度が高く、再現率が低い
  • SVMを使って自動分類した場合は閾値に比べて精度は少し下がるが再現率が上がる
  • 再現率は低いけど、教師なしの閾値のアプローチで高い精度で因果関係のペアが取れるのは便利そう
検索条件のための単語分割一貫性の定量的評価
  • 検索クエリと検索対象文書で形態素解析の単位が異なると検索に失敗するケースがでてくる
  • 単語分割の一貫性を求める指標を用意して、既存の形態素解析、辞書に対して適用
  • neologd のように長い単語を固有名詞として辞書を増やしていくと、検索文書においては解析誤りは減るが、検索クエリには合わなくるので、単純に辞書の語彙数増やせばいいのではないというのは、たしかになぁと感じた。
ウェブ上のテキストの書き手の属性推定のための領域適応
  • テキストから性別、年代を教師あり学習で推定する
  • メインはドメイン適応、異なるドメインでも適応できるように、ソースドメインとターゲットドメインで特徴の分布調整や誤りを招く可能性のある特徴の削除をする
  • 属性推定は書き手の情報のみ、もしくは、閲覧者の情報のみを使うケースがほとんどな気がするので、その両方を使うとどうなるのかが気になる。両方の情報を揃えるのは大変だろうけど。
模倣学習を用いた階層的商品分類
  • 楽天の商品をカテゴリ分類する話
  • 分類には階層的分類と非階層的分類があるが、階層的に分類する
  • 階層的分類の場合、上の階層から分類をしていくが、途中で分類を誤るとそのあとの分類に誤りが伝播してしまう
  • 模倣学習を階層的分類に活用することで誤り伝播を低減する
  • Average Revenue Loss という階層構造を考慮した評価指標を使って評価
  • ベースライン(非階層的な手法)に比べてMicro F1はあまり変わっていないが、Average Revenue Lossが減少しているというのはおもしろい
Gunosyにおける言語処理応用
  • ワークショップの論文
  • Gunosyのシステム/技術の変遷が書かれている
  • パーソナライズしていた第1期と、今の仕組みのパーソナライズしていない第2期とに分かれていて、それぞれで直面した課題と対応について書かれていて興味深かった

Yahoo! JAPAN データ&サイエンスワークショップに参加した

yahoo-ds-event.connpass.com


関西であまりデータサイエンティスト系のイベントないので、参加してみた。
東京では、3回に分けてやったものをまとめてやったらしい。東京のやつのほうが内容濃くて面白そうな気もする。


内容は3公演+LT。
関西だと人が集まるかわからないので、内容も結構全体像や事例を話す感じで比較的いろんな人が楽しめるようにしているようだった。その分少し物足りなく感じる部分もあるけど、最初で手探りなので仕方ないし、深い話は懇親会で聞きましょうという感じだったのでそれはそれでいいのかもしれない。逆にLTは短いけど濃い話をする感じだった。


講演のメモ

Data Infrastructure at Scale
  • 大量のデータをどうスケールさせていくか。
  • 商用(ORACLE)やオープンソース(MySQL)、自社開発のDBなどを使っている。
  • パイプラインをKafkaに切り替えようとしている
  • ソフトウェア、ハードウェア、データセンター全てスケールが必要
    • Hortonworksとタッグを組んでHadoopの開発に力を入れている、オープンソースにも貢献
    • Open Compute Projectでハードウェア開発
爆速機械学習サービス応用
  • 機械学習の応用先: YDN、ショッピングの検索ランキング、商品レコメンドなど
  • CTRの予測では広告をだす順番も重要
  • YDNの場合、ユーザの属性、興味、ページの内容を入力として、広告を選ぶ
  • 実サービスの大変なところ
    • アイテム集合が変化する
    • 入力(興味とか)も変化
  • 数十msで応答を返すために2段階でアプローチ
    • 1stフェーズではTop-k Retrievalでざっくりとしたものを返す
    • 2ndフェーズでは高コストだが、高精度な手法を利用
なぜビッグデータが選挙の予測を可能にするのか
  • 部分一致含めると47中45都道府県の選挙結果が当たった
  • 検索数と比例区結果に相関があった
  • Yahoo検索(3年前):75億種類の検索ワード
  • Yahooのユーザ(データ)をリアル社会に当てはめていいのか
    • Netflixという検索語で検証

質問したかったけど、時間ないせいか質問の時間は基本設けられてない感じだったのが残念。
LTはメモってないけど、CTRの推定をバッチ学習vsオンライン学習で実験した話やAbuse対策の話、MySQL5.7の話とかがおもしろかった。


東京に行ってまで聞きに行こうと思うイベントや勉強会ってなかなかないけど、関西での開催だと気軽に聞きに行けるのでありがたい。
あと、今回はPCは持っていかずに、タブレットタブレット用キーワードだけで参加してみたけど、メモはある程度とれる感じだったので、これで結構十分なんじゃないかという感じが得られたのでよかった。

2016年目標

今年の目標を考えた。

  1. 中・長期的な計画を立てて実行する
    • メインの目標。
    • 去年からの継続だけど、やりことは去年のうちに決まったので、実現のための計画をたてて実行に移したい
  2. 日々のことを記録する
    • 去年の振り返りをしようとしたときに結構何を考えて何をしていたかを思い出せなかったので(別に思い出さなくてもいいのかもしれないけど)、週1回くらいは現状をどこかに記録するようにしてみようと思う。
  3. 新しいことをする
    • 具体的なことは特に決まってないけど、行ったことない場所に行ってみるとか、やったことないことをやってみるとか、何か新しいことをしてみたい。
    • 自分の興味範囲がある程度固定されてしまっている気がするので、興味範囲を広げて、自分の幅をもう少し広げたいという感じ。


今年はいつもより早めに目標を立てられた

2015年振り返り

2015年を振り返る。

目標

2015年目標 - skozawa's blog

  1. 何か発表する
    • 発表が夏頃に集中した感じだけど、5回くらい発表できた。
  2. 本読む
  3. 中・長期的な計画を立てる
    • 計画を立てるまではいかなかったけど、やりたいことは見つかった。
    • 文書の面白さを数値化したい。
    • 同じ本を読んでも、面白さとか印象に残る部分が読んだ人によって違ってくるのはなんでだろうと思っていて、これまでの経験とか感性とかによって違ってくるんだろうけど、それをもう少し具体的にして面白いかどうかを科学的、機械的に決めれないものかなーとか考えてる。今年はその下調べの意味もこめて、認知心理学だとかクリエイティビティとかの本を読んでた。来年はもう少し具体的に計画を立てたい。

振り返り

今年を振り返ろうと思ったけど、普段考えてることとかをあまり記録してないので、いざ振り返ろうとすると色々と思い出せないことが分かった。もう少し記録しておくべきかなー。

1~3月

1、2月は今年の目標である中・長期的な計画を立てるために、何をしたいかを考えてた。1年くらいだらだら考えるのかなと思ってたけど、思ったより早くやりたいことの大枠が決まった。結局大枠は決まったけど、計画を立てるまでにはいかなかった。

3月には言語処理学会に参加した。今年で8年連続の参加。来年は仙台なので難しい、9年目にして不参加になりそうだなー。
それと、直接会って会話すると話が進むもので、unidic2の一般配布について確認がとれて、Comainuを更新できたりもした。
長単位解析器Comainu 0.71をリリースしました - skozawa's blog

4~5月

この時期はよく覚えてないけど、認知心理学あたりの本を探して読んでた気がする。

6~8月

はてなエンジニアセミナー、Elasticsearch勉強会、YAPC::Asiaと発表ラッシュという感じだった。

中でも、YAPC::Asiaで発表することになるとは思ってなかった。初参加だったけど、いい会議だなーと感じた。

あとは原稿も少し書いたりしてた。久しぶりの執筆業という感じだった。

9~12月

なんか忙しいというか負荷が少し高かった気がして、常に複数のことをやってるみたいな感じだった。最近はましになったのか、単に慣れたのか大丈夫になった。なんでこんなに疲れるんだろとか考えてて、よくわかってないけど、集中し始めるタイミングで割り込みが入ると疲れやすいんじゃないかという気が漠然としてる。

あとは、学生のときに研究関連で使っていたサービスを7年くらい前に引き継いで、今も保守とかしたり、最近たまに開発の依頼とかがきて少し触ったりしてるけど、開発しづらかったので、フルスクラッチをし始めた。3か月くらいちまちまと開発してきたけど、ようやく完成に近づいてきたのでほっとしてる。

まとめ

去年までいろいろと考えたおかげか、今年は割合いろいろなことを考えるというよりかは、一つの方向に向けて考えを深める感じで過ごせた気がする。目標にしてたこともある程度できたし、振り返るとよい年だったのかなと思う。

Semi-supervised Sentiment-aware LDA

NAACL 2015の論文のLCCT: A Semi-supervised Model for Sentiment Classificationを読んだ。メモと気になった部分を軽く実装して試してみた。

感情分析で、コーパスベースのアプローチと辞書ベースのアプローチでco-trainingする話。
コーパスベースのアプローチだと、精度は高いが再現率が低い。逆に辞書ベースのアプローチだと再現率は高いが精度が低いのでこれを解決したいというもの。

f:id:skozawa:20151103174901p:plain


ドメインに依存しない汎用的な素性をコーパスベースのアプローチで取得し、ドメインに依存するような素性は辞書ベースのアプローチでカバーする。
ドメイン依存の単語はSemi-supervised Sentiment-aware LDAというアプローチを使って獲得する。ポジティブ、ネガティブ、ニュートラルの3分類でそれぞれに対していくつかシードを与えてることでドメイン依存の単語を獲得して、これを素性として利用。

Semi-supervised Sentiment-aware LDA

半教師ありLDAは使い勝手よさそうだなーと感じたので、適当に実装して実験してみた。
LDA部分については以下の論文のほうがより詳しかった。

ギブスサンプリングで適当な新聞記事を入力として試す。
シードとしては単語感情極性対応表の0.95以上の単語をポジティブのシードとして、-0.95以下の単語をネガティブのシードとして使った。

結果としては、

  • ポジティブの上位50単語
    • 優等、高見、気品、栄誉、腕前、思いがけない、縁起物、プライド、褒める、ノミネート
    • 栄冠、絶賛、OK、定評、名画、顕彰、佳作、快い、歌人、名手
    • 天才、殿堂、マドンナ、志す、功績、男らしい、味わい、淵、祐、神様、キング
    • 歓声、エール、大作、ロング、傑作、名門、鍛える、感激、温、チャリティー
    • いける、大城、ひろい、好き、治虫、きょうだい、ゴマ、切り取る、入来、ルーキー
  • ネガティブの上位50単語
    • 汚水、凍死、持病、汚れ、陥没、天災、絞殺、病巣、悪性、ダメージ
    • 症例、腫瘍、因果、泥、難易、病死、寒、発熱、害、伝染、排水
    • 重症、渋る、恐喝、荒天、損壊、吸入、ひき逃げ、かもめ、配属、谷間、冨
    • 日食、鋼材、宮野、大寒、七キロ、中ごろ、名勝、杉田、参与、磯村
    • バレリー、こびりつく、行商、領海、受、内臓、はがす、値ごろ、吉井、転覆
  • ニュートラルの上位50単語
    • SACO、チベット、START、康男、エム、アキア、文民、ガンジス、一億四千万、上程
    • 破局、ブラウン、予期、低落、並立、新株、カブール、穀物、建国、復党
    • BIE、出方、断交、ドイモイ、激甚だ、待ったなし、クレムリン、右派、六十億、アパルトヘイト
    • 玩具、相殺、画定、戸籍、元金、線引き、綱渡り、天安門バサエフ、論調
    • 大詰め、開廷、内需、越年、肩上がり、制圧、対案、引き合い、見いだせる、抑圧

データセット適当だし、チューニング特にしてない割には結構いい感じに取れてる気がする。
ちゃんとシード整理したり、チューニングしたりしたら結構よくなるんじゃないかという期待が持てる感じだった。