nikkie-ftnextの日記

イベントレポートや読書メモを発信

知識強化言語モデルの1つ LUKE をさがして(2025年1月時点)

はじめに

みてみて🫶LUKE1 nikkieです。

GPTの系列(デコーダ構成)とは異なりますが、(BERT系列の)LUKEというモデルについて知っていることをまとめます。

目次

『大規模言語モデル入門』より

エンコーダ構成の日本語モデルの1つにLUKEが紹介されています(5.6)。

LUKE(Language Understanding with Knowledge-based Embeddings)は(略)、Wikipediaから得られるエンティティ(entity)情報を取り入れたモデルです。(Kindle版 p.250)

エンティティとは、人物、場所、組織、出来事など特定の概念とのこと。

LUKEの学習においては、各Wikipedia記事が一つのエンティティであるとみなしています。(Kindle版 p.250)

Wikipedia記事からエンティティに関する知識をモデルに教えられるので、「知識強化言語モデル(knowledge-enhanced language model)」とも呼ぶそうです。

資料類

全て読破したわけではなく、積ん読的な意味合いもあります

EMNLP 2020

解説

NLP2023

Hugging Face

エンティティを入力として使わない一般的なNLPタスクには、liteモデルを利用してください。(公開ブログより)

公開モデルを動かす

M1 Macで動かしています(mpsなるもの)

fill-mask

>>> # uv run --python 3.11 --with 'transformers[ja,torch,sentencepiece]' python  # 3.11.8
>>> from transformers import pipeline
>>> fill_mask_pipeline = pipeline(model="studio-ousia/luke-japanese-base", task="fill-mask")
>>> for res in fill_mask_pipeline("東北大学で<mask>の研究をしています。"):
...   print(res)
...
{'score': 0.07046033442020416, 'token': 29245, 'token_str': 'Linux', 'sequence': '東北大学で Linux の研究をしています。'}
{'score': 0.03674976900219917, 'token': 21583, 'token_str': 'Android', 'sequence': '東北大学で Android の研究をしています。'}
{'score': 0.026225080713629723, 'token': 9679, 'token_str': 'iPhone', 'sequence': '東北大学で iPhone の研究をしています。'}
{'score': 0.02452312782406807, 'token': 16846, 'token_str': '人工知能', 'sequence': '東北大学で人工知能 の研究をしています。'}
{'score': 0.021430226042866707, 'token': 18664, 'token_str': 'Facebook', 'sequence': '東北大学で Facebook の研究をしています。'}

固有表現抽出

この記事にならって(ただし高い性能を出すためのファインチューニングは後回しにして)動かした例です。

出力(抜粋)

株式会社は全ての LABEL_1
は全ての合意をフェアにします。 LABEL_1

ファインチューニングしていないのでLABEL_1(固有表現のラベルと理解)はめちゃくちゃですが、entity_spansによってどのようにトークナイズされるかのイメージは掴めるように思います(このスクリプトから始めて色々とprintを試しました)

終わりに

知識強化言語モデル LUKE について、論文や解説動画・スライドをまとめ、また、transformersで触りました。
エンティティという概念、また、それをサポートするためのトークナイズ(など)、まだ自分のものにできていない感覚ですが、興味深い技術だと思います。

P.S. 1/29(水) LUKEミートアップ 予習記事でした

弊社オフィス(丸の内)で開催!


  1. オマージュしました