Представление лямбда-исчисления в NLTK CCG
Я пытаюсь реализовать вероятностный CGG с функциями лямбда-исчисления.
В основном я хочу сделать следующий код:
>> lex = parseLexicon(r'''
:- S,NP
He => NP {sem=\x.he(x)} [1.0]
Walks => S\NP {sem=\X. walk(X)} [1.0]
There => S\S {sem=\x . there(x)} [1.0]
''')
>> parser = CCGChartParser(lex)
>> all_parses = parser.nbest_parse(“He walks
there”.split(),n=100)
>> for parse in all_parses:
printCCGDerivation(parse)
но существующая реализация CCL NLTK не поддерживает {sem=\x.he(x)} [1.0] виды семантических частей в лексиконе.
Есть ли другие реализации CCG, которые могут справиться с этим? Или я могу представить это внутри НЛТК?
2 ответа
NLTK CCG недавно поддерживает вычисление семантики предиката (представление лямбда-исчисления). Пожалуйста, посмотрите тесты здесь: https://github.com/nltk/nltk/blob/develop/nltk/test/ccg_semantics.doctest
Вероятный разбор для CCG находится на горизонте: https://github.com/nltk/nltk/issues/1356
К сожалению нет, этого еще не существует. Я тоже смотрю на это место. Похоже, в работах, упомянутых здесь на их вики - Semantic-Parsing
Если вас интересуют другие языки / фреймворки, взгляните на Семантический анализ с исполнением, Стэнфорд или Вашингтонский университет.
Если вы хотите создать что-то с нуля, вы можете получить CCGBank или восстановить инструменты C&C.
Большая часть вышеперечисленного относится к Java, но я видел попытки проанализировать файл C&C Marked в Python.
Я лично хотел бы, чтобы CCG пришел на Node.js.
Если вы не против перехода на Common LISP, существует инструмент ccg (CCGlab), разработанный Cem Bozsahin. Он также имеет обучение PCCG. https://github.com/bozsahin/ccglab