作者:李rumor
鏈接:https://www.zhihu.com/question/354129879/answer/882012043
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
鏈接:https://www.zhihu.com/question/354129879/answer/882012043
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
首先對BERT本身的輸出做pooling就可以得到句子表示,然后用一些metric(比如cosine)來計算相似度。但BERT在預訓練時的目標是token-level的,這就導致訓練-預測目標不一致,直接得到的表示並不好用。
下面推薦一些改進:
1、直接對BERT輸出的表示進行改進
BERT-flow是20年字節提出的最新模型,但后來蘇神證實了簡單的whitening也能起到差不多的效果。
BERT-flow
題目:On the Sentence Embeddings from Pre-trained Language Models
論文:https://arxiv.org/pdf/2011.05864.pdf
代碼:https://github.com/bohanli/BERT-flow
字節在EMNLP2020提出了BERT-flow,主要是基於Sentence-BERT做改動,因為之前的預訓練+遷移都是使用有監督數據,而作者基於對原生BERT表示的分析發現,那些表示在空間的分布很不均勻,於是使用flow-based生成模型將它們映射到高斯分布的均勻空間,比之前的Sentence-BERT提升了4個點之多。

但這個模型的缺點是又加了一層機制,在預測時候會降低速度,同時在知乎上看到個別同學在自己任務上的試用反饋也不太好。不過我倒是驗證了SentEval上有監督的效果(論文只給了無監督的),效果跟Sentence-BERT差不多。
https://zhuanlan.zhihu.com/p/357864974