retarfiの日記

自然言語処理などの研究やゴルフ、音楽など。

PromptBERT: Improving BERT Sentence Embeddings with Prompts

arxiv.org

Sentence Embeddingを得る時、普通のBERTをFine-tuningなしで使うと全然使い物にならず、GloVeにも劣るとのこと。
自分もちょっと試した時全然ダメでした。
なので、テンプレートを用意したりdenoiseすると良いよ!という感じです。
具体的には、"私は東京在住です。"という入力文が与えられた時、
"「私は東京在住です。」は[MASK]を意味します。"というテンプレートに載せた入力を代わりに使います。
で、この[MASK]のBERTからの出力を[tex: h{MASK}]とします。
テンプレートの差分をdenoiseするために、"は[MASK]を意味します。"というテンプレートそのままの文章をBERTに入力して出力 h^{\prime}を得ます。
この時、position idは"「私は東京在住です。」は[MASK]を意味します。"で使った"は[MASK]を意味します。"で与えられるものを使用します。
[tex: h
{MASK}]と[tex: h{\prime}]の差分[tex: h{MASK}-h^{\prime}]を使ってSentence Embeddingとする模様。
テンプレートは複数使ったほうが良いみたいです。
これによってSTSでBERTそのままやGloVeをoutperformするようです。
学習用データセットを作るコストが高く、そのまま文のEmbeddingを用意したい場合は良さそうですね。

promptって辞書で調べると刺激とか促進って出てきたのでなんだっけ?と思ったのですがターミナルとかの対話的な意味なんでしょうかね。