生成AIの根幹技術である Transformer は、入力を「エンコーダ」が受け取り 「デコーダ」から出力する技術です。この技術は膨大な計算リソースを要求するため、実際の運用では計算量を軽減するための工夫が必要になります。
Hugging Face には、現在(2023/8/16)約30万種類のモデルが登録されています。どのモデルから試してみようかと迷うほどの量ですが、これらのモデル(アーキテクチャ)は、それぞれが工夫されたものになっていて、得意不得意があります。
生成AIのモデルは、大きく3種類に分類されます。
エンコーダを主とするもの(エンコーダ特化)
デコーダを主とするもの(デコーダ特化)
両方の組み合わせを維持しているもの(エンコーダとデコーダの両方)
です。
エンコーダ特化
代表的なものは BERT です。文の一部を隠した状態で、その部分に入る文字を検索する(Fill-Mask)ことが得意なモデルです。
from transformers import pipeline
unmasker = pipeline('fill-mask', model='bert-base-uncased')
unmasker("I love [MASK].")
出力:
[{‘score’: 0.5837937593460083,
‘token’: 2017,
‘token_str’: ‘you’,
‘sequence’: ‘i love you.’},
{‘score’: 0.15994271636009216,
‘token’: 2032,
‘token_str’: ‘him’,
‘sequence’: ‘i love him.’},
{‘score’: 0.14709480106830597,
‘token’: 2014,
‘token_str’: ‘her’,
‘sequence’: ‘i love her.’},
{‘score’: 0.049686774611473083,
‘token’: 2009,
‘token_str’: ‘it’,
‘sequence’: ‘i love it.’},
{‘score’: 0.014496388845145702,
‘token’: 2068,
‘token_str’: ‘them’,
‘sequence’: ‘i love them.’}]
BERT の他には、 RoBERTa、XLM、DeBERTa などがあります。
デコーダ特化
GPT はこの種類のモデルです。GPT、GPT-2、GPT-Neo などが Hugging Face に登録されています。続きの文章を作成する Text Generation を得意とするモデルが多くあります。
import torch
from transformers import GPT2Tokenizer, GPTNeoForCausalLM
tokenizer = GPT2Tokenizer.from_pretrained('EleutherAI/gpt-neo-2.7B')
model = GPTNeoForCausalLM.from_pretrained("EleutherAI/gpt-neo-2.7B")
text = "What is AI"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
with torch.no_grad():
tokens = model.generate(
**inputs,
max_new_tokens=64,
do_sample=True,
temperature=0.7,
pad_token_id=tokenizer.pad_token_id,
)
output = tokenizer.decode(tokens[0], skip_special_tokens=True)
print(output)
出力:
What is AI?
The technology of artificial intelligence has been around since the 1950’s. The most famous example is the chess computer Deep Blue which defeated Garry Kasparov in the game of chess. In the computer programming world, a lot of work has been done on developing algorithms for AI. The term AI is a
エンコーダとデコーダの両方
T5 や BART、M2M-100 などがあります。翻訳や質疑応答などの「文の変換」を目的として学習されているモデルです。
from transformers import T5Tokenizer, T5ForConditionalGeneration
tokenizer = T5Tokenizer.from_pretrained("google/flan-t5-xl")
model = T5ForConditionalGeneration.from_pretrained("google/flan-t5-xl")
input_text = "translate English to German: How are you"
input_ids = tokenizer(input_text, return_tensors="pt").input_ids
outputs = model.generate(input_ids)
print(tokenizer.decode(outputs[0]))
出力:
Wie sind Sie?

コメント