Named-entity recognition
Mix.install(
[
{:bumblebee, "~> 0.5"},
{:nx, "~> 0.9", override: true},
{:exla, "~> 0.9"},
{:kino, "~> 0.14"}
],
system_env: [
{"XLA_TARGET", "cuda12"},
{"EXLA_TARGET", "cuda"}
],
config: [nx: [default_backend: EXLA.Backend]]
)
設定
cache_dir = "/tmp/bumblebee_cache"
モデルのダウンロード
{:ok, bert} =
Bumblebee.load_model({
:hf,
"dslim/bert-base-NER",
cache_dir: cache_dir
})
{:ok, tokenizer} =
Bumblebee.load_tokenizer({
:hf,
"bert-base-cased",
cache_dir: cache_dir
})
サービスの提供
serving = Bumblebee.Text.token_classification(bert, tokenizer, aggregation: :same)
文章の準備
text_input =
Kino.Input.textarea("TEXT",
default:
"Set before and after the French Revolution, the film depicts the dramatic life of Oscar, a beautiful man dressed in men's clothing, and Queen Marie Antoinette of France."
)
text = Kino.Input.read(text_input)
推論の実行
Nx.Serving.run(serving, text)
時間計測
1..10
|> Enum.map(fn _ ->
{time, _} = :timer.tc(Nx.Serving, :run, [serving, text])
time
end)
|> then(&(Enum.sum(&1) / 10))