Jak dodawać adnotacje do dokumentów tekstowych za pomocą metadanych?

18

Mając wiele dokumentów tekstowych (w języku naturalnym, nieuporządkowanym), jakie są możliwe sposoby przypisywania im niektórych semantycznych metadanych? Rozważmy na przykład krótki dokument:

I saw the company's manager last day.

Aby móc z niej wyodrębnić informacje, muszą być opatrzone adnotacjami dodatkowymi danymi, aby były mniej niejednoznaczne. Proces wyszukiwania takich metadanych nie jest kwestionowany, więc załóżmy, że odbywa się to ręcznie. Pytanie brzmi: w jaki sposób przechowywać te dane w taki sposób, aby można było przeprowadzić ich dalszą analizę wygodniej / wydajniej?

Możliwym podejściem jest użycie znaczników XML (patrz poniżej), ale wydaje się to zbyt szczegółowe i być może istnieją lepsze podejścia / wytyczne dotyczące przechowywania takich metadanych w dokumentach tekstowych.

<Person name="John">I</Person> saw the <Organization name="ACME">company</Organization>'s
manager <Time value="2014-5-29">last day</Time>.
Amir Ali Akbari
źródło
Jednym z głównych celów SGML (to samo dotyczy jego potomstwa, XML) było zapewnienie środków do oznaczania dokumentów tekstowych (POS i znaczników semantycznych).
Deer Hunter
Czy może być bardziej szczegółowe / ograniczające, jakiego rodzaju metadane chcesz dodać? W przypadku dwóch przykładów wątpię, aby istniał mniej szczegółowy sposób, który ma taką samą ogólną ekspresję jak tagi XML.
ojdo
@ojdo Większość metadanych służy do ujednoznacznienia (podobnie jak czasy względne) lub do określenia jednostek specjalnych (np. FK).
Amir Ali Akbari
2
W przeszłości korzystałem z brat.nlplab.org . Jest ładny interfejs dla wielu różnych rodzajów adnotacji. Adnotacje są przechowywane w osobnym pliku .annot, który jest listą słów, które są opatrzone adnotacjami i ich pozycją w dokumencie.
user1893354
@ user1893354 Bardzo pomocny! Szczególnie stosowany przeze mnie „ format stand bachora ” wydaje się bardzo odpowiedni dla moich potrzeb. Proponuję opublikować odpowiedź, jeśli chcesz.
Amir Ali Akbari

Odpowiedzi:

15

Osobiście zalecałbym użycie czegoś, co nie jest specyficzne dla dziedziny NLP, i czegoś, co jest na tyle ogólne, że można go nadal używać jako narzędzia, nawet jeśli zacząłeś przekraczać ten poziom metadanych. W szczególności wybrałbym format, który może być używany niezależnie od środowiska programistycznego, i taki, który może zachować podstawową strukturę, jeśli stanie się to odpowiednie (np. Tokenizacja)

To może wydawać się dziwne, ale szczerze sugerowałbym JSON. Jest niezwykle dobrze obsługiwany, obsługuje wiele struktur i jest wystarczająco elastyczny, abyś nie musiał się z niego ruszać, ponieważ nie był wystarczająco silny. Na przykład coś takiego:

{'text': 'I saw the company's manager last day.", {'Person': [{'name': 'John'}, {'indices': [0:1]}, etc...]}

Jedną wielką zaletą, jaką masz tutaj w stosunku do formatów specyficznych dla NLP, jest to, że JSONmożna je analizować w dowolnym środowisku, a ponieważ prawdopodobnie i tak będziesz musiał edytować swój format, JSON nadaje się do bardzo prostych edycji, które dają ci krótki dystans do innych formatów.

Możesz także niejawnie przechowywać informacje o tokenizacji, jeśli chcesz:

{"text": ["I", "saw", "the", "company's", "manager", "last", "day."]}

EDYCJA: Wyjaśnienie mapowania metadanych jest dość otwarte, ale oto przykład:

{'body': '<some_text>',
 'metadata': 
  {'<entity>':
    {'<attribute>': '<value>',
     'location': [<start_index>, <end_index>]
    }
  }
}

Mam nadzieję, że to pomoże, daj mi znać, jeśli masz więcej pytań.

indico
źródło
Jako programista JSON wydaje mi się całkowicie rozsądny, ale czy możesz opracować dokładny format mapowania słów na byty?
Amir Ali Akbari
@AmirAliAkbari Zaktualizowano odpowiedź, aby uwzględnić więcej szczegółów.
indico
7

Ogólnie rzecz biorąc, nie chcesz używać znaczników XML do oznaczania dokumentów w ten sposób, ponieważ znaczniki mogą się nakładać.

UIMA , GATE i podobne frameworki NLP oznaczają tagi oddzielnie od tekstu. Każdy znacznik, takie jak Person, ACME, Johnitd. Są przechowywane w położeniu, że znacznik zaczyna się i stanowiska, że kończy. Tak więc dla znacznika ACMEbyłby zapisany jako początek pozycji 11 i zakończenie w pozycji 17.

Christopher Louden
źródło
7

Narzędzie adnotacji bachor może być przydatne dla Ciebie, jak na mój komentarz. Próbowałem wielu z nich i to jest najlepsze, jakie znalazłem. Ma ładny interfejs użytkownika i może obsługiwać wiele różnych rodzajów adnotacji. Adnotacje są przechowywane w osobnym pliku .annot, który zawiera każdą adnotację, a także jej lokalizację w oryginalnym dokumencie. Słowo ostrzeżenia, jeśli ostatecznie chcesz wprowadzić adnotacje do klasyfikatora, takiego jak narzędzie Stanford NER, będziesz musiał wykonać pewne manipulacje, aby uzyskać dane w formacie, który zaakceptuje.

użytkownik1893354
źródło
1

Opisanie wszystkich istniejących danych jest tak trudnym zadaniem, ale możemy użyć modelu danych: http://schema.org/ , gdzie znajdują się strukturalne typy informacji. Wcześniejsze wykonanie było ukierunkowane na wdrożenie technologii MarkUp, więc wydaje się, że może być przydatne w Twoim zadaniu.

Wasyl Lyashkevych
źródło