第33回 人工知能学会 金融情報学研究会(SIG-FIN)にオンライン参加してみた
目次
注意
※記事は個人的な見解であり、所属する会社・組織とは全く関係ありません。(研究会は休みの日に個人的に参加しております。)
はじめに
2024年10月19日(土) および 10月20日(日)に開催された。「金融情報学研究会(SIG-FIN)」にオンライン参加しました。きっかけはTwitterで有価証券報告書を用いたNLPコンペ(?)が開催される事を知って、その運営を金融情報学研究会がされているようだったため興味を持ったからです。
有価証券報告書を用いたコンペ
見かけたツイート*1
研究会について調べた限りだと、人工知能学会の会員でなくても1000円の参加料さえ払えば誰でも参加できるようでした。現地とオンライン参加があったんですが、僕が見たときには既に現地参加のチケットが売り切れていて、オンライン参加のみでした。
下記のリンクから、参加していなくても発表プログラムと投稿論文が見れるようです!凄い太っ腹だ(?)
第33回 人工知能学会 金融情報学研究会(SIG-FIN):https://sigfin.org/?033
僕は全部見る見るのが難しかったので、興味のある所だけつまみ食い的に見ました。いろいろ面白い発表があったのですが、その中から特に個人的に気になった所だけ次の見出し以降でメモとして共有します。
1日目メモ
公聴したのは
- 「9:00-10:40 人工市場(5件)」のうちいくつか
- 「10:55-12:15 テキストマイニング1(4件)」の全て
- 「14:05-15:25 機械学習(4件)」のうち「(11) 日本企業データを用いた機械学習による利益変化の予測」のみ
だけです。
その中で、個人的に一番興味深かったのは最後に見た
(11) 日本企業データを用いた機械学習による利益変化の予測
屋嘉比 潔 (大阪公立大学), 黒木 裕鷹 (Sansan株式会社), 中川 慧 (野村アセットマネジメント株式会社, 大阪公立大学)
https://www.jstage.jst.go.jp/article/jsaisigtwo/2024/FIN-033/2024_68/_article/-char/ja
こちらです(敬称略)。
僕の理解で概要でまとめると、
- 企業が増益になれば、株価は上がるので増益減益を予測できたら儲かるよね
- 有価証券報告書などの財務諸表を用いて、機械学習やLLMを用いて増益減益の2値予測できるかやってみた
- 機械学習でも、LLMでもある程度増益減益予測できた
- LLMのほうが増益減益予測の正解率は悪いけど、投資リターンは良かった
上記の通りです。
僕もLLMで、面白そうな銘柄を自動で探索させてその中から買いたい銘柄を決めるのも面白そうだと思いました。また、最後の「LMのほうが増益減益予測の正解率は悪いけど、投資リターンは良かった」についても興味深いと思いました。
論文の中でも
投資戦略の観点ではGPT-4oによる予測が有効である可能性が示唆される.これは,GPT-4oが財務諸表に基づく定量データに加えて,ドメイン知識や定性的議論を組み合わせることで,新たな視点を,投資リターンに反映させていることを示唆している.
と指摘しており、回帰モデルやランダムフォレストのような単純な2値分類予測モデルとは違って、LLMの持っている知識が投資リターンに効いてくるという示唆という知見も面白かったです。
2日目メモ
公聴したのは
- 「13:05-14:25 テキストマイニング2(4件)」の全て
だけです。
本当は「(21) 有価証券報告書の表を対象としたコンペティションの提案」こちらを見るつもりだったのですが、色々とあり見そびれてしまいました。後で、これだけ録画公開してくれたりしないかな。。。*2
2日目で個人的に一番興味深かったのは
(24) 大規模言語モデルを用いた金融テキスト二値分類タスクの定義文生成とチューニング手法の提案
高野 海斗 (野村アセットマネジメント株式会社), 中川 慧 (野村アセットマネジメント株式会社, 大阪公立大学), 藤本 悠吾 (野村アセットマネジメント株式会社)
https://www.jstage.jst.go.jp/article/jsaisigtwo/2024/FIN-033/2024_155/_article/-char/ja
こちらです(敬称略)。
僕の理解で概要でまとめると、
- LLMでzero-shotしようとしても、精度でなくてfew-shotになること多いよね
- 依頼者のタスクの定義(言語化)が曖昧なことが多い
- でもfew-shotのためのデータを入力文に合わせて動的に取ってくるような仕組みを実装するのは面倒
- few-shotによりタスクの正確な言語化をする必要がなくなる
- zero-shotに必要な分類の定義って言語化しておくと、タスクの引き継ぎのマニュアル作成や業務理解にも使えそう
- 2値分類用のプロンプト文を自動生成しよう
- 2値分類の正解のデータセットを用意して、そのデータからプロンプト文を自動生成する
- LLMに先ほどの正解データセットを見せて、プロンプト文を作成する。
- 作成されたプロンプト文を使って正解データを分類させて、間違えたものをピックアップして、またLLMにプロンプト文を修正するように依頼する。
- これを繰り返す。
上記の通りです*3。
プロンプト文を作成するときに、確かに定義があいまいなものを扱うときは正解データはあるけど何を書いたらいいのかわからない場面って多い気がするので、色々と使い道とか応用先があるのではないかと思いました。
それと、著者の方が実装したプログラムコードなどをgithubに公開されているそうです!ぜひ試してみてください。僕も時間があるときにぜひ試してみようと思います!
公開github: GitHub - k-takano0423/BiClass-Definition-Generator
おわりに
テキスト系の発表は、ある程度理解できましたが、金融時系列系の内容は勉強しないとちょっと難しいかもしれないとも感じました。
また、来年も時間があればつまみ食い的に参加してみたいと思いました。
UFO2024は、時間的に参加できそうであれば参加してみようかと思います。
機能語辞書について
機能語辞書として使えそうなもの以下の2つを見つけることができました。
- 日本語機能表現辞書「つつじ」
- 機能語用例文データベース「はごろも」
- 日本語文法項目用例文データベース『はごろも』(http://hgrm.jpn.org)
- 堀恵子・江田すみれ(2011)「web公開予定文法用例検索システム『日本語文法項目用例文データベース』の文法項目選定について」『日本語教育学会2011年度春季大会予稿集』
それぞれの概要について紹介します。
日本語機能表現辞書「つつじ」
- この機能表現辞書では計算機で利用することを想定している。
- 日本語には複数の形態素からなる、1つの機能を持った「複合辞」が多く存在する。
- この論文では、機能語と複合辞を合わせて「機能表現」と呼ぶ。
- 機能表現の異形(活用など)をほぼすべて収録。
- 機能表現の異形を体系的に扱うため、見出し体系を9つの階層からなる階層構造で収録。
- 辞書には、341の見出し語と15,771の出現形が収録。
機能語用例文データベース「はごろも」
- 人間が利用することを想定。
- 計算機(自然言語処理)で利用することを想定していない。
- 日本語教師、海外の非母語話者日本語教師、日本語学習者の支援を目的に作成された。
- 見出し語は旧JLPT*1の「出題基準」など5つの資料から選んだ1,848語。
以上のことから、自然言語処理として利用する場合は「つつじ」のほうが適切であると考えられる。しかし、現在のところ日本語機能表現辞書「つつじ」はダウンロードサイトが無くなってしまっている。
日本語機能表現の処理
Research Topics: Processing Japanese Functional Expressions
日本語機能表現辞書「つつじ」ダウンロードサイト
http://kotoba.nuee.nagoya-u.ac.jp/tsutsuji/
一方、機能語用例文データベース「はごろも」は利用可能であるため「つつじ」が復活するまではこちらで代用するしかないと思われる。
DE0-CVの初期の環境設定
本記事について
入門用のFPGAボードの一つである"DE0-CV"についての初期の環境設定についての概要を書きました。Windows10環境です。
「動かしてわかる CPUの作り方10講」という本を読んでいてCPUの実装をFPGAで行いたかったため、本で紹介されていた"DE0-CV"を購入した。
メーカのページ
目次
必要なソフトをダウンロードとインストール
メーカのページからダ「DE0-CV CD-ROM」をダウンロードする。アカウントの作成が必要。「CD-ROMs」とか色々あったが自分は「CD-ROMs」をダウンロードした。
Terasic - DE Boards - DE0-CV Board

次に、intel社のサイトからFPGAに書き込みする際に必要なソフト「Quartus」をダウンロードしてインストールする。自分はその時に最新版だった「Version 20.3」をダウンロードした。これもアカウントの作成が必要。Editionがいくつかあるが、自分は「Lite Edition」を選んだ。他のEditionは有料らしい。

「Lite Edition」を選択すると別のページに飛ぶ、とりあえず丸付けた2つをダウンロード。

「Quartus」をインストールする。インストールした「Quartus」を管理者権限で起動して、「Tools」の「Install Devices」を押す。進んでいって、さっきダウンロードした「device support」のファイルがあるフォルダを選択する。すると次のような画面が出るので、チェックを入れて進んでいくと"DE0-CV"に必要なファイルが入る。

ひとまずこれで「Quartus」の方はおk。
ドライバとかの設定
一番最初にダウンロードした、コントロールパネルのソフトを起動し、接続しようとすると、いろいろなエラーが出る。(自分はでました。)そこで、次はドライバなどの設定をする。
以下の手順に従うと直った。
自分が行ったこと、
1.デバイスマネージャを開いて「USB Blaster drivers」を入れる。下のようになって値手認識されてない。

右クリックして更新でフォルダ選択してドライバを入れる。
パス : ...\intelFPGA_lite\20.1\quartus\drivers\usb-blaster
これで認識される。

参考動画
https://www.youtube.com/watch?v=bwoyQ_RnaiA
2.「bin32」のフォルダを「...\intelFPGA_lite\20.1\quartus」に置く。

「bin32」は先ほどのPDFに書いてあるリンクでダウンロードできる。
「bin32」リンク
http://mail.terasic.com.cn/~wyzhou/bin32.zip
以上2点を行ったら、「DE0-CV」をUSBケーブルでパソコンに接続して、「DE0-CV」の電源を入れて、「DE0-CVのコントロールパネル」を開く。
左下のconnectを押すと...

おめでとう。接続できました。LEDとか7-SEGとか押すとボードもそれに対応して変化するよ。
参考になったサイト
"failed to find quartus installation folder" と表示されて MAX10-Lite のコントロールパネルが使えないときの対処法 - FPGA学習メモ
レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】をやる。
本記事について
E869120さんがQiitaに公開されている記事をやってみてそれについて感じたことをメモする。
qiita.com
メモ
全探索:全列挙
1.ITP1_7_B - How Many Ways?
- 問題リンク
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_7_B&lang=ja
- メモ
問題文の「重複無しで...」と「組み合わせの数を...」の部分を見落としていて、最初はi,j,kの正整数(順序あり)を全探索しようとしてしまい、少し時間を無駄にした。このようにたまに問題文を間違えて認識してしまうことがあるので、注意しなければいけない。j = i, k = x - i - jとして問題のあるi,j,kを省いたけど、j = i + 1, k = j + 1で全探索して数えたほうが楽。
- 提出コード
AIZU ONLINE JUDGE: Code Review
- 参考サイト
2.AtCoder Beginner Contest 106 B - 105
- 問題リンク
- メモ
Nの約数を全列挙するアルゴリズムを使う問題。Nの約数の全列挙の効率的なアルゴリズムの計算量はO(√N)である。効率的でないアルゴリズムの計算量はO(N)である。
- 提出コード
Submission #16922721 - AtCoder Beginner Contest 106
- 参考サイト
N の約数を全列挙するアルゴリズム | アルゴリズムロジック
- 関連問題
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_3_D&lang=ja
B - 完全数
3.AtCoder Beginner Contest 122 B - ATCoder
- 問題リンク
- メモ
切り分けられる文字列全てを取り出し、その文字列が条件を満たすか調べていた。これでもACできるが、解説動画で紹介されていたやり方のほうが計算量も少なくて済みそうだし書くのも楽だと思った。文字列について、それぞれの文字が条件を満たすかどうか(ATCG文字かどうか)を01ビット列に変換して最長な1の数列の長さを求める。
- 提出コード
4.パ研杯2019 C - カラオケ
- 問題リンク
- メモ
全探索を実装するだけ。特に必要な知識は無し。
- 提出コード
全探索:工夫して通り数を減らす全列挙
6.三井住友信託銀行プログラミングコンテスト 2019 D - Lucky PIN
- 問題リンク
- メモ
単純に文字列Sから3桁を取り出して全ての組み合わせ計算をすると(3x10^4)C3≒10^12で間に合わない。だけど、そもそも、3桁の暗証番号は各桁0-9だから組み合わせは10^3通りしかなくて、その暗証番号が文字列Sにその順番通りに存在するか各桁ごとに全探索すれば、計算量は最大でもO(10^3*30000)≒O(10^7)だから間にあう。
- 提出コード
Submission #16934841 - Sumitomo Mitsui Trust Bank Programming Contest 2019
7.JOI 2007 本選 3 - 最古の遺跡
- 問題リンク
- メモ
単純に全ての点から4つの点の組み合わせをすべて全探索するとO(NC4)となりこれはO(3000C4)≒O(10^12)で当然間に合わない。ここで、思いつくのは正方形は連続する2頂点が決まれば、残りの2頂点は反時計回りに90度または-90度回転の2通りに決まる。また、座標xyはともに0-5000であることから、bool型の二次元配列bxyを作って、その座標に点が存在すればtrue、その座標に点が存在しなければfalseを代入する。そうすれば、任意の座標に点が存在するかしないかはO(1)で求められる。よって、すべての点から2つの点の組み合わせを選び、その2点を連続する頂点とする正方形は2通り存在できる。それらの正方形がそれぞれ存在するための必要純分条件は残りの2頂点が存在するかであるから、これは先ほどの二次元配列bxyを使えばO(1)で調べられる。以上の考え方で全探索した。
補足で書くが、私の提出コードを確認してもらえばわかるが自分の解き方では、少し込み入って行っていて面倒である。しかも、先ほど言及していたそれぞれの正方形の残りの2頂点の座標を求める式について、図を描いて考えていた(高校数学的気分)。しかし、大学で学ぶ回転行列を使えばもっと簡単に残りの頂点の座標を考えることができる。回転行列の考え方の気持ちを下式に示す。図も含めて説明を書きたいところだが、めんどくさいので省略します。すいません。参考リンクを載せておくので、それでお願いします。
よって
または
- 提出コード
Submission #16937602 - 第6回日本情報オリンピック 本選(オンライン)
- 参考リンク
【Python】JOI 2007 本選 3 - 最古の遺跡(①高校数学ベクトル、②「in リスト」は激遅)【AtCoder】 - Qiita
Ruined Square [AtCoder Beginner Contest 108 B] - はまやんはまやんはまやん
https://www.ioi-jp.org/joi/2006/2007-ho-prob_and_sol/2007-ho-review.pdf
- 関連問題
8.Square869120Contest #6 B - AtCoder Markets
- 問題リンク
- メモ
確かに、工夫するとO(30*30)で全探索できる。最初にやり方を思いついた時、ホントにあっているのか少し不安に思った(証明できるのかなと思った)が入力例が思いついた方法の通りだったのでこれならあってるはずだと思って実装して提出したら、ACした。入力例を見ることも非常に重要である。それぞれ、入口は配列A、出口は配列Bから任意の一つの座標を選びその入口と出口の移動時間を調べて、最小の移動時間を出力すればよい。移動時間はA[i] < B[i]よりO(1)で計算できる。
- 提出コード
9.JOI 2008 予選 4 - 星座探し
- 問題リンク
- メモ
制限時間10sになっていたのを見逃していて、いつも通り制限時間2sで考えていた。制約はちゃんと見ましょう。JOIの予選は制限時間がないらしいです(解説に書いてた)。ただ、制限2sでも解けるので問題はなかった。単純に全探索するとO(MN^2)≒O(2*10^8)となる。これは10sくらいかかる。効率よく全探索するとO(MNlogN)≒O(2*10^6)となり間にあう。星座の一つの点を決めて、任意の星を一つ選びその星を先ほどの星座としてみなし、移動量dx,dyを求める。その後そのdx,dyをそのほかの星座の座標に足して、その座標に星が存在するかを調べる。星座すべてが存在すれば良い。
- 提出リンク
全探索:ビット全探索
10.ALDS_5_A - 総当たり
- 問題リンク
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_5_A&lang=ja
- メモ
dfsで部分和問題を解く。setに可能な部分和を保存した。
- 提出リンク
競技プログラミングに使えそうなC++のSTLをまとめる
Pairについて
今度書きます。
std::Setについて
概要
setは順序付き集合。同じ値は保持しない。データの追加、削除、検索はO(logN)。重複はなく、キーに対して自動でソートされてデータが保持される。
準備
setを使用するためには
#include <set>
を記述する必要がある。
例
#include <bits/stdc++.h> using namespace std; int main() { set<int> s; s.insert(2); //データの追加はO(logN) s.insert(10); s.insert(6); s.insert(100); s.erase(100); //データの消去はO(logN) auto itr = s.find(10); //値を検索。値が獣所付き集合に含まれないときはend()を返す。O(logN) cout << "10:" << s.count(10) << endl; //値の個数を返す。setは重複がないので1又は0のみ。O(logN) cout << "100:" << s.count(100) << endl; cout << "size:" << s.size() << endl; //集合に含まれる要素の個数を返す。 }
競技プログラミングのためにC++で使えそうなことをまとめる
自分用にまとめます。ちょくちょく更新していくと思います。
C++で浮動小数点について、表示桁数を指定する。
ライブラリ:iomanip
関数:
setprecision(int n)
#include <iostream> #include <iomanip> using namespace std; int main() { double a = 13.1415926535; cout << setprecision(10) << a << endl; cout << fixed << setprecision(10) << a << endl; }
出力
13.14159265 13.1415926535
メモ:
fixedを使うと、整数部分も含めてsetprecisionで指定した桁数で表示される。
fixedを使わなければ、整数部分を含めずにsetprecisionで指定した桁数で表示される。
参考サイト(cppreference.com)
std::setprecision - cppreference.com
std::fixed, std::scientific, std::hexfloat, std::defaultfloat - cppreference.com
√(ルート)の計算
ライブラリ:cmath
関数:
float sqrt(float x)
double sqrt(double x)
long double sqrt(long double x)
double sqrt(Integral x) // C++11 から
float sqrtf(float x) // C++17 から
long double sqrtl(long double x) // C++17 から
#include <cmath> #include <iomanip> #include <iostream> using namespace std; int main() { double a = 3.141592; cout << sqrt(a) << endl; cout << setprecision(10) << sqrt(a) << endl; }
出力
1.77245 1.772453667
メモ:
関数がオーバーロードされているので、引数の型によって返り値の方が異なる。
参考サイト(cppreference.com)
sqrt - cpprefjp C++日本語リファレンス
はてなブログでLaTeXを導入するまで
はじめに
今回が初めての記事なんですが、これからはてなブログで記事を書く際に数式を書きたくなることもあるだろうと思い、LaTeXをはてなブログで導入しようと思いました。色々な人が導入方法を書いてくれいていますが、一応自分も書いておこうと思います。自分はLaTeXなんて使ったことがなく、これが初めてです。
LaTeXとは
TeXという、フリーの組版ソフトが機能強化されたものがLaTeXだそうです。組版(くみはん)とは、活版印刷の用語で活字を組み合わせて、印刷用の版を作ることがもともとの意味らしい。今では、組版と言えば、レイアウトに従って紙や画面に文字・写真・図などを配置することを言う。
導入
1.MathJaxをはてなブログで使えるようにする。
MathJaxはJavaScriptを利用してLaTeXで記述された数式をウェブブラウザ上で表示できるようにするものらしい。
MathJax | Beautiful math in all browsers.
下にスクロールしていくと、Documentaionという項目があるので、その中からGetting Startedを探してLearn moreをクリックする。すると
If you write your own HTML (directly or via a template/theme engine), you can include MathJax by adding this snippet to your page:
と書かれた下にHTMLが書かれていると思うのでそれをコピーする。
<script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML' async></script>
現在では(2019/02/26)上記のように書かれていた。
自分のはてなブログの管理ページからデザイン>カスタマイズ>ヘッダーに移動する。
タイトル下と書かれたところに、先ほどコピーしたHTMLを貼り付ければ、導入完了です。
2.記事で実際に使ってみる。
1の手順が完了していれば、後は簡単に書けるはずです。
決まりがあるようでLaTeXを書きたいときには
[tex:LaTeXで書きたい文字列]
と書かなければいけません。"LaTeXで書きたい文字列"と書かれたところを自分で書きかえてください。
例
[tex:E=mc^2]
ぜひ皆さんもLaTeXつかって記事を書いてください。LaTeXの文法などは各自自分で調べながら書いてください。
おまけ
[tex:E=mc^2]
のようにコードを記事に書きたいのに
と数式に変換されてしまって困っている人のために、コードを記事に載せたいときの方法を書いておきます。
編集(見たまま)でコードをかいたあと、HTML編集で
<pre><code>コード</code></pre>
とコードを囲むことで変換されなくなります。