Algorytmy rozpoznawania nazwanych jednostek

Chciałbym użyć named entity recognition (Ner), aby znaleźć odpowiednie tagi dla tekstów w bazie danych.

Wiem, że jest na ten temat Artykuł w Wikipedii i wiele innych stron opisujących NER, najlepiej usłyszeć coś na ten temat od ciebie:

  • jakie doświadczenia poczyniłeś z różnymi algorytmami?
  • który algorytm byś polecił?
  • który algorytm jest najłatwiejszy do wdrożenia (PHP / Python)?
  • Jak działają algorytmy? Na konieczne szkolenie manualne?

Przykład:

"W zeszłym roku byłem w Londynie, gdzie widziałem Baracka Obamę."=>Tagi: Londyn, Barack Obama

Mam nadzieję, że mi pomożesz. Z góry bardzo dziękuję!

Author: caw, 2009-06-22

6 answers

Na początek sprawdź http://www.nltk.org / jeśli planujesz pracę z Pythonem, chociaż z tego co wiem, kod nie jest "siłą przemysłową", ale pozwoli Ci zacząć.

Zobacz punkt 7.5 z http://nltk.googlecode.com/svn/trunk/doc/book/ch07.html ale aby zrozumieć algorytmy, prawdopodobnie będziesz musiał przeczytać dużo książki.

Zobacz też: http://nlp.stanford.edu/software/CRF-NER.shtml . robi się to za pomocą Javy,

NER nie jest łatwym tematem i prawdopodobnie nikt Ci nie powie "to najlepszy algorytm", większość z nich ma swoje plusy / minusy.

Moje 0,05 dolara.

Pozdrawiam,

 13
Author: Ale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-13 21:43:21

To zależy czy chcesz:

aby dowiedzieć się więcej o NER: doskonałym miejscem na początek jest NLTK i powiązanaksiążka .

aby wdrożyć najlepsze rozwiązanie : Tutaj będziesz musiał szukać stanu techniki. Zapraszamy do zapoznania się z publikacjami w TREC. Bardziej wyspecjalizowanym spotkaniem jest Biocreative (dobry przykład NER stosowany w wąskim polu).

aby wdrożyć najprostsze rozwiązanie : w tym jeśli w zasadzie chcesz po prostu zrobić proste tagowanie i wyciągnąć słowa oznaczone jako rzeczowniki. Możesz użyć taggera z nltk, a nawet po prostu wyszukać każde słowo w PyWordnet i oznaczyć je najczęściej używanymi wordsense.


Większość algorytmów wymagała pewnego rodzaju szkolenia i najlepiej sprawdzają się, gdy są przeszkoleni w zakresie treści, które reprezentują to, o co poprosisz.

 3
Author: pufferfish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-22 14:10:58

Jest kilka narzędzi i API.

DBPedia Spotlight jest narzędziem zbudowanym na bazie Dbpedii ( https://github.com/dbpedia-spotlight/dbpedia-spotlight/wiki ). możesz użyć ich interfejsu REST lub pobrać i zainstalować własny serwer. Wspaniałą rzeczą jest to, że mapuje podmioty do ich obecności DBPedia, co oznacza, że można wyodrębnić interesujące powiązane dane.

AlchemyAPI (www.alchemyapi.com) mają API, które zrobi to również poprzez REST, i używają model freemium.

Myślę, że większość technik polega na odrobinie NLP, aby znaleźć podmioty, a następnie użyć baz danych, takich jak Wikipedia, DBPedia, Freebase, itp., aby zrobić disambiguation i znaczenie (tak na przykład, próbując zdecydować, czy artykuł, który wspomina o Apple jest o owocu lub firmie... wybralibyśmy firmę, jeśli artykuł zawiera inne podmioty powiązane z Apple the company).

 1
Author: Osman Ahmed Osman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-16 20:01:14

Możesz wypróbować najnowszy system szybkiego łączenia podmiotów Yahoo Research - artykuł zawiera również zaktualizowane odniesienia do nowych podejść do Ner przy użyciu osadzeń opartych na sieciach neuronowych:

Https://research.yahoo.com/publications/8810/lightweight-multilingual-entity-extraction-and-linking

 0
Author: fjxx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-08 21:56:15

Można używać sztucznych sieci neuronowych do rozpoznawania nazwanych jednostek.

Oto implementacja dwukierunkowej sieci LSTM + CRF w TensorFlow (python) do rozpoznawania nazw jednostek: https://github.com/Franck-Dernoncourt/NeuroNER (działa na Linuksie / Mac/Windows).

Daje state-of-the-art wyniki (lub blisko niego) na kilku zestawach danych rozpoznawania nazw jednostek. Jak wspomina Ale, każdy algorytm rozpoznawania nazwanych jednostek ma swoje wady i upsides.

ANN:

Tutaj wpisz opis obrazka

Jak w Tensorboardzie:

Tutaj wpisz opis obrazka

 0
Author: Franck Dernoncourt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-04 23:48:24

Naprawdę Nie wiem jak NER, ale sądząc po tym przykładzie, można by zrobić algorytm, który wyszukuje duże litery w słowach lub coś w tym stylu. Do tego polecam regex jako najbardziej łatwe do wdrożenia rozwiązanie, jeśli myślisz mały.

Inną opcją jest porównanie tekstów z bazą danych, w której dopasowujesz łańcuch wstępnie zidentyfikowany jako znaczniki zainteresowania.

Moje 5 centów.
 -10
Author: v3ga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-22 12:38:28