2022/09/22に開催された「みんなのPython勉強会#85」にて登壇した資料です #stapy #python
自然言語可視化ライブラリ「nlplot」のご紹介Takanobu Nozawa2022/9/22みんなのPython勉強会#85
View Slide
■自己紹介名前:野澤 哲照(Nozawa Takanobu)所属:コネヒト株式会社 :たかぱい@takapy0210● ML Engineer, ML PdM(見習い)として、機械学習のサービス導入を軸に、機械学習基盤や機械学習モデル, APIの開発をしたりしています● ビジネスと機械学習を紐付けながら、どのようにインパクトを出すかに興味があります● 本日お話しするnlplotの開発者です
■今日話すこと1. コネヒトという会社、プロダクトの紹介2. nlplotとは3. nlplotを開発したきっかけ4. nlplotの使い方5. streamlitと組み合わせたデモ6. まとめ
コネヒトという会社について簡単に紹介させてください
■コネヒトのVISIONありとあらゆる価値観が見つめ直され、それぞれに思い描く家族の姿はどんどん変わっている家族の数だけ形があって、つくりたい未来がある私たちコネヒトは「家族像」というテーマに向き合う会社です
■コネヒトの事業「あなたの家族像が実現できる社会をつくる」というVISIONに基づく中期的な目標として子どもを望む家族像の多様性を実現するために日々取り組んでいますサービス | コネヒト株式会社
■ママリについて家族に向き合うママの毎日は、新しい選択の連続。慌ただしい日々の中で、正解のない選択をし続けることは容易なことではありません「ママの一歩を支える」をミッションに、悩みの「解消」と「共感」を軸に、妊活中女性・プレママ・ママに寄り添うコミュニティを運営しています子どもを出産したママの3人に1人(※)が利用するアプリに加え、Instagram、LINE、Twitter、facebookといったSNS、情報サイトを通じて、ママが日々の選択に自信をもって一歩を踏み出せるよう取り組んでいます※「ママリ」で2019年内に出産予定と設定したユーザー数と、厚生労働省発表「人口動態統計」の出生数から算出
■家族ノートについて家族ノートでは、一般的なアンケート調査とは異なり、日々の暮らしの中で無意識的に行っている「検索」や「質問/回答」の中に現れる、家族の心の動きや真の欲求を知ることができますママの3人に1人(※1)が利用するアプリ「ママリ」の月間400万検索、130万投稿(※2)もの活発な利用の中で、家族が今悩んでいることや、求めている商品・サービスがタイムリーに反映され、アンケート調査等では踏み込めないリアルな課題や態度変容が映し出されています家族ノートを通して、家族の悩みを社会に届け、志を共にするパートナーのみなさんとともに「あなたの家族像が実現できる社会」の実現に取り組んでいます※1:「ママリ」で2019年内に出産予定と設定したユーザー数と、厚生労働省発表「人口動態統計」の出生数から算出。※2:2021年3月現在。
nlplot とはGithub Star★よろしくお願いします!nlplot
■nlplotとは● 自然言語をいい感じに可視化できるライブラリ● nlp + plot から命名● pip install nlplot でインストール可能● 本日紹介する使い方の一部はブログにも書いているのでご興味ある方は是非(Github Star★も!何卒!)
■nlplotとは以下のような可視化が手軽に行える機能を有する● bar chart● tree map● histogram● wordcloud● co-occurrence network● sunburst chart
■nlplotとは2022/09現在も定期的にダウンロードされているcf. https://pepy.tech/project/nlplot
nlplotを開発した背景
■nlplotを開発した背景自然言語データを扱う中で、同じような可視化方法で分析を行なうことが多かった(例:頻出単語の可視化 etc…)同じ分析を少ないコストで、かつ誰でも再現性ある形で行えるようになったらハッピーじゃない?そうだよね?→ ライブラリにしてしまおう!という結構軽いノリで始めた軽いノリだったが、PyPIへの登録作業など初めてのことも多く苦労した。と同時に良い経験にもなった。
■なぜOSSにしたのか理由は2点● 自分が課題感を持ったということは、地球上で1人くらいは同じこと思っている人いるよね?その人が幸せになれば嬉しい● 自分自身、独学も転職も技術コミュニティからいろいろな恩恵を得て進めて来れた部分が大きいので、その恩返しを少しでもできれば嬉しい
nlplotの使い方
■nlplotの使い方日本語の場合はtokenizeされているデータがあることが前提今回はTwitterのハッシュタグデータをサンプルとして使用→#データサイエンティスト と #kaggle がついている投稿
■nlplotの使い方以下のようにインスタンスを生成できる
■nlplotの使い方描画の対象外としたいワード(ストップワード)の計算もできる
■bar chartunigram
■bar chartbigram
■bar chart異なるデータ群を比較することも可能
■tree map
■histogram出現単語数(今回の例だとハッシュタグの数)の分布
■wordcloud日本語データも特に意識することなく描画が可能
■co-occurrence networks & sunburst chartこれから説明する共起ネットワークとサンバーストチャートの描画には、事前にグラフのビルド処理が必要ビルド処理のmin_edge_frequency引数でプロットするノードの数を制限できる(指定数以下のエッジ(辺)しか存在しないノードはプロット対象から除外することができる)
■co-occurrence networksノードの色は、コミュニティを表しているノードの大きさは、隣接エッジが多ければ多いほど大きくなる
■sunburst chart色の濃さはネットワークの媒介中心性が高いほど濃い色になる(媒介中心性 is 着目している点以外の2点を結ぶ最短経路のうち、その点を通過するものの割合)幅は前述した隣接エッジが多ければ多いほど大きくなる
streamlitを使ったデモ
■streamlitとは● pythonでフロントエンドを構築することができるフレームワーク● フレームワーク側がデザイン仕様をある程度定めているため、デザイン決めのコストが(ほぼ)無く、データ処理・分析のスクリプト開発に注力できる
■streamlitとは● サポートされているライブラリも多い
■streamlitとは● 例)irisのデータをプロットするサンプルコード
■streamlitを使ったデモ● csvファイルをstreamlit上で読み込ませ、その中のデータをnlplotを使用して可視化してみます● コードはGithubに公開しているので手元で動かしたい方がいれば是非!(docker compose up で動くようにしています)○ https://github.com/takapy0210/nlplot_demo
まとめ
■まとめ● nlplotの使い方を紹介しました● 普段自然言語のデータを扱う人には割と使えるライブラリになっていると思います○ 自然言語以外にも系列データであれば利用できると思います● 使いづらい点などあればISSUEの起票 or PRお待ちしております!● そして何よりGithub Star★よろしくお願いします()nlplot
最後に
■We’re Hiring!弊社ではMLエンジニアを絶賛募集中です!● ライフイベント/ライフスタイルの課題解決をするサービスに興味がある方● MLプロダクト開発に興味のある方機械学習への取り組み事例や、今後やっていきたいことなどをまとめた資料もあるので、興味ある方はこちらもご覧いただけると嬉しいです!→ https://tech.connehito.com/entry/ml_data_infoコネヒト 機械学習詳しくは で検索!
■(宣伝)PyConJP 2022では自然言語処理やレコメンデーションの話をする予定なので、ご興味ある方はぜひ(今年はオフライン開催予定 🎉)https://staging.pycon-jp-2022.pages.dev/
■参考文献● Networkxのグラフのクラスタリング(コミュニティ)○ https://bit.ly/3Sl5NPd● グラフ・ネットワーク分析で遊ぶ○ https://tjo.hatenablog.com/entry/2015/12/09/190000● Tutorial — NetworkX 2.8.6 documentation○ https://networkx.org/documentation/stable/tutorial.html● Streamlit○ https://streamlit.io/
おわりご清聴ありがとうございました