Yandex.Algorithm 2018 の ML track という24日間の機械学習コンテストに参加したのですが
順位が128位以内の人はTシャツが貰えるコンテストでして、見事109位になりTシャツを貰えることになりました!
(※実際は多くの参加者がやる気無かったらしく実質参加賞みたいな感じでのゲットではある)
Standings — ML track — Algorithm 2018
ヤンデのML、最終順位確定してて109位だた pic.twitter.com/Nrvvt97HYT
— レナドーン ◆NEETSDKASU (@neetsdkasu) April 23, 2018
ヤンデからシャツの案内きた pic.twitter.com/nxXX2fQR2b
— レナドーン ◆NEETSDKASU (@neetsdkasu) April 29, 2018
コンテストで出題された問題の内容は
AliceとかいうYandexが運営してるらしい会話AI(?)とUser(?)との短い会話が与えられるので用意された複数のAlice返事候補を良さそうな返事順に並べろって感じ
会話は最大3センテンスで
Userの発話、Aliceの返事、そこにさらにUserの発話
という3つで
この3つで話の流れ(文脈)が発生するのでそこから予想されるAliceの良い返事とはどれかを考えるみたいな?
(はじめの2つのが無くて文脈がないテストケースもあった)
※なお、この会話はロシア語である…
コンテスト参加者には
教師データ(train.tsv)
仮テストデータ(public.tsv)
最終テストデータ(final.tsv)
のタブ区切りファイルが与えられるのだけど
final.tsvだけはコンテスト最終日の数日前くらいに配布されててそれに気づかない人たちが最終テストに落ちてた
その数日前までの順位はpublic.tsvを用いた結果の成績で順位付けされていて、public.tsvはfinal.tsvのサブセットになっていた
会話データはロシア語ではあったが、単語や記号ごとに半角スペース区切りになっていたので、謎の親切設計にはなっていた(?)
各ファイルには
会話データと返事候補が載っているわけだが
学習用の教師データ(train.tsv)には
当然ならがら返事候補の評価のデータも含まれていて
その評価はgood, neutral, badの英単語表記の評価で、それに加えてその評価の信用率(信頼率?)も存在してた
このコンテストは、Yandex.Algorithmの他のコンテストと違って、コンテスト中の参加者同士での情報交換が許されてはいた
のだけど、用意されていたチャットルームがロシア語のだったので、それには参加しなかった
それと問題文のページにデータファイルのほかに
この機械学習コンテストで使える資料やライブラリやAlice関連の資料などがあったのだが
それらには結局は手をつけなかった
参加にあたった当初の予定では
コンテスト早期に思いついてた謎アイデアを試したあと
機械学習について勉強して勉強の成果を試す
ってのをやろうと思ってたのだけど
結局はコンテスト最終日数日前まで何もせず
その最終日前の数日に謎アイデアを実装して提出するだけで終わってしまった
機械学習について学ぶことに失敗したのだった
さて、謎アイデアについてだが
日本語だと漢字や仮名など文字種が大量にあるが
入力されるのはロシア語で、文字種はそんなに無いだろうと思い
また、会話に使用される文字と内容には何らかの相関があるんじゃないかと勝手に決め付けた感じで
全ケースの会話と返事のそれぞれに使用される文字をまとめて、文字と文字を対応させて数値を割り振り表を作り
個別のケースに使用される文字にその数値の合計を足してそのケースの評価値として使うみたいな感じで
そんでもって表の数値をいくつかランダムに選んでそれぞれランダムに変化させたものを教師データに対して評価値を計算し、結果がよくなるようならそのランダム変化を採用して表に反映し、悪くなるようなら元の表に戻す、という感じで機械学習っぽいことをやった
コンテスト最終日直前に実装を始めたもんだから
学習ぽいこと2日間でたいした時間を割り当てられなかったので、そこが多少残念だった
少し学習させるごとにサブミットして暫定順位のスコアを眺めてて学習のたびに改善してたので
もっと早くから取り掛かっていればもっとよいスコアが出ていたのかもしれない
WA含めて10回ほど出したけどちゃんとスコア上がっていったのでもっと時間かけれてればなあ・・と多少思うなりした、一応暫定段階ではシャツ圏内のハズだが・・・? pic.twitter.com/ijNptjdgVs
— レナドーン ◆NEETSDKASU (@neetsdkasu) April 23, 2018
なお、
Yandex.Algorithm 2018には
Optimization trackというマラソンマッチ風なコンテストも開催されていて
Optimization trackは2つのコンテストが開催されていて
(一方だけ参加もOKな)総合順位が上位128位以内だとTシャツが貰えるということで参加したのだが、150位とまったく届かない結果になった
Optimization track — Algorithm 2018
ヤンデのopt、案の定シャツ圏外150位でフィニッシュですた(終わり) pic.twitter.com/UV5u7zi4gY
— レナドーン ◆NEETSDKASU (@neetsdkasu) April 9, 2018
opt1のコンテスト問題はタクシーが客拾って近くの遊び場に連れて行くみたいな感じで
opt2のコンテスト問題はネットワーク上のニュースをボットが拾い集める、という感じ
タクシーやボットの動きを最適化しろってお題で、めっちゃ難しかった
Yandex.Algorithmの関連告知はCodeforcesで行われてるのがあってそこに少し情報があった
Yandex.Algorithm ML track started - Codeforces
Yandex.Algorithm — Optimization track, round 1 - Codeforces
Second round of the Yandex.Algorithm Optimization track has been started! - Codeforces
なんでか知らんけど
これらの記事でリンクされてる
https://contest.yandex.com/algorithm2018/
の「.com」ドメインのリンクにはコンテスト後にアクセスできなくなってて
https://contest.yandex.ru/algorithm2018/
の「.ru」ドメインにアクセスしないと繋がらなくなってた
(現在は「.com」のほうにも繋がるみたいだけど)