Ahogrammer

Deep Dive Into NLP, ML and Cloud

Universal Sentence Encoderをチューニングして多言語のテキスト分類

Googleが開発した多言語の埋め込みモデル「LaBSE」を使って多言語のテキスト分類」と題した記事を書いたところ、「Universal Sentence Encoder(以下、USE)と比べてどうなのか?」というコメントを見かけました。そこで、本記事では、多言語の埋め込み表現を作ることのできる「Multilingual USE(m-USE)」を使って、テキスト分類をしてみます。設定としては前回と同様、学習には英語、評価には日本語とフランス語のデータセットを使います。

記事では要点だけを紹介するので、コードについては以下のノートブックを参照してください。

文類似度

LaBSEの場合と同様に、TensorFlow Hubで公開されているモデルを使って、多言語の文類似度を計算してみます。m-USEには、TransformerベースのモデルとCNNベースのモデルがあります。Transformerベースのモデルは性能が高く、CNNベースのモデルは速度が速いという特徴があります。今回は、性能重視でTransformerベースのモデルを使用します。

以下の英語、イタリア語、日本語文の類似度を計算してみます。ここで、各言語の同一インデックスの文は同じ意味の文になっています。

english_sentences = [
  'dog',
  'Puppies are nice.',
  'I enjoy taking long walks along the beach with my dog.'
]
italian_sentences = [
  'cane',
  'I cuccioli sono carini.',
  'Mi piace fare lunghe passeggiate lungo la spiaggia con il mio cane.'
]
japanese_sentences = [
  '犬',
  '子犬はいいです',
  '私は犬と一緒にビーチを散歩するのが好きです'
]

類似度を計算した結果は以下のようになりました。左から英語と日本語、イタリア語と日本語、英語とイタリア語のペアとなっています。結果を見ると、LaBSEと同様、行列の対角成分の値が他より大きくなっていることがわかります。つまり、言語が異なっていても、同じ意味の文は類似度が高くなるように埋め込めているということを示唆しています。

f:id:Hironsan:20200918091807p:plain
各言語間の文類似度

テキスト分類

文を埋め込んで類似度を計算できることは確認したので、次はテキスト分類をしてみましょう。今回もAmazon Customer Reviews Datasetを使ってモデルの学習と評価を行います。Amazonの商品レビューを入力し、1/0の2分類で予測するモデルを作成します。前回のLaBSEでは、レビュー冒頭の128トークンを使って予測するモデルを作成しました。m-USEの場合、可変長の入力に対応しているので、理屈的には何トークンでも入力できるのですが、あまり長くても計算時間がかかるだけなので、今回は1024文字目までのトークンだけを用いています。

モデルのアーキテクチャは以下のようになっています。LaBSEの場合と同様、m-USEの上にドロップアウトと全結合層を足しただけです。

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_4 (InputLayer)         [(None,)]                 0         
_________________________________________________________________
keras_layer_4 (KerasLayer)   (None, 512)               85213184  
_________________________________________________________________
dropout_3 (Dropout)          (None, 512)               0         
_________________________________________________________________
dense_3 (Dense)              (None, 2)                 1026      
=================================================================
Total params: 85,214,210
Trainable params: 85,214,210
Non-trainable params: 0
_________________________________________________________________

学習データと評価データの数は以下の通りです。冒頭で述べたように、学習データには英語、テストデータには日本語とフランス語を使って評価します。

en fr ja
train 32000
test 8000 8000 8000

実験結果(acc)は以下のようになりました。性能の傾向はLaBSEと同様に英語>フランス語>日本語の順でしたが、LaBSEと比べると3〜4%程度、性能が低くなるという結果になりました。この結果がすべてのデータセットに当てはまるとは思いませんが、今回の設定ではLaBSEの方がm-USEよりも良い結果となりました。

en fr ja
LaBSE 0.9300 0.8944 0.8473
m-USE 0.9056 0.8589 0.8055

参考資料