Upgrade to Pro — share decks privately, control downloads, hide ads and more …

学習院大学 #社会科学のための実践的データサイエンス 2020春: 8/11

学習院大学 #社会科学のための実践的データサイエンス 2020春: 8/11

学習院大学 #社会科学のための実践的データサイエンス 2020春: 8/11
8.テキスト分析をやってみよう
8.1.テキスト分析でできること
8.2.WordCloudを書いてみよう
8.3.Word2vecやTopicモデル
APPENDIX1 計量テキスト分析
APPENDIX2 感情分析

yasushihara

July 02, 2020
Tweet

More Decks by yasushihara

Other Decks in Education

Transcript

  1. 今日の内容 • 16:10-16:20 • プレ講義 [録画なし] • 16:20-16:40 • 8.1テキスト分析でできること

    [録画あり] • 16:40-16:50 • インターミッション[録画なし] • 16:50-17:10 • 8.2 wordcloud を書いてみ よう [録画あり] • 17:10-17:20 • インターミッション2[録画なし] • 17:20-17:40 • 8.3 word2vec やtopic model [録画] • APPENDIX • khcoder で計量テキスト分析
  2. はじめに; (経済学や経営学にとっての)テキスト分析 • これまでとりあげたデータ (企業情報, 特許, 論文, スクレイピング で取れるデータ etc…)

    にはいろいろなテキストが含まれている • だけど、処理の仕方がわからないため今までどちらかというと放 置していた • たとえば、特許の請求項 (Claim) の文字数をカウントするなどはあったけ れど • ところが、自然言語処理 (Natural Language Processing) の技法 が発達したため、適用できる分野が増えつつあるところ • 今回は、そんな自然言語処理で今までに紹介したデータをいろい ろと調理してみる回です
  3. Janka I. Stoker,Harry Garretsen,and Luuk J. Spreeuwers (2016) The Facial

    Appearance of CEOs: Faces Signal Selection but Not Performance, PLos One doi: 10.1371/journal.pone.0159950
  4. 今日の流れ • Step1; 分析を行うための前環境を準備する • 分かち書き, 形態素解析, 正規化 etc… •

    Step2; テキストを取得する (これまでの数回で詳説したため省 略) • Step3; テキストを処理する • Step4; テキストを分析する
  5. テキスト分析のレシピ • Jupyter Notebook/Google Colaboratory • Mecab • Mecab-ipadic-neologd •

    Mecab-python-windows (Windows ユーザーの場合) 利用するもの • テキストデータ • 企業の概要データ • 日本の社会科学研究者リスト データセット
  6. MeCab とは • https://taku910.github.io/mec ab/ • 京都大学情報学研究科−日本 電信電話株式会社コミュニケー ション科学基礎研究所 共同研

    究ユニットプロジェクトを通じ て開発されたオープンソース 形態素解析エンジン • 言語, 辞書,コーパスに依存しな い汎用的な設計 • パラメータの推定に Conditional Random Fields (CRF) を用 いており, ChaSen が採用している 隠れマルコフ モデルに比べ性能が向上 MeCab ChaSen JUMAN KAKASI 解析モデル bi-gram マルコ フモデル 可変長マルコ フモデル bi-gram マル コフモデル 最長一致 コスト推定 コーパスから学 習 コーパスから 学習 人手 コストという 概念無し 学習モデル CRF (識別モデ ル) HMM (生成モ デル) 辞書引きア ルゴリズム Double Array Double Array パトリシア木 Hash? 解探索アル ゴリズム Viterbi Viterbi Viterbi 決定的? 連接表の実 装 2次元 Table オートマトン 2次元 Table? 連接表無し? 品詞の階層 無制限多階層品 詞 無制限多階層 品詞 2段階固定 品詞という概 念無し? 未知語処理 字種 (動作定義 を変更可能) 字種 (変更不 可能) 字種 (変更不 可能) 制約つき解 析 可能 2.4.0で可能 不可能 不可能 N-best解 可能 不可能 不可能 不可能
  7. 形態素解析 • 文章を意味を持つ最小限の単位に分解すること • 例 • 「何処の誰か知らないが出会う前の君に捧ぐ。この世未来切り開く何 でもない君に」(Hello song, 星野源)

    → • 「何処/の/誰/か/知ら/ない/が/出会う/前/の/君/に/捧ぐ/。/この/世 /未来/切り/開く/何でも/ない/君/に」 • 主語と述語と目的語… など, 品詞ごとに分割し文章の意味合いを抽出することを 可能にする。
  8. Mecab をダウンロードする • Windows 10 環境の場合 • https://github.com/ikegami-yukino/mecab/releases • MeCab

    0.996 64bit version を導入する • UTF-8 版で辞書を作成すること • MacOS 環境の場合 • HomeBrew 環境を利用する • https://www.karelie.net/install-mecab-mac/
  9. Mecab-ipadic-NEOlogd とは • https://github.com/neologd/ mecab-ipadic- neologd/blob/master/READ ME.ja.md • 多数のWeb上の言語資源から 得た新語を追加することでカ

    スタマイズした MeCab 用の システム辞書 • Web上の文書の解析をする際 に活用できる • 収録データ(一部) • 人名(姓/名)エントリデータ • ニュース記事から抽出した新語 や未知語をエントリ化したデー タ • ネット上で流行した単語や慣用 句やハッシュタグをエントリ化 したデータ • Web からクロールした大量の 文書データ • 一般名詞/固有名詞の表記ゆれ 文字列とその原型の組のリスト をエントリ化したデータ
  10. 1. 分かち書きする • 品詞ごとに言葉を取り出す • Mecab (7.1参照)で分かち書 きする • 品詞ごとに、出てきたター

    ムの数をカウントする • While 文とif 文の組み合わせ • 参照 • https://qiita.com/ganariya/it ems/68fdcfed953f066ad4b7
  11. 2. Wordcloud • 必要なパッケージをインポートする • 開くファイルを指定する • 今回は, DBpedia.org から取得した経済学者の概要を抽出し,

    UTF-8 で エンコーディングしたテキストデータとして保存 • データの取得の仕方は前回講義を参照 • マスク画像も別途用意(使わない場合はコメントアウト)
  12. 2. Wordcloud • Wordcloud関数を用いて, ワードクラウドを出力する • Font_path で利用する日本 語フォントを指定する(今回 は同じパスに配置)

    • Mask で, プロットするマス ク画像を指定する • Stopwords に, プロットしな いタームを指定したベクト ル stop_wordsを指定する • wordc.to_file でファイルの 保存名を指定する
  13. Word2vec • テキストデータを解析し, 各 単語の意味をベクトル表現 化する • 単語間の近接性などを測定 することが可能に •

    Skip-Gram Model • 入力された単語を元に周辺語 を出力する, 入力層, 隠れ層, 出力層から構成されたニュー ラルネットワークを規定する 引用; https://www.randpy.tokyo/entry/word2vec_skip_gram_model
  14. Word2Vec • 文を単語に分かち書きし, そ れぞれ入力層と出力層にイ ンプットしニューラルネッ トに学習させていく • 入力層から隠れ層への重み行列; W

    隠れ層から出力層への重み行列; W’ をそれぞれ計算する • このとき、重み行列の各行のベクトルが, 単語の特徴を示すベクトルになる 引用; https://www.randpy.tokyo/entry/word2vec_skip_gram_model
  15. Word2vec • 分かち書きしたファイルに 基づき, Word2vec モデル を生成する • このとき •

    Min_count; 単語の出現回数 • Window; 入力単語からの最 大距離 • Size; ベクトルの次元数 • Sg=1; skip-gram 形式での モデリング • iter; 学習の反復回数 • 最後にファイルを保存する
  16. Similarity Words の抽出(from 経営学者リスト) イノベーション マーケティング論 技術経営 コーポレート・ガバナンス 医療 0.92人的資源

    0.92MOT 0.98 神戸大学大学院経 営学研究科 0.93 静岡 0.91評価 0.92開発 0.92第一人者 0.92 地域 0.91ほか 0.91システム 0.92人 0.91 経営情報学 部 0.9勲 0.91知識 0.91組織論 0.91 県立大学 0.88技術 0.9マネジメント 0.9および 0.9 センター 0.88流通 0.9監事 0.88消費者 0.89 研究科 0.87分析 0.9課題 0.85にて 0.89 経営情報 0.87委員会 0.9Certified 0.85問題 0.88 研究所 0.84課題 0.9客員研究員 0.84受章 0.88 所長 0.83人 0.89技術 0.82期 0.87 長 0.82監事 0.89関係 0.82現代 0.87 准教授 0.81および 0.89プロジェクト 0.82勲 0.87 国際企業 0.8多摩大学 0.89 マーケティング 論 0.81アドバイザー 0.87 経済 0.8地域経済 0.88領域 0.81及び 0.87 研究員 0.79サービス 0.88ホスピタリティ 0.8社会学 0.86
  17. 3. Topic モデル • 文章における単語の出現確率 を推定するためのモデル • 出現する単語の種類と数が, トピック(カテゴリ) によって

    異なると仮定する • 各文章は複数のトピックによっ て構成されており, 各トピック の単語分布を合算された形で単 語が生成される https://qiita.com/icoxfog417/items/7c944cb29dd7cdf5e2b1
  18. 3. Topic モデル • 必要なパッケージ をインポートする • 元文章からターム を取り出し, キー

    ワードを抽出する • 今回のデータの場 合, 社会学者ひとり ひとりのタームが 抽出されたベクト ルが形成される 参考文献; https://paper.hatenadiary.jp/entry/2016/11/06/212149
  19. 3. Topic モデル • 出力結果 1602 ソーシャルワーク 2 1265 ソーシャル・キャピタル

    2 1524 タレント 2 1403 テレコム 2 725 テレビ 6 793 テーマ 5 559 デザイン 3 1451 デュルケーム 2 395 ドイツ 8 811 ニュース 3 1153 ネット 3 414 ネットワーク 10 310 ノンフィクション 3 33 バークレー 2 1467 フィールドワーク 3 1204 フェミニスト 2 1154 フェミニズム 3 1311 フェリス女学院大学 2 34 フランス 8 458 プロジェクト 3 415 ヘイトスピーチ 2 649 ペンネーム 2 1608 ホームレス 2 1057 ポスト 2 1058 ポストコロニアル 2 101 ポピュラー 3 679 マス 8 620 マスコミ 2 54 マスコミュニケーション 9 55 マスメディア 4 1126 マックス・ウェーバー 2 571 マックス・ヴェーバー 4
  20. まとめ; テキスト分析で出来そうなこと • WordCloud • みんなのなんとなくのイメージの可視化 • Word2vec • 言葉のベクトル化により,

    モデルへの組み込みが可能 • 被説明変数?説明変数? • Topic モデル • グルーピングの可視化 • 類似語の提案
  21. 今日の実習 • テキストデータ取得して、そ れを用いて, 分析を行いま しょう • Wordcloud の作成 •

    Word2vec モデルの作成 • Topic モデルの作成 などを試行して, 結果を出力す ること Extended;) Dbpedia.org を使いテキスト データを取得して解析する
  22. 計量テキスト分析 • 語句と語句の結びつきや、関係 性について可視化を行う • 多変量のテキストデータから意 味や傾向を取り出すことに活用 する • 実用例

    • 松井剛「ことばとマーケティン グ」 • 佐々木ほか (2020)新型コロナウィ ルス感染症への組織対応に関する 緊急調査: 第三報 • http://pubs.iir.hit- u.ac.jp/admin/ja/pdfs/show/2393 • COVID-19 に関連して、企業が どのように対応したかをサーベ イの自由記述欄から可視化する
  23. レシピ 1. KHCoder をインストールする 2. Dbpedia.org から SPARQL Endpoint 経由でデータセットを取得する

    • 前回の内容 3. Manaba からデータセットをダウンロードする 4. KHCoder に定点調査の自由記述データを読み込む 5. データ分析前の処理をする 6. 頻出語の取り出しを行う 7. 共起ネットワークを書く 8. 属性情報ごとの特徴を抽出する 9. 対応分析を行う 2020/7/1 84
  24. 1. KHCoder をインストールする • KHCoder とは? • テキスト型データの計量的な内容分析(計量 テキスト分析)もしくはテキストマイニング のためのフリーソフトウェアである。各種の

    検索を行えるほか、どんな言葉が多く出現し ていたのかを頻度表から見ることができる。 さらに多変量解析によって、一緒に出現する ことが多い言葉のグループや、同じ言葉を含 む文書のグループを見ることで、データ中に 含まれるコンセプトを探索できる。 • また一部の文書群に注目した場合に、その文 書群に特に多く出現する言葉をリストアップ することで、その文書群の特徴を探索できる。 あるいは分析者が指定した基準によって、文 書の分類を自動的に行うこともできる。 • 引用: https://ja.wikipedia.org/wiki/KH_Coder 2020/7/1 85
  25. 1. Khcoder をインストールする • Tips: Mac な場合 • かなりめんどくさい •

    Perl やR の個別パッケージの導 入が必要 • 有償版のインストールパッケー ジが提供されている. • https://khcoder.stores.jp/#!/it ems/536a53268a56108414000 1dd 2020/7/1 90
  26. 2. Dbpedia.org から SPARQL Endpoint 経 由でデータセットを取得する • 前回の講義で説明した Dbpedia.org

    の SPARQL Endpoint から, 東証一部, 東証二部, およびマザーズの企業名とその企業概要を 取得する • 日経NEEDS などに採録されたオフィシャルなデータではなくて、 Wikipedia で執筆された企業の「紹介文」 2020/7/1 91
  27. 2. Dbpedia.org から SPARQL Endpoint 経 由でデータセットを取得する • Jupyter Notebook

    で以下のように記述する (詳しくは前回配布 した notebook を参照のこと)
  28. 2. Dbpedia.org から SPARQL Endpoint 経 由でデータセットを取得する • 同様の作業を, 東証一部と東証二部で繰り返す

    #東証マザーズ上場企業の情報を取得する sparql2 = SPARQLWrapper(endpoint='http://ja.dbpedia.org/sparql', returnFormat='json') sparql2.setQuery(""" PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> select distinct ?name ?abstract where { ?company <http://dbpedia.org/ontology/wikiPageWikiLink> <http://ja.dbpedia.org/resource/Category:東証マザーズ上場企業> . ?company rdfs:label ?name . ?company <http://dbpedia.org/ontology/abstract> ?abstract . } """) results2 = sparql2.query().convert()
  29. 3. KHCoder にデータを読み込む • データ • 東証一部/東証二部/マザーズ: • https://www.dropbox.com/s/9jtwyxw4ae3nntz/%E6%9D%B1%E8%A8%BC%E4%B 8%80%E9%83%A8%E6%9D%B1%E8%A8%BC%E4%BA%8C%E9%83%A8%E3%83%9

    E%E3%82%B6%E3%83%BC%E3%82%BA.xlsx?dl=0 • 経済学者/経営学者/社会学者: • https://www.dropbox.com/s/jmvz8fv25aqecsj/%E6%97%A5%E6%9C%AC%E3%81 %AE%E7%B5%8C%E6%B8%88%E7%B5%8C%E5%96%B6%E7%A4%BE%E4%BC%9 A%E6%B3%95%E5%AD%A6%E8%80%85%E4%B8%80%E8%A6%A7.xlsx?dl=0 • ヒップホップ/ロック/フォークグループ: • https://www.dropbox.com/s/5iye8puor1eg52r/%E6%97%A5%E6%9C%AC%E3%81 %AE%E3%83%92%E3%83%83%E3%83%97%E3%83%9B%E3%83%83%E3%83%97% E3%83%AD%E3%83%83%E3%82%AF%E3%83%95%E3%82%A9%E3%83%BC%E3% 82%AF%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97.xlsx?dl=0 2020/7/1 96
  30. 5. 頻出語の取り出しを行う • “抽出語リストの形式” • 品詞別 • “記入する数値” • 出現回数(TF)

    • “出力するファイルの形式” • Excel (*.xlsx) を選択し, OK をクリックする 2020/7/1 107
  31. 6. ストップワードの設定 • Force ignore “使用しない語の指定” にス トップワードを指定する • 株式会社

    • 本社 • 会社 • 企業 • LTD. • CO., • CORPORATION • INC. • ょ • CO.,LTD. • HOLDINGS • THE • ELECTRIC • コーポレート など….
  32. 6.共起ネットワークを書く • 共起では, ある特定の タームで共に出てくる語 の確認ができる • 東証一部と東証二部とマ ザーズでは企業が取り組 んでいることが違う

    • マザーズはインターネッ ト系, 東証二部は自動車や 食品, 東証一部は持ち株な どのタームが出ている 2020/7/1 115
  33. 9. マッチングルールを作成する • 特定の語のグループを作成し, それらでグルーピングするこ とで特徴を抽出する • 今回の場合, 自動車産業, 電気

    産業, 銀行, ICT など産業分類 ごとにグルーピングする • 記述方法 *グループ名1 みかん or いちご or りんご *グループ名2 ごりら or らっこ or こんどる *グループ名3 るびー or びーどる
  34. 今日の実習 (windows ユーザ向け) • アップロードされている • (1) 東証一部/二部/マザーズの 企業概要データ •

    (2)日本の経済/経営/社会/法学 者の概要データ • (3)日本のロック/ヒップホップ /フォークグループの概要デー タ を用いて, テキスト分析を行う • 語句の抽出 • 共起ネットワーク • 対応分析 • 多次元尺度構成法 • コーディングルールの設定 などを行い解析すること
  35. 5. 感情分析 • Ekman and Friesen (1971) • 表情の研究を通じ, 感情表現には普遍的

    な6つの感情 (怒り, 嫌悪, 恐怖, 喜び, 悲 しみ, 驚き) があることを示す. • ただし, 西洋文化圏と東洋文化圏では表 情の表出に違いがある. • 参照 • 日本人の基本6感情の表情は「エクマン理 論」に従うか? – 人工知能を用いて検証 • https://academist- cf.com/journal/?p=10185 • https://ocw.mit.edu/courses/brain-and- cognitive-sciences/9-00sc-introduction- to-psychology-fall-2011/emotion- motivation/discussion-emotion/ © Paul Ekman. All rights reserved.
  36. 5. 感情分析 • git から sentiment_ja パッ ケージを取得する • https://github.com/sugiyam

    ath/sentiment_ja • 展開したディレクトリ (sentiment_ja) に移動する
  37. 5. 感情分析 • 出力結果 • [{'sentence': '三田でラーメン二郎の本店でヤサイカラメアブラマシマ シの二郎を食べるのは素晴らしい', 'emotions': {'happy':

    '7.0', 'sad': '1.0', 'disgust': '1.0', 'angry': '1.0', 'fear': '1.0', 'surprise': '12.0'}}, {'sentence': '行列は切ない', 'emotions': {'happy': '1.0', 'sad': '8.0', 'disgust': '5.0', 'angry': '3.0', 'fear': '1.0', 'surprise': '1.0’}}] • Happy, sad, disgust, angry, fear, surprise で分類される
  38. 参考文献 • pythonでgensimを使ってトピックモデル(LDA)を行う • https://paper.hatenadiary.jp/entry/2016/11/06/212149 • 「OK word2vec ! "マジ卍"の意味を教えて」

    Pythonで word2vec実践してみた • https://www.randpy.tokyo/entry/python_word2vec • models.word2vec – Word2vec embeddings • https://radimrehurek.com/gensim/models/word2vec.html • 15分でできる日本語Word2Vec • https://qiita.com/makaishi2/items/63b7986f6da93dc55edd
  39. 参考文献(2) • Pythonで文字列を分割(区切り文字、改行、正規表現、文字 数) • https://note.nkmk.me/python-split-rsplit-splitlines-re/ • WindowsでNEologd辞書を比較的簡単に入れる方法 • https://qiita.com/zincjp/items/c61c441426b9482b5a48

    • Windows 10 64bit で python + Mecab • https://qiita.com/kuro_hane/items/64e39d5deeb3f876b421 • Windows10(64bit)/Python3.6でmecab-python環境構築 • http://blog.livedoor.jp/oyajieng_memo/archives/1777479.html
  40. 参考文献(3) • MeCab: Yet Another Part-of-Speech and Morphological Analyzer •

    https://taku910.github.io/mecab • mecab-ipadic-NEologd : Neologism dictionary for MeCab • https://github.com/neologd/mecab-ipadic-neologd • Word2Vecを用いた類義語の抽出が上手く行ったので、分析を まとめてみた • https://qiita.com/To_Murakami/items/cc225e7c9cd9c0ab641e • 自然言語処理による文書分類の基礎の基礎、トピックモデルを 学ぶ • https://qiita.com/icoxfog417/items/7c944cb29dd7cdf5e2b1