簡體   English   中英

如何為NER設置培訓和功能模板文件? -CRF ++

[英]How to set up training and feature template files for NER? - CRF++

對於命名實體識別的問題,

將句子標記化后,如何設置列? 看起來文檔中的一列是POS標簽,但是這些標簽是從哪里來的呢? 我應該自己標記POS還是有生成這些標記的工具?

下一欄代表什么? 像PERSON,LOCATION等課程? 並且必須采用任何特定格式嗎?

是否有完整的NER培訓文件和模板的示例?

你可以找到在CRF ++回購例如訓練和測試數據在這里 名詞短語分塊的訓練數據如下所示:

Confidence NN B
in IN O
the DT B
pound NN I
is VBZ O
widely RB O
expected VBN O
... etc ...

列是任意的,因為它們可以是任何東西。 CRF ++要求每一行的列數均相同(或為空白,以分隔句子),但並非所有CRF軟件包都要求。 您將必須自己提供數據值。 它們是分類器從中學習的數據。

盡管各種列中都有內容,但是您應該知道的一種約定是IOB Format 要處理潛在的多令牌實體,請將其標記為“內部/外部/開始”。 舉個例子可能是有用的。 假裝我們正在訓練一個分類器來檢測名稱-為了簡潔起見,我將在一行上寫出來:

John/B Smith/I ate/O an/O apple/O ./O

在柱狀格式中,它看起來像這樣:

John B
Smith I
ate O
an O
apple O
. O

有了這些標簽, B (開頭)表示單詞是實體中的第一個單詞, I表示單詞在實體內部(在B標簽之后),而O表示單詞不是實體。 如果您有多種類型的實體,通常使用B-PERSONI-PLACE類的標簽。

使用IOB標簽的原因是,分類器可以了解開始,繼續和結束實體的不同轉換概率。 因此,如果您要學習公司名稱,它將知道Inc./I-COMPANY通常會轉換為O標簽,因為Inc.通常是公司名稱的最后一部分。

模板是另一個問題,CRF ++使用其自己的特殊格式,但是同樣,您可以查看源代碼分發中的示例。 也看到這個問題


要回答對我的答案的評論,您可以使用任何POS標記器生成POS標記。 您甚至不必提供POS標簽,盡管它們通常會有所幫助。 其他標簽可以手動添加,也可以自動添加。 例如,您可以使用一系列已知名詞作為起點。 這是使用spaCy進行簡單名稱檢測的示例:

import spacy
nlp = spacy.load('en')
names = ['John', 'Jane', etc...]
text = nlp("John ate an apple.")
for word in text:
    person = 'O' # default not a person
    if str(word) in names:
        person = 'B-PERSON'
    print(str(word), word.pos_, person)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM