各発表については 1 ヶ月前の記憶に基づいて書いているため正確ではないかもしれません。
言葉遣いの校正をせずに寝ました。
0 日目
リーダーボードハッカソン
ハッカソン内容は事前ガイダンススライドを参照してください。
勝利!イエイ!
三銃士の挨拶で開場のボルテージが上がり「初めまして」の 1 秒後に開発スタートというスピード感。ただ、ピリピリすることなくわちゃわちゃしていた。 研究でも開発でも「アレやってみるか」ということは常々考えるが、今回のハッカソンは 4 時間なので「それ終わるのか?」という脳内壁打ちが発生していた。
プロンプトチューニングに関しては初心者なのでここからの話はすべて勘だが、なんとなく以下のような印象を持っていた。
- あまり長文プロンプトはうまくいかないのではないか
- 文章生成よりも特定の用語の抜き出しや編集のほうがうまくやってくれる
- 指示するよりも few show で例示したほうが出力形式が安定する
なぜなら自分がそうだから。 この勘を試したいということもあり、僕はプロンプトチューニングの担当をさせていただくことになった。 最終的にプロンプトは次のように 2 ステップで作成する形に落ち着いた。
- LP ページのテキストからセールスポイントを抽出する
- 抽出したセールスポイントを使って広告文を生成する
入出力だけ見れば「LP ページ → セールスポイント(+LP ページ+検索クエリ) → 広告文」となっているので、GPT への informative (?) なプロンプトを GPT 自身で作らせた感じ。
この流れシンプル化したものを huggingface Spaces に公開しているのでぜひお試しください。
レイテンシ削減や料金節約のために CAMERA データセットを読み込んだり random few-shot をやめてプロンプトを固定したら、似たような広告文が出力されるようになった気がする。真面目さかフレンドリーさのどちらのイメージを出したいかによって shot は変えたほうが良いのかもしれない。
裏話や心情
CAMERA には LP テキストがほぼ空っぽのデータもある。それが入力されると「すみません。セールスポイントを特定できませんでした。」というオワってる広告文が生成されることがある。 ここで僕が取った方法は「無視」である。 テストデータはきれいなデータだけにするという高山さんの言葉を 100% 信用し修正工数ゼロとして他の作業を急いだ。
繋ぎ込みの工数を考えてなかった。僕の方では固定の few shot で実装していたので、本番用の random few shot に差し替えるのが少々手間取ってしまった(最初から random にしておけばよかった)。ただ、機能を関数化していたので大きな作り直しなどはなく無事(← ではなかったが)取り敢えず提出できるものはできた。Done is better than perfect.
そして、メンバー間でタスクにかぶりがなく、実装された機能も偶然(?)モジュール化されていたので、お互いの実装が干渉せず繋ぎ込みが一瞬で終わった。こんなことってあるんだって思った。
実は生成文の分析をほとんどしていなかった。 ノートブック全体の実行が遅かったので、開発中にやる時間が取れなかった。 最終提出版ができたことだし余裕ぶっこいて生成された csv ファイルを眺めていたら、valid set の 1 行目の広告文が “ちゃれんじ一年生” ではない事に気づいた(分かる人には分かる)。 広告文が全く関係ないサイトのものだったのである。 背筋が凍った。だって、提出版 ver1 実装したの自分だもん。原因俺やん。 終了時刻まで残り 10 分くらい。詰んだか?
落ち着いて原因が変数名のミスだったことを特定し、無事(← こっちは本当)戦犯を回避した。 変更規模が小さかったことと複数機能を同時に組み込んでいなかったことも原因の早期発見に寄与したかもしれない。 もうこのときは、生成文の質とかなんも気にしてなかった。ただ、生成文とサイトの内容の整合性が取れているのを確認して胸を撫で下ろした。
集中していて手を付けていなかった差し入れのハーゲンダッツの蓋をようやく開けた。ちょっと溶けてた。
さてワクワクの評価タイム。先述の通り、自分の班の生成文の傾向を知らなかったので、どれが自分の班のものか全く分からなかった。 なので、結果発表で 1 位だったときは衝撃的だった。
1 日目
チュートリアル (1) 「グラフを用いた近似最近傍探索の理論と応用」
グラフといえば離散数学のイメージがあったので、タイトルを読んだときは実ベクトルを用いる言語処理においてグラフがどう関わってくるかが疑問だったが、講演を拝聴して、とても身近な技術だと感じた。
探索の話の際に思ったことだが、路線図データをグラフとして、理科大の座標を入力すると最寄り駅の飯田橋までたどり着けるのかちょっとやってみたい。ライブラリを使えば簡潔なコードになりそう。
[S1-P12] 内部表現の幾何に基づく言語モデルの解釈
大山百々勢 (京大/理研), 山際宏明 (京大), 石橋陽一 (京大), 下平英寿 (京大/理研)
独立成分分析 (ICA) を単語埋め込み配列に適用した後に、次元毎に大きい値を取る単語を抽出してみると似た意味を持っていた。例えば、ICA 後の 1 次元目には食べ物らしさがエンコードされる。カクテルパーティ効果のように。
ICA は音声に対する手法のイメージがあったので、単語埋め込みの分析に使えるというのは初めて知った。結果の解釈性も高そうだった。
大学の授業を振り返ると、ICA のアルゴリズムは振幅分布を使う(つまり、時間軸を潰す)ので理論的には時系列である必要はない。 また、時系列ではないデータに ICA を適用すると(上手くいけば)教師なしでクラスタを分離するように振る舞うらしい。(幾何的解釈についてはこちらのサイトが分かりやすい: https://bitwalk.blogspot.com/2019/04/blog-post.html) この性質が音声では肉声の分離に役立つが、単語埋め込みだとどう解釈できるのかは興味深い。
モデルの埋め込みとパラメータを正規分布で初期化した時点では、中間表現も正規分布に従うのだろうか(統計をサボったせいですぐに思い出せない)。だとすると、学習後モデルで見られる非ガウス性というのは学習した結果の本質とみなせるかもしれない。ICA はモデルが何を学習しているのかという視点で射影してたりするのだろうか。
埋め込みについて話し始めると長々と続けてしまうくせがある。僕は多分
P( <|endoftext|> | 埋め込み表現 )
が低い。
[S2-P07] 2 段階対照学習による日本語文埋め込みモデルの汎用性獲得
福地成彦 (PKSHA), 星野悠一郎 (PKSHA), 渡邉陽太郎 (PKSHA)
OpenAI の ada は日本語に限ると超最強というわけではないらしい。シンプルで分かりやすい手法で高い性能が出てるのが気持ちよかった。
[S2-P12] 三言語モデル寄れば文殊の知恵を
稲葉達郎 (京大), 藤井巧朗 (横国大), 小原涼馬 (北大), 柴田幸輝 (筑波大)
共著者の所属一覧がユニークだった。他大学の学生同士で一緒に研究をスタートするという背景がとても良いなと思った(ちょっとうらやま)。
[S2-P13] 高性能な文類似度を用いた事前学習モデルの対照学習
山際宏明 (京大), 石橋陽一 (京大), 下平英寿 (京大/理研)
対照学習で用いる類似度指標をコサインから WRD や BERTScore などの(意味的類似度を上手く捉えられると言われる)手法に変えてみると性能がコサインより落ちたらしい。意味の類似度を測る際は角度だけを使うのが良いということになるが直感とは異なる。
角度が広がる or 狭まるように 2 点を移動させるのは簡単だが、WRD や BERTScore の大小を変えるように 2 点を移動させるのは難しそうだ。あるペアは近づけて他のペアは離すことを学習しようとするとなおのこと難しい。 となると、良し悪しを決める指標はある程度シンプルでないといけないのだろうか。 ただ、そもそものモデルが複雑なので指標をシンプルさとは別の問題があるような気もしている。
[S3-P19] 対照学習に基づく文埋込は各単語をその情報利得で重み付ける
栗田宙人 (東北大), 小林悟郎 (東北大/理研), 横井祥 (東北大/理研), 乾健太郎 (東北大/理研)
情報利得 $KL[~p(w|c)~||~p(w)~]$ のお気持ちの説明が分かりやすかった。これは、文脈語 $c$ を観測する前と後の $w$ の分布の間の類似度を測っている。もし、観測に意味がなければ $p(w|c) = p(w) \Rightarrow KL = 0$ となるが、観測に何らかの価値(利得)があれば $KL > 0$ となる。 このお気持ちを踏まえると、単純な頻度や情報量よりも情報利得のほうが学習で獲得した感がある。
もちろん言語処理において言葉の意味を考慮した手法は多々あるが、所詮言葉は記号列というところまで立ち上ると、確率的な現象として記述できる。 そうして考えると一気に言語が奥深く感じる(沼にダイブしているとも言う)。
YANS の前の研究室の MTG で [Oyama+2022] の
\[\dfrac{p(w'|w)}{p(w'|w)+\nu q(w')} = \dfrac{1}{1+\exp(-\langle u_w, v_{w'} \rangle)} \tag{3}\]がすんごい形してるねって話題になっていたのだが、ここですぐ再開するとは思わなかった。 この式は文中の各単語のノルムを情報利得に紐付ける重要な役割を担っている。 発表で、Transformer を解釈する際に word2vec を経由することに違和感があると聞いて、それは確かにと当時は思った。 しかし、SGNS (word2vec) は自己相互情報量 (PPMI)
\[PMI(w;c) = \log\dfrac{p(w|c)}{p(w)}\]の低ランク近似であるという話 [Levy & Goldberg, 2014] を(にわかながら)踏まえると、むしろ word2vec を経由することが自然に思えた。
モデルによる重み付けを Integrated Gradient (IG) ではなく SHAP 等で測っても同じ傾向があるというのが興味深かった。 重みを、モデルが割り振ったものではなく IG が獲得したものという見方もできてしまうので、この事実はモデルの説明手法に依存しないというために重要だと思う。
2 日目
[S5-P09] 財務諸表と仕訳データを用いた増減要因の説明文生成の初期検討
山岸駿秀 (マネーフォワード), 貞光九月 (マネーフォワード), 北岸郁雄 (マネーフォワード)
LLM を用いて過去と現在のデータの相違点の説明文を生成するという点が、自分が関わっているプロジェクトでやろうとしていたことと完全に同じだったので宣伝ツイートを見て聞きに行こうと思った。
CSV 形式でそのまま渡しても結構うまくいくのがびっくりした。 data-to-text 専用のモデルではなく、表をテキスト化して text-to-text モデルに渡すだけでうまくいくという話 [Kale & Rastogi, 2020] は聞いたことがあるが、csv のままでもいいというのは初耳。 “300 万” という数字がどこの会社(行)のいつ(列)のデータなのかを特定するのってそんなに簡単ではなさそうなのに。 LLM 不思議。
[S5-P13] HojiChar: テキスト処理パイプライン
新里顕大 (京大/LINE), 清野瞬 (LINE), 高瀬翔 (LINE), 小林滉河 (LINE), 佐藤敏紀 (LINE)
ずっとホジキャラだと思っていたけどホウジチャだと表彰式で知った。
[S5-P26] LoRA を用いた大規模多言語文埋め込みモデルの構築
矢野千紘 (名大), 福地成彦 (PKSHA), 深澤笙子 (PKSHA), 橘秀幸 (PKSHA), 渡邉陽太郎 (PKSHA)
英語で fine tuning しても日本語における性能が上がるという話が最初意外過ぎて理解できなかった。 英語のみで学習しているとき日本語の埋め込みは更新されない(byte-level tokenizer でなければ)。なのに、性能が上がるということは埋め込みが単語変化したのではなく、モデル内部のパラメータが文埋め込みをどう作るかが変わっている気がする。
出典: https://cotta.jp/special/article/?p=35224
これなら、英語の埋め込みが移動すればそれにつられて “ある部分空間内で近くにある埋め込み” も同じ方向に移動する(チョコチップをまぶしたパン生地のイメージ)。
しかし、単言語学習だと英語の埋め込みが日本語の埋め込みに “近い” ことは保証されない。なので、mT5 が勝手に言語間のアライメントを獲得してることが予想される。word2vec が教師なしで対訳辞書を作れるように [Mikolov+2013]、多言語モデル内部にもそういうモノがあるんだろうか。
また、fine tuning の際に LoRA によって更新されている空間は、 [Chang+2022] が言語に中立的な軸 (Language-neutral axes) と呼んでいる軸に沿った空間だけなのだろうか。
「日英機械翻訳を世界に浸透させるために行った 3 つのこと」
感動した。
- 大規模データを作る
- コマンド一発レベルまで使いやすく PR を出す
- WMT に追加してもらう
相手の方が協力的であれば、2 と 3 は「提案する」ことさえできれば実現できる。周りを巻き込むことで環境は大きく変えることができる。もやもやを抱えたまま放置したり誰かがやってくれるのを待つのではなく、自分からアクションを起こせば大袈裟ではなく世界が変わるんだと知った。
編集後記
ポスター発表って声出すの大変そうだなと思った。野球少年時代にランナーコーチャーでさえクビにされた僕には無理かもしれない。 また、聞き手にとっても配布資料がないので集中して聞かないともったいないことになると書きながら実感した。
書き終わって全体を眺めてみると、言語情報がどう埋め込まれているかについて発表が多くなった。やっぱり自分の興味はそういう方向なんだなと再確認した。
YANS からこのページの公開まで日が空いてしまった。言い訳として
- YANS の次の日から 1 週間長野に旅行に行って旅行でエンジョイしてたら頭から抜けた。そんで弊学の夏休みは短いのでもう後期はじまった。
- とても面白かった発表について考えれば考えるほど、よく分からなくなり文章が散らかって諦めモードに入った 🤩 → 🤔 → 🤔 → 🤔 → 😵💫 → 🤯
- VScode で日本語を書くとバグが起きて書く気が失せた。気づいたら直っていたのでよかった。
- 発表内容が公知とは知らなかったのでちょこっと書いていた内容をお蔵入りにしていた。
などがあったが、質を高めるために時間を置いたということにしておこう。
YANS 当日に限らないが、僕の研究を気にしてくれている方々から声をかけていただいてとてもありがたかった。僕は最近メンタルが弱いので、このような言葉のおかげで研究のモチベを保てている。 YANS 時点では研究方針が何もまとまっていなかったため聴講参加だったが、ここ数週間で狙いが定まってきたので NLP@神戸 までにはなんとか仕上げて、新しいテーマの自分らしい研究で応えたい。
ちょうど空が青みがかってきたので push して寝るか(2023 年 9 月 27 日 午前 6 時)