通過(guò)與 GPT 對(duì)話實(shí)現(xiàn)零樣本信息抽取
目前通用大模型取代為特定任務(wù)定制訓(xùn)練的專屬模型的趨勢(shì)逐漸顯露,這種方式使AI模型應(yīng)用的邊際成本大幅下降。由此提出一個(gè)問(wèn)題:不經(jīng)過(guò)訓(xùn)練來(lái)實(shí)現(xiàn)零樣本信息抽取是否可行?
信息抽取技術(shù)作為構(gòu)建知識(shí)圖譜的重要一環(huán),如果完全不需要訓(xùn)練就可以實(shí)現(xiàn),將使數(shù)據(jù)分析的門(mén)檻大幅降低,有利于實(shí)現(xiàn)自動(dòng)化知識(shí)庫(kù)構(gòu)建。
我們通過(guò)對(duì)GPT-3.5用提示工程的方法建立一個(gè)通用的零樣本IE系統(tǒng)——GPT4IE(GPT for Information Extraction),發(fā)現(xiàn)GPT3.5能夠自動(dòng)從原始句子中提取結(jié)構(gòu)化信息。支持中英文,工具代碼已開(kāi)源。
工具網(wǎng)址:?https://cocacola-lab.github.io/GPT4IE/?
代碼:?https://github.com/cocacola-lab/GPT4IE?
1 背景介紹
信息抽?。↖nformation Extraction,IE)目標(biāo)是從無(wú)結(jié)構(gòu)文本中抽取結(jié)構(gòu)化信息,包括實(shí)體-關(guān)系三元組抽?。‥ntity-relation Extract, RE)、命名實(shí)體識(shí)別(Named Entity Recognition, NER)和事件抽?。‥vent Extraction, EE)[1][2][3][4][5]。許多研究已經(jīng)開(kāi)始依賴IE技術(shù)來(lái)自動(dòng)化進(jìn)行零樣本/少樣本工作,例如clinical IE [6]。
近來(lái)大規(guī)模預(yù)訓(xùn)練語(yǔ)言模型(Large Pre-trained Language Model, LLMs)在許多下游任務(wù)上都表現(xiàn)極佳,甚至僅僅通過(guò)幾個(gè)例子作為引導(dǎo)而不需要微調(diào)就能實(shí)現(xiàn)。由此我們提出一個(gè)問(wèn)題:僅通過(guò)提示來(lái)實(shí)現(xiàn)零樣本IE任務(wù)是否可行? 我們嘗試對(duì)GPT-3.5用提示的方法建立一個(gè)通用的零樣本IE系統(tǒng)——GPT4IE(GPT for Information Extraction)。在與GPT3.5和提示的結(jié)合下,它能夠自動(dòng)從原始句子中提取結(jié)構(gòu)化信息。
2 技術(shù)框架
設(shè)計(jì)了特定任務(wù)的提示模板(task-specified prompt template), 然后將用戶的輸入填充模板中特定的槽值 (slot),形成提示(prompt),輸入GPT-3.5中,進(jìn)行IE。支持的任務(wù)有三種:RE、NER和EE,且這三種任務(wù)均支持中英文雙語(yǔ)。用戶需要輸入句子和制定抽取類型列表(即關(guān)系列表、頭實(shí)體列表、尾實(shí)體列表、實(shí)體類型列表或者事件列表)。具體如下:
RE任務(wù)的目標(biāo)是從文本中抽取三元組,比如“(China, capital, Beijing)”, “(《如懿傳》, 主演, 周迅)”。其要求的輸入格式如下(帶“*”的代表非必填項(xiàng),我們?yōu)檫@些選項(xiàng)都設(shè)置了默認(rèn)值,但是為了靈活性支持用戶自定義指定列表,后同):
- Input Sentence: 輸入文本
- Relation type list (rtl)* : ['關(guān)系類型1', '關(guān)系類型2', ...]
- Subject type list (stl)* : ['頭實(shí)體類型1', '頭實(shí)體類型2', ...]
- Object type list (otl)* : ['尾實(shí)體類型1', '尾實(shí)體類型2', ...]
- OpenAI API key: OpenAI API 密鑰(我們?cè)贕ithub中提供了部分可用key,以供示例使用。)
NER任務(wù)旨在從文本中抽取實(shí)體,例如“(LOC, Beijing)” , “(人物, 周恩來(lái))”。在NER任務(wù)上,輸入格式如下:
- Input Sentence: 輸入文本
- Entity type list (etl)* : ['實(shí)體類型1', '實(shí)體類型2', ...]
- OpenAI API key: OpenAI API 密鑰
EE任務(wù)旨在從純文本中提取事件,例如“{Life-Divorce: {Person: Bob, Time: today, Place: America}}“ , “{競(jìng)賽行為-晉級(jí): {時(shí)間: 無(wú), 晉級(jí)方: 西北狼, 晉級(jí)賽事: 中甲榜首之爭(zhēng)}}”。輸入格式如下:
- Input Sentence: 輸入文本
- Event type list (etl)* : {'事件類型1': ['論元角色1', '論元角色2', ...], ...}
- OpenAI API key: OpenAI API 密鑰
3 工具使用示例
3.1 RE示例一
輸入:
Input Sentence: Bob worked for Google in Beijing, the capital of China.
rtl: ['location-located_in', 'administrative_division-country', 'person-place_lived', 'person-company', 'person-nationality', 'company-founders', 'country-administrative_divisions', 'person-children', 'country-capital', 'deceased_person-place_of_death', 'neighborhood-neighborhood_of', 'person-place_of_birth']
stl: ['organization', 'person', 'location', 'country']
otl: ['person', 'location', 'country', 'organization', 'city']
輸出:

3.2 RE示例二
輸入:
Input Sentence: 《如懿傳》是一部古裝宮廷情感電視劇,由汪俊執(zhí)導(dǎo),周迅、霍建華、張鈞甯、董潔、辛芷蕾、童瑤、李純、鄔君梅等主演。
rtl: ['所屬專輯', '成立日期', '海拔', '官方語(yǔ)言', '占地面積', '父親', '歌手', '制片人', '導(dǎo)演', '首都', '主演', '董事長(zhǎng)', '祖籍', '妻子', '母親', '氣候', '面積', '主角', '郵政編碼', '簡(jiǎn)稱', '出品公司', '注冊(cè)資本', '編劇', '創(chuàng)始人', '畢業(yè)院校', '國(guó)籍', '專業(yè)代碼', '朝代', '作者', '作詞', '所在城市', '嘉賓', '總部地點(diǎn)', '人口數(shù)量', '代言人', '改編自', '校長(zhǎng)', '丈夫', '主持人', '主題曲', '修業(yè)年限', '作曲', '號(hào)', '上映時(shí)間', '票房', '飾演', '配音', '獲獎(jiǎng)']
stl: ['國(guó)家', '行政區(qū)', '文學(xué)作品', '人物', '影視作品', '學(xué)校', '圖書(shū)作品', '地點(diǎn)', '歷史人物', '景點(diǎn)', '歌曲', '學(xué)科專業(yè)', '企業(yè)', '電視綜藝', '機(jī)構(gòu)', '企業(yè)/品牌', '娛樂(lè)人物']
otl: ['國(guó)家', '人物', 'Text', 'Date', '地點(diǎn)', '氣候', '城市', '歌曲', '企業(yè)', 'Number', '音樂(lè)專輯', '學(xué)校', '作品', '語(yǔ)言']
輸出:

3.3 NER示例一
輸入:
Input Sentence: Bob worked for Google in Beijing, the capital of China.
etl: ['LOC', 'MISC', 'ORG', 'PER']
輸出:

3.4 NER示例二
輸入:
Input Sentence: 在過(guò)去的五年中,致公黨在鄧小平理論指引下,遵循社會(huì)主義初級(jí)階段的基本路線,努力實(shí)踐致公黨十大提出的發(fā)揮參政黨職能、加強(qiáng)自身建設(shè)的基本任務(wù)。
etl: ['組織機(jī)構(gòu)', '地點(diǎn)', '人物']
輸出:

3.5 EE示例一
輸入:
Input Sentence: Yesterday Bob and his wife got divorced in Guangzhou.
etl: {'Personnel:Elect': ['Person', 'Entity', 'Position', 'Time', 'Place'], 'Business:Declare-Bankruptcy': ['Org', 'Time', 'Place'], 'Justice:Arrest-Jail': ['Person', 'Agent', 'Crime', 'Time', 'Place'], 'Life:Divorce': ['Person', 'Time', 'Place'], 'Life:Injure': ['Agent', 'Victim', 'Instrument', 'Time', 'Place']}
輸出:

3.6 EE示例二
輸入:
Input Sentence:: 在2022年卡塔爾世界杯決賽中,阿根廷以點(diǎn)球大戰(zhàn)險(xiǎn)勝法國(guó)。
etl: {'組織行為-罷工': ['時(shí)間', '所屬組織', '罷工人數(shù)', '罷工人員'], '競(jìng)賽行為-晉級(jí)': ['時(shí)間', '晉級(jí)方', '晉級(jí)賽事'], '財(cái)經(jīng)/交易-漲停':['時(shí)間', '漲停股'] , '組織關(guān)系-解雇': ['時(shí)間', '解雇方', '被解雇人員']}
輸出:

3.7 EE示例三(一個(gè)有意思的錯(cuò)誤示例)
輸入:
Input Sentence:: 我今天和他離婚了
etl: {'組織行為-罷工': ['時(shí)間', '所屬組織', '罷工人數(shù)', '罷工人員'], '競(jìng)賽行為-晉級(jí)': ['時(shí)間', '晉級(jí)方', '晉級(jí)賽事'], '財(cái)經(jīng)/交易-漲停':['時(shí)間', '漲停股'] , '組織關(guān)系-解雇': ['時(shí)間', '解雇方', '被解雇人員']}
輸出:

明顯上面的輸出使錯(cuò)誤的,自定義etl為: {'離婚': ['時(shí)間', '人物']},輸出為:




































