テキストデータを扱うことは、数値データと並んで重要であり、それをRNNなど時系列データとして扱うことは基本的なアプローチである。しかし、ニュースフィードなどそれ自体が時系列データであるならば、画像として捉えることも有効なアプローチであるというのが今回の内容である。
このシリーズは、 機械学習を使って株価を予測したい人に役立つヒント集のつもりで執筆している。「こうすると失敗する」といった例や「こういったアプローチで取り組むのは有効」 という例を示していくものである。
前回:人工知能で株価を予測したい人へのヒント集(3):時系列データ解析という名のテクニカル分析
時系列データの時系列データ
日本語であろうと英語であろうと文章は時系列データとして扱うことができる。英語の方がスペースで区切られているので分かりやすいが、一つ一つの単語が順番に並んで意味を構成し、順に時間が進んでいくというイメージである。これは一つの時系列データである。
この一つの時系列データ(文)が順に並ぶニュースフィードやも当然時系列データである。この観点から見れば、縦に見ても横に見てもニュースフィードは時系列データであり、時系列データの時系列データとして解釈することができる。これはニュースフィードに限らず、twitterのタイムラインや掲示板の特定のスレッドのレスなども同様である。
例えば執筆時点(2019年10月31日18:00)でのウォール・ストリート・ジャーナルのWorld NewsのRSSを見ると、
- North Korea Fires Projectiles Toward Sea of Japan
- Chinese Manufacturing Slumps to Eight-Month Low
- China Is About to Switch On 5G. It’s Behind the U.S., but Not for Long.
- U.S. Destroyed Baghdadi Compound to Prevent Shrine to Terror Leader
- Popular Protests Rattle Arab Leaders
などと北朝鮮のミサイル発射を先頭に様々な記事タイトルが並んでいる。
画像としてニュースフィードを捉える
デイトレードをやっている人であれば、証券会社が提供するソフトウェアを使っているケースも多いと思うが、中には大抵ニュースフィードが流れているわけである。この場合、一通り目を通すこともあるだろうが、全ての単語を凝視しているわけではないだろう。流し読みしつつ、何らかの重要なキーワードに目が止まるはずだ。
筆者の私見としては、この時の状態は沢山の写真を順にパラパラと眺めていく状態と近いと考えている。(神経科学的に近いと言っているのではなく、沢山の情報を斜め読みし、時たま特定の情報に注目する形態が近いと言っている。)
そこで生まれたのがニュースフィードを画像として捉えるというアイデアである。ある時点で視界に入るニュースフィードの情報を画像として処理できれば、過去の状態にとらわれることなく、特定の時点を静的に分析することが可能だからだ。
画像として捉える
では、どうやってニュースフィードを画像として捉えるか。自然言語処理においては文や単語を何らかの形で数値データに置き換えなければならない。その時に使う非常に基本的なテクニックとしてBoW(Bag-of-Words)とword2vecがある。
まず、BoWは例えば予め代表的な5,000語を決めておき、「リンゴ」は[1, 0, 0, … , 0, 0]、 「猫」は[0, 1, 0, … , 0, 0]、 「羊」は[0, 0, 1, … , 0, 0]、 などのように0と1だけで5,000種類のベクトルを作る。(one-hot-encodingという。)
そして、特定の文や文章から、出現した単語のベクトルを足し合わせることで、文を数値だけで表現することができる。
仮に、一つの記事タイトルで一つのベクトルを作り(重複単語も1として数える)、5,000記事分用意すれば、5,000×5,000の0と1だけで表現される行列ができる。
0と1だけで表現される行列とくれば、これは白黒画像と同様のものと考えられる。機械学習において白黒画像の認識をする場合、0と1で画像を表現し、それをCNNなどのニューラルネットワークで分析していく。
BoWを使って0と1だけでニュースフィードを表現することができれば、画像の様に分析することが可能である。
このアイデアは別に真新しいものではなく、Google DeepMindの囲碁プログラムであるアルファ碁(AlphaGo)でも、当初はCNNとモンテカルロ法を利用しており、ここでは盤面を画像として捉える手法が使われている。盤面を19×19の画像として考え、それぞれのピクセルを白・黒・何も置いていないという3つの状態で捉えて学習が行われている。
もう一つWord2Vecは、似た単語が近い数値になるように単語を実数のベクトルとして表現する手法である。仮にデータベースにある語彙を全て50次元ベクトルで表現するとして、ニュースフィードの重要キーワードをTF-IDFや感情分析などでピックアップし、縦に並べてやれば、50×n次元の行列になる。
それぞれの要素は実数だが、これは非常に色の種類が多い画像として捉えることができ、同様の分析に応用できる。
データの捉え方はアイデア勝負
別にこの方法が最適解であるとは言っていない。この手法が有効であるデータが存在することを把握しているが、どんなニュースフィードにも対応できるとは限らないし、何よりもこの方法は非常に計算資源を食う。
この記事で本当に言いたいことは、データの捉え方は一面的ではないことである。前々回にテキストデータのノイズがノイズでなくなる時があるといった場合など、とにかく自由な発想でデータを捉えることが重要である。
関連記事:人工知能で株価を予測したい人へのヒント集(2):ノイズがノイズだとは限らない
分野に足を踏み入れた当初は一般的なやり方をまず試してみることが重要だが、少しずつやり方を変え、工夫していくということをしなければならない。そこは完全にアイデア勝負であり、そこからどうすべきかについてこれ以上助言を与えることはできない。
前回:人工知能で株価を予測したい人へのヒント集(3):時系列データ解析という名のテクニカル分析
次回:人工知能で株価を予測したい人へのヒント集(5):ディープラーニングは万能ではない