Skip to content

NuExtract: 使用大型語言模型進行資訊萃取

Last Updated on 2024-07-09 by Clay

介紹

在如今各種大型語言模型百花齊放的時代,各方研究者與企業都絞盡腦汁,想辦法將大型語言模型應用在手邊的工作中;但說句我個人的心裡話,現今各種語言模型的性能仍舊不夠強,其應用的場景很少,許多時候是遠遠比不上人類的。

但有一種任務類型是大型語言模型天生就相當合適的:任意場景的資訊萃取,也即是我今天想介紹的 NuExtract 模型。

為什麼特別把資訊萃取(information extraction)拎出來講呢?那是因為在傳統 NLP 領域中,想要做文字的資訊萃取,使用如 RNN、LSTM、BERT(encoder-only Transformer)… 等模型,是很難做到『任意場景』的,換句話說:

  • 你今天要做電腦斷層報告資訊萃取,你就需要微調一個電腦斷層報告資訊萃取模型
  • 你今天要做 NBA 新聞資訊萃取,你就需要微調一個 NBA 新聞資訊萃取模型
  • …… 依此類推

也就是說,如果你手邊沒有資料,那便很難讓模型天生就領悟該領域的資訊該如何萃取出來。不過以現在來說,那是以前的事情了。

大型語言模型(Large Language Model, LLM)天生就『幾乎』辦得到這種任務:它們在預訓練階段已經看過非常非常多的文字資訊,權重中天生就儲存著對於用文字表示的世界理解能力。

在這樣的情況下,我們自然就能夠讓 LLM 去幫我們做『資訊萃取』這項任務 —— 就算是得經過一些微調,但只要我們讓模型學到的並不是死背硬記,而是根據『字面』(必須讓模型嘗試生成與原文一模一樣的文字,這非常重要,如果不這樣做等於讓模型擁有了更高的幻覺產生可能性)去萃取資訊,那麼 LLM 非常有可能是能夠輕鬆地在不同領域萃取不同資訊的。

我今天想要介紹的 NuExtract 就是這樣的模型,就算還不完美,但至少是個非常非常好的方向。我個人相信未來一定會出現更好的模型的,並且絕對是我今天所介紹的 NuExtract 的加強版。

NuExtract 是由一間名為 NuMind 的新創公司所開發,並開源在 HuggingFace 上,是由微軟所推出的 Phi-3 模型進行後續微調(NuExtract 有分成幾種不同的量級哦,可以根據需求選擇),下面我們就來看看 NuExtract 的使用方式,順便探究一下其潛力所在。


範例程式碼

NuExtract 的使用方式非常簡單,使用 transformers 套件的 AutoModelForCausalLM 就可以讀取,並且定義好 textschema 就可以按照訓練時定義好的模板進行答案生成了。

在這裡,我選的 text 是今天 HuggingFace 上的 Daily Paper 中的其中一篇,schema 則是設定了日期、作者、標題… 等等需要萃取的項目。

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

device = "cuda:0"
pretrained_model_name_or_path = "numind/NuExtract"

model = AutoModelForCausalLM.from_pretrained(pretrained_model_name_or_path, trust_remote_code=True, torch_dtype=torch.bfloat16).to(device)
tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name_or_path, trust_remote_code=True)


text = """LLaMAX: Scaling Linguistic Horizons of LLM by Enhancing Translation Capabilities Beyond 100 Languages
Published on Jul 8
·
Submitted by
FeYuan
on Jul 9
#2 Paper of the day
Authors:
Yinquan Lu
,

Wenhao Zhu
,
Lei Li
,
Yu Qiao
,

Fei Yuan
Abstract
Large Language Models~(LLMs) demonstrate remarkable translation capabilities in high-resource language tasks, yet their performance in low-resource languages is hindered by insufficient multilingual data during pre-training. To address this, we dedicate 35,000 A100-SXM4-80GB GPU hours in conducting extensive multilingual continual pre-training on the LLaMA series models, enabling translation support across more than 100 languages. Through a comprehensive analysis of training strategies, such as vocabulary expansion and data augmentation, we develop LLaMAX. Remarkably, without sacrificing its generalization ability, LLaMAX achieves significantly higher translation performance compared to existing open-source LLMs~(by more than 10 spBLEU points) and performs on-par with specialized translation model~(M2M-100-12B) on the Flores-101 benchmark. Extensive experiments indicate that LLaMAX can serve as a robust multilingual foundation model."""


schema = """{
    "Date": "",
    "Author": [],
    "Title": "",
    "Categories": "",
}"""


input_llm = """<|input|>
### Template:
{schema}

### Text:
{text}

<|output|>
"""

input_ids = tokenizer(input_llm.format(schema=schema, text=text), return_tensors="pt", truncation=True, max_length=4000).to(device)

print(tokenizer.decode(model.generate(**input_ids)[0], skip_special_tokens=True).split("<|output|>\n")[-1])


Output:

{
"Date": "Jul 8",
"Author": [
"Yinquan Lu",
"Wenhao Zhu",
"Lei Li",
"Yu Qiao",
"Fei Yuan"
],
"Title": "Scaling Linguistic Horizons of LLM by Enhancing Translation Capabilities Beyond 100 Languages",
"Categories": ""
}

我並沒有使用最大量級的模型,其參數量僅有 3.8B,但是已經回答地相當不錯了。當然,我們也可以修改下 schema,強迫它選擇至少一個 category

schema = """{
    "Date": "",
    "Author": [],
    "Title": "",
    "Categories": "" (Select from ["AI, "BIO", "FinTech"]),
}"""


input_llm = """<|input|>
### Template:
{schema}

### Text:
{text}

<|output|>
"""

input_ids = tokenizer(input_llm.format(schema=schema, text=text), return_tensors="pt", truncation=True, max_length=4000).to(device)

print(tokenizer.decode(model.generate(**input_ids)[0], skip_special_tokens=True).split("<|output|>\n")[-1])


Output:

{
"Date": "Jul 8",
"Author": [
"Yinquan Lu",
"Wenhao Zhu",
"Lei Li",
"Yu Qiao",
"Fei Yuan"
],
"Title": "Scaling Linguistic Horizons of LLM by Enhancing Translation Capabilities Beyond 100 Languages",
"Categories": "AI"
}


使用 LLM 來做資訊萃取的最大優勢在於,它並不需要太多的微調,甚至可以不用微調直接替你把你想要的資訊從文章中萃取出來,並不侷限於領域。

當然現在的模型一定還有不足之處,但已經是現在可以使用的強大工具了,算是 LLM 可以確實落地的應用場景之一。


References


Read More

Leave a Reply