こんにちは。 DSOC R&D グループの高橋寛治です。
この記事は Sansan Advent Calendar 2019 - Adventar の初日の記事です。 ゆるい記事にお付き合いいただけると幸いです。
Sansanの社内制度の一つに、書籍・資料の購入支援を行う Geek Seek Book があります。 本制度は、専門知識や技術を要する社員を支援する制度であり、書籍は年間6万円まで購入が支援されます。Geek Seek制度については、こちらの記事でも紹介されています。 しっかり読みたい本から、辞書的に部分的に読みたい本まで、気軽に購入することができる良い制度です。
さて、今回は、この一年間に、Geek Seek Book制度を利用して私が購入した約6万円分の書籍について、ざっくばらんに紹介します。
(紹介することでまだ読めていない箇所を読むことも期待して・・・)
なお、書籍のリンク方法はその先の情報によって異なりますので、予めご了承ください。
書籍の紹介
単に書籍の概要を紹介するのではなく、購入の動機や読んで考えたことをお伝えします。
コード・システムの品質についての書籍
気づけば入社3年目となり、デプロイしたサービスのメンテナンスが少しずつ負担となってきました。 何が負担なのか少し考えてみると、不十分なテストや切り分けづらい機能など、いわゆる負債*1となっているのではないかと思い当たりました。 テストを書けば、コードを切り分けられ、メンテナンスもしやすい、という魔法の文言に引き寄せられ、テストに関しての本を読んで実践することとしました。
普段は、Pythonを書いていますので、まずは実践しようと考え、「テスト駆動Python」を読み進めました。 www.shoeisha.co.jp
こちらの本には、pytest を用いた実践的なテストの実装について具体的に紹介されています。 機械学習を組み込むシステムにおける必要なテストとは何かを考えながら実装を進めていました。
テストを実装する内に、テスト駆動開発とはどういった意義があるのか、という原点が気になり出しました。 そこで手に取ったのが界隈で有名な「テスト駆動開発」と呼ばれる本です。 www.ohmsha.co.jp
実装においてどういったテストが必要なのか、なぜテストをし何を防ぐのか、といったことについて丁寧に説明されています。
ただ、半年前に自分が書いたコードを修正しようとしても、なんだかメンテナンスしづらいコードになっているな、と感じました。 どうすれば技術的負債になりにくいのか、という観点で読もうと思い「レガシーコードからの脱却」を購入しました。 www.oreilly.co.jp
まだ、あまり読めていませんが、レガシーコードからなるべく遠ざかるよう努力したいと思います。
機械学習アルゴリズムの実装についての書籍
何らかの機械学習に関するアルゴリズムについて知る際に、概念を知り、実装を動かし、数式を読み、知識として吸収しています。 数式をしっかり読み解き、その意味や意図を正確にくみ取ることは、私にとってはまだまだ難しいことです。
コードとして記述することで、数式をコードに落とす方法や、そもそも数式を自分がどれくらい読めるのかということがわかります。 普段よく耳にするアンサンブル学習アルゴリズムについて、実装して理解を深めたくなったので「作ってわかる! アンサンブル学習アルゴリズム入門」を購入しました。
この書籍やOSSのコード、昨年購入した理論に関する本*2を読みながら、実装して勉強しました。 実装していると、「こんな簡単なアルゴリズムで性能出るのか?」と不安に思いますが、実に高い精度の推定を行います。 アンサンブル法すごいですね。
部署内で PyTorch について深く知ろうという動きが起き、「現場で使える!PyTorch開発入門 深層学習モデルの作成とアプリケーションへの実装」を使ってランチ勉強会*3をすることになりました。
PyTorchを用いてCNN や RNN による分類を始めとして、深層学習の基本的なモデルの具体的な実装について勉強することができました。 昨年読んだ「ゼロから作るDeep Learning 1/2」では行列演算以外スクラッチでの実装で大変でした。 深層学習フレームワークがいかに強力かよくわかります。
フレームワークを適切に用いることで、機械学習プロジェクトのレガシー化を少しでも防げるのではないかと思います。
自然言語処理の知識の幅をひろげるための書籍
業務では、自然言語処理の中でも辞書整備や固有表現抽出に取り組んでいます。 学生時代には表記ゆれを整備する解析器や形態素解析器を開発していました。 形態素解析は奥深い研究領域であると感じています。 手法自体の難しさや、手法を有限のメモリでかつ現実的な時間で動作させるための実装テクニック(データ構造)など多岐にわたります。 現在広く使われているMeCabの作者のかたが書かれた「実践・自然言語処理シリーズ 第2巻 形態素解析の理論と実装」は非常におもしろいです。
また、形態素解析と近しい技術に日本語かな漢字変換があります。 かな漢字変換は候補を人間が選べるという、自然言語処理タスクの中でも少し変わっています。 そんなかな漢字変換や、そもそもテキストをコンピュータでどう取り扱うのかを「日本語入力を支える技術 ―変わり続けるコンピュータと言葉の世界 WEB+DB PRESS plus」で明快に説明されています。
そして、形態素解析で単語に分割した結果から、何か洞察を得るのがテキストマイニングです。 テキストマイニング自体は私はほぼ経験が無く、学会でいつも指をくわえてみていました。
自分の自然言語処理技術の幅を広げたいなと思い、「Rによるテキストマイニング」を読みました。 www.oreilly.co.jp
実際に少しだけRに入門してみました。 はじめてRを利用しましたが、TidyTextの独特ですが取り扱いやすい形式や、集計可視化のしやすさには驚きました。
テキストマイニングでさらに具体的なクチコミに関するシステムの本があります。 「クチコミ分析システムの作り方 実践・自然言語処理シリーズ」ですが、どういった手順やどういった切り口で分析するのかを具体的に説明されています。
実践・自然言語処理シリーズ 第6巻 クチコミ分析システムの作り方
同僚の深層学習勢が、自然言語処理を勉強したいということで、社内勉強会で使った本が「自然言語処理のための深層学習」です。
深層学習メインの本かと思いきや、自然言語処理全般にわたり説明されており、分野外の人にとってとっつきやすい本となります。
データサイエンス系書籍
データサイエンス系というのが何を指しているのか、実は私もよくわかっていませんが、訳もわからずデータサイエンス系とまとめました。
怠惰な私はKaggleに打ち込めていませんが、周りのKagglerから特徴量の作り込みについてしばしば話を聞きます。 ある師匠ととあるコンペティションにおいて、スタッキングのためにいろいろな特徴を作っていた時には、Kagglerの技術力の深さを肌で感じました。 そんなKagglerが執筆された「Kaggleで勝つデータ分析の技術」は精度向上のための教本とも言えます。
自然言語処理畑で育った私は、入社してKagglerに出会うまで、ブースティングやスタッキングといった手法を全く知りませんでした。 こういったものが書籍で手段として学べるというのは非常に魅力だと思います。
変わり種で、線形代数を再度勉強しようという動きが発生し、社内勉強会を行いました。 そこで使ったのが「線形代数セミナー: 射影,特異値分解,一般逆行列」です。
一度、線形代数を勉強した人が、深い理解のために再度読む本と言えるでしょう。 理路整然とした説明が並び、その一語一語に意味があります。 式展開をし議論しながら、2ページ1時間ほどかけて読んでいました。
上記の本は厳密に書いてあり読むのが本当に大変ですが、さくさくと読める数学の本もあります。 興味本位で買ってみた「物理数学の直観的方法 〈普及版〉 理工系で学ぶ数学 「難所突破」の特効薬 」です。
学生時代の数学は、この本を読んでから勉強したかったと思ってしまいました。
次の3冊は辞書的に使おうと思って買った本です。自分が直面している課題に近いものを目次から探し、参考としています。
次の2冊は・・・積ん読となっています。
時系列分析と状態空間モデルの基礎: RとStanで学ぶ理論と実装
「しくみがわかるベイズ統計と機械学習」は最近購入したものですので、そろそろ読み始めます。
そのほかの書籍
分野関係なく興味で購入した本です。 日々の研究開発でUIまで考慮するということはあまりないのですが、開発したアルゴリズムをどうすれば使ってもらえるのかと、時々考えにふけります。 アルゴリズム系ではないですが、使ってもらうということのヒントとして気になった「「ついやってしまう」体験のつくりかた――人を動かす「直感・驚き・物語」のしくみ」を読みました。
人はすき間を埋めたくなる、といったように人間の普遍的だと考えられる性質と、プロダクトでそれらがうまく取り込まれた例を挙げながら明快に説明されています。 これも、サクサク次のページをめくってしまう本です。
次の本は、「複雑ネットワーク : 基礎から応用まで」です。
R&D Groupの別チームには複雑ネットワークの専門家がいます。 少しでも複雑ネットワークの知識を身につけ、自然言語処理と掛け合わせて複合的に何かできないかと考え、読み始めました。 基礎が書かれているため、まずはこれを読むという安心感があります。
最後の一冊は積ん読です。 「サイバーセキュリティ レッドチーム実践ガイド」という本を題材にした社内勉強会に参加しようとしていましたが、入院などで参加できず仕舞でした。(いつか読もう・・・) book.mynavi.jp
気軽に書籍を買えるのはいい
一年で購入した書籍を振り返ってみると、自分としては、思っていたより多く読んでいると感じました。 気軽に書籍を購入できることで、少し分野外の技術書や辞書的に用いる書籍を手に取ることができます*4。
精読は難しいですが、どこに何が書いてあったかや、ある技術を用いることで何ができるのかを抑えられるのは、有効だと考えています。
さて、来年のGeek Seek Bookでは何の本を購入するのか、少し考えているところです。 (積ん読は消化しましょう)
関連記事のご紹介
*1:レガシーとも呼ばれる。レガシーと言えば加畑さん。 https://buildersbox.corp-sansan.com/entry/2019/10/23/110000
*3:数名以上で集まって技術に関する勉強会を行うことで、食事の補助が出る制度があります。それを活用して様々な勉強会が開かれています。
*4:Twitter上でおすすめされている本や大型書店の技術書コーナーで気になった本もふらっと購入できます