【解説】仮想通貨の『何が』Twitter上で盛り上がっているのかをトピックモデル分析①
はじめに
内容
諸々まとめ
ソースコード
ソースコードの解説
工夫点
.tsvファイルによる書き出し
max_idの指定
検索ワード指定
課題
仮想通貨の『何が』Twitter上で盛り上がっているのかをトピックモデル分析
はじめに
仮想通貨流行りすぎですよね.
個人的には仮想通貨に一体どんな価値があるのかよくわからないのです.あれ自体で何か商売をして儲けているわけじゃないのに,忽然とした需要が価値を押し上げているような…
まあ,みんなが「金の延べ棒欲しい」っていったら金の値段が上がるように,仮想通貨もそういうものなのかなと思いつつ(はっ!だから「マイニング」っていうのか!(?))分析してみました.
※一応ですが,仮想通貨について何か確定的な言及をするものではありません.あくまでデータ取って分析して,私なりに考察した結果であることは注釈しておきます.
目的
Twitterユーザーは仮想通貨の何に関心を持っているのか
今回はテキストマイニング手法の一つであり機械学習手法として大分一般化してきた(と思う)トピックモデル分析を行います.
トピックモデル分析
簡単に言うと,文書集合の主なトピック(話題)を半自動的に分類可能な手法です.これを仮想通貨についてつぶやいているTwitter文書に利用することで,仮想通貨に関する主な『話題』が抽出できるのではないかと考えました.
また,これに関する記事は昨日まとめてみましたので,興味のある方は是非.
その他,LDAで検索してみて調べてみると面白いです.
仮説
どんなトピックが出そうかなんとなく類推してみます.
- 値段(相場)の上がり下がりの話
- どの仮想通貨が良いか,悪いかの話
- 取引所の話
- 将来性の話
- 仮想通貨に関する感想・意見
この辺りがトピックとして出てきて,なんか意外なトピックが出てきたら面白いかなーと思いながら分析です.
大雑把な手順
- Twitterから仮想通貨に関するツイートを取得
- トピックモデル分析してどんなトピックがあるのか分析・考察
細かい手順
以下,分析内容に関心のある人は是非ご覧ください.プログラマーとかアナリスト知識人向け.ディープな話は今後公開していく予定です.今回は概要レベル.
TwitterのAPIを使ってツイートを取得
- 言語:Python 2.7
- ライブラリ:tweepy 他
- 検索ワード:「仮想通貨 OR ビットコイン OR bitcoin OR BTC OR アルトコイン」
- 期間:1月31日0時0分0秒〜2月6日23時59分59秒の間約一週間分
- ただし,RTとbotは検索対象から除く.
全部で34万3555件取得できました.34万ツイート…複数検索とは言え多いですねえ.関心の高さが伺えます.
ノイズ除去
- 言語:R言語
- ライブラリ:lda,topicmodel, RMeCab 他
- URLや@〜を各文書から削除
- 重複する文書を削除(新しい文書が残るように)
- 名詞,動詞,形容詞,形容動詞を対象に品詞分解
- 2品詞未満の文書を除去
最終的な分析対象は23万8133件になりました.何回も同じツイートをしている場合やいわゆるパクツイ,bot除外できない事実上のbotなどが結構含まれているみたいですね.あとは一言ツイートも除外対象ですので.
これらはTwitter自体の性質に近いので,しょうがないということにします.
今回の分析ではトピックモデル分析のLDAを用います.
解釈しやすく,精度も良い(それなりに)適切なトピック数を探索
- Perplexityを算出
- 5-fold out クロスバリデーション(データの80%を学習データ,残りを試験データとしてPerplexity算出
- 各種パラメタ
- α:50/トピック数,η(文献によってはβ):0.1
- 方法:ギブスサンプラ,
- 反復回数:100回
反復回数は多いほうが良いのですが,計算コストが膨大すぎたのでこの程度で留めました.1000とかにすると余裕で1日掛かります.
評価基準
このシミュレーションをクロスバリデーションのパターンを50パターン用意してPerpelexityの平均値で判断
一般に,トピック数を増やせばPeplexityは良い評価値になるが,トピック数が多すぎても解釈が難しくなるので,トピック数が少ない(30以下)中で,比較的Peplexityが良いトピック数を採用.
LDAの方法
良いトピック数で分析し,各トピックの代表的な単語からトピック名を決定
各トピック割合が大きい上位の文書などから考察
制約
Twitterのデータは過去一週間分しか取得できない.これは個人開発者レベルでのTwitter apiの制約なのでしょうがない
Perplexityの算出など各分析では違うライブラリを使っているので,もしかしたら微妙に誤差生じるかも.(手法やパラメタは一緒のはずだから許容範囲内だと信じる)
結果
結果としてトピック数6,10,13,18,でそれなりに良いPerpelexityと言えるものが出ました.
今回はトピック数13の結果・考察を載せます.
トピック名とトピックを代表する単語
トピック名の判断にはトピックを表す代表的な単語を算出します.ここではライブラリだよりですが,解釈としては「そのトピックに出てきやすくて,他のトピックに出にくい単語に重み付け」といったところですかね.
これと本文も参照しながら,Twitter上で仮想通貨について何が主題として語られているのかを判断します.
名付けたトピック名と代表的な単語の一部を表に示します.数字は除いています.
トピック名 | 代表的な単語 | |||||
取引所ごとの相場 | 円 | btc | 価格 | % | xrp | 時間 |
国外流出疑惑ニュース | 億 | 日本 | 流出 | 韓国 | nem | 分 |
興味 | 最近 | 人 | 広告 | て | やっ | みたい |
投資価値 | する | 投資 | いる | し | こと | ある |
価格推移 | 万 | btc | 日 | 月 | 年 | ドル |
不信感 | 笑 | w | 今 | 損 | 怖い | し |
取引所 | 通貨 | 仮想 | し | 事業 | 参入 | 下落 |
バブル感 | 通貨 | 仮想 | 崩壊 | 信頼 | 性 | い |
下落 | 相場 | 株 | 買い | 暴落 | 見 | 下げ |
まとめ・ブログ記事 | 仮想 | 通貨 | さん | 人 | 税金 | まとめ |
仮想通貨の仕組み | ブロック | マイニング | なる | 利益 | ない | 理解 |
主要アルトコイン | コイン | ビット | fx | リップル | 暴落 | あり |
某社の盗難ニュース | チェック | 仮想 | 取引 | 通貨 | ニュース | 所 |
考察
うーん広告・ニュース・ブログ記事が多い.初心者を釣ろうとする広告と煽ったようなブログ・ニュース記事が多い.普段眺めるメディア系とかよりも,遥かにお金が直接絡むからしょうがないけど,これじゃあ人間のユーザーの生の声を抽出するのも難しいです.
一方で,この「広告やブログ記事まみれであるという事実」が,Twitterから得られる仮想通貨に関する情報とも言えるかもしれません.
あとはニュースサイトが発信する文書に関するトピックですね.確かにユーザーが求める情報としては有益なのかもしれません.ニュースに対する意見などもツイートする場合もありますし,分析結果としては納得できます.
あとは分析期間の関係で,某社の盗難ニュース,仮想通貨が国外(韓国からハッキングされて北朝鮮に流れたのでは?という疑惑の)ニュースなどのトピックが出てきました.
まとめ
約1週間で34万件以上のデータ収集しトピックモデル分析(LDA)を行った.
主な話題(トピック)は今回13種類抽出できた結果について述べる.
- 取引所ごとの相場(取引所での価格について言及したトピック)
- 国外流出疑惑ニュース(北朝鮮に流れたのでは?という記事のトピック)
- 興味(やってみたい,とかのトピック)
- 投資価値(いつ投資しよう,株みたいなもの?,とかのトピック)
- 価格推移(価格の推移自体について述べるトピック)
- 不信感(怖い,損した,などネガティブなトピック)
- 取引所(会社名などを挙げて述べたトピック)
- バブル感(年末年始の高騰・暴落について言及するトピック)
- 下落(時期的に価格が落ちきって,上下している事に関するトピック)
- まとめ・ブログ記事(記事タイトルなどのトピック)
- 仮想通貨の仕組み(ブロックチェーンの話や,よくわからん,といったトピック)
- 主要アルトコイン(リップルやリスク,モナコインなどに関するトピック)
- 某社のニュース(盗難された某社のニュース記事からその感想まで)
所見としては,ニュース記事,転載ニュース記事,広告,botらしきものが非常に多い印象です.
一方で,こういったツイートが多いこと自体が,仮想通貨の今を表しているのでは,とも思います.
また,世間を賑わす某取引会社に関するトピックがあったり,「興味あるー」といったツイートや,価格の下落に関するトピックがあったりと,仮想通貨に対する期待と不信感が入り混じったトピックが得られました.データ収集した時期の影響もあるかとは思いますが,納得の結果ではないかと思います.
また,検索対象に入れていない「リップル」「モナコイン」や「リスク」「xem」などがトピックを表す重要な単語として出現したことから,「仮想通貨」及び「アルトコイン」の中でも注目されている通貨が炙り出せたのではないかと思います.
あとは,まあ,Twitterの特性というか風潮というか,『w』とか『笑』とか絵文字とかネットスラングに近い言葉がよく出てくるという印象です.良く言えば『お気軽さ』『奥ゆかしさ』ですし,悪く言えば『煽り』『罵詈雑言』です.
例えば「自業自得だと思います」とはつぶやかず,「ざまあww」とつぶやく方が多いのではないでしょうか…日本語の文章として破綻していても,日本人はなんとなく読めますが,分析者としては扱いに困るところです.
今後は,細かいトピック数に指定して分析することや,カテゴリに分けた上でLDAすることでより詳細な話題が見える可能性も十分にあると思います.これらはまた後日行いたいところです.
懸念
Twitter自体単語数が少ないので変な過学習がないか心配.あとは,トピック割合が異なっても,パッと見同じような本文も散見されたので,解釈が難しい点がありました.
また,転載ニュース記事とか広告ツイートとか選択的に除く方法がわからなかったので,分析文書に含んでいます.
これが全体のトピックを歪めている可能性あるかもしれません.本当は個人ユーザーを中心とした感想・意見・所見などを収集できたらよかったのですが…どうしたら良いですかね….
「やったほうがよかったかな」のまとめ
- 転載ニュース記事とか広告ツイートとか削除
→個人の意見に関するトピックの抽出可能か
- 逆に転載ニュース記事や広告ツイートのみに限定した分析
→どんな記事タイトルが多いのか
- 仮想通貨用の辞書作成
→【ビットコイン】という単語は形態素解析した時に【ビット】と【コイン】に分かれてしまう,などがあった
今後やってみたいこと
- 今回の結果を仮想通貨のチャートと合わせて分析
例えばネガティブワードが多い数分後に下落していたら面白いですよね.影響力の強いユーザー・ブロガーやニュースサイトが炙り出せるかもしれません.
- 時系列を考慮した分析
今回のLDAは一週間分のデータを一括で分析しましたが,時系列を考慮したら日毎のホットワードが取り出せるかもしれません.
- 広告などを除いた分析(要は人間のユーザーの関心トピックの詳細が知りたい)
長くなるから今回避けましたが,そのうち分析の中身をソースコードとともに公開しようと思います.
プログラミングに精通した偉い人にアドバイス貰えたら嬉しいなぁ (このブログの本当の意図はこっちにある…)
参考まで.
LDA(Latent Dirichlet Allocation)について調べたので自分なりにまとめる
はじめに
内容
文献調査
私たちはテキストコーパースのような離散的データの収集のための生成確率モデルである,潜在ディリクレ配分法「LDA」について述べます.LDAは3層の階層型ベイジアンモデルであり,各収集ノードは基礎となる話題(トピック)の集合の有限混合分布としてモデル化されています.各トピックは,トピック確率の基礎となる集合全体において,無限混合分布としてモデル化されます.テキストモデルの文脈としては,トピック割合は文書の明白な表現を提供します.
文書の内容を判断する最初のステップは,文書アドレスのトピックを決定することである.私たちはBleiらによって導入された文書生成モデルについて述べる.各文書は,トピックに関する分布を選択し,この分布に従って選択されたトピックから,文書内の各単語を選択することで生成される.私たちは,推論のためのマルコフ連鎖モンテカルロアルゴリズムモデルを提案する.
何ができるの?
- 大量の文書集合からトピック(話題)を半自動的に,推定することができる
- 話題を推定することで個々の文書でどんな話がされているのかを半自動的に分類することができる
だから〜…それができると何ができるの?
- 自動分類自体に価値がある.例えば,流行り廃りや,ブームの系統を見出すことができる.ビッグデータ解析にも使える.
- よく似た話題の文書をレコメンドすることができる.例えば,前に見た文書が野球のニュースだったら,次のおすすめも野球の記事にできたりする.
- 同じ要領で,よく似た趣味やよく似た文書を閲覧する人をおすすめすることができる.
LDAの利点は?
- 比較的推定精度が良いらしい
- 一つの文書にいくつも話題があるかもしれない,ということを確率分布として表してくれるので,あらゆる可能性を否定しない
- 引用文献が非常に多く,今や各種言語でライブラリが豊富
- 最近は理論としては下火で,応用として多分野に渡っている印象
- テキストデータ以外にも使おうと思えば使える.物の配置とか人の動きとか画像の特徴量を分析すれば,同じようなニュアンスを持った配置や動き・画像を半自動分類できる
LDAの欠点は?
- データがたくさん必要
- 美しい文書でないと上手く行かない(という印象.まあどんなテキストマイニングもそうかもしれませんが).ネットスラングが多かったり,日本語として文書が崩れていると,ノイズなのか意味を持つ文字列なのか判断が難しい.
- 国や政府の文書:日本語がしっかりしている.最近ポッと出てきた単語やネットスラングは使わない傾向が強いので分析しやすい
- 企業が出す正規の文書:日本語がしっかりしている.ただし,製品名やカタカナ語が多いと分析が面倒になりやすい
- ニュース記事:日本語が比較的しっかりしている.固有名詞,()つき文書や,上記と同じくカタカナ語が多いと分析が面倒.
- ブログ記事:たまに日本語が崩壊している.本ブログもこれに該当する.固有名詞でも()つけでも,英語ローマ字混じりもなんのその,伝われば良い文書なので,基本的には分析するには事前のノイズ除去が必要
- メール文書:ブログ記事と同じく.あとは,定型文が多いので過学習するし,プライバシー的にも配慮に困る
- 自由記述アンケート:意外と人はきれいな日本語を書くことはしない.というのが私のこれまでの印象.ノイズ除去必須
- Twitter:言わずもがなですが,文書としては実に実に玉石混交.ニュースであったり,政府の通知であったり,小馬鹿にしたような文書まで色々あるのが分析上は厄介
- 2ちゃん(現5ちゃん):ネットスラングの元凶とも言える新しい言葉を生成する.「www」とかですら分析上は厄介ですし,「www」も意味を持つ単語と位置づければそうとも言えるので,解釈が大変難しい
LDAの評価基準
LDAどんなもんじゃい
まとめ
- LDAは大量の文書の半自動的にトピック(話題)を推定し,分類することができる手法
- 流行り廃りを把握したり,おすすめをレコメンドすることに利用することができる.
- 汎用性が高く,やろうと思えばテキスト以外にも用いることができる.
今後
publicを利用してGameObjectをコンポーネント上で操作できるようにする
はじめに
前回の続きみたいなものです.
前回はpublic指定した値をコンポーネント上で操作する機能について説明しました.
今回は数値ではなくヒエラルキー上にあるオブジェクトも操作できることについて説明します.
publicでGameObjectの変数を宣言
まず,適当に空のオブジェクト(Create Empty)を用意して,New Scriptをコンポーネント上で作成します.今回はそれをGameobject_rotationという名前にしておきます.
この時点では何もありません.スクリプトを下記のように編集します.
今回も回転させるだけのスクリプトですが,違いはpublic指定している変数rotation_tの方がGameObject型であるということです.
rotation_tのTransformというコンポーネントをGetして,Transformの中のRotateを(3,2,1)にしてね,という意味のスクリプトをUpdate()に記述します.
こうすると,コンポーネント上ではどうなっているかといいますと
前回数値が入力できたかのように,Gameobjectを入力できます.変数名はRotation_tですね.
GameObjectの入力の方法は,2種類
①ヒエラルキー上のオブジェクトをドラッグ・アンド・ドロップ
②右側の◎みたいなマークをクリックしてオブジェクトを選択
今回は②のパターンでやってみます.[None(Game Object)]の右側にある◎みたいなものをクリックすると
ヒエラルキー上にあるオブジェクトが一覧で表示されます.Assetで色々ダウンロードしていたらもっとたくさん出てきます.今回は予め生成しておいたCylinderを選択します.Cylinder…つまりは円柱ですね.
選択できました.これで,スクリプト上ではRotation_tはコンポーネント上にあるCylinderになります.
実際の挙動
この状態で実行しますと
やったぜ動いたぜ.
このようにしてヒエラルキー上にあるオブジェクトを視覚的に指定して,スクリプトに載せることができます.直感的にやりやすい…
まとめ
publicでGameObjectを指定することでヒエラルキー上のオブジェクトを操作することができる.
工夫次第では,同じスクリプトで同じ挙動をさせたいけどオブジェクトが異なるものを,同じスクリプトで賄うことができます.しかも視覚的に確認できる.良いですね.
Unity 2018.1 beta公開
はじめに
表題のとおりです.
2018年最初のUnityバージョンリリースが発表されました.
個人的に関心が強いので,バージョンアップ記事の突発的レビューです.
Unity 2018.1 beta 内容
大きな変更点は4点でしょうかね.
・視覚的なShader作成ツールのサポート
・C#Job Systemの追加機能
・旧パーティクルシステムの段階的な廃止
個人的には
・Wii Uサポートの廃止
・Mono Developmentサポートの廃止
これが関心ありますね.
以下,要約と意見です.
・GPUレンダリングの強化
そうそう,こういうのいいですよね.GPUレンダリングの発展はタブレットPCなど小型端末でも今後ものすごい伸びるであろう(と個人的に思っている)コンテンツですから,この辺のサポートを公式に発表するのは素敵なことです.
・視覚的なShader作成ツールのサポート
HP上ではShader Graph Toolとなっていますが,AnimationツールのShader版の認識で良いと思います.
スクリプトだけの記述では難しいところを視覚的にサポートする地盤が固まりつつあります.ある意味,個人アプリ開発者としては,敷居を低くするものであり,広まる意味では良いような,それでいいんかいな,という気持ちです.
だってスニペットみたいなツールばっかりでシステム作っても,それはエンジニアと言えるのか,って思っちゃうじゃないですか.
・C#Job Systemの追加機能
申し訳ない,これはあまりアンテナ張ってないです.でも本格的に取り組もうとしている?
以下,憶測を含みます.
マルチスレッド対応ですが…並列化計算の関心はGPUに合わせて関心が高まっているわけですね.視覚的なプログラミングが多い印象のUnityでも求められることなんですねえ.
要は,レンダリング以外での並列化計算の効率化みたいなものですから,マルチエージェントとか,レンダリングの裏で動くアルゴリズムを高速化する意図ですかね…
・旧パーティクルの段階的な廃止
Shurikenが一般化しつつありますから,まあこれは妥当では.
むしろ,Shurikenの発展に期待します.パーティクルは,演出からシミュレーションまで工夫次第で面白くなりますから.軽くて汎用性の高いものであるべきです.
・Wii Uサポートの廃止
完全にNintendo Swichに移るわけです.当然ですが,時の流れを感じて私は切ないです.
Unity発のSwichソフトウェアは,増えた…かどうかは知りませんが,有名企業やコンテンツで「Unityで作ったぜ」とニュースを見るようになりましたからね.
今後もこういったが発展することを望みます.個人的にはWebGLの発展を望みますが,イマイチですね.やっぱりWebGLはスマホコンテツとの相性がよくない感.
・Mono Developmentサポートの廃止
これは驚き.ノーマークでした.Visual Studioメインでやると…
いや,いいんですけどね,どうも個人的にVisual Studio使いにくんですよ…個人的にですよ?(Mono Developmentが使いやすいとは言わない)
いっそUnity発のツール作れば良いのでは,と思ってしまいます.VisualStudio重すぎません?超軽量なツールのほうが私は嬉しいです.
まとめ
2018年Unityが驚きと面白みのあるソフトウェアとなって,更なるグッドニュースを望みます.グッドラック!